From d71e70bedf4fa7244f3fcce789e29504c452d5cd Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 12 Jul 2018 16:23:32 -0700 Subject: functions to support module and widget registration by plugins. These have identical construction to core modules and widgets and are registered just like hooks during addon load. Also additional Apps functions addon_app_installed() and system_app_installed() which will eventually replace feature_installed() for features which are converted to apps. The convention being used is that the module associated with the app calls the appropriate *_app_installed() function and if not present emits descriptive text about the app and exits. This allows one to click on an 'available' app and learn about it. Once installed, the app module behaves normally and may offer functionality or what once were addon settings on the settings/featured page. Refer to zap-addons in the zap repository for examples of how this is being used to eliminate the 'additional features' and 'addon settings' pages. --- Zotlabs/Extend/Route.php | 48 +++++++++++++++++++++++++++++++++++++++++++++ Zotlabs/Extend/Widget.php | 47 ++++++++++++++++++++++++++++++++++++++++++++ Zotlabs/Lib/Apps.php | 36 ++++++++++++++++++++++++++++------ Zotlabs/Render/Comanche.php | 34 ++++++++++++++++++++++---------- Zotlabs/Web/Router.php | 32 +++++++++++++++++++++++------- 5 files changed, 174 insertions(+), 23 deletions(-) create mode 100644 Zotlabs/Extend/Route.php create mode 100644 Zotlabs/Extend/Widget.php diff --git a/Zotlabs/Extend/Route.php b/Zotlabs/Extend/Route.php new file mode 100644 index 000000000..f7b90ec6e --- /dev/null +++ b/Zotlabs/Extend/Route.php @@ -0,0 +1,48 @@ + $x)); + // we don't sync system apps - they may be completely different on the other system + build_sync_packet($uid,array('app' => $x)); + } } else { self::app_undestroy($uid,$app); @@ -605,6 +607,28 @@ class Apps { } + static public function addon_app_installed($uid,$app) { + + $r = q("select id from app where app_plugin = '%s' and app_channel = %d limit 1", + dbesc($app), + intval($uid) + ); + return(($r) ? true : false); + + } + + static public function system_app_installed($uid,$app) { + + $r = q("select id from app where app_id = '%s' and app_channel = %d limit 1", + dbesc(hash('whirlpool',$app)), + intval($uid) + ); + return(($r) ? true : false); + + } + + + static public function app_list($uid, $deleted = false, $cats = []) { if($deleted) $sql_extra = ""; diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php index fb400b6fe..f58dba60e 100644 --- a/Zotlabs/Render/Comanche.php +++ b/Zotlabs/Render/Comanche.php @@ -528,18 +528,32 @@ class Comanche { $clsname = ucfirst($name); $nsname = "\\Zotlabs\\Widget\\" . $clsname; - if(file_exists('Zotlabs/SiteWidget/' . $clsname . '.php')) - require_once('Zotlabs/SiteWidget/' . $clsname . '.php'); - elseif(file_exists('widget/' . $clsname . '/' . $clsname . '.php')) - require_once('widget/' . $clsname . '/' . $clsname . '.php'); - elseif(file_exists('Zotlabs/Widget/' . $clsname . '.php')) - require_once('Zotlabs/Widget/' . $clsname . '.php'); - else { - $pth = theme_include($clsname . '.php'); - if($pth) { - require_once($pth); + $found = false; + $widgets = \Zotlabs\Extend\Widget::get(); + if($widgets) { + foreach($widgets as $widget) { + if(is_array($widget) && strtolower($widget[1]) === strtolower($name) && file_exists($widget[0])) { + require_once($widget[0]); + $found = true; + } } } + + if(! $found) { + if(file_exists('Zotlabs/SiteWidget/' . $clsname . '.php')) + require_once('Zotlabs/SiteWidget/' . $clsname . '.php'); + elseif(file_exists('widget/' . $clsname . '/' . $clsname . '.php')) + require_once('widget/' . $clsname . '/' . $clsname . '.php'); + elseif(file_exists('Zotlabs/Widget/' . $clsname . '.php')) + require_once('Zotlabs/Widget/' . $clsname . '.php'); + else { + $pth = theme_include($clsname . '.php'); + if($pth) { + require_once($pth); + } + } + } + if(class_exists($nsname)) { $x = new $nsname; $f = 'widget'; diff --git a/Zotlabs/Web/Router.php b/Zotlabs/Web/Router.php index fb551e36f..c4db0ef3e 100644 --- a/Zotlabs/Web/Router.php +++ b/Zotlabs/Web/Router.php @@ -2,6 +2,7 @@ namespace Zotlabs\Web; +use Zotlabs\Extend\Route; use Exception; /** @@ -52,14 +53,31 @@ class Router { * First see if we have a plugin which is masquerading as a module. */ - if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) { - include_once("addon/{$module}/{$module}.php"); - if(class_exists($modname)) { - $this->controller = new $modname; - \App::$module_loaded = true; + $routes = Route::get(); + if($routes) { + foreach($routes as $route) { + if(is_array($route) && strtolower($route[1]) === $module) { + include_once($route[0]); + if(class_exists($modname)) { + $this->controller = new $modname; + \App::$module_loaded = true; + } + } } - elseif(function_exists($module . '_module')) { - \App::$module_loaded = true; + } + + // legacy plugins - this can be removed when they have all been converted + + if(! (\App::$module_loaded)) { + if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) { + include_once("addon/{$module}/{$module}.php"); + if(class_exists($modname)) { + $this->controller = new $modname; + \App::$module_loaded = true; + } + elseif(function_exists($module . '_module')) { + \App::$module_loaded = true; + } } } -- cgit v1.2.3 From c187461985fe5e6fa512ded78193d121c5ff6db0 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 15 Jul 2018 21:34:06 -0700 Subject: update_addon_repo: scan the addon dir after updating and remove dead symlinks (which represent deprecated/removed addons). --- util/update_addon_repo | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/util/update_addon_repo b/util/update_addon_repo index 0e471eb4f..02c860c8c 100755 --- a/util/update_addon_repo +++ b/util/update_addon_repo @@ -44,3 +44,10 @@ for a in "${filelist[@]}" ; do echo linking $base ln -s ../extend/addon/$1/$base $base done + +for x in `ls` ; do + if [ -L "$x" ] && ! [ -e "$x" ]; then + echo "removing dead symlink $x" ; + rm -- "$x"; + fi; +done -- cgit v1.2.3 From 82a4bbd571131462bbff1cb2455af46747f3b840 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 15 Jul 2018 23:32:09 -0700 Subject: spellcheck --- Zotlabs/Module/Settings/Oauth2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Settings/Oauth2.php b/Zotlabs/Module/Settings/Oauth2.php index 985095115..f58d01d8c 100644 --- a/Zotlabs/Module/Settings/Oauth2.php +++ b/Zotlabs/Module/Settings/Oauth2.php @@ -115,8 +115,8 @@ class Oauth2 { '$name' => array('name', t('Name'), $app['client_id'], t('Name of application')), '$secret' => array('secret', t('Consumer Secret'), $app['client_secret'], t('Automatically generated - change if desired. Max length 20')), '$redirect' => array('redirect', t('Redirect'), $app['redirect_uri'], t('Redirect URI - leave blank unless your application specifically requires this')), - '$grant' => array('grant', t('Grant Types'), $app['grant_types'], t('leave blank unless your application sepcifically requires this')), - '$scope' => array('scope', t('Authorization scope'), $app['scope'], t('leave blank unless your application sepcifically requires this')), + '$grant' => array('grant', t('Grant Types'), $app['grant_types'], t('leave blank unless your application specifically requires this')), + '$scope' => array('scope', t('Authorization scope'), $app['scope'], t('leave blank unless your application specifically requires this')), )); return $o; } -- cgit v1.2.3 From 744d548380fb3df074ce8abb78977ddc344744db Mon Sep 17 00:00:00 2001 From: zotlabs Date: Tue, 17 Jul 2018 05:01:22 -0700 Subject: util/typo - perform php -l and then include the file. We'll catch a bunch more stuff. --- util/typo.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/util/typo.php b/util/typo.php index e25e57601..bed5fa5f6 100644 --- a/util/typo.php +++ b/util/typo.php @@ -12,25 +12,27 @@ App::init(); + $cmd = ((x(App::$config,'system')) && (x(App::$config['system'],'php_path')) && (strlen(App::$config['system']['php_path'])) ? App::$config['system']['php_path'] : 'php') . ' -l '; + echo "Directory: include\n"; $files = glob('include/*.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } echo "Directory: include/dba\n"; $files = glob('include/dba/*.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } echo "Directory: include/photo\n"; $files = glob('include/photo/*.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } @@ -39,7 +41,7 @@ $files = glob('Zotlabs/*/*.php'); foreach($files as $file) { if((strpos($file,'SiteModule') === false) || (strpos($file,'SiteWidget') === false)) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } } @@ -47,7 +49,7 @@ echo "Directory: Zotlabs/Module (sub-modules)\n"; $files = glob('Zotlabs/Module/*/*.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } @@ -58,7 +60,7 @@ $addon = basename($dir); $files = glob($dir . '/' . $addon . '.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; include_once($file); } } @@ -77,6 +79,6 @@ $files = glob('view/*/hstrings.php'); foreach($files as $file) { - echo $file . "\n"; + echo exec($cmd . $file) . "\n"; passthru($phpath . ' util/typohelper.php ' . $file); } -- cgit v1.2.3 From c2e819771f7754ec37d115b7d4f3de448f1ab0e2 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 18 Jul 2018 11:56:26 +0200 Subject: version 3.7 --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 04cb7c24c..b22de22a8 100755 --- a/boot.php +++ b/boot.php @@ -50,7 +50,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '3.6RC' ); +define ( 'STD_VERSION', '3.7' ); define ( 'ZOT_REVISION', '6.0a' ); -- cgit v1.2.3 From eb322e831297ee8fd773049c1a00c915c49dc93e Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 18 Jul 2018 13:18:37 +0200 Subject: set the correct album name when moving photos --- include/attach.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/attach.php b/include/attach.php index 2a9badaac..202412263 100644 --- a/include/attach.php +++ b/include/attach.php @@ -2325,6 +2325,7 @@ function attach_move($channel_id, $resource_id, $new_folder_hash) { return false; $newdirname = $n[0]['filename']; + $newalbumname = $n[0]['display_path']; $newstorepath = dbunescbin($n[0]['content']) . '/' . $resource_id; } else { @@ -2332,6 +2333,7 @@ function attach_move($channel_id, $resource_id, $new_folder_hash) { // root directory $newdirname = EMPTY_STR; + $newalbumname = EMPTY_STR; $newstorepath = 'store/' . $c['channel_address'] . '/' . $resource_id; } @@ -2419,7 +2421,7 @@ function attach_move($channel_id, $resource_id, $new_folder_hash) { if($r[0]['is_photo']) { $t = q("update photo set album = '%s', filename = '%s', os_path = '%s', display_path = '%s' where resource_id = '%s' and uid = %d", - dbesc($newdirname), + dbesc($newalbumname), dbesc($filename), dbesc($x['os_path']), dbesc($x['path']), -- cgit v1.2.3 From 5ce50d0a2e15ae66765a68ba2785a87ecda57f6a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 18 Jul 2018 17:05:38 -0700 Subject: mangled urls on redirects --- Zotlabs/Module/Magic.php | 7 ++++--- Zotlabs/Module/Manage.php | 2 +- Zotlabs/Module/Nojs.php | 4 ++-- Zotlabs/Module/Rmagic.php | 10 +++++----- Zotlabs/Web/CheckJS.php | 2 +- include/channel.php | 2 +- include/connections.php | 2 +- include/text.php | 4 ++-- 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Zotlabs/Module/Magic.php b/Zotlabs/Module/Magic.php index 25c318f30..e034f1cdf 100644 --- a/Zotlabs/Module/Magic.php +++ b/Zotlabs/Module/Magic.php @@ -14,15 +14,16 @@ class Magic extends \Zotlabs\Web\Controller { logger('mod_magic: args: ' . print_r($_REQUEST,true),LOGGER_DATA); $addr = ((x($_REQUEST,'addr')) ? $_REQUEST['addr'] : ''); + $bdest = ((x($_REQUEST,'bdest')) ? $_REQUEST['bdest'] : ''); $dest = ((x($_REQUEST,'dest')) ? $_REQUEST['dest'] : ''); $test = ((x($_REQUEST,'test')) ? intval($_REQUEST['test']) : 0); $rev = ((x($_REQUEST,'rev')) ? intval($_REQUEST['rev']) : 0); $owa = ((x($_REQUEST,'owa')) ? intval($_REQUEST['owa']) : 0); $delegate = ((x($_REQUEST,'delegate')) ? $_REQUEST['delegate'] : ''); - // Apache(?) appears to perform an htmlentities() operation on this variable - - $dest = html_entity_decode($dest); + + if($bdest) + $dest = hex2bin($bdest); $parsed = parse_url($dest); if(! $parsed) { diff --git a/Zotlabs/Module/Manage.php b/Zotlabs/Module/Manage.php index 9c5c32294..2c88a4df0 100644 --- a/Zotlabs/Module/Manage.php +++ b/Zotlabs/Module/Manage.php @@ -156,7 +156,7 @@ class Manage extends \Zotlabs\Web\Controller { if($delegates) { for($x = 0; $x < count($delegates); $x ++) { - $delegates[$x]['link'] = 'magic?f=&dest=' . urlencode($delegates[$x]['xchan_url']) + $delegates[$x]['link'] = 'magic?f=&bdest=' . bin2hex($delegates[$x]['xchan_url']) . '&delegate=' . urlencode($delegates[$x]['xchan_addr']); $delegates[$x]['channel_name'] = $delegates[$x]['xchan_name']; $delegates[$x]['delegate'] = 1; diff --git a/Zotlabs/Module/Nojs.php b/Zotlabs/Module/Nojs.php index 6fd6d8106..5f3d80ecd 100644 --- a/Zotlabs/Module/Nojs.php +++ b/Zotlabs/Module/Nojs.php @@ -7,8 +7,8 @@ class Nojs extends \Zotlabs\Web\Controller { function init() { $n = ((argc() > 1) ? intval(argv(1)) : 1); setcookie('jsdisabled', $n, 0, '/'); - $p = $_GET['redir']; - $hasq = strpos($p,'?'); + $p = hex2bin($_GET['redir']); + $hasq = strpbrk($p,'?&'); goaway(z_root() . (($p) ? '/' . $p : '') . (($hasq) ? '' : '?f=' ) . '&jsdisabled=' . $n); } diff --git a/Zotlabs/Module/Rmagic.php b/Zotlabs/Module/Rmagic.php index bfc03f6ec..33a6689ca 100644 --- a/Zotlabs/Module/Rmagic.php +++ b/Zotlabs/Module/Rmagic.php @@ -17,8 +17,8 @@ class Rmagic extends \Zotlabs\Web\Controller { if($r) { if($r[0]['hubloc_url'] === z_root()) goaway(z_root() . '/login'); - $dest = z_root() . '/' . str_replace(['rmagic','zid='],['','zid_='],\App::$query_string); - goaway($r[0]['hubloc_url'] . '/magic' . '?f=&owa=1&dest=' . $dest); + $dest = bin2hex(z_root() . '/' . str_replace(['rmagic','zid='],['','zid_='],\App::$query_string)); + goaway($r[0]['hubloc_url'] . '/magic' . '?f=&owa=1&bdest=' . $dest); } } } @@ -59,11 +59,11 @@ class Rmagic extends \Zotlabs\Web\Controller { if($url) { if($_SESSION['return_url']) - $dest = urlencode(z_root() . '/' . str_replace('zid=','zid_=',$_SESSION['return_url'])); + $dest = bin2hex(z_root() . '/' . str_replace('zid=','zid_=',$_SESSION['return_url'])); else - $dest = urlencode(z_root() . '/' . str_replace([ 'rmagic', 'zid=' ] ,[ '', 'zid_='],\App::$query_string)); + $dest = bin2hex(z_root() . '/' . str_replace([ 'rmagic', 'zid=' ] ,[ '', 'zid_='],\App::$query_string)); - goaway($url . '/magic' . '?f=&owa=1&dest=' . $dest); + goaway($url . '/magic' . '?f=&owa=1&bdest=' . $dest); } } } diff --git a/Zotlabs/Web/CheckJS.php b/Zotlabs/Web/CheckJS.php index 8179ceb15..c8547b6dd 100644 --- a/Zotlabs/Web/CheckJS.php +++ b/Zotlabs/Web/CheckJS.php @@ -18,7 +18,7 @@ class CheckJS { $this->jsdisabled = 0; if(! $this->jsdisabled) { - $page = urlencode(\App::$query_string); + $page = bin2hex(\App::$query_string); if($test) { $this->jsdisabled = 1; diff --git a/include/channel.php b/include/channel.php index d26056171..59dd60ea2 100644 --- a/include/channel.php +++ b/include/channel.php @@ -1712,7 +1712,7 @@ function zid_init() { $query = str_replace(array('?zid=','&zid='),array('?rzid=','&rzid='),$query); $dest = '/' . urlencode($query); if($r && ($r[0]['hubloc_url'] != z_root()) && (! strstr($dest,'/magic')) && (! strstr($dest,'/rmagic'))) { - goaway($r[0]['hubloc_url'] . '/magic' . '?f=&rev=1&owa=1&dest=' . z_root() . $dest); + goaway($r[0]['hubloc_url'] . '/magic' . '?f=&rev=1&owa=1&bdest=' . bin2hex(z_root() . $dest)); } else logger('No hubloc found.'); diff --git a/include/connections.php b/include/connections.php index 20f7c24ff..807d07220 100644 --- a/include/connections.php +++ b/include/connections.php @@ -120,7 +120,7 @@ function vcard_from_xchan($xchan, $observer = null, $mode = '') { App::$profile_uid = $xchan['channel_id']; $url = (($observer) - ? z_root() . '/magic?f=&owa=1&dest=' . $xchan['xchan_url'] . '&addr=' . $xchan['xchan_addr'] + ? z_root() . '/magic?f=&owa=1&bdest=' . bin2hex($xchan['xchan_url']) . '&addr=' . $xchan['xchan_addr'] : $xchan['xchan_url'] ); diff --git a/include/text.php b/include/text.php index 122605443..e894c5ce5 100644 --- a/include/text.php +++ b/include/text.php @@ -1018,7 +1018,7 @@ function chanlink_cid($d) { function magiclink_url($observer,$myaddr,$url) { return (($observer) - ? z_root() . '/magic?f=&owa=1&dest=' . $url . '&addr=' . $myaddr + ? z_root() . '/magic?f=&owa=1&bdest=' . bin2hex($url) . '&addr=' . $myaddr : $url ); } @@ -1454,7 +1454,7 @@ function theme_attachments(&$item) { if(is_foreigner($item['author_xchan'])) $url = $r['href']; else - $url = z_root() . '/magic?f=&owa=1&hash=' . $item['author_xchan'] . '&dest=' . $r['href'] . '/' . $r['revision']; + $url = z_root() . '/magic?f=&owa=1&hash=' . $item['author_xchan'] . '&bdest=' . bin2hex($r['href'] . '/' . $r['revision']); //$s .= '' . $icon . ''; $attaches[] = array('label' => $label, 'url' => $url, 'icon' => $icon, 'title' => $title); -- cgit v1.2.3 From a05c8ff66bd8d09f69f6c59bc49b7627792f4109 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 18 Jul 2018 17:48:23 -0700 Subject: query filter was a bit greedy --- Zotlabs/Module/Magic.php | 1 - boot.php | 3 ++- include/channel.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Magic.php b/Zotlabs/Module/Magic.php index e034f1cdf..be6866592 100644 --- a/Zotlabs/Module/Magic.php +++ b/Zotlabs/Module/Magic.php @@ -21,7 +21,6 @@ class Magic extends \Zotlabs\Web\Controller { $owa = ((x($_REQUEST,'owa')) ? intval($_REQUEST['owa']) : 0); $delegate = ((x($_REQUEST,'delegate')) ? $_REQUEST['delegate'] : ''); - if($bdest) $dest = hex2bin($bdest); diff --git a/boot.php b/boot.php index 3b8347c30..5f833c132 100755 --- a/boot.php +++ b/boot.php @@ -874,11 +874,12 @@ class App { } if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { - self::$query_string = escape_tags(substr($_SERVER['QUERY_STRING'], 2)); + self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 2); // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); } + if(x($_GET,'q')) self::$cmd = escape_tags(trim($_GET['q'],'/\\')); diff --git a/include/channel.php b/include/channel.php index 59dd60ea2..d7c5a2511 100644 --- a/include/channel.php +++ b/include/channel.php @@ -1710,7 +1710,7 @@ function zid_init() { // try to avoid recursion - but send them home to do a proper magic auth $query = App::$query_string; $query = str_replace(array('?zid=','&zid='),array('?rzid=','&rzid='),$query); - $dest = '/' . urlencode($query); + $dest = '/' . $query; if($r && ($r[0]['hubloc_url'] != z_root()) && (! strstr($dest,'/magic')) && (! strstr($dest,'/rmagic'))) { goaway($r[0]['hubloc_url'] . '/magic' . '?f=&rev=1&owa=1&bdest=' . bin2hex(z_root() . $dest)); } -- cgit v1.2.3 From ec852b0c8d6c8e566b2a5fb279ed359630afb5ee Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 18 Jul 2018 17:51:10 -0700 Subject: typo --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 5f833c132..cc44ca671 100755 --- a/boot.php +++ b/boot.php @@ -874,7 +874,7 @@ class App { } if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { - self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 2); + self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 2)); // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); -- cgit v1.2.3 From 6adbb93f0a4990a93c759b0fee580db6891527e2 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 19 Jul 2018 13:42:57 -0700 Subject: fix the filtered query string so it can potentially be re-used as is. --- boot.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boot.php b/boot.php index 3d2b95ef8..8e4877b8e 100755 --- a/boot.php +++ b/boot.php @@ -878,6 +878,8 @@ class App { // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); + // change the first & to ? + self::$query_string = preg_replace('/&/','?',self::$query_string,1); } if(x($_GET,'q')) -- cgit v1.2.3 From f9b18aa62f30527880377d2c1dd391af4be04a6c Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 00:22:04 +0200 Subject: Update php2po.php --- util/php2po.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index ff41e6d1e..352ed41f6 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -1,11 +1,11 @@ \n\n"; -- cgit v1.2.3 From a94c9d270906136f69156c0e7c0bd2c8a2e63d1a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 19 Jul 2018 17:19:19 -0700 Subject: checkjs fix ($page not bin-hex in all cases) --- Zotlabs/Web/CheckJS.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Web/CheckJS.php b/Zotlabs/Web/CheckJS.php index c8547b6dd..e83ccf27b 100644 --- a/Zotlabs/Web/CheckJS.php +++ b/Zotlabs/Web/CheckJS.php @@ -17,9 +17,9 @@ class CheckJS { else $this->jsdisabled = 0; - if(! $this->jsdisabled) { - $page = bin2hex(\App::$query_string); + $page = bin2hex(\App::$query_string); + if(! $this->jsdisabled) { if($test) { $this->jsdisabled = 1; if(array_key_exists('jsdisabled',$_COOKIE)) -- cgit v1.2.3 From f141b845fd96ebcd6b893b1289f2693f9f77dfbd Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 10:24:23 +0200 Subject: Update hmessages.po --- view/ru/hmessages.po | 18990 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 13023 insertions(+), 5967 deletions(-) diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index 023e2674f..365251f15 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -1,7842 +1,14898 @@ -# Hubzilla Project -# Copyright (C) 2012-2014 the Hubzilla Project -# This file is distributed under the same license as the Red package. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# # Translators: -# Alex , 2013-2014 -# vislav , 2014 -# puser, 2014 +# Alex , 2016-2017 +# Max Kostikov , 2018 +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Hubzilla\n" +"Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-27 00:02-0700\n" -"PO-Revision-Date: 2014-06-30 12:10+0000\n" -"Last-Translator: Alex \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/red-matrix/language/ru/)\n" +"POT-Creation-Date: 2018-04-23 11:34+0200\n" +"PO-Revision-Date: 2018-06-13 19:32+0000\n" +"Last-Translator: Max Kostikov \n" +"Language-Team: Russian (http://www.transifex.com/Friendica/hubzilla/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" -Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : (n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2))\n +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : (n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2))\n" -#: ../../include/dba/dba_driver.php:50 -#, php-format -msgid "Cannot locate DNS info for database server '%s'" -msgstr "" +#: ../../util/nconfig.php:34 +msgid "Source channel not found." +msgstr "Канал-источник не найден." -#: ../../include/photo/photo_driver.php:643 ../../include/photos.php:51 -#: ../../mod/profile_photo.php:142 ../../mod/profile_photo.php:301 -#: ../../mod/profile_photo.php:421 ../../mod/photos.php:91 -#: ../../mod/photos.php:653 ../../mod/photos.php:675 -msgid "Profile Photos" -msgstr "Фотографии профиля" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:19 +msgid "lonely" +msgstr "одинокий" -#: ../../include/bbcode.php:128 ../../include/bbcode.php:648 -#: ../../include/bbcode.php:651 ../../include/bbcode.php:656 -#: ../../include/bbcode.php:659 ../../include/bbcode.php:662 -#: ../../include/bbcode.php:665 ../../include/bbcode.php:670 -#: ../../include/bbcode.php:673 ../../include/bbcode.php:678 -#: ../../include/bbcode.php:681 ../../include/bbcode.php:684 -#: ../../include/bbcode.php:687 -msgid "Image/photo" -msgstr "Изображение / фото" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:20 +msgid "drunk" +msgstr "пьяный" -#: ../../include/bbcode.php:163 ../../include/bbcode.php:698 -msgid "Encrypted content" -msgstr "Зашифрованное содержание" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:21 +msgid "horny" +msgstr "возбуждённый" -#: ../../include/bbcode.php:179 -msgid "QR code" -msgstr "QR код" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:22 +msgid "stoned" +msgstr "под кайфом" -#: ../../include/bbcode.php:228 -#, php-format -msgid "%1$s wrote the following %2$s %3$s" -msgstr "%1$s написал следующее %2$s %3$s" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:23 +msgid "fucked up" +msgstr "облажался" -#: ../../include/bbcode.php:230 -msgid "post" -msgstr "сообщение" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:24 +msgid "clusterfucked" +msgstr "в полной заднице" -#: ../../include/bbcode.php:616 ../../include/bbcode.php:636 -msgid "$1 wrote:" -msgstr "$1 писал:" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:25 +msgid "crazy" +msgstr "сумасшедший" -#: ../../include/oembed.php:171 -msgid "Embedded content" -msgstr "Внедренное содержание" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:26 +msgid "hurt" +msgstr "обиженный" -#: ../../include/oembed.php:180 -msgid "Embedding disabled" -msgstr "Внедрение отключенно" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:27 +msgid "sleepy" +msgstr "сонный" -#: ../../include/notify.php:23 -msgid "created a new post" -msgstr "создал новое сообщение" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:28 +msgid "grumpy" +msgstr "сердитый" -#: ../../include/notify.php:24 -#, php-format -msgid "commented on %s's post" -msgstr "прокомментировал %s's сообщение" +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:29 +msgid "high" +msgstr "кайфует" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:30 +msgid "semi-conscious" +msgstr "в полубезсознании" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:31 +msgid "in love" +msgstr "влюблённый" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:32 +msgid "in lust" +msgstr "похотливый" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:33 +msgid "naked" +msgstr "обнажённый" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:34 +msgid "stinky" +msgstr "вонючий" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:35 +msgid "sweaty" +msgstr "потный" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:36 +msgid "bleeding out" +msgstr "истекающий кровью" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:37 +msgid "victorious" +msgstr "победивший" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:38 +msgid "defeated" +msgstr "проигравший" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:39 +msgid "envious" +msgstr "завидует" + +#: ../../extend/addon/hzaddons/moremoods/moremoods.php:40 +msgid "jealous" +msgstr "ревнует" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:42 +msgid "Post to Dreamwidth" +msgstr "Публиковать в Dreamwidth" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:73 +msgid "Enable Dreamwidth Post Plugin" +msgstr "Включить плагин публикаций Dreamwidth" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:73 +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:85 +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:53 +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:73 +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:85 +#: ../../extend/addon/hzaddons/planets/planets.php:149 +#: ../../extend/addon/hzaddons/libertree/libertree.php:69 +#: ../../extend/addon/hzaddons/libertree/libertree.php:81 +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:67 +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:211 +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:215 +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:84 +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:120 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:219 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:223 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:227 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:231 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:309 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:313 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:343 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:351 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:355 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:359 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 +#: ../../extend/addon/hzaddons/twitter/twitter.php:243 +#: ../../extend/addon/hzaddons/twitter/twitter.php:252 +#: ../../extend/addon/hzaddons/twitter/twitter.php:261 +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:178 +#: ../../extend/addon/hzaddons/rtof/rtof.php:81 +#: ../../extend/addon/hzaddons/rtof/rtof.php:85 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:389 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:424 +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:81 +#: ../../extend/addon/hzaddons/visage/visage.php:166 +#: ../../extend/addon/hzaddons/cart/cart.php:1206 +#: ../../extend/addon/hzaddons/cart/cart.php:1213 +#: ../../extend/addon/hzaddons/cart/cart.php:1221 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:73 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657 +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 +#: ../../extend/addon/hzaddons/nofed/nofed.php:72 +#: ../../extend/addon/hzaddons/nofed/nofed.php:76 +#: ../../extend/addon/hzaddons/redred/redred.php:95 +#: ../../extend/addon/hzaddons/redred/redred.php:99 +#: ../../extend/addon/hzaddons/wppost/wppost.php:82 +#: ../../extend/addon/hzaddons/wppost/wppost.php:105 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 +#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 +#: ../../Zotlabs/Module/Events.php:471 ../../Zotlabs/Module/Removeme.php:63 +#: ../../Zotlabs/Module/Api.php:99 ../../Zotlabs/Module/Sources.php:116 +#: ../../Zotlabs/Module/Sources.php:151 +#: ../../Zotlabs/Module/Filestorage.php:178 +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Connedit.php:779 +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 +#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 +#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Menu.php:162 +#: ../../Zotlabs/Module/Menu.php:221 +#: ../../Zotlabs/Module/Settings/Channel.php:315 +#: ../../Zotlabs/Module/Settings/Display.php:100 +#: ../../Zotlabs/Module/Import.php:554 ../../Zotlabs/Module/Import.php:558 +#: ../../Zotlabs/Module/Import.php:559 ../../Zotlabs/Module/Wiki.php:218 +#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Storage/Browser.php:405 +msgid "No" +msgstr "Нет" -#: ../../include/conversation.php:120 ../../include/text.php:1705 -#: ../../mod/subthread.php:72 ../../mod/subthread.php:174 -#: ../../mod/tagger.php:45 ../../mod/like.php:254 -msgid "photo" -msgstr "фото" +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:73 +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:85 +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:53 +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:73 +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:85 +#: ../../extend/addon/hzaddons/planets/planets.php:149 +#: ../../extend/addon/hzaddons/libertree/libertree.php:69 +#: ../../extend/addon/hzaddons/libertree/libertree.php:81 +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:67 +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:211 +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:215 +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:84 +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:120 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:219 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:223 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:227 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:231 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:309 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:313 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:343 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:351 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:355 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:359 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 +#: ../../extend/addon/hzaddons/twitter/twitter.php:243 +#: ../../extend/addon/hzaddons/twitter/twitter.php:252 +#: ../../extend/addon/hzaddons/twitter/twitter.php:261 +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:178 +#: ../../extend/addon/hzaddons/rtof/rtof.php:81 +#: ../../extend/addon/hzaddons/rtof/rtof.php:85 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:389 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:424 +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:81 +#: ../../extend/addon/hzaddons/visage/visage.php:166 +#: ../../extend/addon/hzaddons/cart/cart.php:1206 +#: ../../extend/addon/hzaddons/cart/cart.php:1213 +#: ../../extend/addon/hzaddons/cart/cart.php:1221 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:73 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657 +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 +#: ../../extend/addon/hzaddons/nofed/nofed.php:72 +#: ../../extend/addon/hzaddons/nofed/nofed.php:76 +#: ../../extend/addon/hzaddons/redred/redred.php:95 +#: ../../extend/addon/hzaddons/redred/redred.php:99 +#: ../../extend/addon/hzaddons/wppost/wppost.php:82 +#: ../../extend/addon/hzaddons/wppost/wppost.php:105 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 +#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 +#: ../../Zotlabs/Module/Events.php:471 ../../Zotlabs/Module/Removeme.php:63 +#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Sources.php:116 +#: ../../Zotlabs/Module/Sources.php:151 +#: ../../Zotlabs/Module/Filestorage.php:178 +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Menu.php:162 +#: ../../Zotlabs/Module/Menu.php:221 +#: ../../Zotlabs/Module/Settings/Channel.php:315 +#: ../../Zotlabs/Module/Settings/Display.php:100 +#: ../../Zotlabs/Module/Import.php:554 ../../Zotlabs/Module/Import.php:558 +#: ../../Zotlabs/Module/Import.php:559 ../../Zotlabs/Module/Wiki.php:218 +#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Storage/Browser.php:405 +msgid "Yes" +msgstr "Да" -#: ../../include/conversation.php:123 ../../include/text.php:1708 -#: ../../mod/tagger.php:49 -msgid "event" -msgstr "мероприятие" +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:77 +msgid "Dreamwidth username" +msgstr "Имя пользователя Dreamwidth" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:81 +msgid "Dreamwidth password" +msgstr "Пароль Dreamwidth" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:85 +msgid "Post to Dreamwidth by default" +msgstr "Публиковать в Dreamwidth по умолчанию" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:89 +msgid "Dreamwidth Post Settings" +msgstr "Настройки публикаций в Dreamwidth" + +#: ../../extend/addon/hzaddons/dwpost/dwpost.php:89 +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:100 +#: ../../extend/addon/hzaddons/superblock/superblock.php:120 +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:69 +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:95 +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:89 +#: ../../extend/addon/hzaddons/planets/planets.php:153 +#: ../../extend/addon/hzaddons/libertree/libertree.php:85 +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:71 +#: ../../extend/addon/hzaddons/logrot/logrot.php:35 +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:124 +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:219 +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:92 +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:124 +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:237 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:371 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:86 +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:168 +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:57 +#: ../../extend/addon/hzaddons/twitter/twitter.php:218 +#: ../../extend/addon/hzaddons/twitter/twitter.php:265 +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1159 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:830 +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:53 +#: ../../extend/addon/hzaddons/skeleton/skeleton.php:65 +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:284 +#: ../../extend/addon/hzaddons/startpage/startpage.php:113 +#: ../../extend/addon/hzaddons/pageheader/pageheader.php:48 +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:191 +#: ../../extend/addon/hzaddons/rtof/rtof.php:101 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:322 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:380 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:432 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:900 +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:85 +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:97 +#: ../../extend/addon/hzaddons/piwik/piwik.php:95 +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:136 +#: ../../extend/addon/hzaddons/visage/visage.php:170 +#: ../../extend/addon/hzaddons/cart/cart.php:1251 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:144 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:78 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:647 +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:161 +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84 +#: ../../extend/addon/hzaddons/nofed/nofed.php:80 +#: ../../extend/addon/hzaddons/redred/redred.php:119 +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:60 +#: ../../extend/addon/hzaddons/irc/irc.php:53 +#: ../../extend/addon/hzaddons/wppost/wppost.php:113 +#: ../../view/theme/redbasic/php/config.php:93 ../../include/js_strings.php:22 +#: ../../Zotlabs/Lib/ThreadItem.php:757 ../../Zotlabs/Widget/Wiki_pages.php:40 +#: ../../Zotlabs/Widget/Wiki_pages.php:97 +#: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Appman.php:153 +#: ../../Zotlabs/Module/Photos.php:1087 ../../Zotlabs/Module/Photos.php:1127 +#: ../../Zotlabs/Module/Photos.php:1245 ../../Zotlabs/Module/Connect.php:98 +#: ../../Zotlabs/Module/Poke.php:200 ../../Zotlabs/Module/Events.php:493 +#: ../../Zotlabs/Module/Pdledit.php:98 ../../Zotlabs/Module/Mail.php:431 +#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Sources.php:117 +#: ../../Zotlabs/Module/Sources.php:154 +#: ../../Zotlabs/Module/Filestorage.php:183 +#: ../../Zotlabs/Module/Editpost.php:85 ../../Zotlabs/Module/Connedit.php:887 +#: ../../Zotlabs/Module/Cal.php:345 ../../Zotlabs/Module/Setup.php:308 +#: ../../Zotlabs/Module/Setup.php:349 ../../Zotlabs/Module/Mitem.php:259 +#: ../../Zotlabs/Module/Admin/Addons.php:438 +#: ../../Zotlabs/Module/Admin/Site.php:309 +#: ../../Zotlabs/Module/Admin/Logs.php:84 +#: ../../Zotlabs/Module/Admin/Accounts.php:168 +#: ../../Zotlabs/Module/Admin/Security.php:112 +#: ../../Zotlabs/Module/Admin/Profs.php:178 +#: ../../Zotlabs/Module/Admin/Themes.php:158 +#: ../../Zotlabs/Module/Admin/Features.php:66 +#: ../../Zotlabs/Module/Admin/Account_edit.php:74 +#: ../../Zotlabs/Module/Admin/Channels.php:147 +#: ../../Zotlabs/Module/Email_validation.php:40 +#: ../../Zotlabs/Module/Invite.php:151 ../../Zotlabs/Module/Defperms.php:249 +#: ../../Zotlabs/Module/Settings/Features.php:79 +#: ../../Zotlabs/Module/Settings/Channel.php:516 +#: ../../Zotlabs/Module/Settings/Featured.php:54 +#: ../../Zotlabs/Module/Settings/Account.php:118 +#: ../../Zotlabs/Module/Settings/Display.php:192 +#: ../../Zotlabs/Module/Settings/Permcats.php:115 +#: ../../Zotlabs/Module/Settings/Oauth2.php:85 +#: ../../Zotlabs/Module/Settings/Oauth.php:88 +#: ../../Zotlabs/Module/Settings/Tokens.php:168 +#: ../../Zotlabs/Module/Chat.php:196 ../../Zotlabs/Module/Chat.php:242 +#: ../../Zotlabs/Module/Rate.php:166 ../../Zotlabs/Module/Locs.php:121 +#: ../../Zotlabs/Module/Import.php:565 ../../Zotlabs/Module/Pconfig.php:107 +#: ../../Zotlabs/Module/Wiki.php:206 ../../Zotlabs/Module/Group.php:121 +#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Profiles.php:723 +#: ../../Zotlabs/Module/Thing.php:326 ../../Zotlabs/Module/Thing.php:379 +#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Import_items.php:129 +msgid "Submit" +msgstr "Отправить" -#: ../../include/conversation.php:126 ../../mod/like.php:72 -msgid "channel" -msgstr "канал" +#: ../../extend/addon/hzaddons/mdpost/mdpost.php:40 ../../include/text.php:1886 +#: ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +#: ../../Zotlabs/Module/Wiki.php:350 +msgid "Markdown" +msgstr "Разметка" -#: ../../include/conversation.php:148 ../../include/text.php:1711 -#: ../../mod/subthread.php:72 ../../mod/subthread.php:174 -#: ../../mod/tagger.php:53 ../../mod/like.php:254 -msgid "status" -msgstr "статус" +#: ../../extend/addon/hzaddons/mdpost/mdpost.php:41 +msgid "Use markdown for editing posts" +msgstr "Использовать язык разметки для редактирования публикаций" -#: ../../include/conversation.php:150 ../../include/text.php:1713 -#: ../../mod/tagger.php:55 -msgid "comment" -msgstr "комментарий" +#: ../../extend/addon/hzaddons/randpost/randpost.php:97 +msgid "You're welcome." +msgstr "Пожалуйста." -#: ../../include/conversation.php:164 ../../mod/like.php:291 -#, php-format -msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s нравится %2$s's %3$s" +#: ../../extend/addon/hzaddons/randpost/randpost.php:98 +msgid "Ah shucks..." +msgstr "О, чёрт..." -#: ../../include/conversation.php:167 ../../mod/like.php:293 -#, php-format -msgid "%1$s doesn't like %2$s's %3$s" -msgstr "%1$s не нравится %2$s's %3$s" +#: ../../extend/addon/hzaddons/randpost/randpost.php:99 +msgid "Don't mention it." +msgstr "Не стоит благодарности." -#: ../../include/conversation.php:204 -#, php-format -msgid "%1$s is now connected with %2$s" -msgstr "%1$s теперь соединен с %2$s" +#: ../../extend/addon/hzaddons/randpost/randpost.php:100 +msgid "<blush>" +msgstr "<краснею>" -#: ../../include/conversation.php:239 -#, php-format -msgid "%1$s poked %2$s" -msgstr "%1$s подпихнул %2$s" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:19 +msgid "Send test email" +msgstr "Отправить тестовый email" -#: ../../include/conversation.php:243 ../../include/text.php:895 -msgid "poked" -msgstr "подпихнул" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:50 +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:50 +msgid "No recipients found." +msgstr "Получателей не найдено." -#: ../../include/conversation.php:261 ../../mod/mood.php:63 -#, php-format -msgctxt "mood" -msgid "%1$s is %2$s" -msgstr "" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:66 +msgid "Mail sent." +msgstr "Сообщение отправлено" -#: ../../include/conversation.php:634 ../../include/ItemObject.php:114 -msgid "Select" -msgstr "Выбрать" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:68 +msgid "Sending of mail failed." +msgstr "Не удалось отправить сообщение." -#: ../../include/conversation.php:635 ../../include/apps.php:232 -#: ../../include/ItemObject.php:108 ../../mod/settings.php:578 -#: ../../mod/connedit.php:398 ../../mod/photos.php:1046 -#: ../../mod/group.php:176 ../../mod/admin.php:758 ../../mod/admin.php:888 -#: ../../mod/thing.php:236 -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:84 -msgid "Delete" -msgstr "Удалить" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:77 +msgid "Mail Test" +msgstr "Тестовое сообщение" -#: ../../include/conversation.php:642 ../../include/ItemObject.php:89 -#: ../../mod/photos.php:844 -msgid "Private Message" -msgstr "Личное сообщение" +#: ../../extend/addon/hzaddons/mailtest/mailtest.php:96 +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:92 +msgid "Message subject" +msgstr "Тема сообщения" -#: ../../include/conversation.php:649 ../../include/ItemObject.php:182 -msgid "Message is verified" -msgstr "Сообщение проверено" +#: ../../extend/addon/hzaddons/donate/donate.php:21 +msgid "Project Servers and Resources" +msgstr "Серверы и ресурсы проекта" -#: ../../include/conversation.php:669 -#, php-format -msgid "View %s's profile @ %s" -msgstr "Просмотр %s's профиля @ %s" +#: ../../extend/addon/hzaddons/donate/donate.php:22 +msgid "Project Creator and Tech Lead" +msgstr "Создатель проекта и технический руководитель" -#: ../../include/conversation.php:683 -msgid "Categories:" -msgstr "Категории:" +#: ../../extend/addon/hzaddons/donate/donate.php:23 +msgid "Admin, developer, directorymin, support bloke" +msgstr "Администратор, разработчик, администратор каталога, поддержка" -#: ../../include/conversation.php:684 -msgid "Filed under:" -msgstr "Хранить под:" +#: ../../extend/addon/hzaddons/donate/donate.php:50 +msgid "" +"And the hundreds of other people and organisations who helped make the " +"Hubzilla possible." +msgstr "И сотни других людей и организаций которые помогали в создании Hubzilla." -#: ../../include/conversation.php:693 ../../include/ItemObject.php:250 -#, php-format -msgid " from %s" -msgstr " от %s" +#: ../../extend/addon/hzaddons/donate/donate.php:53 +msgid "" +"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving " +"their time and expertise - and often paying out of pocket for services they " +"share with others." +msgstr "Проекты Redmatrix / Hubzilla предоставляются, в основном, добровольцами, которые предоставляют свое время и опыт и, часто, оплачивают из своего кармана услуги, которыми они делятся с другими." -#: ../../include/conversation.php:696 ../../include/ItemObject.php:253 -#, php-format -msgid "last edited: %s" -msgstr "" +#: ../../extend/addon/hzaddons/donate/donate.php:54 +msgid "" +"There is no corporate funding and no ads, and we do not collect and sell " +"your personal information. (We don't control your personal information - " +"you do.)" +msgstr "Здесь нет корпоративного финансирования и рекламы, мы не собираем и не продаем вашу личную информацию. (Мы не контролируем вашу личную информацию - это делаете вы.)" -#: ../../include/conversation.php:697 ../../include/ItemObject.php:254 -#, php-format -msgid "Expires: %s" -msgstr "" +#: ../../extend/addon/hzaddons/donate/donate.php:55 +msgid "" +"Help support our ground-breaking work in decentralisation, web identity, and " +"privacy." +msgstr "Помогите поддержать нашу новаторскую работу в областях децентрализации, веб-идентификации и конфиденциальности." -#: ../../include/conversation.php:712 -msgid "View in context" -msgstr "Показать в контексте" +#: ../../extend/addon/hzaddons/donate/donate.php:57 +msgid "" +"Your donations keep servers and services running and also helps us to " +"provide innovative new features and continued development." +msgstr "В ваших пожертвованиях поддерживают серверы и службы, а также помогают нам предоставлять новые возможности и продолжать развитие." -#: ../../include/conversation.php:714 ../../include/conversation.php:1130 -#: ../../include/ItemObject.php:294 ../../mod/editblock.php:120 -#: ../../mod/editlayout.php:115 ../../mod/editpost.php:121 -#: ../../mod/editwebpage.php:152 ../../mod/photos.php:977 -#: ../../mod/mail.php:222 ../../mod/mail.php:336 -msgid "Please wait" -msgstr "Подождите пожалуйста" +#: ../../extend/addon/hzaddons/donate/donate.php:60 +msgid "Donate" +msgstr "Пожертвовать" -#: ../../include/conversation.php:841 -msgid "remove" -msgstr "удалить" +#: ../../extend/addon/hzaddons/donate/donate.php:62 +msgid "" +"Choose a project, developer, or public hub to support with a one-time " +"donation" +msgstr "Выберите проект, разработчика или общедоступный узел для поддержки в форме единоразового пожертвования" -#: ../../include/conversation.php:845 -msgid "Loading..." -msgstr "Загрузка..." +#: ../../extend/addon/hzaddons/donate/donate.php:63 +msgid "Donate Now" +msgstr "Пожертвовать сейчас" -#: ../../include/conversation.php:846 -msgid "Delete Selected Items" -msgstr "Удалить выбранные элементы" +#: ../../extend/addon/hzaddons/donate/donate.php:64 +msgid "" +"Or become a project sponsor (Hubzilla Project only)" +msgstr "или станьте спонсором проекта (только для Hubzilla)" -#: ../../include/conversation.php:937 -msgid "View Source" -msgstr "Просмотр источника" +#: ../../extend/addon/hzaddons/donate/donate.php:65 +msgid "" +"Please indicate if you would like your first name or full name (or nothing) " +"to appear in our sponsor listing" +msgstr "Пожалуйста, если желаете, укажите ваше имя для отображения в списке спонсоров." -#: ../../include/conversation.php:938 -msgid "Follow Thread" -msgstr "Следовать теме" +#: ../../extend/addon/hzaddons/donate/donate.php:66 +msgid "Sponsor" +msgstr "Спонсор" -#: ../../include/conversation.php:939 -msgid "View Status" -msgstr "Просмотр состояния" +#: ../../extend/addon/hzaddons/donate/donate.php:69 +msgid "Special thanks to: " +msgstr "Особые благодарности:" -#: ../../include/conversation.php:940 ../../include/nav.php:81 -#: ../../mod/connedit.php:351 ../../mod/connedit.php:465 -msgid "View Profile" -msgstr "Просмотр профиля" +#: ../../extend/addon/hzaddons/superblock/superblock.php:112 +msgid "Currently blocked" +msgstr "В настоящее время заблокирован" -#: ../../include/conversation.php:941 -msgid "View Photos" -msgstr "Просмотр фотографий" +#: ../../extend/addon/hzaddons/superblock/superblock.php:114 +msgid "No channels currently blocked" +msgstr "В настоящее время никакие каналы не блокируются" -#: ../../include/conversation.php:942 -msgid "Matrix Activity" -msgstr "Активность матрицы" +#: ../../extend/addon/hzaddons/superblock/superblock.php:116 +#: ../../Zotlabs/Module/Photos.php:1025 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../Zotlabs/Module/Admin/Addons.php:455 +msgid "Remove" +msgstr "Удалить" -#: ../../include/conversation.php:943 -msgid "Edit Contact" -msgstr "Редактировать контакт" +#: ../../extend/addon/hzaddons/superblock/superblock.php:120 +msgid "Superblock Settings" +msgstr "Настройки Superblock" -#: ../../include/conversation.php:944 -msgid "Send PM" -msgstr "Отправить личное сообщение" +#: ../../extend/addon/hzaddons/superblock/superblock.php:345 +msgid "Block Completely" +msgstr "Заблокировать полностью" -#: ../../include/conversation.php:945 ../../include/apps.php:135 -msgid "Poke" -msgstr "Подпихнуть" +#: ../../extend/addon/hzaddons/superblock/superblock.php:394 +msgid "superblock settings updated" +msgstr "Настройки Superblock обновлены." -#: ../../include/conversation.php:1001 -#, php-format -msgid "%s likes this." -msgstr "%s нравится это." +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:31 +msgid "XMPP settings updated." +msgstr "Настройки XMPP обновлены." -#: ../../include/conversation.php:1001 -#, php-format -msgid "%s doesn't like this." -msgstr "%s не нравится это." +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:53 +msgid "Enable Chat" +msgstr "Включить чат" -#: ../../include/conversation.php:1005 -#, php-format -msgid "%2$d people like this." -msgid_plural "%2$d people like this." -msgstr[0] "%2$d чел. нравится это." -msgstr[1] "%2$d чел. нравится это." -msgstr[2] "%2$d чел. нравится это." +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:58 +msgid "Individual credentials" +msgstr "Индивидуальные разрешения" -#: ../../include/conversation.php:1007 -#, php-format -msgid "%2$d people don't like this." -msgid_plural "%2$d people don't like this." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "%2$d чел. не нравится это." +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:64 +msgid "Jabber BOSH server" +msgstr "Сервер Jabber BOSH" -#: ../../include/conversation.php:1013 -msgid "and" -msgstr "и" +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:69 +msgid "XMPP Settings" +msgstr "Настройки XMPP" -#: ../../include/conversation.php:1016 -#, php-format -msgid ", and %d other people" -msgid_plural ", and %d other people" -msgstr[0] "" -msgstr[1] "" -msgstr[2] ", и %d другие люди" +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:91 +#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:46 +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:150 +msgid "Save Settings" +msgstr "Сохранить настройки" + +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:92 +msgid "Jabber BOSH host" +msgstr "Узел Jabber BOSH" -#: ../../include/conversation.php:1017 +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:93 +msgid "Use central userbase" +msgstr "Использовать центральную базу данных" + +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:93 +msgid "" +"If enabled, members will automatically login to an ejabberd server that has " +"to be installed on this machine with synchronized credentials via the " +"\"auth_ejabberd.php\" script." +msgstr "" +"Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт" +"\"auth_ejabberd.php\"." + +#: ../../extend/addon/hzaddons/xmpp/xmpp.php:102 +#: ../../extend/addon/hzaddons/logrot/logrot.php:54 +#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:54 +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:82 +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:184 +#: ../../extend/addon/hzaddons/twitter/twitter.php:772 +#: ../../extend/addon/hzaddons/piwik/piwik.php:116 +#: ../../Zotlabs/Module/Defperms.php:103 +#: ../../Zotlabs/Module/Settings/Channel.php:272 +msgid "Settings updated." +msgstr "Настройки обновлены." + +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:19 +msgid "Send email to all members" +msgstr "Отправить email всем участникам" + +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:33 +#: ../../Zotlabs/Lib/Enotify.php:65 #, php-format -msgid "%s like this." -msgstr "%s нравится это." +msgid "%s Administrator" +msgstr "администратор %s" -#: ../../include/conversation.php:1017 +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:73 #, php-format -msgid "%s don't like this." -msgstr "%s не нравится это." +msgid "%1$d of %2$d messages sent." +msgstr "%1$dиз %2$d сообщений отправлено." -#: ../../include/conversation.php:1074 -msgid "Visible to everybody" -msgstr "Видно для всех" +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:81 +msgid "Send email to all hub members." +msgstr "Отправить email всем участникам узла." -#: ../../include/conversation.php:1075 ../../mod/mail.php:171 -#: ../../mod/mail.php:269 -msgid "Please enter a link URL:" -msgstr "Пожалуйста, введите URL ссылки:" +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:93 +msgid "Sender Email address" +msgstr "Адрес электронной почты отправителя" -#: ../../include/conversation.php:1076 -msgid "Please enter a video link/URL:" -msgstr "Пожалуйста, введите URL видео-ссылки:" +#: ../../extend/addon/hzaddons/hubwall/hubwall.php:94 +msgid "Test mode (only send to hub administrator)" +msgstr "Тестовый режим (отправка только администратору узла)" -#: ../../include/conversation.php:1077 -msgid "Please enter an audio link/URL:" -msgstr "Пожалуйста, введите URL аудио-ссылки:" +#: ../../extend/addon/hzaddons/buglink/buglink.php:16 +#: ../../Zotlabs/Lib/Apps.php:295 +msgid "Report Bug" +msgstr "Сообщить об ошибке" -#: ../../include/conversation.php:1078 -msgid "Tag term:" -msgstr "Теги:" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:42 +msgid "Post to Insanejournal" +msgstr "Опубликовать в InsaneJournal" -#: ../../include/conversation.php:1079 ../../mod/filer.php:49 -msgid "Save to Folder:" -msgstr "Сохранить в папку:" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:73 +msgid "Enable InsaneJournal Post Plugin" +msgstr "Включить плагин публикаций InsaneJournal" -#: ../../include/conversation.php:1080 -msgid "Where are you right now?" -msgstr "Где вы сейчас?" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:77 +msgid "InsaneJournal username" +msgstr "Имя пользователя InsaneJournal" -#: ../../include/conversation.php:1081 ../../mod/editpost.php:52 -#: ../../mod/mail.php:172 ../../mod/mail.php:270 -msgid "Expires YYYY-MM-DD HH:MM" -msgstr "" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:81 +msgid "InsaneJournal password" +msgstr "Пароль InsaneJournal" -#: ../../include/conversation.php:1091 ../../include/page_widgets.php:40 -#: ../../include/ItemObject.php:592 ../../mod/editblock.php:141 -#: ../../mod/editlayout.php:135 ../../mod/editpost.php:140 -#: ../../mod/editwebpage.php:174 ../../mod/photos.php:997 -#: ../../mod/webpages.php:124 -msgid "Preview" -msgstr "Предварительный просмотр" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:85 +msgid "Post to InsaneJournal by default" +msgstr "Публиковать в InsaneJournal по умолчанию" -#: ../../include/conversation.php:1105 ../../mod/photos.php:976 -#: ../../mod/layouts.php:113 -msgid "Share" -msgstr "Поделиться" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:89 +msgid "InsaneJournal Post Settings" +msgstr "Настройки публикаций в InsaneJournal" -#: ../../include/conversation.php:1107 ../../mod/editwebpage.php:139 -msgid "Page link title" -msgstr "Ссылка заголовока страницы" +#: ../../extend/addon/hzaddons/ijpost/ijpost.php:104 +msgid "Insane Journal Settings saved." +msgstr "Настройки InsaneJournal сохранены." -#: ../../include/conversation.php:1110 -msgid "Post as" -msgstr "" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:94 +msgid "Hubzilla Directory Stats" +msgstr "Каталог статистики Hubzilla" -#: ../../include/conversation.php:1111 ../../mod/editblock.php:112 -#: ../../mod/editlayout.php:107 ../../mod/editpost.php:113 -#: ../../mod/editwebpage.php:144 ../../mod/mail.php:219 ../../mod/mail.php:332 -msgid "Upload photo" -msgstr "Загрузить фотографию" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:95 +msgid "Total Hubs" +msgstr "Всего хабов" -#: ../../include/conversation.php:1112 -msgid "upload photo" -msgstr "загрузить фотографию" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:97 +msgid "Hubzilla Hubs" +msgstr "Хабы Hubzilla" -#: ../../include/conversation.php:1113 ../../mod/editblock.php:113 -#: ../../mod/editlayout.php:108 ../../mod/editpost.php:114 -#: ../../mod/editwebpage.php:145 ../../mod/mail.php:220 ../../mod/mail.php:333 -msgid "Attach file" -msgstr "Прикрепить файл" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:99 +msgid "Friendica Hubs" +msgstr "Хабы Friendica" -#: ../../include/conversation.php:1114 -msgid "attach file" -msgstr "прикрепить файл" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:101 +msgid "Diaspora Pods" +msgstr "Стручки Diaspora" -#: ../../include/conversation.php:1115 ../../mod/editblock.php:114 -#: ../../mod/editlayout.php:109 ../../mod/editpost.php:115 -#: ../../mod/editwebpage.php:146 ../../mod/mail.php:221 ../../mod/mail.php:334 -msgid "Insert web link" -msgstr "Вставить веб-ссылку" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:103 +msgid "Hubzilla Channels" +msgstr "Каналы Hubzilla" -#: ../../include/conversation.php:1116 -msgid "web link" -msgstr "веб-ссылка" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:105 +msgid "Friendica Channels" +msgstr "Каналы Friendica" -#: ../../include/conversation.php:1117 -msgid "Insert video link" -msgstr "Вставить видео-ссылку" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:107 +msgid "Diaspora Channels" +msgstr "Каналы Diaspora" -#: ../../include/conversation.php:1118 -msgid "video link" -msgstr "видео-ссылка" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:109 +msgid "Aged 35 and above" +msgstr "Возраст 35 и выше" -#: ../../include/conversation.php:1119 -msgid "Insert audio link" -msgstr "Вставить аудио-ссылку" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:111 +msgid "Aged 34 and under" +msgstr "Возраст 34 и ниже" -#: ../../include/conversation.php:1120 -msgid "audio link" -msgstr "аудио-ссылка" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:113 +msgid "Average Age" +msgstr "Средний возраст" -#: ../../include/conversation.php:1121 ../../mod/editblock.php:118 -#: ../../mod/editlayout.php:113 ../../mod/editpost.php:119 -#: ../../mod/editwebpage.php:150 -msgid "Set your location" -msgstr "Указание своего расположения" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:115 +msgid "Known Chatrooms" +msgstr "Известные чаты" -#: ../../include/conversation.php:1122 -msgid "set location" -msgstr "указание расположения" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:117 +msgid "Known Tags" +msgstr "Известные теги" -#: ../../include/conversation.php:1123 ../../mod/editblock.php:119 -#: ../../mod/editlayout.php:114 ../../mod/editpost.php:120 -#: ../../mod/editwebpage.php:151 -msgid "Clear browser location" -msgstr "Стереть указание расположения" +#: ../../extend/addon/hzaddons/dirstats/dirstats.php:119 +msgid "" +"Please note Diaspora and Friendica statistics are merely those **this " +"directory** is aware of, and not all those known in the network. This also " +"applies to chatrooms," +msgstr "" +"Обратите внимание, что статистика Diaspora и Friendica это только те, " +"о которых **этот каталог** знает, а не все известные в сети. Это также " +"относится и к чатам." + +#: ../../extend/addon/hzaddons/chess/chess.php:353 +#: ../../extend/addon/hzaddons/chess/chess.php:542 +msgid "Invalid game." +msgstr "Недействительная игра" + +#: ../../extend/addon/hzaddons/chess/chess.php:359 +#: ../../extend/addon/hzaddons/chess/chess.php:582 +msgid "You are not a player in this game." +msgstr "Вы не играете в эту игру." + +#: ../../extend/addon/hzaddons/chess/chess.php:415 +msgid "You must be a local channel to create a game." +msgstr "Ваш канал должен быть локальным чтобы создать игру." + +#: ../../extend/addon/hzaddons/chess/chess.php:433 +msgid "You must select one opponent that is not yourself." +msgstr "Вы должны выбрать противника который не является вами." + +#: ../../extend/addon/hzaddons/chess/chess.php:444 +msgid "Random color chosen." +msgstr "Выбран случайный цвет." + +#: ../../extend/addon/hzaddons/chess/chess.php:452 +msgid "Error creating new game." +msgstr "Ошибка создания новой игры." + +#: ../../extend/addon/hzaddons/chess/chess.php:486 +#: ../../include/channel.php:1151 +msgid "Requested channel is not available." +msgstr "Запрошенный канал не доступен." -#: ../../include/conversation.php:1124 -msgid "clear location" -msgstr "стереть указание расположения" +#: ../../extend/addon/hzaddons/chess/chess.php:500 +msgid "You must select a local channel /chess/channelname" +msgstr "Вы должны выбрать локальный канал /chess/channelname" -#: ../../include/conversation.php:1126 ../../mod/editblock.php:132 -#: ../../mod/editlayout.php:126 ../../mod/editpost.php:132 -#: ../../mod/editwebpage.php:167 -msgid "Set title" -msgstr "Заголовок" +#: ../../extend/addon/hzaddons/chess/chess.php:508 +#: ../../Zotlabs/Module/Channel.php:35 ../../Zotlabs/Module/Ochannel.php:32 +#: ../../Zotlabs/Module/Chat.php:25 +msgid "You must be logged in to see this page." +msgstr "Вы должны авторизоваться, чтобы увидеть эту страницу." -#: ../../include/conversation.php:1129 ../../mod/editblock.php:135 -#: ../../mod/editlayout.php:129 ../../mod/editpost.php:134 -#: ../../mod/editwebpage.php:169 -msgid "Categories (comma-separated list)" -msgstr "Категории (список через запятую)" +#: ../../extend/addon/hzaddons/chess/chess.php:1066 +msgid "Enable notifications" +msgstr "Включить оповещения" -#: ../../include/conversation.php:1131 ../../mod/editblock.php:121 -#: ../../mod/editlayout.php:116 ../../mod/editpost.php:122 -#: ../../mod/editwebpage.php:153 -msgid "Permission settings" -msgstr "Настройки разрешений" +#: ../../extend/addon/hzaddons/planets/planets.php:121 +msgid "Planets Settings updated." +msgstr "Настройки Planets обновлены." -#: ../../include/conversation.php:1132 -msgid "permissions" -msgstr "разрешения" - -#: ../../include/conversation.php:1139 ../../mod/editblock.php:129 -#: ../../mod/editlayout.php:123 ../../mod/editpost.php:129 -#: ../../mod/editwebpage.php:162 -msgid "Public post" -msgstr "Публичное сообщение" - -#: ../../include/conversation.php:1141 ../../mod/editblock.php:136 -#: ../../mod/editlayout.php:130 ../../mod/editpost.php:135 -#: ../../mod/editwebpage.php:170 -msgid "Example: bob@example.com, mary@example.com" -msgstr "Пример: bob@example.com, mary@example.com" - -#: ../../include/conversation.php:1154 ../../mod/editblock.php:146 -#: ../../mod/editlayout.php:140 ../../mod/editpost.php:146 -#: ../../mod/editwebpage.php:179 ../../mod/mail.php:226 ../../mod/mail.php:339 -msgid "Set expiration date" -msgstr "" +#: ../../extend/addon/hzaddons/planets/planets.php:149 +msgid "Enable Planets Plugin" +msgstr "Включить плагин Planets" -#: ../../include/conversation.php:1156 ../../include/ItemObject.php:595 -#: ../../mod/editpost.php:148 ../../mod/mail.php:228 ../../mod/mail.php:341 -msgid "Encrypt text" -msgstr "" +#: ../../extend/addon/hzaddons/planets/planets.php:153 +msgid "Planets Settings" +msgstr "Настройки Planets" -#: ../../include/conversation.php:1158 ../../mod/editpost.php:150 -msgid "OK" -msgstr "OK" +#: ../../extend/addon/hzaddons/libertree/libertree.php:38 +msgid "Post to Libertree" +msgstr "Опубликовать в Libertree" -#: ../../include/conversation.php:1159 ../../mod/settings.php:516 -#: ../../mod/settings.php:542 ../../mod/editpost.php:151 -#: ../../mod/fbrowser.php:82 ../../mod/fbrowser.php:117 ../../mod/tagrm.php:11 -#: ../../mod/tagrm.php:94 -msgid "Cancel" -msgstr "Отменить" +#: ../../extend/addon/hzaddons/libertree/libertree.php:69 +msgid "Enable Libertree Post Plugin" +msgstr "Включить плагин публикаций Libertree" -#: ../../include/conversation.php:1401 -msgid "Discover" -msgstr "Обнаруженные" +#: ../../extend/addon/hzaddons/libertree/libertree.php:73 +msgid "Libertree API token" +msgstr "Токен Libertree API" -#: ../../include/conversation.php:1404 -msgid "Imported public streams" -msgstr "" +#: ../../extend/addon/hzaddons/libertree/libertree.php:77 +msgid "Libertree site URL" +msgstr "URL сайта Libertree" -#: ../../include/conversation.php:1409 -msgid "Commented Order" -msgstr "По комментариям" +#: ../../extend/addon/hzaddons/libertree/libertree.php:81 +msgid "Post to Libertree by default" +msgstr "Публиковать в Libertree по умолчанию" -#: ../../include/conversation.php:1412 -msgid "Sort by Comment Date" -msgstr "Сортировка по дате создания комментариев" +#: ../../extend/addon/hzaddons/libertree/libertree.php:85 +msgid "Libertree Post Settings" +msgstr "Настройки публикаций в Libertree" -#: ../../include/conversation.php:1416 -msgid "Posted Order" -msgstr "По добавлениям" +#: ../../extend/addon/hzaddons/libertree/libertree.php:99 +msgid "Libertree Settings saved." +msgstr "Настройки Libertree сохранены." -#: ../../include/conversation.php:1419 -msgid "Sort by Post Date" -msgstr "Сортировка по дате создания сообщения" +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:67 +msgid "Only authenticate automatically to sites of your friends" +msgstr "Автоматически аутентифицироватся только на сайтах ваших друзей" -#: ../../include/conversation.php:1424 ../../include/widgets.php:82 -msgid "Personal" -msgstr "Личные" +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:67 +msgid "By default you are automatically authenticated anywhere in the network" +msgstr "По умолчанию вы автоматически аутентифицируетесь во всей сети" -#: ../../include/conversation.php:1427 -msgid "Posts that mention or involve you" -msgstr "Сообщения, в которых упоминули или вовлекли вас" +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:71 +msgid "Authchoose Settings" +msgstr "Настройки выбора аутентификации" -#: ../../include/conversation.php:1433 ../../mod/connections.php:211 -#: ../../mod/connections.php:224 ../../mod/menu.php:61 -msgid "New" -msgstr "Новые" +#: ../../extend/addon/hzaddons/authchoose/authchoose.php:85 +msgid "Atuhchoose Settings updated." +msgstr "Настройки выбора аутентификации обновлены." -#: ../../include/conversation.php:1436 -msgid "Activity Stream - by date" -msgstr "Лента активности - по дате" +#: ../../extend/addon/hzaddons/logrot/logrot.php:36 +msgid "Logfile archive directory" +msgstr "Каталог архивирования журнала" -#: ../../include/conversation.php:1442 -msgid "Starred" -msgstr "Помеченные" +#: ../../extend/addon/hzaddons/logrot/logrot.php:36 +msgid "Directory to store rotated logs" +msgstr "Каталог для хранения заархивированных журналов" -#: ../../include/conversation.php:1445 -msgid "Favourite Posts" -msgstr "Фаворит-сообщения" +#: ../../extend/addon/hzaddons/logrot/logrot.php:37 +msgid "Logfile size in bytes before rotating" +msgstr "Размер файла журнала в байтах для архивирования" -#: ../../include/conversation.php:1452 -msgid "Spam" -msgstr "Спам" +#: ../../extend/addon/hzaddons/logrot/logrot.php:38 +msgid "Number of logfiles to retain" +msgstr "Количество сохраняемых файлов журналов" -#: ../../include/conversation.php:1455 -msgid "Posts flagged as SPAM" -msgstr "Как СПАМ помеченные сообщения" +#: ../../extend/addon/hzaddons/qrator/qrator.php:48 +msgid "QR code" +msgstr "QR-код" + +#: ../../extend/addon/hzaddons/qrator/qrator.php:63 +msgid "QR Generator" +msgstr "Генератор QR-кодов" + +#: ../../extend/addon/hzaddons/qrator/qrator.php:64 +msgid "Enter some text" +msgstr "Введите любой текст" + +#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:47 +msgid "text to include in all outgoing posts from this site" +msgstr "текст, который будет добавлен во все исходящие публикации с этого сайта" + +#: ../../extend/addon/hzaddons/redfiles/redfilehelper.php:64 +msgid "file" +msgstr "файл" + +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:109 +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:82 +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:119 +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:73 +#: ../../include/items.php:364 ../../Zotlabs/Web/WebServer.php:122 +#: ../../Zotlabs/Module/Subthread.php:86 ../../Zotlabs/Module/Like.php:296 +#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:68 +#: ../../Zotlabs/Module/Group.php:83 ../../Zotlabs/Module/Profperm.php:28 +#: ../../Zotlabs/Module/Cloud.php:126 ../../Zotlabs/Module/Import_items.php:120 +msgid "Permission denied" +msgstr "Доступ запрещен" -#: ../../include/conversation.php:1488 ../../mod/admin.php:892 -msgid "Channel" -msgstr "Канал" +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:119 +msgid "Redmatrix File Storage Import" +msgstr "Импорт файлового хранилища Redmatrix" -#: ../../include/conversation.php:1491 -msgid "Status Messages and Posts" -msgstr "" +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:120 +msgid "This will import all your Redmatrix cloud files to this channel." +msgstr "Это позволит импортировать все ваши файлы в Redmatrix в этот канал." -#: ../../include/conversation.php:1500 -msgid "About" -msgstr "О себе" +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:121 +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:131 +msgid "Redmatrix Server base URL" +msgstr "Базовый URL сервера Redmatrix" -#: ../../include/conversation.php:1503 -msgid "Profile Details" -msgstr "Сведения о профиле" +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:122 +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:132 +msgid "Redmatrix Login Username" +msgstr "Имя пользователя Redmatrix" -#: ../../include/conversation.php:1509 ../../include/nav.php:84 -#: ../../include/apps.php:129 ../../mod/fbrowser.php:25 -msgid "Photos" -msgstr "Фотографии" +#: ../../extend/addon/hzaddons/redfiles/redfiles.php:123 +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:133 +msgid "Redmatrix Login Password" +msgstr "Пароль Redmatrix" -#: ../../include/conversation.php:1512 ../../include/photos.php:313 -msgid "Photo Albums" -msgstr "Фотоальбомы" +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:211 +msgid "Deactivate the feature" +msgstr "Деактивировать функцию" -#: ../../include/conversation.php:1518 ../../include/nav.php:85 -#: ../../include/reddav.php:1051 ../../include/apps.php:125 -#: ../../mod/fbrowser.php:114 -msgid "Files" -msgstr "Файлы" +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:215 +msgid "Hide the button and show the smilies directly." +msgstr "Скрыть кнопку и сразу показывать смайлики." -#: ../../include/conversation.php:1521 -msgid "Files and Storage" -msgstr "" +#: ../../extend/addon/hzaddons/smileybutton/smileybutton.php:219 +msgid "Smileybutton Settings" +msgstr "Настройки кнопки смайликов" -#: ../../include/conversation.php:1530 ../../include/conversation.php:1533 -msgid "Chatrooms" -msgstr "Чаты" +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:80 +msgid "" +"This plugin looks in posts for the words/text you specify below, and " +"collapses any content containing those keywords so it is not displayed at " +"inappropriate times, such as sexual innuendo that may be improper in a work " +"setting. It is polite and recommended to tag any content containing nudity " +"with #NSFW. This filter can also match any other word/text you specify, and " +"can thereby be used as a general purpose content filter." +msgstr "Этот плагин просматривает публикации для слов / текста, которые вы указываете ниже, и сворачивает любой контент, содержащий эти ключевые слова, поэтому он не отображается в неподходящее время, например, сексуальные инсинуации, которые могут быть неправильными в настройке работы. Например, мы рекомендуем отмечать любой контент, содержащий наготу, тегом #NSFW. Этот фильтр также способен реагировать на любое другое указанное вами слово / текст и может использоваться в качестве фильтра содержимого общего назначения." + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:84 +msgid "Enable Content filter" +msgstr "Включить фильтрацию содержимого" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:88 +msgid "Comma separated list of keywords to hide" +msgstr "Список ключевых слов для скрытия, через запятую" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:88 +msgid "Word, /regular-expression/, lang=xx, lang!=xx" +msgstr "слово, /регулярное_выражение/, lang=xx, lang!=xx" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:92 +msgid "Not Safe For Work Settings" +msgstr "Настройка \"Not Safe For Work\"" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:92 +msgid "General Purpose Content Filter" +msgstr "Фильтр содержимого общего назначения" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:110 +msgid "NSFW Settings saved." +msgstr "Настройки NSFW сохранены." + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:207 +msgid "Possible adult content" +msgstr "Возможно содержимое для взрослых" + +#: ../../extend/addon/hzaddons/nsfw/nsfw.php:222 +#, php-format +msgid "%s - view" +msgstr "%s - просмотр" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:45 +msgid "Flattr this!" +msgstr "" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:83 +msgid "Flattr widget settings updated." +msgstr "Настройки виджета Flattr обновлены." + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:100 +msgid "Flattr user" +msgstr "Пользователь Flattr" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:104 +msgid "URL of the Thing to flattr" +msgstr "URL ccылки на Flattr" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:104 +msgid "If empty channel URL is used" +msgstr "Если пусто, то используется URL канала" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:108 +msgid "Title of the Thing to flattr" +msgstr "Заголовок вещи на Flattr" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:108 +msgid "If empty \"channel name on The Hubzilla\" will be used" +msgstr "Если пусто, то будет использовано \"Название канала Hubzilla\"" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:112 +msgid "Static or dynamic flattr button" +msgstr "Статическая или динамическая кнопка Flattr" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:112 +msgid "static" +msgstr "статическая" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:112 +msgid "dynamic" +msgstr "динамическая" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:116 +msgid "Alignment of the widget" +msgstr "Выравнивание виджета" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:116 +msgid "left" +msgstr "слева" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:116 +msgid "right" +msgstr "справа" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:120 +msgid "Enable Flattr widget" +msgstr "Включить виджет Flattr" + +#: ../../extend/addon/hzaddons/flattrwidget/flattrwidget.php:124 +msgid "Flattr Widget Settings" +msgstr "Настройки виджета Flattr" + +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:40 +#: ../../extend/addon/hzaddons/openid/Mod_Id.php:53 +#: ../../extend/addon/hzaddons/keepout/keepout.php:36 +#: ../../include/attach.php:150 ../../include/attach.php:197 +#: ../../include/attach.php:270 ../../include/attach.php:379 +#: ../../include/attach.php:393 ../../include/attach.php:400 +#: ../../include/attach.php:482 ../../include/attach.php:1042 +#: ../../include/attach.php:1116 ../../include/attach.php:1281 +#: ../../include/items.php:3653 ../../include/photos.php:27 +#: ../../Zotlabs/Lib/Chatroom.php:133 ../../Zotlabs/Web/WebServer.php:123 +#: ../../Zotlabs/Module/Appman.php:87 ../../Zotlabs/Module/Photos.php:69 +#: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Poke.php:149 +#: ../../Zotlabs/Module/Achievements.php:34 +#: ../../Zotlabs/Module/Connections.php:29 ../../Zotlabs/Module/Item.php:229 +#: ../../Zotlabs/Module/Item.php:246 ../../Zotlabs/Module/Item.php:256 +#: ../../Zotlabs/Module/Item.php:1108 ../../Zotlabs/Module/Events.php:271 +#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 +#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Settings.php:59 +#: ../../Zotlabs/Module/Notifications.php:11 +#: ../../Zotlabs/Module/Pdledit.php:29 ../../Zotlabs/Module/Mail.php:146 +#: ../../Zotlabs/Module/Card_edit.php:51 ../../Zotlabs/Module/Suggest.php:28 +#: ../../Zotlabs/Module/Channel.php:115 ../../Zotlabs/Module/Channel.php:281 +#: ../../Zotlabs/Module/Channel.php:320 ../../Zotlabs/Module/Block.php:24 +#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Api.php:24 +#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Sources.php:77 +#: ../../Zotlabs/Module/Profile_photo.php:302 +#: ../../Zotlabs/Module/Profile_photo.php:315 +#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Message.php:18 +#: ../../Zotlabs/Module/Filestorage.php:15 +#: ../../Zotlabs/Module/Filestorage.php:70 +#: ../../Zotlabs/Module/Filestorage.php:96 +#: ../../Zotlabs/Module/Filestorage.php:140 ../../Zotlabs/Module/Page.php:34 +#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Editblock.php:67 +#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Connedit.php:389 +#: ../../Zotlabs/Module/Webpages.php:118 +#: ../../Zotlabs/Module/Editwebpage.php:68 +#: ../../Zotlabs/Module/Editwebpage.php:89 +#: ../../Zotlabs/Module/Editwebpage.php:107 +#: ../../Zotlabs/Module/Editwebpage.php:121 +#: ../../Zotlabs/Module/Editlayout.php:67 +#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Moderate.php:13 +#: ../../Zotlabs/Module/Articles.php:68 ../../Zotlabs/Module/Bookmarks.php:64 +#: ../../Zotlabs/Module/Sharedwithme.php:16 ../../Zotlabs/Module/Setup.php:209 +#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Invite.php:17 +#: ../../Zotlabs/Module/Invite.php:94 ../../Zotlabs/Module/Blocks.php:73 +#: ../../Zotlabs/Module/Blocks.php:80 ../../Zotlabs/Module/Cover_photo.php:313 +#: ../../Zotlabs/Module/Cover_photo.php:326 ../../Zotlabs/Module/Like.php:185 +#: ../../Zotlabs/Module/Defperms.php:173 ../../Zotlabs/Module/Menu.php:129 +#: ../../Zotlabs/Module/Menu.php:140 ../../Zotlabs/Module/Manage.php:10 +#: ../../Zotlabs/Module/Settings/Features.php:38 +#: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Chat.php:105 +#: ../../Zotlabs/Module/Rate.php:113 ../../Zotlabs/Module/Locs.php:87 +#: ../../Zotlabs/Module/Viewconnections.php:28 +#: ../../Zotlabs/Module/Viewconnections.php:33 +#: ../../Zotlabs/Module/New_channel.php:105 +#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Network.php:15 +#: ../../Zotlabs/Module/Regmod.php:20 +#: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Cards.php:72 +#: ../../Zotlabs/Module/Register.php:77 +#: ../../Zotlabs/Module/Article_edit.php:51 ../../Zotlabs/Module/Wiki.php:50 +#: ../../Zotlabs/Module/Wiki.php:273 ../../Zotlabs/Module/Wiki.php:404 +#: ../../Zotlabs/Module/Group.php:12 ../../Zotlabs/Module/Group.php:24 +#: ../../Zotlabs/Module/Profiles.php:198 ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Profile.php:85 ../../Zotlabs/Module/Profile.php:101 +#: ../../Zotlabs/Module/Thing.php:280 ../../Zotlabs/Module/Thing.php:300 +#: ../../Zotlabs/Module/Thing.php:341 ../../Zotlabs/Module/Display.php:449 +#: ../../Zotlabs/Module/Cloud.php:40 ../../Zotlabs/Module/Mood.php:116 +msgid "Permission denied." +msgstr "Доступ запрещен." -#: ../../include/conversation.php:1540 ../../include/nav.php:93 -#: ../../include/apps.php:119 -msgid "Bookmarks" -msgstr "Закладки" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:148 +msgid "You are now authenticated to pumpio." +msgstr "Вы аутентифицированы в Pump.io" -#: ../../include/conversation.php:1543 -msgid "Saved Bookmarks" -msgstr "Сохранённые закладки" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:149 +msgid "return to the featured settings page" +msgstr "Вернутся к странице настроек" -#: ../../include/conversation.php:1551 ../../include/nav.php:95 -#: ../../include/apps.php:126 ../../mod/webpages.php:79 -msgid "Webpages" -msgstr "Веб-страницы" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:163 +msgid "Post to Pump.io" +msgstr "Опубликовать в Pump.io" -#: ../../include/conversation.php:1554 -msgid "Manage Webpages" -msgstr "Управление веб-страниц" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:198 +msgid "Pump.io servername" +msgstr "Имя сервера Pump.io" -#: ../../include/page_widgets.php:6 -msgid "New Page" -msgstr "Новая страница" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:198 +msgid "Without \"http://\" or \"https://\"" +msgstr "Без \"http://\" или \"https://\"" -#: ../../include/page_widgets.php:8 ../../include/page_widgets.php:36 -#: ../../include/apps.php:231 ../../include/menu.php:42 -#: ../../include/ItemObject.php:96 ../../mod/settings.php:577 -#: ../../mod/blocks.php:94 ../../mod/connections.php:393 -#: ../../mod/editblock.php:111 ../../mod/editlayout.php:106 -#: ../../mod/editpost.php:112 ../../mod/editwebpage.php:143 -#: ../../mod/thing.php:235 ../../mod/layouts.php:112 ../../mod/menu.php:59 -#: ../../mod/webpages.php:120 -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:80 -msgid "Edit" -msgstr "Редактировать" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:202 +msgid "Pump.io username" +msgstr "Имя пользователя Pump.io" -#: ../../include/page_widgets.php:39 ../../mod/blocks.php:97 -#: ../../mod/layouts.php:116 ../../mod/webpages.php:123 -msgid "View" -msgstr "Просмотр" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:202 +msgid "Without the servername" +msgstr "без имени сервера" -#: ../../include/page_widgets.php:41 ../../mod/webpages.php:125 -msgid "Actions" -msgstr "" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:213 +msgid "You are not authenticated to pumpio" +msgstr "Вы не аутентифицированы на Pump.io" -#: ../../include/page_widgets.php:42 ../../mod/webpages.php:126 -msgid "Page Link" -msgstr "Ссылка страницы" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:215 +msgid "(Re-)Authenticate your pump.io connection" +msgstr "Аутентифицировать (повторно) ваше соединение с Pump.io" -#: ../../include/page_widgets.php:43 ../../mod/webpages.php:127 -msgid "Title" -msgstr "Заголовок" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:219 +msgid "Enable pump.io Post Plugin" +msgstr "Включить плагин публикаций Pump.io" -#: ../../include/page_widgets.php:44 ../../mod/webpages.php:128 -msgid "Created" -msgstr "Создано" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:223 +msgid "Post to pump.io by default" +msgstr "Публиковать в Pump.io по умолчанию" -#: ../../include/page_widgets.php:45 ../../mod/webpages.php:129 -msgid "Edited" -msgstr "Отредактирован" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:227 +msgid "Should posts be public" +msgstr "Публикации должны быть общедоступными" -#: ../../include/security.php:301 -msgid "" -"The form security token was not correct. This probably happened because the " -"form has been opened for too long (>3 hours) before submitting it." -msgstr "" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:231 +msgid "Mirror all public posts" +msgstr "Отображать все общедоступные публикации" -#: ../../include/account.php:23 -msgid "Not a valid email address" -msgstr "Не действительный адрес электронной почты" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:237 +msgid "Pump.io Post Settings" +msgstr "Настройки публикаций в Pump.io" -#: ../../include/account.php:25 -msgid "Your email domain is not among those allowed on this site" -msgstr "Домен электронной почты не входит в число тех, которые разрешены на этом сайте" +#: ../../extend/addon/hzaddons/pumpio/pumpio.php:266 +msgid "PumpIO Settings saved." +msgstr "Настройки публикаций в Pump.io сохранены." -#: ../../include/account.php:31 -msgid "Your email address is already registered at this site." -msgstr "Ваш адрес электронной почты уже зарегистрирован на этом сайте." +#: ../../extend/addon/hzaddons/bookmarker/bookmarker.php:38 +#: ../../Zotlabs/Lib/ThreadItem.php:403 +msgid "Save Bookmarks" +msgstr "Сохранить закладки" -#: ../../include/account.php:64 -msgid "An invitation is required." -msgstr "Требуется приглашение." +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:305 +#: ../../include/channel.php:1396 ../../include/channel.php:1567 +msgid "Status:" +msgstr "Статус:" -#: ../../include/account.php:68 -msgid "Invitation could not be verified." -msgstr "Не удалось проверить приглашение." +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:309 +msgid "Activate addon" +msgstr "Активировать расширение" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:313 +msgid "Hide Jappixmini Chat-Widget from the webinterface" +msgstr "Скрыть виджет чата Jappixmini из веб-интерфейса" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:318 +msgid "Jabber username" +msgstr "Имя пользователя Jabber" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:324 +msgid "Jabber server" +msgstr "Сервер Jabber" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:330 +msgid "Jabber BOSH host URL" +msgstr "URL узла Jabber BOSH" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:337 +msgid "Jabber password" +msgstr "Пароль Jabber" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:343 +msgid "Encrypt Jabber password with Hubzilla password" +msgstr "Зашифровать пароль Jabber с помощью пароля Hubzilla" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:343 +#: ../../Zotlabs/Module/Settings/Channel.php:592 +#: ../../Zotlabs/Module/Settings/Channel.php:597 +#: ../../Zotlabs/Module/Settings/Channel.php:598 +#: ../../Zotlabs/Module/Settings/Channel.php:599 +msgid "Recommended" +msgstr "рекомендовано" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:347 +#: ../../extend/addon/hzaddons/redred/redred.php:115 +msgid "Hubzilla password" +msgstr "Пароль Hubzilla" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:351 +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:355 +msgid "Approve subscription requests from Hubzilla contacts automatically" +msgstr "Утверждать запросы на подписку от контактов Hubzilla автоматически" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:359 +msgid "Purge internal list of jabber addresses of contacts" +msgstr "Очистить внутренний список адресов контактов Jabber" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:364 +msgid "Configuration Help" +msgstr "Помощь по конфигурации" + +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:368 +#: ../../Zotlabs/Module/Cdav.php:1183 ../../Zotlabs/Module/Connedit.php:919 +#: ../../Zotlabs/Module/Profiles.php:796 +msgid "Add Contact" +msgstr "Добавить контакт" -#: ../../include/account.php:119 -msgid "Please enter the required information." -msgstr "Пожалуйста, введите необходимую информацию." +#: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:371 +msgid "Jappix Mini Settings" +msgstr "Настройки Jappix Mini" -#: ../../include/account.php:187 -msgid "Failed to store account information." -msgstr "Не удалось сохранить информацию аккаунта." +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:42 +msgid "Post to LiveJournal" +msgstr "Опубликовать в LiveJournal" -#: ../../include/account.php:273 -#, php-format -msgid "Registration request at %s" -msgstr "Требуется регистрация на %s" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 +msgid "Enable LiveJournal Post Plugin" +msgstr "Включить плагин публикаций LiveJournal" -#: ../../include/account.php:275 ../../include/account.php:302 -#: ../../include/account.php:359 -msgid "Administrator" -msgstr "Администратор" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:74 +msgid "LiveJournal username" +msgstr "Имя пользователя LiveJournal" -#: ../../include/account.php:297 -msgid "your registration password" -msgstr "Ваш пароль регистрации" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:78 +msgid "LiveJournal password" +msgstr "Пароль LiveJournal" -#: ../../include/account.php:300 ../../include/account.php:357 -#, php-format -msgid "Registration details for %s" -msgstr "Регистрационные данные для %s" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 +msgid "Post to LiveJournal by default" +msgstr "Публиковать в LiveJournal по умолчанию" -#: ../../include/account.php:366 -msgid "Account approved." -msgstr "Аккаунт утвержден." +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:86 +msgid "LiveJournal Post Settings" +msgstr "Настройки публикаций в LiveJournal" -#: ../../include/account.php:400 -#, php-format -msgid "Registration revoked for %s" -msgstr "Регистрация отозвана для %s" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:101 +msgid "LiveJournal Settings saved." +msgstr "Настройки LiveJournal сохранены." -#: ../../include/photos.php:15 ../../include/attach.php:119 -#: ../../include/attach.php:166 ../../include/attach.php:229 -#: ../../include/attach.php:243 ../../include/attach.php:283 -#: ../../include/attach.php:297 ../../include/attach.php:322 -#: ../../include/attach.php:513 ../../include/attach.php:585 -#: ../../include/chat.php:116 ../../include/items.php:3680 -#: ../../mod/mood.php:112 ../../mod/mitem.php:73 ../../mod/achievements.php:27 -#: ../../mod/settings.php:492 ../../mod/poke.php:128 ../../mod/api.php:26 -#: ../../mod/api.php:31 ../../mod/authtest.php:13 ../../mod/profile.php:64 -#: ../../mod/profile.php:72 ../../mod/block.php:22 ../../mod/block.php:72 -#: ../../mod/profile_photo.php:263 ../../mod/profile_photo.php:276 -#: ../../mod/blocks.php:29 ../../mod/blocks.php:44 ../../mod/profiles.php:152 -#: ../../mod/profiles.php:462 ../../mod/bookmarks.php:46 -#: ../../mod/channel.php:89 ../../mod/channel.php:193 -#: ../../mod/channel.php:236 ../../mod/chat.php:90 ../../mod/chat.php:95 -#: ../../mod/register.php:68 ../../mod/regmod.php:18 ../../mod/common.php:35 -#: ../../mod/network.php:12 ../../mod/connections.php:169 -#: ../../mod/connedit.php:221 ../../mod/delegate.php:6 ../../mod/page.php:30 -#: ../../mod/page.php:80 ../../mod/setup.php:203 ../../mod/editblock.php:34 -#: ../../mod/pdledit.php:21 ../../mod/editlayout.php:48 -#: ../../mod/editpost.php:13 ../../mod/editwebpage.php:44 -#: ../../mod/editwebpage.php:83 ../../mod/photos.php:68 -#: ../../mod/photos.php:526 ../../mod/sources.php:66 ../../mod/events.php:141 -#: ../../mod/filestorage.php:10 ../../mod/filestorage.php:59 -#: ../../mod/filestorage.php:75 ../../mod/filestorage.php:98 -#: ../../mod/fsuggest.php:78 ../../mod/suggest.php:26 ../../mod/group.php:9 -#: ../../mod/thing.php:249 ../../mod/thing.php:266 ../../mod/thing.php:301 -#: ../../mod/invite.php:13 ../../mod/invite.php:104 ../../mod/item.php:179 -#: ../../mod/item.php:187 ../../mod/item.php:898 ../../mod/layouts.php:27 -#: ../../mod/layouts.php:39 ../../mod/viewconnections.php:22 -#: ../../mod/viewconnections.php:27 ../../mod/viewsrc.php:12 -#: ../../mod/mail.php:108 ../../mod/manage.php:6 ../../mod/menu.php:44 -#: ../../mod/webpages.php:40 ../../mod/message.php:16 -#: ../../mod/new_channel.php:66 ../../mod/new_channel.php:97 -#: ../../mod/notifications.php:66 ../../mod/appman.php:66 ../../index.php:186 -#: ../../index.php:361 -msgid "Permission denied." -msgstr "Доступ запрещен." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:57 +msgid "Errors encountered deleting database table " +msgstr "Возникшие при удалении таблицы базы данных ошибки" -#: ../../include/photos.php:89 -#, php-format -msgid "Image exceeds website size limit of %lu bytes" -msgstr "" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:95 +#: ../../extend/addon/hzaddons/twitter/twitter.php:779 +msgid "Submit Settings" +msgstr "Отправить настройки" -#: ../../include/photos.php:96 -msgid "Image file is empty." -msgstr "файл пуст." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96 +msgid "Drop tables when uninstalling?" +msgstr "Удалить таблицы при деинсталляции?" -#: ../../include/photos.php:123 ../../mod/profile_photo.php:216 -msgid "Unable to process image" -msgstr "Не удается обработать изображение" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96 +msgid "" +"If checked, the Rendezvous database tables will be deleted when the plugin " +"is uninstalled." +msgstr "Если включено, то таблицы базы данных Rendezvous будут удалены при удалении плагина." -#: ../../include/photos.php:186 -msgid "Photo storage failed." -msgstr "Ошибка в банке фотографий" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97 +msgid "Mapbox Access Token" +msgstr "Токен доступа к Mapbox" -#: ../../include/photos.php:317 ../../mod/photos.php:691 -#: ../../mod/photos.php:1193 -msgid "Upload New Photos" -msgstr "Загрузить новые фотографии" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97 +msgid "" +"If you enter a Mapbox access token, it will be used to retrieve map tiles " +"from Mapbox instead of the default OpenStreetMap tile server." +msgstr "Если вы введете токен доступа к Mapbox, он будет использоваться для извлечения фрагментов карты из Mapbox вместо стандартного сервера OpenStreetMap." -#: ../../include/acl_selectors.php:240 -msgid "Visible to everybody" -msgstr "Видно всем" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:162 +msgid "Rendezvous" +msgstr "" -#: ../../include/acl_selectors.php:241 -msgid "Show" -msgstr "Показывать" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:167 +msgid "" +"This identity has been deleted by another member due to inactivity. Please " +"press the \"New identity\" button or refresh the page to register a new " +"identity. You may use the same name." +msgstr "" +"Этот идентификатор был удалён другим участником из-за неактивности. " +"Пожалуйста нажмите кнопку \"Новый идентификатор\" для обновления страницы и " +"получения нового идентификатора. Вы можете использовать то же имя." -#: ../../include/acl_selectors.php:242 -msgid "Don't show" -msgstr "Не показывать" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168 +msgid "Welcome to Rendezvous!" +msgstr "Добро пожаловать в Rendezvous!" -#: ../../include/acl_selectors.php:248 ../../mod/chat.php:209 -#: ../../mod/photos.php:604 ../../mod/photos.php:952 -#: ../../mod/filestorage.php:128 -msgid "Permissions" -msgstr "Разрешения" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:169 +msgid "" +"Enter your name to join this rendezvous. To begin sharing your location with " +"the other members, tap the GPS control. When your location is discovered, a " +"red dot will appear and others will be able to see you on the map." +msgstr "" +"Введите ваше имя для вступления в это Rendezvous. Для того, чтобы делиться вашим " +"положением с другими участниками, нажмите \"GPS control\". Когда ваше местоположение " +"определно, красная точка появится и остальные смогут увидеть вас на карте." + +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:171 +msgid "Let's meet here" +msgstr "Давайте встретимся здесь" + +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:172 +#: ../../Zotlabs/Lib/NativeWikiPage.php:558 +#: ../../Zotlabs/Widget/Wiki_page_history.php:22 +#: ../../Zotlabs/Module/Cdav.php:1170 ../../Zotlabs/Module/Connedit.php:906 +#: ../../Zotlabs/Module/Sharedwithme.php:105 +#: ../../Zotlabs/Module/Admin/Channels.php:159 +#: ../../Zotlabs/Module/Settings/Oauth2.php:87 +#: ../../Zotlabs/Module/Settings/Oauth2.php:115 +#: ../../Zotlabs/Module/Settings/Oauth.php:90 +#: ../../Zotlabs/Module/Settings/Oauth.php:116 +#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Module/Wiki.php:209 +#: ../../Zotlabs/Module/Group.php:125 ../../Zotlabs/Storage/Browser.php:285 +msgid "Name" +msgstr "Имя" -#: ../../include/acl_selectors.php:249 ../../include/ItemObject.php:289 -msgid "Close" -msgstr "Закрыть" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:173 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:659 +#: ../../Zotlabs/Module/Appman.php:143 ../../Zotlabs/Module/Cdav.php:871 +#: ../../Zotlabs/Module/Events.php:473 ../../Zotlabs/Module/Rbmark.php:101 +msgid "Description" +msgstr "Описание" -#: ../../include/activities.php:39 -msgid " and " -msgstr "и" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:174 +msgid "New marker" +msgstr "Новый маркер" -#: ../../include/activities.php:47 -msgid "public profile" -msgstr "Публичный профиль" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:175 +msgid "Edit marker" +msgstr "Редактировать маркер" -#: ../../include/activities.php:52 -#, php-format -msgid "%1$s changed %2$s to “%3$s”" -msgstr "%1$s изменил %2$s на “%3$s”" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:176 +msgid "New identity" +msgstr "Новый идентификатор" -#: ../../include/activities.php:53 -#, php-format -msgid "Visit %1$s's %2$s" -msgstr "Посетить %1$s's %2$s" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:177 +msgid "Delete marker" +msgstr "Удалить маркер" -#: ../../include/activities.php:56 -#, php-format -msgid "%1$s has an updated %2$s, changing %3$s." -msgstr "" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:178 +msgid "Delete member" +msgstr "Удалить участника" -#: ../../include/api.php:1016 -msgid "Public Timeline" -msgstr "Публичная шкала времени" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:179 +msgid "Edit proximity alert" +msgstr "Изменить оповещение о близости" -#: ../../include/attach.php:224 ../../include/attach.php:278 -msgid "Item was not found." -msgstr "Элемент не найден." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180 +msgid "" +"A proximity alert will be issued when this member is within a certain radius " +"of you.

Enter a radius in meters (0 to disable):" +msgstr "Оповещение о близости будет произведено, если этот участник находится на определённом расстоянии от вас.

Введите радиус в метрах (0 для отключения):" -#: ../../include/attach.php:335 -msgid "No source file." -msgstr "Нет исходного файла." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180 +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:185 +msgid "distance" +msgstr "расстояние" -#: ../../include/attach.php:352 -msgid "Cannot locate file to replace" -msgstr "Не удается найти файл, чтобы заменить" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:181 +msgid "Proximity alert distance (meters)" +msgstr "Расстояние для уведомления о близости (метров)" -#: ../../include/attach.php:370 -msgid "Cannot locate file to revise/update" -msgstr "Не удается найти файл для пересмотра / обновления" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:182 +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:184 +msgid "" +"A proximity alert will be issued when you are within a certain radius of the " +"marker location.

Enter a radius in meters (0 to disable):" +msgstr "Оповещение о близости будет произведено, если вы находитесь на определённом расстоянии местоположения маркера.

Введите радиус в метрах (0 для отключения):" -#: ../../include/attach.php:381 -#, php-format -msgid "File exceeds size limit of %d" -msgstr "Файл превышает предельный размер %d" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:183 +msgid "Marker proximity alert" +msgstr "Маркер уведомления о близости" -#: ../../include/attach.php:393 -#, php-format -msgid "You have reached your limit of %1$.0f Mbytes attachment storage." -msgstr "" +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:186 +msgid "Reminder note" +msgstr "Напоминание" -#: ../../include/attach.php:475 -msgid "File upload failed. Possible system limit or action terminated." -msgstr "Загрузка файла не удалась. Возможно система перегружена или попытка прекращена." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:187 +msgid "" +"Enter a note to be displayed when you are within the specified proximity..." +msgstr "Введите сообщение для отображения когда вы находитесь рядом" -#: ../../include/attach.php:487 -msgid "Stored file could not be verified. Upload failed." -msgstr "Файл для сохранения не проверен. Загрузка не удалась." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:199 +msgid "Add new rendezvous" +msgstr "Добавить новое Rendezvous." -#: ../../include/attach.php:528 ../../include/attach.php:545 -msgid "Path not available." -msgstr "Путь недоступен." +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:200 +msgid "" +"Create a new rendezvous and share the access link with those you wish to " +"invite to the group. Those who open the link become members of the " +"rendezvous. They can view other member locations, add markers to the map, or " +"share their own locations with the group." +msgstr "Создайте новое Rendezvous и поделитесь ссылкой доступа с теми, кого вы хотите пригласить в группу. Тот, кто откроет эту ссылку, станет её участником. Участники могут видеть местоположение, добавлять маркеры на карту или делится своим собственным местоположением с группой." + +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:232 +msgid "You have no rendezvous. Press the button above to create a rendezvous!" +msgstr "У вас нет Rendezvous. Нажмите на кнопку ниже чтобы создать его!" + +#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:401 +#: ../../Zotlabs/Module/Setup.php:707 +msgid "Errors encountered creating database tables." +msgstr "При создании базы данных возникли ошибки." -#: ../../include/attach.php:590 -msgid "Empty pathname" -msgstr "" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:146 +msgid "View Larger" +msgstr "Увеличить" -#: ../../include/attach.php:606 -msgid "duplicate filename or path" -msgstr "" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:169 +msgid "Tile Server URL" +msgstr "URL сервера Tile" -#: ../../include/attach.php:630 -msgid "Path not found." -msgstr "Путь не найден." +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:169 +msgid "" +"A list of public tile servers" +msgstr "" +"Список общедоступных серверов" -#: ../../include/attach.php:674 -msgid "mkdir failed." -msgstr "mkdir безуспешно." +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:170 +msgid "Nominatim (reverse geocoding) Server URL" +msgstr "URL сервера Nominatim (обратное геокодирование)" -#: ../../include/attach.php:678 -msgid "database storage failed." +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:170 +msgid "" +"A list of Nominatim servers" msgstr "" +"Список серверов Nominatim" -#: ../../include/bb2diaspora.php:441 ../../include/event.php:11 -msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:171 +msgid "Default zoom" +msgstr "Масштаб по умолчанию" -#: ../../include/bb2diaspora.php:447 ../../include/event.php:20 -msgid "Starts:" -msgstr "Начало:" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:171 +msgid "" +"The default zoom level. (1:world, 18:highest, also depends on tile server)" +msgstr "Уровень размера по умолчанию (1 - весь мир, 18 - максимальный; зависит от сервера)." -#: ../../include/bb2diaspora.php:455 ../../include/event.php:30 -msgid "Finishes:" -msgstr "\t\nКонец:" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:172 +msgid "Include marker on map" +msgstr "Включите маркер на карте" -#: ../../include/bb2diaspora.php:463 ../../include/event.php:40 -#: ../../include/identity.php:726 ../../mod/directory.php:156 -#: ../../mod/dirprofile.php:105 ../../mod/events.php:485 -msgid "Location:" -msgstr "Откуда:" +#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:172 +msgid "Include a marker on the map." +msgstr "Включить маркер на карте" -#: ../../include/nav.php:77 ../../include/nav.php:101 ../../boot.php:1464 -msgid "Logout" -msgstr "Выход" +#: ../../extend/addon/hzaddons/openid/openid.php:49 +msgid "" +"We encountered a problem while logging in with the OpenID you provided. " +"Please check the correct spelling of the ID." +msgstr "Мы столкнулись с проблемой входа с предоставленным вами OpenID. Пожалуйста, проверьте корректность его написания." -#: ../../include/nav.php:77 ../../include/nav.php:101 -msgid "End this session" -msgstr "Закончить эту сессию" +#: ../../extend/addon/hzaddons/openid/openid.php:49 +msgid "The error message was:" +msgstr "Сообщение об ошибке было:" -#: ../../include/nav.php:80 ../../include/nav.php:135 -msgid "Home" -msgstr "Мой канал" +#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:30 +msgid "OpenID protocol error. No ID returned." +msgstr "Ошибка протокола OpenID. Идентификатор не возвращён." -#: ../../include/nav.php:80 -msgid "Your posts and conversations" -msgstr "Ваши сообщения и разговоры" +#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:76 +#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:178 +#: ../../Zotlabs/Zot/Auth.php:264 +#, php-format +msgid "Welcome %s. Remote authentication successful." +msgstr "Добро пожаловать %s. Удаленная аутентификация успешно завершена." -#: ../../include/nav.php:81 -msgid "Your profile page" -msgstr "Страницa вашего профиля" +#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:188 +#: ../../include/auth.php:317 +msgid "Login failed." +msgstr "Не удалось войти." -#: ../../include/nav.php:83 -msgid "Edit Profiles" -msgstr "Редактирование профилей" +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:52 +msgid "First Name" +msgstr "Имя" -#: ../../include/nav.php:83 -msgid "Manage/Edit profiles" -msgstr "Управление / Редактирование профилей" +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:53 +msgid "Last Name" +msgstr "Фамилия" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:54 +#: ../../extend/addon/hzaddons/redred/redred.php:111 +msgid "Nickname" +msgstr "Псевдоним" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:55 +msgid "Full Name" +msgstr "Полное имя" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:56 +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:57 +#: ../../extend/addon/hzaddons/rtof/rtof.php:93 +#: ../../extend/addon/hzaddons/redred/redred.php:107 +#: ../../include/network.php:1769 ../../Zotlabs/Module/Cdav.php:1174 +#: ../../Zotlabs/Module/Connedit.php:910 +#: ../../Zotlabs/Module/Admin/Accounts.php:171 +#: ../../Zotlabs/Module/Admin/Accounts.php:183 +#: ../../Zotlabs/Module/Profiles.php:787 +msgid "Email" +msgstr "Электронная почта" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:58 +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:59 +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:60 +#: ../../Zotlabs/Lib/Apps.php:326 +msgid "Profile Photo" +msgstr "Фотография профиля" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:61 +msgid "Profile Photo 16px" +msgstr "Фотография профиля 16px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:62 +msgid "Profile Photo 32px" +msgstr "Фотография профиля 32px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:63 +msgid "Profile Photo 48px" +msgstr "Фотография профиля 48px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:64 +msgid "Profile Photo 64px" +msgstr "Фотография профиля 64px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:65 +msgid "Profile Photo 80px" +msgstr "Фотография профиля 80px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:66 +msgid "Profile Photo 128px" +msgstr "Фотография профиля 128px" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:67 +msgid "Timezone" +msgstr "Часовой пояс" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:68 +#: ../../Zotlabs/Module/Profiles.php:767 +msgid "Homepage URL" +msgstr "URL домашней страницы" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:69 +#: ../../Zotlabs/Lib/Apps.php:324 +msgid "Language" +msgstr "Язык" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:70 +msgid "Birth Year" +msgstr "Год рождения" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:71 +msgid "Birth Month" +msgstr "Месяц рождения" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:72 +msgid "Birth Day" +msgstr "День рождения" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:73 +msgid "Birthdate" +msgstr "Дата рождения" + +#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:74 +#: ../../Zotlabs/Module/Profiles.php:486 +msgid "Gender" +msgstr "Гендер" -#: ../../include/nav.php:84 -msgid "Your photos" -msgstr "Ваши фотографии" +#: ../../extend/addon/hzaddons/openid/Mod_Id.php:85 +#: ../../include/channel.php:1480 ../../include/selectors.php:49 +#: ../../include/selectors.php:66 +msgid "Male" +msgstr "Мужчина" -#: ../../include/nav.php:85 -msgid "Your files" -msgstr "Ваши файлы" +#: ../../extend/addon/hzaddons/openid/Mod_Id.php:87 +#: ../../include/channel.php:1478 ../../include/selectors.php:49 +#: ../../include/selectors.php:66 +msgid "Female" +msgstr "Женщина" -#: ../../include/nav.php:90 ../../include/apps.php:136 -msgid "Chat" -msgstr "Чат" +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:51 +msgid "Your Webbie:" +msgstr "Ваш Webbie:" -#: ../../include/nav.php:90 -msgid "Your chatrooms" -msgstr "Ваши чаты" +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:54 +msgid "Fontsize (px):" +msgstr "Размер шрифта (px):" -#: ../../include/nav.php:93 -msgid "Your bookmarks" -msgstr "Ваши закладки" +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:68 +msgid "Link:" +msgstr "Ссылка:" -#: ../../include/nav.php:95 -msgid "Your webpages" -msgstr "Ваши веб-страницы" +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:70 +msgid "Like us on Hubzilla" +msgstr "Нравится на Hubzilla" -#: ../../include/nav.php:99 ../../include/apps.php:121 ../../boot.php:1465 -msgid "Login" -msgstr "Войти" +#: ../../extend/addon/hzaddons/likebanner/likebanner.php:72 +msgid "Embed:" +msgstr "Встроить:" -#: ../../include/nav.php:99 -msgid "Sign in" -msgstr "Войти" +#: ../../extend/addon/hzaddons/sendzid/sendzid.php:25 +msgid "Extended Identity Sharing" +msgstr "Расширенный обмен идентификацией" -#: ../../include/nav.php:116 -#, php-format -msgid "%s - click to logout" -msgstr "%s - нажмите чтобы выйти" +#: ../../extend/addon/hzaddons/sendzid/sendzid.php:26 +msgid "" +"Share your identity with all websites on the internet. When disabled, " +"identity is only shared with $Projectname sites." +msgstr "Поделиться вашим идентификатором на всех веб-сайтах в Интернет. Если выключено, то идентификатор доступен только для сайтов $Projectname." -#: ../../include/nav.php:121 -msgid "Click to authenticate to your home hub" -msgstr "" +#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:70 +msgid "An account has been created for you." +msgstr "Учётная запись, которая была для вас создана." -#: ../../include/nav.php:135 -msgid "Home Page" -msgstr "Моя страница" +#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:77 +msgid "Authentication successful but rejected: account creation is disabled." +msgstr "Аутентификация выполнена успешно, но отклонена: создание учетной записи отключено." -#: ../../include/nav.php:139 ../../mod/register.php:206 ../../boot.php:1441 -msgid "Register" -msgstr "Регистрация" +#: ../../extend/addon/hzaddons/twitter/twitter.php:99 +msgid "Post to Twitter" +msgstr "Опубликовать в Twitter" -#: ../../include/nav.php:139 -msgid "Create an account" -msgstr "Создать аккаунт" +#: ../../extend/addon/hzaddons/twitter/twitter.php:155 +msgid "Twitter settings updated." +msgstr "Настройки Twitter обновлены" -#: ../../include/nav.php:144 ../../include/apps.php:132 ../../mod/help.php:60 -#: ../../mod/help.php:65 -msgid "Help" -msgstr "Помощь" +#: ../../extend/addon/hzaddons/twitter/twitter.php:184 +msgid "" +"No consumer key pair for Twitter found. Please contact your site " +"administrator." +msgstr "Не найдено пары ключей для Twitter. Пожалуйста, свяжитесь с администратором сайта." -#: ../../include/nav.php:144 -msgid "Help and documentation" -msgstr "Справочная информация и документация" +#: ../../extend/addon/hzaddons/twitter/twitter.php:206 +msgid "" +"At this Hubzilla instance the Twitter plugin was enabled but you have not " +"yet connected your account to your Twitter account. To do so click the " +"button below to get a PIN from Twitter which you have to copy into the input " +"box below and submit the form. Only your public posts will " +"be posted to Twitter." +msgstr "В этой установке Hubzilla плагин Twitter был включён, однако пока он не подключён к вашему аккаунту в Twitter. Для этого нажмите на кнопку ниже для получения PIN-кода от Twitter который нужно скопировать в поле ввода и отправить форму. Только ваши общедоступные публикации будут опубликованы в Twitter." + +#: ../../extend/addon/hzaddons/twitter/twitter.php:208 +msgid "Log in with Twitter" +msgstr "Войти в Twitter" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:211 +msgid "Copy the PIN from Twitter here" +msgstr "Скопируйте PIN-код из Twitter здесь" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:233 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:401 +msgid "Currently connected to: " +msgstr "В настоящее время подключён к:" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:238 +msgid "" +"Note: Due your privacy settings (Hide your profile " +"details from unknown viewers?) the link potentially included in public " +"postings relayed to Twitter will lead the visitor to a blank page informing " +"the visitor that the access to your profile has been restricted." +msgstr "Замечание: Из-за настроек конфиденциальности (скрыть данные своего профиля от неизвестных зрителей?) cсылка, потенциально включенная в общедоступные публикации, переданные в Twitter, приведет посетителя к пустой странице, информирующей его о том, что доступ к вашему профилю был ограничен." -#: ../../include/nav.php:147 ../../include/widgets.php:79 -#: ../../mod/apps.php:33 -msgid "Apps" -msgstr "Приложения" +#: ../../extend/addon/hzaddons/twitter/twitter.php:243 +msgid "Allow posting to Twitter" +msgstr "Разрешить публиковать в Twitter" -#: ../../include/nav.php:147 -msgid "Applications, utilities, links, games" -msgstr "" +#: ../../extend/addon/hzaddons/twitter/twitter.php:243 +msgid "" +"If enabled your public postings can be posted to the associated Twitter " +"account" +msgstr "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи Twitter" -#: ../../include/nav.php:149 ../../include/text.php:813 -#: ../../include/text.php:827 ../../include/apps.php:137 -#: ../../mod/search.php:29 -msgid "Search" -msgstr "Поиск" +#: ../../extend/addon/hzaddons/twitter/twitter.php:247 +msgid "Twitter post length" +msgstr "Длина публикации Twitter" -#: ../../include/nav.php:149 -msgid "Search site content" -msgstr "Поиск по содержанию сайту" +#: ../../extend/addon/hzaddons/twitter/twitter.php:247 +msgid "Maximum tweet length" +msgstr "Максимальная длина твита" -#: ../../include/nav.php:152 ../../include/apps.php:131 -#: ../../mod/directory.php:210 -msgid "Directory" -msgstr "Каталог" +#: ../../extend/addon/hzaddons/twitter/twitter.php:252 +msgid "Send public postings to Twitter by default" +msgstr "Отправлять общедоступные публикации в Twitter по умолчанию" -#: ../../include/nav.php:152 -msgid "Channel Locator" -msgstr "Локатор каналов" +#: ../../extend/addon/hzaddons/twitter/twitter.php:252 +msgid "" +"If enabled your public postings will be posted to the associated Twitter " +"account by default" +msgstr "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи Twitter по умолчанию" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:261 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:424 +msgid "Clear OAuth configuration" +msgstr "Очистить конфигурацию OAuth" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:270 +msgid "Twitter Post Settings" +msgstr "Настройки публикаций в Twitter" + +#: ../../extend/addon/hzaddons/twitter/twitter.php:781 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:894 +#: ../../Zotlabs/Module/Settings/Oauth.php:91 +#: ../../Zotlabs/Module/Settings/Oauth.php:117 +msgid "Consumer Key" +msgstr "Ключ клиента" -#: ../../include/nav.php:163 ../../include/apps.php:123 -msgid "Matrix" -msgstr "Матрица" +#: ../../extend/addon/hzaddons/twitter/twitter.php:782 +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:893 +#: ../../Zotlabs/Module/Settings/Oauth2.php:88 +#: ../../Zotlabs/Module/Settings/Oauth2.php:116 +#: ../../Zotlabs/Module/Settings/Oauth.php:92 +#: ../../Zotlabs/Module/Settings/Oauth.php:118 +msgid "Consumer Secret" +msgstr "Код клиента" -#: ../../include/nav.php:163 -msgid "Your matrix" -msgstr "Собственная матрица" +#: ../../extend/addon/hzaddons/adultphotoflag/adultphotoflag.php:24 +msgid "Flag Adult Photos" +msgstr "Пометка фотографий для взрослых" -#: ../../include/nav.php:164 -msgid "Mark all matrix notifications seen" -msgstr "Пометить все оповещения матрицы как прочитанное" +#: ../../extend/addon/hzaddons/adultphotoflag/adultphotoflag.php:25 +msgid "" +"Provide photo edit option to hide inappropriate photos from default album " +"view" +msgstr "Предоставьте возможность редактирования фотографий, чтобы скрыть неприемлемые фотографии из альбома по умолчанию" + +#: ../../extend/addon/hzaddons/pubcrawl/as.php:961 +#: ../../include/conversation.php:1165 ../../Zotlabs/Lib/Apps.php:819 +#: ../../Zotlabs/Lib/Apps.php:898 ../../Zotlabs/Widget/Album.php:84 +#: ../../Zotlabs/Widget/Portfolio.php:95 ../../Zotlabs/Module/Cdav.php:786 +#: ../../Zotlabs/Module/Cdav.php:787 ../../Zotlabs/Module/Cdav.php:794 +#: ../../Zotlabs/Module/Photos.php:822 ../../Zotlabs/Module/Photos.php:1278 +#: ../../Zotlabs/Module/Embedphotos.php:146 +#: ../../Zotlabs/Storage/Browser.php:164 +msgid "Unknown" +msgstr "Неизвестный" -#: ../../include/nav.php:166 ../../include/apps.php:127 -msgid "Channel Home" -msgstr "Главная канала" +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1219 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1374 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1553 +#: ../../include/network.php:1768 +msgid "ActivityPub" +msgstr "" -#: ../../include/nav.php:166 -msgid "Channel home" -msgstr "Главная канала" +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1509 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1530 +#: ../../extend/addon/hzaddons/redphotos/redphotohelper.php:71 +#: ../../include/conversation.php:116 ../../include/text.php:2022 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Tagger.php:69 +#: ../../Zotlabs/Module/Like.php:384 +msgid "photo" +msgstr "фото" -#: ../../include/nav.php:167 -msgid "Mark all channel notifications seen" -msgstr "Пометить все оповещения канала как прочитанное" +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1509 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1530 +#: ../../include/conversation.php:144 ../../include/text.php:2028 +#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Like.php:384 +msgid "status" +msgstr "статус" -#: ../../include/nav.php:170 ../../mod/connections.php:386 -msgid "Connections" -msgstr "Контакты" +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1544 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1559 +#: ../../include/conversation.php:160 ../../Zotlabs/Module/Like.php:438 +#, php-format +msgid "%1$s likes %2$s's %3$s" +msgstr "%1$s нравится %2$s %3$s" -#: ../../include/nav.php:173 -msgid "Notices" -msgstr "Оповещения" +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1546 +#: ../../include/conversation.php:163 ../../Zotlabs/Module/Like.php:440 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" +msgstr "%1$s не нравится %2$s %3$s" -#: ../../include/nav.php:173 -msgid "Notifications" -msgstr "Оповещения" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1136 +msgid "ActivityPub Protocol Settings updated." +msgstr "Настройки протокола ActivityPub обновлены." -#: ../../include/nav.php:174 -msgid "See all notifications" -msgstr "Просмотреть все оповещения" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1145 +msgid "" +"The ActivityPub protocol does not support location independence. Connections " +"you make within that network may be unreachable from alternate channel " +"locations." +msgstr "Протокол ActivityPub не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала. " -#: ../../include/nav.php:175 ../../mod/notifications.php:99 -msgid "Mark all system notifications seen" -msgstr "Пометить все оповещения как прочитанное" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1148 +msgid "Enable the ActivityPub protocol for this channel" +msgstr "Включить протокол ActivityPub для этого канала" -#: ../../include/nav.php:177 ../../include/apps.php:133 -msgid "Mail" -msgstr "Переписка" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1151 +msgid "Deliver to ActivityPub recipients in privacy groups" +msgstr "Доставить получателям ActivityPub в группах безопасности" -#: ../../include/nav.php:177 -msgid "Private mail" -msgstr "Ваша личная переписка" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1151 +msgid "" +"May result in a large number of mentions and expose all the members of your " +"privacy group" +msgstr "" +"Может привести к большому количеству упоминаний и раскрытию участников " +"группы безопасности" -#: ../../include/nav.php:178 -msgid "See all private messages" -msgstr "Просмотреть все личные сообщения" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1155 +msgid "Send multi-media HTML articles" +msgstr "Отправить HTML статьи с мультимедиа" -#: ../../include/nav.php:179 -msgid "Mark all private messages seen" -msgstr "Пометить все личные сообщения как прочитанное" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1155 +msgid "Not supported by some microblog services such as Mastodon" +msgstr "Не поддерживается некоторыми микроблогами, например Mastodon" -#: ../../include/nav.php:180 -msgid "Inbox" -msgstr "Входящие" +#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1159 +msgid "ActivityPub Protocol Settings" +msgstr "Настройки протокола ActivityPub" -#: ../../include/nav.php:181 -msgid "Outbox" -msgstr "Исходящие" +#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:16 +msgid "No username found in import file." +msgstr "Имя пользователя не найдено в файле для импорта." -#: ../../include/nav.php:182 ../../include/widgets.php:536 -msgid "New Message" -msgstr "Новое личное сообщение" +#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:41 +#: ../../include/import.php:72 +msgid "Unable to create a unique channel address. Import failed." +msgstr "Не удалось создать уникальный адрес канала. Импорт не завершен." -#: ../../include/nav.php:185 ../../include/apps.php:130 -#: ../../mod/events.php:377 -msgid "Events" -msgstr "Мероприятия" +#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:139 +#: ../../Zotlabs/Module/Import.php:513 +msgid "Import completed." +msgstr "Импорт завершен." -#: ../../include/nav.php:185 -msgid "Event Calendar" -msgstr "Календарь мероприятий" +#: ../../extend/addon/hzaddons/diaspora/util.php:308 +#: ../../extend/addon/hzaddons/diaspora/util.php:321 +#: ../../extend/addon/hzaddons/diaspora/p.php:48 +#: ../../Zotlabs/Lib/Enotify.php:61 +msgid "$projectname" +msgstr "" -#: ../../include/nav.php:186 -msgid "See all events" -msgstr "Показать все мероприятия" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:786 +msgid "Diaspora Protocol Settings updated." +msgstr "Настройки протокола Diaspora обновлены." -#: ../../include/nav.php:187 -msgid "Mark all events seen" -msgstr "Пометить все мероприятия как прочитанное" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:805 +msgid "" +"The Diaspora protocol does not support location independence. Connections " +"you make within that network may be unreachable from alternate channel " +"locations." +msgstr "Прокол Diaspora не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала." -#: ../../include/nav.php:189 ../../include/apps.php:122 -msgid "Channel Select" -msgstr "Выбор каналов" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:808 +msgid "Enable the Diaspora protocol for this channel" +msgstr "Включить протокол Diaspora для этого канала" -#: ../../include/nav.php:189 -msgid "Manage Your Channels" -msgstr "Управление каналов" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:812 +msgid "Allow any Diaspora member to comment on your public posts" +msgstr "Разрешить любому участнику Diaspora комментировать ваши общедоступные публикации" -#: ../../include/nav.php:191 ../../include/apps.php:124 -#: ../../include/widgets.php:514 ../../mod/admin.php:978 -#: ../../mod/admin.php:1183 -msgid "Settings" -msgstr "Настройки" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:816 +msgid "Prevent your hashtags from being redirected to other sites" +msgstr "Предотвратить перенаправление тегов на другие сайты" -#: ../../include/nav.php:191 -msgid "Account/Channel Settings" -msgstr "Настройки аккаунта/канала" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:820 +msgid "Sign and forward posts and comments with no existing Diaspora signature" +msgstr "Подписывать и отправлять публикации и комментарии с несуществующей подписью Diaspora" -#: ../../include/nav.php:199 ../../mod/admin.php:117 -msgid "Admin" -msgstr "Администрация" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:825 +msgid "Followed hashtags (comma separated, do not include the #)" +msgstr "Отслеживаемые теги (через запятую, исключая #)" -#: ../../include/nav.php:199 -msgid "Site Setup and Configuration" -msgstr "Установка и конфигурация сайта" +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:830 +msgid "Diaspora Protocol Settings" +msgstr "Настройки протокола Diaspora" -#: ../../include/nav.php:224 -msgid "Nothing new here" -msgstr "Ничего нового здесь" +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2102 +#: ../../Zotlabs/Module/Like.php:448 +#, php-format +msgid "%1$s is attending %2$s's %3$s" +msgstr "%1$s посещает %2$s%3$s" -#: ../../include/nav.php:228 -msgid "Please wait..." -msgstr "Подождите пожалуйста ..." +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2104 +#: ../../Zotlabs/Module/Like.php:450 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "%1$s не посещает %2$s%3$s" -#: ../../include/bookmarks.php:42 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2106 +#: ../../Zotlabs/Module/Like.php:452 #, php-format -msgid "%1$s's bookmarks" -msgstr "Закладки пользователя %1$s" +msgid "%1$s may attend %2$s's %3$s" +msgstr "%1$s может посетить %2$s%3$s" -#: ../../include/chat.php:10 -msgid "Missing room name" -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:50 +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:128 +msgid "System defaults:" +msgstr "Системные по умолчанию:" -#: ../../include/chat.php:19 -msgid "Duplicate room name" -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:54 +msgid "Preferred Clipart IDs" +msgstr "Предпочитаемый Clipart ID" -#: ../../include/chat.php:68 ../../include/chat.php:76 -msgid "Invalid room specifier." -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:54 +msgid "List of preferred clipart ids. These will be shown first." +msgstr "Список предпочитаемых Clipart ID. Эти будут показаны первыми." -#: ../../include/chat.php:105 -msgid "Room not found." -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55 +msgid "Default Search Term" +msgstr "Условие поиска по умолчанию" -#: ../../include/chat.php:126 -msgid "Room is full" -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55 +msgid "The default search term. These will be shown second." +msgstr "Условие поиска по умолчанию. Показываются во вторую очередь." -#: ../../include/taxonomy.php:210 -msgid "Tags" -msgstr "Тэги" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56 +msgid "Return After" +msgstr "Вернуться после" -#: ../../include/taxonomy.php:227 -msgid "Keywords" -msgstr "Ключевые слова" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56 +msgid "Page to load after image selection." +msgstr "Страница для загрузки после выбора изображения." -#: ../../include/taxonomy.php:252 -msgid "have" -msgstr "иметь" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57 +#: ../../include/conversation.php:1037 ../../include/nav.php:108 +#: ../../Zotlabs/Lib/Apps.php:309 ../../Zotlabs/Module/Connedit.php:594 +msgid "View Profile" +msgstr "Просмотреть профиль" -#: ../../include/taxonomy.php:252 -msgid "has" -msgstr "есть" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:58 +#: ../../include/nav.php:113 ../../include/channel.php:1300 +msgid "Edit Profile" +msgstr "Редактировать профиль" -#: ../../include/taxonomy.php:253 -msgid "want" -msgstr "хотеть" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:59 +msgid "Profile List" +msgstr "Список профилей" -#: ../../include/taxonomy.php:253 -msgid "wants" -msgstr "хочет" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:61 +msgid "Order of Preferred" +msgstr "Порядок предпочтения" -#: ../../include/taxonomy.php:254 ../../include/ItemObject.php:208 -msgid "like" -msgstr "нравится" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:61 +msgid "Sort order of preferred clipart ids." +msgstr "Порядок сортировки предпочитаемых Clipart ID. " -#: ../../include/taxonomy.php:254 -msgid "likes" -msgstr "нравится" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62 +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68 +msgid "Newest first" +msgstr "Новое первым" -#: ../../include/taxonomy.php:255 ../../include/ItemObject.php:209 -msgid "dislike" -msgstr "не-нравится" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:65 +msgid "As entered" +msgstr "По мере ввода" -#: ../../include/taxonomy.php:255 -msgid "dislikes" -msgstr "не-нравится" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:67 +msgid "Order of other" +msgstr "Порядок других" -#: ../../include/taxonomy.php:338 ../../include/identity.php:968 -#: ../../include/ItemObject.php:134 -msgctxt "noun" -msgid "Like" -msgid_plural "Likes" -msgstr[0] "нравится" -msgstr[1] "нравится" -msgstr[2] "нравится" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:67 +msgid "Sort order of other clipart ids." +msgstr "Порядок сортировки остальных Clipart ID." -#: ../../include/comanche.php:35 ../../view/theme/apw/php/config.php:185 -#: ../../view/theme/redbasic/php/config.php:84 -msgid "Default" -msgstr "По умолчанию" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:69 +msgid "Most downloaded first" +msgstr "Самое загружаемое первым" -#: ../../include/contact_selectors.php:30 -msgid "Unknown | Not categorised" -msgstr "Неизвестные | Без категории" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:70 +msgid "Most liked first" +msgstr "Самое нравящееся первым" -#: ../../include/contact_selectors.php:31 -msgid "Block immediately" -msgstr "Немедленно заблокировать" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:72 +msgid "Preferred IDs Message" +msgstr "Сообщение от предпочитаемых ID" -#: ../../include/contact_selectors.php:32 -msgid "Shady, spammer, self-marketer" -msgstr "" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:72 +msgid "Message to display above preferred results." +msgstr "Отображаемое сообщение над предпочитаемыми результатами." -#: ../../include/contact_selectors.php:33 -msgid "Known to me, but no opinion" -msgstr "Известныo мне, но нет своего мнения" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:78 +msgid "Uploaded by: " +msgstr "Загружено:" -#: ../../include/contact_selectors.php:34 -msgid "OK, probably harmless" -msgstr "OK, наверное безвредно" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:78 +msgid "Drawn by: " +msgstr "Нарисовано:" -#: ../../include/contact_selectors.php:35 -msgid "Reputable, has my trust" -msgstr "Авторитетно, имеет мое доверие" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:182 +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:194 +msgid "Use this image" +msgstr "Использовать это изображение" -#: ../../include/contact_selectors.php:54 -msgid "Frequently" -msgstr "Часто" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:192 +msgid "Or select from a free OpenClipart.org image:" +msgstr "Или выберите из бесплатных изображений на OpenClipart.org" -#: ../../include/contact_selectors.php:55 -msgid "Hourly" -msgstr "Ежечасно" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:195 +msgid "Search Term" +msgstr "Условие поиска" -#: ../../include/contact_selectors.php:56 -msgid "Twice daily" -msgstr "Два раза в день" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:232 +msgid "Unknown error. Please try again later." +msgstr "Неизвестная ошибка. Пожалуйста, повторите попытку позже." -#: ../../include/contact_selectors.php:57 -msgid "Daily" -msgstr "Ежедневно" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:298 +#: ../../Zotlabs/Module/Profile_photo.php:218 +msgid "" +"Shift-reload the page or clear browser cache if the new photo does not " +"display immediately." +msgstr "" +"Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера" -#: ../../include/contact_selectors.php:58 -msgid "Weekly" -msgstr "Еженедельно" +#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:308 +msgid "Profile photo updated successfully." +msgstr "Фотография профиля обновлена успешно." -#: ../../include/contact_selectors.php:59 -msgid "Monthly" -msgstr "Ежемесячно" +#: ../../extend/addon/hzaddons/tour/tour.php:76 +msgid "Edit your profile and change settings." +msgstr "Отредактировать ваш профиль и изменить настройки." -#: ../../include/contact_selectors.php:74 -msgid "Friendica" -msgstr "Friendica" +#: ../../extend/addon/hzaddons/tour/tour.php:77 +msgid "Click here to see activity from your connections." +msgstr "Нажмите сюда для отображения активности ваши контактов." -#: ../../include/contact_selectors.php:75 -msgid "OStatus" -msgstr "OStatus" +#: ../../extend/addon/hzaddons/tour/tour.php:78 +msgid "Click here to see your channel home." +msgstr "Нажмите сюда чтобы увидеть главную страницу вашего канала." -#: ../../include/contact_selectors.php:76 -msgid "RSS/Atom" -msgstr "RSS/Atom" +#: ../../extend/addon/hzaddons/tour/tour.php:79 +msgid "You can access your private messages from here." +msgstr "Вы можете получить доступ с личной переписке здесь." -#: ../../include/contact_selectors.php:77 ../../mod/admin.php:754 -#: ../../mod/admin.php:763 ../../boot.php:1467 -msgid "Email" -msgstr "E-mail" +#: ../../extend/addon/hzaddons/tour/tour.php:80 +msgid "Create new events here." +msgstr "Создать новое событие здесь." -#: ../../include/contact_selectors.php:78 -msgid "Diaspora" -msgstr "Diaspora" +#: ../../extend/addon/hzaddons/tour/tour.php:81 +msgid "" +"You can accept new connections and change permissions for existing ones " +"here. You can also e.g. create groups of contacts." +msgstr "Вы можете подключать новые контакты и менять разрешения для существующих здесь. Также вы можете создавать их группы." -#: ../../include/contact_selectors.php:79 -msgid "Facebook" -msgstr "Facebook" +#: ../../extend/addon/hzaddons/tour/tour.php:82 +msgid "System notifications will arrive here" +msgstr "Системные оповещения будут показываться здесь" -#: ../../include/contact_selectors.php:80 -msgid "Zot!" -msgstr "Zot!" +#: ../../extend/addon/hzaddons/tour/tour.php:83 +msgid "Search for content and users" +msgstr "Поиск пользователей и содержимого" -#: ../../include/contact_selectors.php:81 -msgid "LinkedIn" -msgstr "LinkedIn" +#: ../../extend/addon/hzaddons/tour/tour.php:84 +msgid "Browse for new contacts" +msgstr "Поиск новых контактов" -#: ../../include/contact_selectors.php:82 -msgid "XMPP/IM" -msgstr "XMPP/IM" +#: ../../extend/addon/hzaddons/tour/tour.php:85 +msgid "Launch installed apps" +msgstr "Запустить установленные приложения" -#: ../../include/contact_selectors.php:83 -msgid "MySpace" -msgstr "MySpace" +#: ../../extend/addon/hzaddons/tour/tour.php:86 +msgid "Looking for help? Click here." +msgstr "Нужна помощь? Нажмите сюда." -#: ../../include/contact_widgets.php:14 -#, php-format -msgid "%d invitation available" -msgid_plural "%d invitations available" -msgstr[0] "имеется %d приглашение" -msgstr[1] "имеются %d приглашения" -msgstr[2] "имеется %d приглашений" +#: ../../extend/addon/hzaddons/tour/tour.php:87 +msgid "" +"New events have occurred in your network. Click here to see what has " +"happened!" +msgstr "Новые события произошли в вашей сети. Нажмите здесь для того, чтобы знать что случилось!" -#: ../../include/contact_widgets.php:19 ../../mod/admin.php:446 -msgid "Advanced" -msgstr "Дополнительно" +#: ../../extend/addon/hzaddons/tour/tour.php:88 +msgid "You have received a new private message. Click here to see from who!" +msgstr "Вы получили новое личное сообщение. Нажмите чтобы увидеть от кого!" -#: ../../include/contact_widgets.php:22 -msgid "Find Channels" -msgstr "Поиск контактов" +#: ../../extend/addon/hzaddons/tour/tour.php:89 +msgid "There are events this week. Click here too see which!" +msgstr "На этой неделе есть события. Нажмите здесь чтобы увидеть какие!" -#: ../../include/contact_widgets.php:23 -msgid "Enter name or interest" -msgstr "Впишите имя или интерес" +#: ../../extend/addon/hzaddons/tour/tour.php:90 +msgid "You have received a new introduction. Click here to see who!" +msgstr "Вы были представлены. Нажмите чтобы увидеть кому!" -#: ../../include/contact_widgets.php:24 -msgid "Connect/Follow" -msgstr "Подключить/следовать" +#: ../../extend/addon/hzaddons/tour/tour.php:91 +msgid "" +"There is a new system notification. Click here to see what has happened!" +msgstr "Это новое системное уведомление. Нажмите чтобы посмотреть что случилось!" -#: ../../include/contact_widgets.php:25 -msgid "Examples: Robert Morgenstein, Fishing" -msgstr "Примеры: Владимир Ильич, Революционер" +#: ../../extend/addon/hzaddons/tour/tour.php:94 +msgid "Click here to share text, images, videos and sound." +msgstr "Нажмите сюда чтобы поделиться текстом, изображениями, видео или треком." -#: ../../include/contact_widgets.php:26 ../../mod/connections.php:392 -#: ../../mod/directory.php:206 ../../mod/directory.php:211 -msgid "Find" -msgstr "Поиск" +#: ../../extend/addon/hzaddons/tour/tour.php:95 +msgid "You can write an optional title for your update (good for long posts)." +msgstr "Вы можете написать необязательный заголовок для вашей публикации (желательно для больших постов)." -#: ../../include/contact_widgets.php:27 ../../mod/suggest.php:59 -msgid "Channel Suggestions" -msgstr "Рекомендации каналов" +#: ../../extend/addon/hzaddons/tour/tour.php:96 +msgid "Entering some categories here makes it easier to find your post later." +msgstr "Введите категории здесь чтобы было проще найти вашу публикацию позднее." -#: ../../include/contact_widgets.php:29 -msgid "Random Profile" -msgstr "Случайные" +#: ../../extend/addon/hzaddons/tour/tour.php:97 +msgid "Share photos, links, location, etc." +msgstr "Поделиться фотографией, ссылками, местоположение и т.п." -#: ../../include/contact_widgets.php:30 -msgid "Invite Friends" -msgstr "Пригласить друзей" +#: ../../extend/addon/hzaddons/tour/tour.php:98 +msgid "" +"Only want to share content for a while? Make it expire at a certain date." +msgstr "Хотите только поделиться временным содержимым? Установите срок его действия." -#: ../../include/contact_widgets.php:32 -msgid "Exammple: name=fred and country=iceland" -msgstr "" +#: ../../extend/addon/hzaddons/tour/tour.php:99 +msgid "You can password protect content." +msgstr "Вы можете защитить содержимое паролем." -#: ../../include/contact_widgets.php:33 -msgid "Advanced Find" -msgstr "Расширенный поиск" +#: ../../extend/addon/hzaddons/tour/tour.php:100 +msgid "Choose who you share with." +msgstr "Выбрать с кем поделиться." -#: ../../include/contact_widgets.php:58 ../../include/features.php:66 -#: ../../include/widgets.php:296 -msgid "Saved Folders" -msgstr "Запомненные папки" +#: ../../extend/addon/hzaddons/tour/tour.php:102 +msgid "Click here when you are done." +msgstr "Нажмите здесь когда закончите." -#: ../../include/contact_widgets.php:61 ../../include/contact_widgets.php:95 -#: ../../include/widgets.php:299 -msgid "Everything" -msgstr "Все" +#: ../../extend/addon/hzaddons/tour/tour.php:105 +msgid "Adjust from which channels posts should be displayed." +msgstr "Настройте из каких каналов должны отображаться публикации." -#: ../../include/contact_widgets.php:92 ../../include/widgets.php:29 -msgid "Categories" -msgstr "Категории" +#: ../../extend/addon/hzaddons/tour/tour.php:106 +msgid "Only show posts from channels in the specified privacy group." +msgstr "Показывать только публикации из определённой группы безопасности." -#: ../../include/contact_widgets.php:125 -#, php-format -msgid "%d connection in common" -msgid_plural "%d connections in common" -msgstr[0] "%d совместный контакт" -msgstr[1] "%d совместных контакта" -msgstr[2] "%d совместных контактов" +#: ../../extend/addon/hzaddons/tour/tour.php:110 +msgid "" +"Easily find posts containing tags (keywords preceded by the \"#\" symbol)." +msgstr "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")." -#: ../../include/contact_widgets.php:130 -msgid "show more" -msgstr "показать все" +#: ../../extend/addon/hzaddons/tour/tour.php:111 +msgid "Easily find posts in given category." +msgstr "Лёгкий поиск публикаций в данной категории." -#: ../../include/event.php:326 -msgid "This event has been added to your calendar." -msgstr "Это событие было добавлено в календарь." +#: ../../extend/addon/hzaddons/tour/tour.php:112 +msgid "Easily find posts by date." +msgstr "Лёгкий поиск публикаций по дате." -#: ../../include/datetime.php:43 ../../include/datetime.php:45 -msgid "Miscellaneous" -msgstr "Прочее" +#: ../../extend/addon/hzaddons/tour/tour.php:113 +msgid "" +"Suggested users who have volounteered to be shown as suggestions, and who we " +"think you might find interesting." +msgstr "Рекомендуемые пользователи, которые были представлены в качестве предложений, и которые, по нашему мнению, могут оказаться интересными." -#: ../../include/datetime.php:152 ../../include/datetime.php:284 -msgid "year" -msgstr "год" +#: ../../extend/addon/hzaddons/tour/tour.php:114 +msgid "Here you see channels you have connected to." +msgstr "Здесь вы видите каналы, к которым вы подключились." -#: ../../include/datetime.php:157 ../../include/datetime.php:285 -msgid "month" -msgstr "месяц" +#: ../../extend/addon/hzaddons/tour/tour.php:115 +msgid "Save your search so you can repeat it at a later date." +msgstr "Сохраните ваш поиск с тем, чтобы повторить его позже." -#: ../../include/datetime.php:162 ../../include/datetime.php:287 -msgid "day" -msgstr "день" +#: ../../extend/addon/hzaddons/tour/tour.php:118 +msgid "" +"If you see this icon you can be sure that the sender is who it say it is. It " +"is normal that it is not always possible to verify the sender, so the icon " +"will be missing sometimes. There is usually no need to worry about that." +msgstr "Если вы видите этот значок, вы можете быть уверены, что отправитель - это тот, кто это говорит. Это нормально, что не всегда можно проверить отправителя, поэтому значок иногда будет отсутствовать. Обычно об этом не нужно беспокоиться." -#: ../../include/datetime.php:275 -msgid "never" -msgstr "никогда" +#: ../../extend/addon/hzaddons/tour/tour.php:119 +msgid "" +"Danger! It seems someone tried to forge a message! This message is not " +"necessarily from who it says it is from!" +msgstr "Опасность! Кажется, кто-то пытался подделать сообщение! Это сообщение не обязательно от того, от кого оно значится!" -#: ../../include/datetime.php:281 -msgid "less than a second ago" -msgstr "менее чем одну секунду назад" +#: ../../extend/addon/hzaddons/tour/tour.php:126 +msgid "" +"Welcome to Hubzilla! Would you like to see a tour of the UI?

You can " +"pause it at any time and continue where you left off by reloading the page, " +"or navigting to another page.

You can also advance by pressing the " +"return key" +msgstr "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\"" -#: ../../include/datetime.php:284 -msgid "years" -msgstr "лет" +#: ../../extend/addon/hzaddons/skeleton/skeleton.php:59 +msgid "Some setting" +msgstr "Некоторые настройки" -#: ../../include/datetime.php:285 -msgid "months" -msgstr "мес." +#: ../../extend/addon/hzaddons/skeleton/skeleton.php:61 +msgid "A setting" +msgstr "Настройка" -#: ../../include/datetime.php:286 -msgid "week" -msgstr "неделя" +#: ../../extend/addon/hzaddons/skeleton/skeleton.php:64 +msgid "Skeleton Settings" +msgstr "Настройки скелета" -#: ../../include/datetime.php:286 -msgid "weeks" -msgstr "недель" +#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:25 +msgid "Show Upload Limits" +msgstr "Показать ограничения на загрузку" -#: ../../include/datetime.php:287 -msgid "days" -msgstr "дней" +#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:27 +msgid "Hubzilla configured maximum size: " +msgstr "Максимальный размер настроенный в Hubzilla:" -#: ../../include/datetime.php:288 -msgid "hour" -msgstr "час" +#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:28 +msgid "PHP upload_max_filesize: " +msgstr "" -#: ../../include/datetime.php:288 -msgid "hours" -msgstr "часов" +#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:29 +msgid "PHP post_max_size (must be larger than upload_max_filesize): " +msgstr "" -#: ../../include/datetime.php:289 -msgid "minute" -msgstr "минута" +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:258 +msgid "GNU-Social Protocol Settings updated." +msgstr "Настройки протокола GNU Social обновлены." -#: ../../include/datetime.php:289 -msgid "minutes" -msgstr "мин." +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:277 +msgid "" +"The GNU-Social protocol does not support location independence. Connections " +"you make within that network may be unreachable from alternate channel " +"locations." +msgstr "Прокол GNU Social не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала." -#: ../../include/datetime.php:290 -msgid "second" -msgstr "секунда" +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:280 +msgid "Enable the GNU-Social protocol for this channel" +msgstr "Включить протокол GNU Social для этого канала" -#: ../../include/datetime.php:290 -msgid "seconds" -msgstr "секунд" +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:284 +msgid "GNU-Social Protocol Settings" +msgstr "Настройки протокола GNU Social" -#: ../../include/datetime.php:299 -#, php-format -msgid "%1$d %2$s ago" -msgstr "%1$d %2$s назад" +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:480 +msgid "Follow" +msgstr "Отслеживать" -#: ../../include/datetime.php:504 +#: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:483 #, php-format -msgid "%1$s's birthday" -msgstr "%1$s's День Рождения" +msgid "%1$s is now following %2$s" +msgstr "%1$s сейчас отслеживает %2$s" -#: ../../include/datetime.php:505 -#, php-format -msgid "Happy Birthday %1$s" -msgstr "С Днем Рождения %1$s" +#: ../../extend/addon/hzaddons/gallery/gallery.php:42 +#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:111 +msgid "Gallery" +msgstr "Галерея" -#: ../../include/dir_fns.php:36 -msgid "Sort Options" -msgstr "Параметры сортировки" +#: ../../extend/addon/hzaddons/gallery/gallery.php:45 +msgid "Photo Gallery" +msgstr "Фотогалерея" -#: ../../include/dir_fns.php:37 -msgid "Alphabetic" -msgstr "По алфавиту" +#: ../../extend/addon/hzaddons/startpage/startpage.php:109 +msgid "Page to load after login" +msgstr "Страница для загрузки после входа" -#: ../../include/dir_fns.php:38 -msgid "Reverse Alphabetic" -msgstr "По обратному алфавиту" +#: ../../extend/addon/hzaddons/startpage/startpage.php:109 +msgid "" +"Examples: "apps", "network?f=&gid=37" (privacy " +"collection), "channel" or "notifications/system" (leave " +"blank for default network page (grid)." +msgstr "Примеры: "apps", "network?f=&gid=37" (privacy collection), "channel" or "notifications/system" (оставьте пустым для для страницы сети по умолчанию)." -#: ../../include/dir_fns.php:39 -msgid "Newest to Oldest" -msgstr "От новых к старым" +#: ../../extend/addon/hzaddons/startpage/startpage.php:113 +msgid "Startpage Settings" +msgstr "Настройки стартовой страницы" -#: ../../include/dir_fns.php:51 -msgid "Enable Safe Search" -msgstr "" +#: ../../extend/addon/hzaddons/pageheader/pageheader.php:43 +msgid "Message to display on every page on this server" +msgstr "Отображаемое сообщение на каждой странице на этом сервере." + +#: ../../extend/addon/hzaddons/pageheader/pageheader.php:48 +msgid "Pageheader Settings" +msgstr "Настройки шапки страницы" -#: ../../include/dir_fns.php:53 -msgid "Disable Safe Search" +#: ../../extend/addon/hzaddons/pageheader/pageheader.php:64 +msgid "pageheader Settings saved." +msgstr "Настройки шапки страницы сохранены." + +#: ../../extend/addon/hzaddons/tictac/tictac.php:21 +msgid "Three Dimensional Tic-Tac-Toe" +msgstr "Tic-Tac-Toe в трёх измерениях" + +#: ../../extend/addon/hzaddons/tictac/tictac.php:54 +msgid "3D Tic-Tac-Toe" msgstr "" -#: ../../include/dir_fns.php:55 -msgid "Safe Mode" -msgstr "Безопасный режим" +#: ../../extend/addon/hzaddons/tictac/tictac.php:59 +msgid "New game" +msgstr "Новая игра" -#: ../../include/enotify.php:41 -msgid "Hubzilla Notification" -msgstr "Оповещения Red матрицы" +#: ../../extend/addon/hzaddons/tictac/tictac.php:60 +msgid "New game with handicap" +msgstr "Новая игра с форой" -#: ../../include/enotify.php:42 -msgid "hubzilla" -msgstr "hubzilla" +#: ../../extend/addon/hzaddons/tictac/tictac.php:61 +msgid "" +"Three dimensional tic-tac-toe is just like the traditional game except that " +"it is played on multiple levels simultaneously. " +msgstr "Трехмерный Tic-Tac-Toe похож на традиционную игру, за исключением того, что игра идёт на нескольких уровнях одновременно." -#: ../../include/enotify.php:44 -msgid "Thank You," -msgstr "Спасибо," +#: ../../extend/addon/hzaddons/tictac/tictac.php:62 +msgid "" +"In this case there are three levels. You win by getting three in a row on " +"any level, as well as up, down, and diagonally across the different levels." +msgstr "Имеется три уровня. Вы выигрываете, получая три подряд на любом уровне, а также вверх, вниз и по диагонали на разных уровнях." -#: ../../include/enotify.php:46 -#, php-format -msgid "%s Administrator" -msgstr "%s администратор" +#: ../../extend/addon/hzaddons/tictac/tictac.php:64 +msgid "" +"The handicap game disables the center position on the middle level because " +"the player claiming this square often has an unfair advantage." +msgstr "Игра с форой отключает центральную позицию на среднем уровне, потому что игрок, претендующий на этот квадрат, часто имеет несправедливое преимущество." -#: ../../include/enotify.php:81 -#, php-format -msgid "%s " -msgstr "%s " +#: ../../extend/addon/hzaddons/tictac/tictac.php:183 +msgid "You go first..." +msgstr "Вы начинаете..." -#: ../../include/enotify.php:85 -#, php-format -msgid "[Red:Notify] New mail received at %s" -msgstr "[Red:Уведомление] Получено новое сообщение в %s" +#: ../../extend/addon/hzaddons/tictac/tictac.php:188 +msgid "I'm going first this time..." +msgstr "На этот раз начинаю я..." -#: ../../include/enotify.php:87 -#, php-format -msgid "%1$s, %2$s sent you a new private message at %3$s." -msgstr "" +#: ../../extend/addon/hzaddons/tictac/tictac.php:194 +msgid "You won!" +msgstr "Вы выиграли!" -#: ../../include/enotify.php:88 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "%1$s послал вам %2$s." +#: ../../extend/addon/hzaddons/tictac/tictac.php:200 +#: ../../extend/addon/hzaddons/tictac/tictac.php:225 +msgid "\"Cat\" game!" +msgstr "Ничья!" -#: ../../include/enotify.php:88 -msgid "a private message" -msgstr "личное сообщение" +#: ../../extend/addon/hzaddons/tictac/tictac.php:223 +msgid "I won!" +msgstr "Я выиграл!" -#: ../../include/enotify.php:89 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения." +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:148 +msgid "Fuzzloc Settings updated." +msgstr "Настройки Fuzzloc обновлены." -#: ../../include/enotify.php:144 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]a %4$s[/zrl]" -msgstr "" +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:175 +msgid "" +"Fuzzloc allows you to blur your precise location if your channel uses " +"browser location mapping." +msgstr "Fuzzloc позволяет размыть ваше точное местоположение, если ваш канал использует сопоставление местоположений браузера." -#: ../../include/enotify.php:152 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]%4$s's %5$s[/zrl]" -msgstr "" +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:178 +msgid "Enable Fuzzloc Plugin" +msgstr "Включить плагин Fuzzloc" -#: ../../include/enotify.php:161 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]" -msgstr "" +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:182 +msgid "Minimum offset in meters" +msgstr "Минимальное смещение в метрах" -#: ../../include/enotify.php:172 -#, php-format -msgid "[Red:Notify] Comment to conversation #%1$d by %2$s" -msgstr "[Red:Уведомление] Комментарий к разговору #%1$d по %2$s" +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:186 +msgid "Maximum offset in meters" +msgstr "Максимальное смещение в метрах" -#: ../../include/enotify.php:173 -#, php-format -msgid "%1$s, %2$s commented on an item/conversation you have been following." -msgstr "" +#: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:191 +msgid "Fuzzloc Settings" +msgstr "Настройки Fuzzloc" -#: ../../include/enotify.php:176 ../../include/enotify.php:191 -#: ../../include/enotify.php:217 ../../include/enotify.php:236 -#: ../../include/enotify.php:250 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "Пожалуйста, посетите %s для просмотра и/или ответа разговора." +#: ../../extend/addon/hzaddons/rtof/rtof.php:45 +msgid "Post to Friendica" +msgstr "Опубликовать в Friendica" -#: ../../include/enotify.php:182 -#, php-format -msgid "[Red:Notify] %s posted to your profile wall" -msgstr "[Red:Уведомление] %s добавил сообщениe на стену вашего профиля" +#: ../../extend/addon/hzaddons/rtof/rtof.php:62 +msgid "rtof Settings saved." +msgstr "Настройки rtof сохранены." -#: ../../include/enotify.php:184 -#, php-format -msgid "%1$s, %2$s posted to your profile wall at %3$s" -msgstr "" +#: ../../extend/addon/hzaddons/rtof/rtof.php:81 +msgid "Allow posting to Friendica" +msgstr "Разрешить публиковать в Friendica" -#: ../../include/enotify.php:186 -#, php-format -msgid "%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]" -msgstr "" +#: ../../extend/addon/hzaddons/rtof/rtof.php:85 +msgid "Send public postings to Friendica by default" +msgstr "Отправлять общедоступные публикации во Friendica по умолчанию" -#: ../../include/enotify.php:210 -#, php-format -msgid "[Red:Notify] %s tagged you" -msgstr "[Red:Уведомление] %s добавил у вас тег" +#: ../../extend/addon/hzaddons/rtof/rtof.php:89 +msgid "Friendica API Path" +msgstr "Путь к Friendica API" -#: ../../include/enotify.php:211 -#, php-format -msgid "%1$s, %2$s tagged you at %3$s" +#: ../../extend/addon/hzaddons/rtof/rtof.php:89 +#: ../../extend/addon/hzaddons/redred/redred.php:103 +msgid "https://{sitename}/api" msgstr "" -#: ../../include/enotify.php:212 -#, php-format -msgid "%1$s, %2$s [zrl=%3$s]tagged you[/zrl]." -msgstr "" +#: ../../extend/addon/hzaddons/rtof/rtof.php:93 +msgid "Friendica login name" +msgstr "Имя входа Friendica" -#: ../../include/enotify.php:225 -#, php-format -msgid "[Red:Notify] %1$s poked you" -msgstr "[Red:Уведомление] %1$s подпихнул вас" +#: ../../extend/addon/hzaddons/rtof/rtof.php:97 +msgid "Friendica password" +msgstr "Пароль Friendica" -#: ../../include/enotify.php:226 -#, php-format -msgid "%1$s, %2$s poked you at %3$s" -msgstr "" +#: ../../extend/addon/hzaddons/rtof/rtof.php:101 +msgid "Hubzilla to Friendica Post Settings" +msgstr "Настройки публикаций Hubzilla для Friendica" -#: ../../include/enotify.php:227 -#, php-format -msgid "%1$s, %2$s [zrl=%2$s]poked you[/zrl]." -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:143 +msgid "Post to GNU social" +msgstr "Опубликовать в GNU Social" -#: ../../include/enotify.php:243 -#, php-format -msgid "[Red:Notify] %s tagged your post" -msgstr "[Red:Уведомление] %s добавил у вас в сообщении тег" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:195 +msgid "" +"Please contact your site administrator.
The provided API URL is not " +"valid." +msgstr "Пожалуйста свяжитесь с администратором сайта.
Предоставленный URL API недействителен." -#: ../../include/enotify.php:244 -#, php-format -msgid "%1$s, %2$s tagged your post at %3$s" -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:232 +msgid "We could not contact the GNU social API with the Path you entered." +msgstr "Нам не удалось установить контакт с GNU Social API по введённому вами пути" -#: ../../include/enotify.php:245 -#, php-format -msgid "%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]" -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:266 +msgid "GNU social settings updated." +msgstr "Настройки GNU Social обновлены." -#: ../../include/enotify.php:257 -msgid "[Red:Notify] Introduction received" -msgstr "[Red:Уведомление] введение получено" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:310 +msgid "Globally Available GNU social OAuthKeys" +msgstr "Глобально доступные ключи OAuthKeys GNU Social" -#: ../../include/enotify.php:258 -#, php-format -msgid "%1$s, you've received an new connection request from '%2$s' at %3$s" -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:312 +msgid "" +"There are preconfigured OAuth key pairs for some GNU social servers " +"available. If you are using one of them, please use these credentials.
If not feel free to connect to any other GNU social instance (see below)." +msgstr "Существуют предварительно настроенные пары ключей OAuth для некоторых доступных серверов GNU social. Если вы используете один из них, используйте эти учетные данные.
Если вы не хотите подключаться к какому-либо другому серверу GNU social (см. ниже)." -#: ../../include/enotify.php:259 -#, php-format +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:327 +msgid "Provide your own OAuth Credentials" +msgstr "Предоставьте ваши собственные регистрационные данные OAuth" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:329 msgid "" -"%1$s, you've received [zrl=%2$s]a new connection request[/zrl] from %3$s." -msgstr "" +"No consumer key pair for GNU social found. Register your Hubzilla Account as " +"an desktop client on your GNU social account, copy the consumer key pair " +"here and enter the API base root.
Before you register your own OAuth " +"key pair ask the administrator if there is already a key pair for this " +"Hubzilla installation at your favourite GNU social installation." +msgstr "Не найдена пользовательская пара ключей для GNU social. Зарегистрируйте свою учетную запись Hubzilla в качестве настольного клиента в своей учетной записи GNU social, скопируйте cюда пару ключей пользователя и введите корневой каталог базы API.
Прежде чем регистрировать свою собственную пару ключей OAuth, спросите администратора, если ли уже пара ключей для этой установки Hubzilla в вашем GNU social." + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:333 +msgid "OAuth Consumer Key" +msgstr "Ключ клиента OAuth" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:337 +msgid "OAuth Consumer Secret" +msgstr "Пароль клиента OAuth" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:341 +msgid "Base API Path" +msgstr "Основной путь к API" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:341 +msgid "Remember the trailing /" +msgstr "Запомнить закрывающий /" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:345 +msgid "GNU social application name" +msgstr "Имя приложения GNU social" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:368 +msgid "" +"To connect to your GNU social account click the button below to get a " +"security code from GNU social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU social." +msgstr "Чтобы подключиться к вашей учетной записи GNU social нажмите кнопку ниже для получения кода безопасности из GNU social, который вы должны скопировать в поле ввода ниже и отправить форму. Только ваши общедоступные сообщения будут опубликованы в GNU social." -#: ../../include/enotify.php:263 ../../include/enotify.php:282 -#, php-format -msgid "You may visit their profile at %s" -msgstr "Вы можете посетить ​​профиль в %s" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:370 +msgid "Log in with GNU social" +msgstr "Войти с GNU social" -#: ../../include/enotify.php:265 -#, php-format -msgid "Please visit %s to approve or reject the connection request." -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:373 +msgid "Copy the security code from GNU social here" +msgstr "Скопируйте код безопасности GNU social здесь" -#: ../../include/enotify.php:272 -msgid "[Red:Notify] Friend suggestion received" -msgstr "[Red:Уведомление] Получено предложение дружить" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:383 +msgid "Cancel Connection Process" +msgstr "Отменить процесс подключения" -#: ../../include/enotify.php:273 -#, php-format -msgid "%1$s, you've received a friend suggestion from '%2$s' at %3$s" -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:385 +msgid "Current GNU social API is" +msgstr "Текущий GNU social API" -#: ../../include/enotify.php:274 -#, php-format +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:389 +msgid "Cancel GNU social Connection" +msgstr "Отменить подключение с GNU social" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:406 msgid "" -"%1$s, you've received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from " -"%4$s." -msgstr "" +"Note: Due your privacy settings (Hide your profile " +"details from unknown viewers?) the link potentially included in public " +"postings relayed to GNU social will lead the visitor to a blank page " +"informing the visitor that the access to your profile has been restricted." +msgstr "Замечание: Из-за настроек конфиденциальности (скрыть данные своего профиля от неизвестных зрителей?) cсылка, потенциально включенная в общедоступные публикации, переданные в GNU social, приведет посетителя к пустой странице, информирующей его о том, что доступ к вашему профилю был ограничен." -#: ../../include/enotify.php:280 -msgid "Name:" -msgstr "Имя:" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 +msgid "Allow posting to GNU social" +msgstr "Разрешить публиковать в GNU social" -#: ../../include/enotify.php:281 -msgid "Photo:" -msgstr "Фото:" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 +msgid "" +"If enabled your public postings can be posted to the associated GNU-social " +"account" +msgstr "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи GNU social" -#: ../../include/enotify.php:284 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 +msgid "Post to GNU social by default" +msgstr "Публиковать в GNU social по умолчанию" -#: ../../include/reddav.php:915 -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:52 -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:55 -msgid "parent" -msgstr "" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 +msgid "" +"If enabled your public postings will be posted to the associated GNU-social " +"account by default" +msgstr "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи GNU social по умолчанию" -#: ../../include/reddav.php:940 -msgid "Collection" -msgstr "Коллекция" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:432 +msgid "GNU social Post Settings" +msgstr "Настройки публикаций GNU social" -#: ../../include/reddav.php:943 -msgid "Principal" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:891 +#: ../../Zotlabs/Module/Admin/Site.php:317 +msgid "Site name" +msgstr "Название сайта" + +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:892 +msgid "API URL" msgstr "" -#: ../../include/reddav.php:946 -msgid "Addressbook" -msgstr "Адресная книга" +#: ../../extend/addon/hzaddons/statusnet/statusnet.php:895 +msgid "Application name" +msgstr "Название приложения" -#: ../../include/reddav.php:949 -msgid "Calendar" -msgstr "Календарь" +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:81 +msgid "Enable Rainbowtag" +msgstr "Включить Rainbowtag" -#: ../../include/reddav.php:952 -msgid "Schedule Inbox" -msgstr "" +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:85 +msgid "Rainbowtag Settings" +msgstr "Настройки Rainbowtag" -#: ../../include/reddav.php:955 -msgid "Schedule Outbox" -msgstr "" +#: ../../extend/addon/hzaddons/rainbowtag/rainbowtag.php:101 +msgid "Rainbowtag Settings saved." +msgstr "Настройки Rainbowtag сохранены." -#: ../../include/reddav.php:1033 -#, php-format -msgid "%1$s used" -msgstr "" +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:92 +msgid "Friendica Photo Album Import" +msgstr "Импортировать альбом фотографий Friendica" -#: ../../include/reddav.php:1038 -#, php-format -msgid "%1$s used of %2$s (%3$s%)" -msgstr "" +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:93 +msgid "This will import all your Friendica photo albums to this Red channel." +msgstr "Это позволит импортировать все ваши альбомы фотографий Friendica в этот канал." -#: ../../include/reddav.php:1104 -msgid "Create new folder" -msgstr "Создать новую папку" +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:94 +msgid "Friendica Server base URL" +msgstr "Базовый URL сервера Friendica" -#: ../../include/reddav.php:1107 ../../mod/mitem.php:142 ../../mod/menu.php:84 -#: ../../mod/new_channel.php:117 -msgid "Create" -msgstr "Создать" +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:95 +msgid "Friendica Login Username" +msgstr "Имя пользователя для входа Friendica" -#: ../../include/reddav.php:1111 -msgid "Upload file" -msgstr "Загрузить файл" +#: ../../extend/addon/hzaddons/frphotos/frphotos.php:96 +msgid "Friendica Login Password" +msgstr "Пароль для входа Firendica" -#: ../../include/reddav.php:1114 ../../mod/profile_photo.php:361 -msgid "Upload" -msgstr "Загрузка" +#: ../../extend/addon/hzaddons/piwik/piwik.php:85 +msgid "" +"This website is tracked using the Piwik " +"analytics tool." +msgstr "Этот сайт отслеживается с помощью инструментов аналитики Piwik." -#: ../../include/features.php:23 -msgid "General Features" -msgstr "Главные функции" +#: ../../extend/addon/hzaddons/piwik/piwik.php:88 +#, php-format +msgid "" +"If you do not want that your visits are logged this way you can " +"set a cookie to prevent Piwik from tracking further visits of the site " +"(opt-out)." +msgstr "Если вы не хотите, чтобы ваши визиты регистрировались таким образом, вы можете отключить cookie с тем, чтобы Piwik не отслеживал дальнейшие посещения сайта." -#: ../../include/features.php:25 -msgid "Content Expiration" -msgstr "" +#: ../../extend/addon/hzaddons/piwik/piwik.php:96 +msgid "Piwik Base URL" +msgstr "Базовый URL Piwik" -#: ../../include/features.php:25 -msgid "Remove posts/comments and/or private messages at a future time" -msgstr "Удалять посты/комментарии и/или личные сообщения" +#: ../../extend/addon/hzaddons/piwik/piwik.php:96 +msgid "" +"Absolute path to your Piwik installation. (without protocol (http/s), with " +"trailing slash)" +msgstr "Абсолютный путь к вашей установке Piwik (без типа протокола, с начальным слэшем)" -#: ../../include/features.php:26 -msgid "Multiple Profiles" -msgstr "Несколько профилей" +#: ../../extend/addon/hzaddons/piwik/piwik.php:97 +msgid "Site ID" +msgstr "ID сайта" -#: ../../include/features.php:26 -msgid "Ability to create multiple profiles" -msgstr "Возможность создания нескольких профилей" +#: ../../extend/addon/hzaddons/piwik/piwik.php:98 +msgid "Show opt-out cookie link?" +msgstr "Показывать ссылку на отказ от использования cookies?" -#: ../../include/features.php:27 -msgid "Web Pages" -msgstr "Веб-страницы" +#: ../../extend/addon/hzaddons/piwik/piwik.php:99 +msgid "Asynchronous tracking" +msgstr "Асинхронное отслеживание" -#: ../../include/features.php:27 -msgid "Provide managed web pages on your channel" -msgstr "" +#: ../../extend/addon/hzaddons/piwik/piwik.php:100 +msgid "Enable frontend JavaScript error tracking" +msgstr "Включить отслеживание ошибок JavaScript на фронтенде." -#: ../../include/features.php:28 -msgid "Private Notes" -msgstr "Личные заметки" +#: ../../extend/addon/hzaddons/piwik/piwik.php:100 +msgid "This feature requires Piwik >= 2.2.0" +msgstr "Эта функция требует версию Piwik >= 2.2.0" -#: ../../include/features.php:28 -msgid "Enables a tool to store notes and reminders" -msgstr "" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:106 +msgid "Photos imported" +msgstr "Фотографии импортированы" -#: ../../include/features.php:33 -msgid "Extended Identity Sharing" -msgstr "Расширенный обмен идентичности" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:129 +msgid "Redmatrix Photo Album Import" +msgstr "Импортировать альбом фотографий Redmatrix" -#: ../../include/features.php:33 -msgid "" -"Share your identity with all websites on the internet. When disabled, " -"identity is only shared with sites in the matrix." -msgstr "" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:130 +msgid "This will import all your Redmatrix photo albums to this channel." +msgstr "Это позволит импортировать все ваши альбомы фотографий Redmatrix в этот канал." -#: ../../include/features.php:34 -msgid "Expert Mode" -msgstr "Экспертный режим" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134 +msgid "Import just this album" +msgstr "Импортировать только этот альбом" -#: ../../include/features.php:34 -msgid "Enable Expert Mode to provide advanced configuration options" -msgstr "" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134 +msgid "Leave blank to import all albums" +msgstr "Оставьте пустым для импорта всех альбомов" -#: ../../include/features.php:35 -msgid "Premium Channel" -msgstr "Премиум канал" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135 +msgid "Maximum count to import" +msgstr "Максимальное количество для импорта" -#: ../../include/features.php:35 -msgid "" -"Allows you to set restrictions and terms on those that connect with your " -"channel" +#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135 +msgid "0 or blank to import all available" +msgstr "0 или пусто для импорта всех доступных" + +#: ../../extend/addon/hzaddons/opensearch/opensearch.php:26 +#, php-format +msgctxt "opensearch" +msgid "Search %1$s (%2$s)" +msgstr "Искать %1$s (%2$s)" + +#: ../../extend/addon/hzaddons/opensearch/opensearch.php:28 +msgctxt "opensearch" +msgid "$Projectname" msgstr "" -#: ../../include/features.php:40 -msgid "Post Composition Features" +#: ../../extend/addon/hzaddons/opensearch/opensearch.php:42 +#: ../../Zotlabs/Lib/Enotify.php:66 ../../Zotlabs/Module/Home.php:74 +#: ../../Zotlabs/Module/Home.php:82 +msgid "$Projectname" msgstr "" -#: ../../include/features.php:41 -msgid "Richtext Editor" -msgstr "Редактор RichText" +#: ../../extend/addon/hzaddons/opensearch/opensearch.php:43 +msgid "Search $Projectname" +msgstr "Поиск $Projectname" -#: ../../include/features.php:41 -msgid "Enable richtext editor" -msgstr "Включить редактор RichText" +#: ../../extend/addon/hzaddons/visage/visage.php:93 +msgid "Recent Channel/Profile Viewers" +msgstr "Последние просмотры канала / профиля" -#: ../../include/features.php:42 -msgid "Post Preview" -msgstr "Предварительный просмотр сообщения" +#: ../../extend/addon/hzaddons/visage/visage.php:98 +msgid "This plugin/addon has not been configured." +msgstr "Это расширение не было настроено." -#: ../../include/features.php:42 -msgid "Allow previewing posts and comments before publishing them" -msgstr "Разрешить предварительный просмотр сообщений и комментариев перед их публикацией" +#: ../../extend/addon/hzaddons/visage/visage.php:99 +#, php-format +msgid "Please visit the Visage settings on %s" +msgstr "Пожалуйста, посетите настройки Visage на %s" -#: ../../include/features.php:43 ../../include/widgets.php:503 -#: ../../mod/sources.php:88 -msgid "Channel Sources" -msgstr "Источники канала" +#: ../../extend/addon/hzaddons/visage/visage.php:99 +msgid "your feature settings page" +msgstr "страница ваших установочных параметров" -#: ../../include/features.php:43 -msgid "Automatically import channel content from other channels or feeds" -msgstr "" +#: ../../extend/addon/hzaddons/visage/visage.php:112 +msgid "No entries." +msgstr "Нет записей." -#: ../../include/features.php:44 -msgid "Even More Encryption" -msgstr "Еще больше шифрования" +#: ../../extend/addon/hzaddons/visage/visage.php:166 +msgid "Enable Visage Visitor Logging" +msgstr "Включить журналирование посетителей Visage" + +#: ../../extend/addon/hzaddons/visage/visage.php:170 +msgid "Visage Settings" +msgstr "Настройки Visage" + +#: ../../extend/addon/hzaddons/cart/manual_payments.php:7 +msgid "Error: order mismatch. Please try again." +msgstr "Ошибка: несоответствие заказа. Пожалуйста, попробуйте ещё раз" + +#: ../../extend/addon/hzaddons/cart/manual_payments.php:30 +msgid "Manual payments are not enabled." +msgstr "Ручные платежи не подключены." + +#: ../../extend/addon/hzaddons/cart/manual_payments.php:37 +#: ../../extend/addon/hzaddons/cart/cart.php:1442 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:417 +msgid "Order not found." +msgstr "Заказ не найден." + +#: ../../extend/addon/hzaddons/cart/manual_payments.php:46 +msgid "Finished" +msgstr "Завершено" + +#: ../../extend/addon/hzaddons/cart/manual_payments.php:62 +#: ../../extend/addon/hzaddons/cart/cart.php:1420 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:481 +#: ../../extend/addon/hzaddons/cart/myshop.php:51 +#: ../../Zotlabs/Module/Wiki.php:68 +msgid "Invalid channel" +msgstr "Недействительный канал" + +#: ../../extend/addon/hzaddons/cart/cart.php:467 +msgid "[cart] Item Added" +msgstr "[cart] Элемент добавлен" + +#: ../../extend/addon/hzaddons/cart/cart.php:851 +msgid "Order already checked out." +msgstr "Заказ уже проверен." + +#: ../../extend/addon/hzaddons/cart/cart.php:1204 +msgid "Enable Shopping Cart" +msgstr "Включить корзину" + +#: ../../extend/addon/hzaddons/cart/cart.php:1211 +msgid "Enable Test Catalog" +msgstr "Включить тестовый каталог" + +#: ../../extend/addon/hzaddons/cart/cart.php:1219 +msgid "Enable Manual Payments" +msgstr "Включить ручные платежи" + +#: ../../extend/addon/hzaddons/cart/cart.php:1238 +msgid "Base Merchant Currency" +msgstr "Основная торговая валюта" + +#: ../../extend/addon/hzaddons/cart/cart.php:1250 +msgid "Cart - Base Settings" +msgstr "Корзина - Основные настройки" + +#: ../../extend/addon/hzaddons/cart/cart.php:1271 +#: ../../extend/addon/hzaddons/cart/cart.php:1274 +msgid "Shop" +msgstr "Магазин" + +#: ../../extend/addon/hzaddons/cart/cart.php:1293 +#: ../../Zotlabs/Module/Wiki.php:30 +msgid "Profile Unavailable." +msgstr "Профиль недоступен." + +#: ../../extend/addon/hzaddons/cart/cart.php:1324 +#: ../../extend/addon/hzaddons/cart/myshop.php:125 +msgid "Order Not Found" +msgstr "Заказ не найден" + +#: ../../extend/addon/hzaddons/cart/cart.php:1401 +msgid "You must be logged into the Grid to shop." +msgstr "Вы должны быть в сети для доступа к магазину" + +#: ../../extend/addon/hzaddons/cart/cart.php:1411 +msgid "Cart Not Enabled (profile: " +msgstr "Корзина не подключена (профиль:" + +#: ../../extend/addon/hzaddons/cart/cart.php:1451 +msgid "Access denied." +msgstr "Доступ запрещён." + +#: ../../extend/addon/hzaddons/cart/cart.php:1503 +#: ../../extend/addon/hzaddons/cart/cart.php:1647 +msgid "No Order Found" +msgstr "Нет найденных заказов" + +#: ../../extend/addon/hzaddons/cart/cart.php:1512 +msgid "An unknown error has occurred Please start again." +msgstr "Произошла неизвестная ошибка. Пожалуйста, начните снова." + +#: ../../extend/addon/hzaddons/cart/cart.php:1680 +msgid "Invalid Payment Type. Please start again." +msgstr "Недействительный тип платежа. Пожалуйста, начните снова." + +#: ../../extend/addon/hzaddons/cart/cart.php:1687 +msgid "Order not found" +msgstr "Заказ не найден" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:97 +msgid "Enable Paypal Button Module" +msgstr "Включить модуль кнопки Paypal" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:102 +msgid "Use Production Key" +msgstr "Использовать ключ Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:109 +msgid "Paypal Sandbox Client Key" +msgstr "Ключ клиента Paypal Sandbox" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:116 +msgid "Paypal Sandbox Secret Key" +msgstr "Секретный ключ Paypal Sandbox" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:122 +msgid "Paypal Production Client Key" +msgstr "Ключ клиента Paypal Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:129 +msgid "Paypal Production Secret Key" +msgstr "Секретный ключ Paypal Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:143 +msgid "Cart - Paypal Addon" +msgstr "Корзина - Paypal плагин" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:277 +msgid "Paypal button payments are not enabled." +msgstr "Кнопка Paypal для платежей не включена." -#: ../../include/features.php:44 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:295 msgid "" -"Allow optional encryption of content end-to-end with a shared secret key" -msgstr "" +"Paypal button payments are not properly configured. Please choose another " +"payment option." +msgstr "" +"Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте " +"другой вариант оплаты." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:71 +msgid "Enable Hubzilla Services Module" +msgstr "Включить модуль сервиса Hubzilla" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:77 +msgid "Cart - Hubzilla Services Addon" +msgstr "Корзина - плагин сервиса Hubzilla" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:169 +msgid "New SKU" +msgstr "Новый код" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:204 +msgid "Cannot save edits to locked item." +msgstr "Невозможно сохранить изменения заблокированной позиции." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:252 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:339 +msgid "SKU not found." +msgstr "Код не найден." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:305 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:309 +msgid "Invalid Activation Directive." +msgstr "Недействительная директива активации." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:380 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:384 +msgid "Invalid Deactivation Directive." +msgstr "Недействительная директива деактивации" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:570 +msgid "Add to this privacy group" +msgstr "Добавить в эту группу безопасности" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:586 +msgid "Set user service class" +msgstr "Установить класс обслуживания пользователя" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:613 +msgid "You must be using a local account to purchase this service." +msgstr "Вы должны использовать локальную учётноую запись для покупки этого сервиса." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651 +msgid "Changes Locked" +msgstr "Изменения заблокированы" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655 +msgid "Item available for purchase." +msgstr "Позиция доступна для приобретения." + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:662 +msgid "Price" +msgstr "Цена" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:665 +msgid "Add buyer to privacy group" +msgstr "Добавить покупателя в группу безопасности" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:670 +msgid "Add buyer as connection" +msgstr "Добавить покупателя как контакт" + +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:677 +#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:718 +msgid "Set Service Class" +msgstr "Установить класс обслуживания" + +#: ../../extend/addon/hzaddons/cart/myshop.php:44 +msgid "Access Denied." +msgstr "Доступ запрещён." + +#: ../../extend/addon/hzaddons/cart/myshop.php:155 +#: ../../extend/addon/hzaddons/cart/myshop.php:191 +#: ../../extend/addon/hzaddons/cart/myshop.php:225 +#: ../../extend/addon/hzaddons/cart/myshop.php:273 +#: ../../extend/addon/hzaddons/cart/myshop.php:308 +#: ../../extend/addon/hzaddons/cart/myshop.php:331 +msgid "Access Denied" +msgstr "Доступ запрещён" + +#: ../../extend/addon/hzaddons/cart/myshop.php:200 +#: ../../extend/addon/hzaddons/cart/myshop.php:234 +#: ../../extend/addon/hzaddons/cart/myshop.php:283 +#: ../../extend/addon/hzaddons/cart/myshop.php:341 +msgid "Invalid Item" +msgstr "Недействительный элемент" + +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:125 +msgid "Nsabait Settings updated." +msgstr "Настройки Nsabait обновлены" + +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 +msgid "Enable NSAbait Plugin" +msgstr "Включить плагин NSAbait" + +#: ../../extend/addon/hzaddons/nsabait/nsabait.php:161 +msgid "NSAbait Settings" +msgstr "Настройки Nsabait" + +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:79 +msgid "Hubzilla File Storage Import" +msgstr "Импорт файлового хранилища Hubzilla" + +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:80 +msgid "This will import all your cloud files from another server." +msgstr "Это позволит импортировать все ваши файлы с другого сервера." + +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:81 +msgid "Hubzilla Server base URL" +msgstr "Базовый URL сервера Hubzilla" + +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:82 +msgid "Since modified date yyyy-mm-dd" +msgstr "Начиная с даты изменений yyyy-mm-dd" + +#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:83 +msgid "Until modified date yyyy-mm-dd" +msgstr "Заканчивая датой изменений yyyy-mm-dd" + +#: ../../extend/addon/hzaddons/nofed/nofed.php:42 +msgid "Federate" +msgstr "" + +#: ../../extend/addon/hzaddons/nofed/nofed.php:56 +msgid "nofed Settings saved." +msgstr "Настройки nofed сохранены." + +#: ../../extend/addon/hzaddons/nofed/nofed.php:72 +msgid "Allow Federation Toggle" +msgstr "Разрешить переключение федерации" + +#: ../../extend/addon/hzaddons/nofed/nofed.php:76 +msgid "Federate posts by default" +msgstr "Разрешить федерацию публикаций по умолчанию" + +#: ../../extend/addon/hzaddons/nofed/nofed.php:80 +msgid "NoFed Settings" +msgstr "Настройки NoFed" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:123 +msgid "generic profile image" +msgstr "Стандартное изображение профиля" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:124 +msgid "random geometric pattern" +msgstr "Случайный геометрический рисунок" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:125 +msgid "monster face" +msgstr "Лицо чудовища" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:126 +msgid "computer generated face" +msgstr "Сгенерированное компьютером лицо" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:127 +msgid "retro arcade style face" +msgstr "Лицо в стиле старой аркадной игры" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:128 +msgid "Hub default profile photo" +msgstr "Фотография профиля по умолчанию" + +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143 +msgid "Information" +msgstr "Информация" -#: ../../include/features.php:49 -msgid "Network and Stream Filtering" -msgstr "Фильтрация сети и потока" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143 +msgid "" +"Libravatar addon is installed, too. Please disable Libravatar addon or this " +"Gravatar addon.
The Libravatar addon will fall back to Gravatar if " +"nothing was found at Libravatar." +msgstr "Плагин Libravatar также установлен. Пожалуйста, отключите плагин Libravatar или этот плагин Gravatar. Если Плагин Libravatar ничего не найдёт, он вернётся в Gravatar." -#: ../../include/features.php:50 -msgid "Search by Date" -msgstr "Поиск по дате" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151 +msgid "Default avatar image" +msgstr "Изображение аватара по умолчанию" -#: ../../include/features.php:50 -msgid "Ability to select posts by date ranges" -msgstr "Возможность выбора сообщений по датам" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151 +msgid "Select default avatar image if none was found at Gravatar. See README" +msgstr "Выберите изображения аватар по умолчанию если ничего не было найдено в Gravatar (см. README)." -#: ../../include/features.php:51 -msgid "Collections Filter" -msgstr "Фильтр коллекций" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152 +msgid "Rating of images" +msgstr "Оценки изображений" -#: ../../include/features.php:51 -msgid "Enable widget to display Network posts only from selected collections" -msgstr "" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152 +msgid "Select the appropriate avatar rating for your site. See README" +msgstr "Выберите подходящую оценку аватара для вашего сайта (см. README)." -#: ../../include/features.php:52 ../../include/widgets.php:265 -msgid "Saved Searches" -msgstr "Запомненные поиски" +#: ../../extend/addon/hzaddons/gravatar/gravatar.php:165 +msgid "Gravatar settings updated." +msgstr "Настройки Gravatar обновлены." -#: ../../include/features.php:52 -msgid "Save search terms for re-use" -msgstr "Сохранять результаты поиска для повторного использования" +#: ../../extend/addon/hzaddons/redred/redred.php:45 +msgid "Post to Red" +msgstr "Опубликовать в Red" -#: ../../include/features.php:53 -msgid "Network Personal Tab" -msgstr "Сеть - Личная вкладка" +#: ../../extend/addon/hzaddons/redred/redred.php:60 +msgid "Channel is required." +msgstr "Необходим канал." -#: ../../include/features.php:53 -msgid "Enable tab to display only Network posts that you've interacted on" -msgstr "" +#: ../../extend/addon/hzaddons/redred/redred.php:65 +#: ../../Zotlabs/Module/Network.php:304 +msgid "Invalid channel." +msgstr "Недействительный канал." -#: ../../include/features.php:54 -msgid "Network New Tab" -msgstr "Сеть - Новая вкладка" +#: ../../extend/addon/hzaddons/redred/redred.php:76 +msgid "redred Settings saved." +msgstr "Настройки RedRed сохранены." -#: ../../include/features.php:54 -msgid "Enable tab to display all new Network activity" -msgstr "" +#: ../../extend/addon/hzaddons/redred/redred.php:95 +msgid "Allow posting to another Hubzilla Channel" +msgstr "Разрешить публиковать в другой канал Hubzilla" -#: ../../include/features.php:55 -msgid "Affinity Tool" -msgstr "Инструмент сходства или соответствия" +#: ../../extend/addon/hzaddons/redred/redred.php:99 +msgid "Send public postings to Hubzilla channel by default" +msgstr "Отправлять общедоступные публикации в канал Hubzilla по умолчанию" -#: ../../include/features.php:55 -msgid "Filter stream activity by depth of relationships" -msgstr "" +#: ../../extend/addon/hzaddons/redred/redred.php:103 +msgid "Hubzilla API Path" +msgstr "Путь к Hubzilla API" -#: ../../include/features.php:56 -msgid "Suggest Channels" -msgstr "" +#: ../../extend/addon/hzaddons/redred/redred.php:107 +msgid "Hubzilla login name" +msgstr "Имя входа Hubzilla" -#: ../../include/features.php:56 -msgid "Show channel suggestions" -msgstr "" +#: ../../extend/addon/hzaddons/redred/redred.php:111 +msgid "Hubzilla channel name" +msgstr "Название канала Hubzilla" -#: ../../include/features.php:61 -msgid "Post/Comment Tools" -msgstr "Инструменты сообщений/комментарий " +#: ../../extend/addon/hzaddons/redred/redred.php:119 +msgid "Hubzilla Crosspost Settings" +msgstr "Настройки перекрёстных публикаций Hubzilla" -#: ../../include/features.php:63 -msgid "Edit Sent Posts" -msgstr "Редактировать отправленные сообщения" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:44 +msgid "" +"This is a fairly comprehensive and complete guitar chord dictionary which " +"will list most of the available ways to play a certain chord, starting from " +"the base of the fingerboard up to a few frets beyond the twelfth fret " +"(beyond which everything repeats). A couple of non-standard tunings are " +"provided for the benefit of slide players, etc." +msgstr "" -#: ../../include/features.php:63 -msgid "Edit and correct posts and comments after sending" -msgstr "Редактировать и исправлять сообщения и комментарии после отправки" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:46 +msgid "" +"Chord names start with a root note (A-G) and may include sharps (#) and " +"flats (b). This software will parse most of the standard naming conventions " +"such as maj, min, dim, sus(2 or 4), aug, with optional repeating elements." +msgstr "" -#: ../../include/features.php:64 -msgid "Tagging" -msgstr "Пометка" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:48 +msgid "" +"Valid examples include A, A7, Am7, Amaj7, Amaj9, Ammaj7, Aadd4, Asus2Add4, " +"E7b13b11 ..." +msgstr "Примеры действительных включают A, A7, Am7, Amaj7, Amaj9, Ammaj7, Aadd4, Asus2Add4, E7b13b11 ..." -#: ../../include/features.php:64 -msgid "Ability to tag existing posts" -msgstr "Возможность использовать теги" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:51 +msgid "Guitar Chords" +msgstr "Гитарные аккорды" -#: ../../include/features.php:65 -msgid "Post Categories" -msgstr "Категории сообщения" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:52 +msgid "The complete online chord dictionary" +msgstr "Полный онлайн словарь аккордов" -#: ../../include/features.php:65 -msgid "Add categories to your posts" -msgstr "Добавить категории для ваших сообщений" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:57 +msgid "Tuning" +msgstr "Настройка" -#: ../../include/features.php:66 -msgid "Ability to file posts under folders" -msgstr "" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:58 +msgid "Chord name: example: Em7" +msgstr "Наименование аккорда - example: Em7" -#: ../../include/features.php:67 -msgid "Dislike Posts" -msgstr "Сообщение не нравится" +#: ../../extend/addon/hzaddons/chords/Mod_Chords.php:59 +msgid "Show for left handed stringing" +msgstr "Показывать струны для левшей" -#: ../../include/features.php:67 -msgid "Ability to dislike posts/comments" -msgstr "Возможность выбора нравится/не-нравится" +#: ../../extend/addon/hzaddons/chords/chords.php:33 +msgid "Quick Reference" +msgstr "Быстрая ссылка" -#: ../../include/features.php:68 -msgid "Star Posts" -msgstr "Помечать сообщения" +#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:34 +msgid "New registration" +msgstr "Новая регистрация" -#: ../../include/features.php:68 -msgid "Ability to mark special posts with a star indicator" -msgstr "" +#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:40 +#: ../../Zotlabs/Module/Invite.php:82 +#, php-format +msgid "%s : Message delivery failed." +msgstr "%s : Доставка сообщения не удалась." -#: ../../include/features.php:69 -msgid "Tag Cloud" -msgstr "Облако тегов" +#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:42 +#, php-format +msgid "Message sent to %s. New account registration: %s" +msgstr "Сообщение отправлено в %s. Регистрация нового аккаунта: %s" -#: ../../include/features.php:69 -msgid "Provide a personal tag cloud on your channel page" -msgstr "" +#: ../../extend/addon/hzaddons/irc/irc.php:45 +msgid "Channels to auto connect" +msgstr "Каналы для автоматического подключения" -#: ../../include/follow.php:23 -msgid "Channel is blocked on this site." -msgstr "Канал блокируется на этом сайте." +#: ../../extend/addon/hzaddons/irc/irc.php:45 +#: ../../extend/addon/hzaddons/irc/irc.php:49 +msgid "Comma separated list" +msgstr "Список, разделённый запятыми" -#: ../../include/follow.php:28 -msgid "Channel location missing." -msgstr "Местоположение канала отсутствует." +#: ../../extend/addon/hzaddons/irc/irc.php:49 +#: ../../extend/addon/hzaddons/irc/irc.php:96 +msgid "Popular Channels" +msgstr "Популярные каналы" -#: ../../include/follow.php:54 -msgid "Response from remote channel was incomplete." -msgstr "" +#: ../../extend/addon/hzaddons/irc/irc.php:53 +msgid "IRC Settings" +msgstr "Настройки IRC" -#: ../../include/follow.php:85 -msgid "Channel was deleted and no longer exists." -msgstr "" +#: ../../extend/addon/hzaddons/irc/irc.php:69 +msgid "IRC settings saved." +msgstr "Настройки IRC сохранены" -#: ../../include/follow.php:132 -msgid "Channel discovery failed." -msgstr "Не удалось обнаружить канал." +#: ../../extend/addon/hzaddons/irc/irc.php:74 +msgid "IRC Chatroom" +msgstr "Чат IRC" -#: ../../include/follow.php:149 -msgid "local account not found." -msgstr "локальный аккаунт не найден." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:19 +msgid "bitchslap" +msgstr "дать леща" -#: ../../include/follow.php:158 -msgid "Cannot connect to yourself." -msgstr "Нельзя подключиться к самому себе." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:19 +msgid "bitchslapped" +msgstr "получил леща" -#: ../../include/group.php:25 -msgid "" -"A deleted group with this name was revived. Existing item permissions " -"may apply to this group and any future members. If this is " -"not what you intended, please create another group with a different name." -msgstr "" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:20 +msgid "shag" +msgstr "вздрючить" -#: ../../include/group.php:223 -msgid "Default privacy group for new contacts" -msgstr "Группа конфиденциальности по умолчанию для новых контактов" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:20 +msgid "shagged" +msgstr "вздрюченный" -#: ../../include/group.php:242 ../../mod/admin.php:763 -msgid "All Channels" -msgstr "Все каналы" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:21 +msgid "patent" +msgstr "" -#: ../../include/group.php:264 -msgid "edit" -msgstr "редактировать" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:21 +msgid "patented" +msgstr "" -#: ../../include/group.php:285 -msgid "Collections" -msgstr "Коллекции" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:22 +msgid "hug" +msgstr "обнять" -#: ../../include/group.php:286 -msgid "Edit collection" -msgstr "Редактировать коллекцию" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:22 +msgid "hugged" +msgstr "обнятый" -#: ../../include/group.php:287 -msgid "Create a new collection" -msgstr "Создать новую коллекцию" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:23 +msgid "murder" +msgstr "убить" -#: ../../include/group.php:288 -msgid "Channels not in any collection" -msgstr "Контакты не в какой коллекции" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:23 +msgid "murdered" +msgstr "убитый" -#: ../../include/group.php:290 ../../include/widgets.php:266 -msgid "add" -msgstr "добавить" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:24 +msgid "worship" +msgstr "почитать" -#: ../../include/identity.php:30 ../../mod/item.php:1270 -msgid "Unable to obtain identity information from database" -msgstr "Невозможно получить идентификационную информацию из базы данных" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:24 +msgid "worshipped" +msgstr "почитаемый" -#: ../../include/identity.php:63 -msgid "Empty name" -msgstr "Пустое имя" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:25 +msgid "kiss" +msgstr "целовать" -#: ../../include/identity.php:65 -msgid "Name too long" -msgstr "Слишком длинное имя" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:25 +msgid "kissed" +msgstr "поцелованный" -#: ../../include/identity.php:166 -msgid "No account identifier" -msgstr "идентификатор аккаунта отсутствует" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:26 +msgid "tempt" +msgstr "искушать" -#: ../../include/identity.php:176 -msgid "Nickname is required." -msgstr "Требуется псевдоним." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:26 +msgid "tempted" +msgstr "искушённый" -#: ../../include/identity.php:190 -msgid "Reserved nickname. Please choose another." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 +msgid "raise eyebrows at" msgstr "" -#: ../../include/identity.php:195 -msgid "" -"Nickname has unsupported characters or is already being used on this site." -msgstr "Псевдоним имеет недопустимые символы или уже используется на этом сайте." - -#: ../../include/identity.php:258 -msgid "Unable to retrieve created identity" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 +msgid "raised their eyebrows at" msgstr "" -#: ../../include/identity.php:317 -msgid "Default Profile" -msgstr "Профиль по умолчанию" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:28 +msgid "insult" +msgstr "оскорбить" -#: ../../include/identity.php:342 ../../include/widgets.php:400 -#: ../../include/profile_selectors.php:42 ../../mod/connedit.php:431 -msgid "Friends" -msgstr "Друзья" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:28 +msgid "insulted" +msgstr "оскорблённый" -#: ../../include/identity.php:509 -msgid "Requested channel is not available." -msgstr "Запрашиваемый канал не доступен." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:29 +msgid "praise" +msgstr "хвалить" -#: ../../include/identity.php:557 ../../mod/achievements.php:8 -#: ../../mod/profile.php:16 ../../mod/blocks.php:10 ../../mod/connect.php:13 -#: ../../mod/filestorage.php:40 ../../mod/layouts.php:8 -#: ../../mod/webpages.php:8 -msgid "Requested profile is not available." -msgstr "Запрашиваемый профиль не доступен." +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:29 +msgid "praised" +msgstr "похваленный" -#: ../../include/identity.php:675 ../../include/widgets.php:128 -#: ../../include/widgets.php:168 ../../include/Contact.php:107 -#: ../../mod/directory.php:183 ../../mod/dirprofile.php:164 -#: ../../mod/suggest.php:51 ../../mod/match.php:62 -msgid "Connect" -msgstr "Подключить" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:30 +msgid "be dubious of" +msgstr "усомниться" -#: ../../include/identity.php:689 ../../mod/profiles.php:612 -msgid "Change profile photo" -msgstr "Изменить фотографию профиля" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:30 +msgid "was dubious of" +msgstr "усомнился" -#: ../../include/identity.php:695 -msgid "Profiles" -msgstr "Профили" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:31 +msgid "eat" +msgstr "есть" -#: ../../include/identity.php:695 -msgid "Manage/edit profiles" -msgstr "Управление / Редактирование профилей" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:31 +msgid "ate" +msgstr "съел" -#: ../../include/identity.php:696 ../../mod/profiles.php:613 -msgid "Create New Profile" -msgstr "Создать новый профиль" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:32 +msgid "giggle and fawn at" +msgstr "" -#: ../../include/identity.php:699 -msgid "Edit Profile" -msgstr "Редактировать профиль" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:32 +msgid "giggled and fawned at" +msgstr "" -#: ../../include/identity.php:710 ../../mod/profiles.php:624 -msgid "Profile Image" -msgstr "Изображение профиля" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:33 +msgid "doubt" +msgstr "сомневаться" -#: ../../include/identity.php:713 ../../mod/profiles.php:627 -msgid "visible to everybody" -msgstr "видно всем" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:33 +msgid "doubted" +msgstr "сомневался" -#: ../../include/identity.php:714 ../../mod/profiles.php:628 -msgid "Edit visibility" -msgstr "Редактировать видимость" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:34 +msgid "glare" +msgstr "" -#: ../../include/identity.php:728 ../../include/identity.php:952 -#: ../../mod/directory.php:158 -msgid "Gender:" -msgstr "Пол:" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:34 +msgid "glared at" +msgstr "" -#: ../../include/identity.php:729 ../../include/identity.php:996 -#: ../../mod/directory.php:160 -msgid "Status:" -msgstr "Статус:" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:35 +msgid "fuck" +msgstr "трахнуть" -#: ../../include/identity.php:730 ../../include/identity.php:1007 -#: ../../mod/directory.php:162 -msgid "Homepage:" -msgstr "Домашняя страница:" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:35 +msgid "fucked" +msgstr "трахнул" -#: ../../include/identity.php:731 ../../mod/dirprofile.php:151 -msgid "Online Now" -msgstr "Сейчас в сети" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:36 +msgid "bonk" +msgstr "" -#: ../../include/identity.php:796 ../../include/identity.php:876 -#: ../../mod/ping.php:262 -msgid "g A l F d" -msgstr "g A l F d" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:36 +msgid "bonked" +msgstr "" -#: ../../include/identity.php:797 ../../include/identity.php:877 -msgid "F d" -msgstr "F d" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 +msgid "declare undying love for" +msgstr "" -#: ../../include/identity.php:842 ../../include/identity.php:917 -#: ../../mod/ping.php:284 -msgid "[today]" -msgstr "[сегодня]" +#: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 +msgid "declared undying love for" +msgstr "" -#: ../../include/identity.php:854 -msgid "Birthday Reminders" -msgstr "Напоминания о Днях Рождения" +#: ../../extend/addon/hzaddons/wppost/wppost.php:45 +msgid "Post to WordPress" +msgstr "Опубликовать в WordPress" -#: ../../include/identity.php:855 -msgid "Birthdays this week:" -msgstr "Дни Рождения на этой неделе:" +#: ../../extend/addon/hzaddons/wppost/wppost.php:82 +msgid "Enable WordPress Post Plugin" +msgstr "Включить плагин публикаций WordPress" -#: ../../include/identity.php:910 -msgid "[No description]" -msgstr "[без описания]" +#: ../../extend/addon/hzaddons/wppost/wppost.php:86 +msgid "WordPress username" +msgstr "Имя пользователя WordPress" -#: ../../include/identity.php:928 -msgid "Event Reminders" -msgstr "Напоминания мероприятий" +#: ../../extend/addon/hzaddons/wppost/wppost.php:90 +msgid "WordPress password" +msgstr "Пароль WordPress" -#: ../../include/identity.php:929 -msgid "Events this week:" -msgstr "Мероприятия на этой неделе:" +#: ../../extend/addon/hzaddons/wppost/wppost.php:94 +msgid "WordPress API URL" +msgstr "URL API WordPress" -#: ../../include/identity.php:942 ../../include/identity.php:1050 -#: ../../include/apps.php:128 ../../mod/profperm.php:112 -msgid "Profile" -msgstr "Профиль" +#: ../../extend/addon/hzaddons/wppost/wppost.php:95 +msgid "Typically https://your-blog.tld/xmlrpc.php" +msgstr "Обычно https://your-blog.tld/xmlrpc.php" -#: ../../include/identity.php:950 ../../mod/settings.php:935 -msgid "Full Name:" -msgstr "Полное имя:" +#: ../../extend/addon/hzaddons/wppost/wppost.php:98 +msgid "WordPress blogid" +msgstr "" -#: ../../include/identity.php:957 -msgid "Like this channel" -msgstr "нравиться этот канал" +#: ../../extend/addon/hzaddons/wppost/wppost.php:99 +msgid "For multi-user sites such as wordpress.com, otherwise leave blank" +msgstr "Для многопользовательских сайтов, таких, как wordpress.com. В противном случае оставьте пустым" -#: ../../include/identity.php:981 -msgid "j F, Y" -msgstr "j F, Y" +#: ../../extend/addon/hzaddons/wppost/wppost.php:105 +msgid "Post to WordPress by default" +msgstr "Публиковать в WordPress по умолчанию" -#: ../../include/identity.php:982 -msgid "j F" -msgstr "j F" +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 +msgid "Forward comments (requires hubzilla_wp plugin)" +msgstr "Пересылать комментарии (требуется плагин hubzilla_wp)" -#: ../../include/identity.php:989 -msgid "Birthday:" -msgstr "День Рождения:" +#: ../../extend/addon/hzaddons/wppost/wppost.php:113 +msgid "WordPress Post Settings" +msgstr "Настройки публикации в WordPress" -#: ../../include/identity.php:993 -msgid "Age:" -msgstr "Возраст:" +#: ../../extend/addon/hzaddons/wppost/wppost.php:129 +msgid "Wordpress Settings saved." +msgstr "Настройки WordPress сохранены." -#: ../../include/identity.php:1002 -#, php-format -msgid "for %1$d %2$s" -msgstr "для %1$d %2$s" +#: ../../extend/addon/hzaddons/wholikesme/wholikesme.php:29 +msgid "Who likes me?" +msgstr "Кому я нравлюсь?" -#: ../../include/identity.php:1005 ../../mod/profiles.php:535 -msgid "Sexual Preference:" -msgstr "Сексуальная ориентация:" +#: ../../extend/addon/hzaddons/testdrive/testdrive.php:104 +#, php-format +msgid "Your account on %s will expire in a few days." +msgstr "Ваш аккаунт на %s перестанет работать через несколько дней." -#: ../../include/identity.php:1009 ../../mod/profiles.php:537 -msgid "Hometown:" -msgstr "Родной город:" +#: ../../extend/addon/hzaddons/testdrive/testdrive.php:105 +msgid "Your $Productname test account is about to expire." +msgstr "Тестовый период вашей учётной записи в $Productname истёк." -#: ../../include/identity.php:1011 -msgid "Tags:" -msgstr "Тэги:" +#: ../../boot.php:1592 +msgid "Create an account to access services and applications" +msgstr "Создайте аккаунт для доступа к службам и приложениям" -#: ../../include/identity.php:1013 ../../mod/profiles.php:538 -msgid "Political Views:" -msgstr "Политические взгляды:" +#: ../../boot.php:1593 ../../include/nav.php:158 +#: ../../Zotlabs/Module/Register.php:294 +msgid "Register" +msgstr "Регистрация" -#: ../../include/identity.php:1015 -msgid "Religion:" -msgstr "Религия:" +#: ../../boot.php:1612 ../../include/nav.php:105 ../../include/nav.php:134 +#: ../../include/nav.php:153 +msgid "Logout" +msgstr "Выход" -#: ../../include/identity.php:1017 ../../mod/directory.php:164 -msgid "About:" -msgstr "О себе:" +#: ../../boot.php:1613 ../../include/nav.php:120 ../../include/nav.php:124 +#: ../../Zotlabs/Lib/Apps.php:301 +msgid "Login" +msgstr "Войти" -#: ../../include/identity.php:1019 -msgid "Hobbies/Interests:" -msgstr "Хобби / интересы:" +#: ../../boot.php:1614 ../../include/channel.php:2334 +#: ../../Zotlabs/Module/Rmagic.php:75 +msgid "Remote Authentication" +msgstr "Удаленная аутентификация" -#: ../../include/identity.php:1021 ../../mod/profiles.php:541 -msgid "Likes:" -msgstr "Что вам нравится:" +#: ../../boot.php:1616 +msgid "Login/Email" +msgstr "Пользователь / email" -#: ../../include/identity.php:1023 ../../mod/profiles.php:542 -msgid "Dislikes:" -msgstr "Что вам не нравится:" +#: ../../boot.php:1617 +msgid "Password" +msgstr "Пароль" -#: ../../include/identity.php:1026 -msgid "Contact information and Social Networks:" -msgstr "Информация и социальные сети контакта:" +#: ../../boot.php:1618 +msgid "Remember me" +msgstr "Запомнить меня" -#: ../../include/identity.php:1028 -msgid "My other channels:" -msgstr "Мои другие каналы:" +#: ../../boot.php:1621 +msgid "Forgot your password?" +msgstr "Забыли пароль или логин?" -#: ../../include/identity.php:1030 -msgid "Musical interests:" -msgstr "Музыкальные интересы:" +#: ../../boot.php:1622 ../../Zotlabs/Module/Lostpass.php:91 +msgid "Password Reset" +msgstr "Сбросить пароль" -#: ../../include/identity.php:1032 -msgid "Books, literature:" -msgstr "Книги, литература:" +#: ../../boot.php:2405 +#, php-format +msgid "[$Projectname] Website SSL error for %s" +msgstr "[$Projectname] Ошибка SSL/TLS веб-сайта для %s" -#: ../../include/identity.php:1034 -msgid "Television:" -msgstr "Телевидение:" +#: ../../boot.php:2410 +msgid "Website SSL certificate is not valid. Please correct." +msgstr "SSL/TLS сертификат веб-сайт недействителен. Исправьте это." -#: ../../include/identity.php:1036 -msgid "Film/dance/culture/entertainment:" -msgstr "Кино / танцы / культура / развлечения:" +#: ../../boot.php:2526 +#, php-format +msgid "[$Projectname] Cron tasks not running on %s" +msgstr "[$Projectname] Задания Cron не запущены на %s" -#: ../../include/identity.php:1038 -msgid "Love/Romance:" -msgstr "Любовь / Романс:" +#: ../../boot.php:2531 +msgid "Cron/Scheduled tasks not running." +msgstr "Задания Cron / планировщика не запущены." -#: ../../include/identity.php:1040 -msgid "Work/employment:" -msgstr "Работа / Занятость:" +#: ../../boot.php:2532 ../../include/datetime.php:238 +msgid "never" +msgstr "никогд" -#: ../../include/identity.php:1042 -msgid "School/education:" -msgstr "Школа / образование:" +#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3078 +#: ../../Zotlabs/Module/Admin/Site.php:198 +msgid "Default" +msgstr "По умолчанию" -#: ../../include/identity.php:1052 -msgid "Like this thing" -msgstr "нравится этo" +#: ../../view/theme/redbasic/php/config.php:16 +#: ../../view/theme/redbasic/php/config.php:19 +msgid "Focus (Hubzilla default)" +msgstr "Фокус (по умолчанию Hubzilla)" -#: ../../include/network.php:652 -msgid "view full size" -msgstr "посмотреть в полный размер" +#: ../../view/theme/redbasic/php/config.php:97 +msgid "Theme settings" +msgstr "Настройки темы" -#: ../../include/text.php:320 -msgid "prev" -msgstr "предыдущий" +#: ../../view/theme/redbasic/php/config.php:98 +msgid "Narrow navbar" +msgstr "Узкая панель навигации" -#: ../../include/text.php:322 -msgid "first" -msgstr "первый" +#: ../../view/theme/redbasic/php/config.php:99 +msgid "Navigation bar background color" +msgstr "Панель навигации, цвет фона" -#: ../../include/text.php:351 -msgid "last" -msgstr "последний" +#: ../../view/theme/redbasic/php/config.php:100 +msgid "Navigation bar icon color " +msgstr "Панель навигации, цвет значков" -#: ../../include/text.php:354 -msgid "next" -msgstr "следующий" +#: ../../view/theme/redbasic/php/config.php:101 +msgid "Navigation bar active icon color " +msgstr "Панель навигации, цвет активного значка" -#: ../../include/text.php:366 -msgid "older" -msgstr "старший" +#: ../../view/theme/redbasic/php/config.php:102 +msgid "Link color" +msgstr "цвет ссылок" -#: ../../include/text.php:368 -msgid "newer" -msgstr "новее" +#: ../../view/theme/redbasic/php/config.php:103 +msgid "Set font-color for banner" +msgstr "Цвет текста в шапке" -#: ../../include/text.php:729 -msgid "No connections" -msgstr "Нет контактов" +#: ../../view/theme/redbasic/php/config.php:104 +msgid "Set the background color" +msgstr "Цвет фона" -#: ../../include/text.php:742 -#, php-format -msgid "%d Connection" -msgid_plural "%d Connections" -msgstr[0] "%d контакт" -msgstr[1] "%d контакта" -msgstr[2] "%d контактов" +#: ../../view/theme/redbasic/php/config.php:105 +msgid "Set the background image" +msgstr "Фоновое изображение" -#: ../../include/text.php:754 -msgid "View Connections" -msgstr "Просмотр контактов" +#: ../../view/theme/redbasic/php/config.php:106 +msgid "Set the background color of items" +msgstr "Цвет фона элементов" -#: ../../include/text.php:815 ../../include/text.php:829 -#: ../../include/widgets.php:186 ../../mod/rbmark.php:28 -#: ../../mod/rbmark.php:98 ../../mod/filer.php:50 -msgid "Save" -msgstr "Запомнить" +#: ../../view/theme/redbasic/php/config.php:107 +msgid "Set the background color of comments" +msgstr "Цвет фона комментариев" -#: ../../include/text.php:895 -msgid "poke" -msgstr "подпихнуть" +#: ../../view/theme/redbasic/php/config.php:108 +msgid "Set font-size for the entire application" +msgstr "Установить системный размер шрифта" -#: ../../include/text.php:896 -msgid "ping" -msgstr "пинг - проверка связи" +#: ../../view/theme/redbasic/php/config.php:108 +msgid "Examples: 1rem, 100%, 16px" +msgstr "Например: 1rem, 100%, 16px" -#: ../../include/text.php:896 -msgid "pinged" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:109 +msgid "Set font-color for posts and comments" +msgstr "Цвет шрифта для постов и комментариев" -#: ../../include/text.php:897 -msgid "prod" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:110 +msgid "Set radius of corners" +msgstr "Радиус скруглений" -#: ../../include/text.php:897 -msgid "prodded" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:110 +msgid "Example: 4px" +msgstr "Например: 4px" -#: ../../include/text.php:898 -msgid "slap" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:111 +msgid "Set shadow depth of photos" +msgstr "Глубина теней фотографий" -#: ../../include/text.php:898 -msgid "slapped" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:112 +msgid "Set maximum width of content region in pixel" +msgstr "Максимальная ширина содержания региона (в пикселях)" -#: ../../include/text.php:899 -msgid "finger" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:112 +msgid "Leave empty for default width" +msgstr "Оставьте пустым для ширины по умолчанию" -#: ../../include/text.php:899 -msgid "fingered" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:113 +msgid "Set size of conversation author photo" +msgstr "Размер фотографии автора беседы" -#: ../../include/text.php:900 -msgid "rebuff" -msgstr "" +#: ../../view/theme/redbasic/php/config.php:114 +msgid "Set size of followup author photos" +msgstr "Размер фотографий подписчиков" + +#: ../../include/bbcode.php:200 ../../include/bbcode.php:1202 +#: ../../include/bbcode.php:1205 ../../include/bbcode.php:1210 +#: ../../include/bbcode.php:1213 ../../include/bbcode.php:1216 +#: ../../include/bbcode.php:1219 ../../include/bbcode.php:1224 +#: ../../include/bbcode.php:1227 ../../include/bbcode.php:1232 +#: ../../include/bbcode.php:1235 ../../include/bbcode.php:1238 +#: ../../include/bbcode.php:1241 +msgid "Image/photo" +msgstr "Изображение / фотография" -#: ../../include/text.php:900 -msgid "rebuffed" -msgstr "" +#: ../../include/bbcode.php:239 ../../include/bbcode.php:1252 +msgid "Encrypted content" +msgstr "Зашифрованное содержание" -#: ../../include/text.php:909 -msgid "happy" -msgstr "счастливый" +#: ../../include/bbcode.php:255 +#, php-format +msgid "Install %1$s element %2$s" +msgstr "Установить %1$s элемент %2$s" -#: ../../include/text.php:910 +#: ../../include/bbcode.php:259 +#, php-format +msgid "" +"This post contains an installable %s element, however you lack permissions " +"to install it on this site." +msgstr "Эта публикация содержит устанавливаемый %s элемент, однако у вас нет разрешений для его установки на этом сайте." + +#: ../../include/bbcode.php:269 ../../Zotlabs/Module/Impel.php:43 +msgid "webpage" +msgstr "веб-страница" + +#: ../../include/bbcode.php:272 ../../Zotlabs/Module/Impel.php:53 +msgid "layout" +msgstr "шаблон" + +#: ../../include/bbcode.php:275 ../../Zotlabs/Module/Impel.php:48 +msgid "block" +msgstr "заблокировать" + +#: ../../include/bbcode.php:278 ../../Zotlabs/Module/Impel.php:60 +msgid "menu" +msgstr "меню" + +#: ../../include/bbcode.php:350 +msgid "card" +msgstr "карточка" + +#: ../../include/bbcode.php:352 +msgid "article" +msgstr "статья" + +#: ../../include/bbcode.php:354 ../../include/markdown.php:160 +#: ../../Zotlabs/Module/Tagger.php:77 +msgid "post" +msgstr "публикация" + +#: ../../include/bbcode.php:358 ../../include/markdown.php:158 +#, php-format +msgid "%1$s wrote the following %2$s %3$s" +msgstr "%1$s была создана %2$s %3$s" + +#: ../../include/bbcode.php:435 ../../include/bbcode.php:443 +msgid "Click to open/close" +msgstr "Нажмите, чтобы открыть/закрыть" + +#: ../../include/bbcode.php:443 +msgid "spoiler" +msgstr "спойлер" + +#: ../../include/bbcode.php:456 +msgid "View article" +msgstr "Просмотр статей" + +#: ../../include/bbcode.php:456 +msgid "View summary" +msgstr "Просмотр резюме" + +#: ../../include/bbcode.php:746 ../../include/bbcode.php:916 +#: ../../Zotlabs/Lib/NativeWikiPage.php:597 +msgid "Different viewers will see this text differently" +msgstr "Различные зрители увидят этот текст по-разному" + +#: ../../include/bbcode.php:1190 +msgid "$1 wrote:" +msgstr "$1 писал:" + +#: ../../include/account.php:36 +msgid "Not a valid email address" +msgstr "Недействительный адрес электронной почты" + +#: ../../include/account.php:38 +msgid "Your email domain is not among those allowed on this site" +msgstr "Домен электронной почты не входит в число тех, которые разрешены на этом сайте" + +#: ../../include/account.php:44 +msgid "Your email address is already registered at this site." +msgstr "Ваш адрес электронной почты уже зарегистрирован на этом сайте." + +#: ../../include/account.php:76 +msgid "An invitation is required." +msgstr "Требуется приглашение." + +#: ../../include/account.php:80 +msgid "Invitation could not be verified." +msgstr "Не удалось проверить приглашение." + +#: ../../include/account.php:158 +msgid "Please enter the required information." +msgstr "Пожалуйста, введите необходимую информацию." + +#: ../../include/account.php:225 +msgid "Failed to store account information." +msgstr "Не удалось сохранить информацию аккаунта." + +#: ../../include/account.php:314 +#, php-format +msgid "Registration confirmation for %s" +msgstr "Подтверждение регистрации для %s" + +#: ../../include/account.php:385 +#, php-format +msgid "Registration request at %s" +msgstr "Запрос регистрации на %s" + +#: ../../include/account.php:407 +msgid "your registration password" +msgstr "ваш пароль регистрации" + +#: ../../include/account.php:413 ../../include/account.php:475 +#, php-format +msgid "Registration details for %s" +msgstr "Регистрационные данные для %s" + +#: ../../include/account.php:486 +msgid "Account approved." +msgstr "Аккаунт утвержден." + +#: ../../include/account.php:526 +#, php-format +msgid "Registration revoked for %s" +msgstr "Регистрация отозвана для %s" + +#: ../../include/account.php:805 ../../include/account.php:807 +msgid "Click here to upgrade." +msgstr "Нажмите здесь для обновления." + +#: ../../include/account.php:813 +msgid "This action exceeds the limits set by your subscription plan." +msgstr "Это действие превышает ограничения, установленные в вашем плане." + +#: ../../include/account.php:818 +msgid "This action is not available under your subscription plan." +msgstr "Это действие невозможно из-за ограничений в вашем плане." + +#: ../../include/auth.php:192 +msgid "Delegation session ended." +msgstr "Делегированная сессия завершена." + +#: ../../include/auth.php:196 +msgid "Logged out." +msgstr "Вышел из системы." + +#: ../../include/auth.php:291 +msgid "Email validation is incomplete. Please check your email." +msgstr "Проверка email не завершена. Пожалуйста, проверьте вашу почту." + +#: ../../include/auth.php:307 +msgid "Failed authentication" +msgstr "Ошибка аутентификации" + +#: ../../include/conversation.php:119 ../../include/event.php:1153 +#: ../../include/text.php:2025 ../../Zotlabs/Module/Events.php:260 +#: ../../Zotlabs/Module/Tagger.php:73 ../../Zotlabs/Module/Like.php:386 +msgid "event" +msgstr "событие" + +#: ../../include/conversation.php:122 ../../Zotlabs/Module/Like.php:121 +msgid "channel" +msgstr "канал" + +#: ../../include/conversation.php:146 ../../include/text.php:2030 +#: ../../Zotlabs/Module/Tagger.php:79 +msgid "comment" +msgstr "комментарий" + +#: ../../include/conversation.php:169 +#, php-format +msgid "likes %1$s's %2$s" +msgstr "Нравится %1$s %2$s" + +#: ../../include/conversation.php:172 +#, php-format +msgid "doesn't like %1$s's %2$s" +msgstr "Не нравится %1$s %2$s" + +#: ../../include/conversation.php:212 +#, php-format +msgid "%1$s is now connected with %2$s" +msgstr "%1$s теперь в контакте с %2$s" + +#: ../../include/conversation.php:247 +#, php-format +msgid "%1$s poked %2$s" +msgstr "%1$s ткнул %2$s" + +#: ../../include/conversation.php:251 ../../include/text.php:1140 +#: ../../include/text.php:1144 +msgid "poked" +msgstr "ткнут" + +#: ../../include/conversation.php:268 ../../Zotlabs/Module/Mood.php:67 +#, php-format +msgctxt "mood" +msgid "%1$s is %2$s" +msgstr "%1$s в %2$s" + +#: ../../include/conversation.php:483 ../../Zotlabs/Lib/ThreadItem.php:431 +msgid "This is an unsaved preview" +msgstr "Это несохранённый просмотр" + +#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1142 +msgctxt "title" +msgid "Likes" +msgstr "Нравится" + +#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1142 +msgctxt "title" +msgid "Dislikes" +msgstr "Не нравится" + +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 +msgctxt "title" +msgid "Agree" +msgstr "За" + +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 +msgctxt "title" +msgid "Disagree" +msgstr "Против" + +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 +msgctxt "title" +msgid "Abstain" +msgstr "Воздерживается" + +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 +msgctxt "title" +msgid "Attending" +msgstr "Посещает" + +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 +msgctxt "title" +msgid "Not attending" +msgstr "Не посещает" + +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 +msgctxt "title" +msgid "Might attend" +msgstr "Может присутствовать" + +#: ../../include/conversation.php:690 ../../Zotlabs/Lib/ThreadItem.php:158 +msgid "Select" +msgstr "Выбрать" + +#: ../../include/conversation.php:691 ../../include/conversation.php:736 +#: ../../Zotlabs/Lib/ThreadItem.php:148 ../../Zotlabs/Lib/Apps.php:476 +#: ../../Zotlabs/Module/Cdav.php:897 ../../Zotlabs/Module/Cdav.php:1187 +#: ../../Zotlabs/Module/Photos.php:1208 +#: ../../Zotlabs/Module/Connections.php:289 +#: ../../Zotlabs/Module/Card_edit.php:129 +#: ../../Zotlabs/Module/Editblock.php:139 ../../Zotlabs/Module/Connedit.php:654 +#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Webpages.php:242 +#: ../../Zotlabs/Module/Editwebpage.php:167 +#: ../../Zotlabs/Module/Editlayout.php:138 +#: ../../Zotlabs/Module/Admin/Accounts.php:175 +#: ../../Zotlabs/Module/Admin/Profs.php:176 +#: ../../Zotlabs/Module/Admin/Channels.php:149 +#: ../../Zotlabs/Module/Blocks.php:162 +#: ../../Zotlabs/Module/Settings/Oauth2.php:151 +#: ../../Zotlabs/Module/Settings/Oauth.php:151 +#: ../../Zotlabs/Module/Article_edit.php:129 +#: ../../Zotlabs/Module/Profiles.php:800 ../../Zotlabs/Module/Thing.php:267 +#: ../../Zotlabs/Storage/Browser.php:291 +msgid "Delete" +msgstr "Удалить" + +#: ../../include/conversation.php:695 ../../Zotlabs/Lib/ThreadItem.php:247 +msgid "Toggle Star Status" +msgstr "Переключить статус пометки" + +#: ../../include/conversation.php:700 ../../Zotlabs/Lib/ThreadItem.php:97 +msgid "Private Message" +msgstr "Личное сообщение" + +#: ../../include/conversation.php:707 ../../Zotlabs/Lib/ThreadItem.php:258 +msgid "Message signature validated" +msgstr "Подпись сообщения проверена" + +#: ../../include/conversation.php:708 ../../Zotlabs/Lib/ThreadItem.php:259 +msgid "Message signature incorrect" +msgstr "Подпись сообщения неверная" + +#: ../../include/conversation.php:735 ../../Zotlabs/Module/Connections.php:303 +#: ../../Zotlabs/Module/Admin/Accounts.php:173 +msgid "Approve" +msgstr "Утвердить" + +#: ../../include/conversation.php:739 +#, php-format +msgid "View %s's profile @ %s" +msgstr "Просмотреть профиль %s @ %s" + +#: ../../include/conversation.php:759 +msgid "Categories:" +msgstr "Категории:" + +#: ../../include/conversation.php:760 +msgid "Filed under:" +msgstr "Хранить под:" + +#: ../../include/conversation.php:766 ../../Zotlabs/Lib/ThreadItem.php:367 +#, php-format +msgid "from %s" +msgstr "от %s" + +#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:370 +#, php-format +msgid "last edited: %s" +msgstr "последнее редактирование: %s" + +#: ../../include/conversation.php:770 ../../Zotlabs/Lib/ThreadItem.php:371 +#, php-format +msgid "Expires: %s" +msgstr "Срок действия: %s" + +#: ../../include/conversation.php:785 +msgid "View in context" +msgstr "Показать в контексте" + +#: ../../include/conversation.php:787 ../../Zotlabs/Lib/ThreadItem.php:432 +#: ../../Zotlabs/Module/Photos.php:1108 +msgid "Please wait" +msgstr "Подождите пожалуйста" + +#: ../../include/conversation.php:886 +msgid "remove" +msgstr "удалить" + +#: ../../include/conversation.php:890 +msgid "Loading..." +msgstr "Загрузка..." + +#: ../../include/conversation.php:891 +msgid "Delete Selected Items" +msgstr "Удалить выбранные элементы" + +#: ../../include/conversation.php:934 +msgid "View Source" +msgstr "Просмотреть источник" + +#: ../../include/conversation.php:944 +msgid "Follow Thread" +msgstr "Следить за темой" + +#: ../../include/conversation.php:953 +msgid "Unfollow Thread" +msgstr "Прекратить отслеживать тему" + +#: ../../include/conversation.php:1047 ../../Zotlabs/Module/Connedit.php:615 +msgid "Recent Activity" +msgstr "Последние действия" + +#: ../../include/conversation.php:1057 ../../include/channel.php:1376 +#: ../../include/connections.php:110 ../../Zotlabs/Widget/Suggestions.php:44 +#: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Suggest.php:56 +#: ../../Zotlabs/Module/Directory.php:338 +msgid "Connect" +msgstr "Подключить" + +#: ../../include/conversation.php:1067 +msgid "Edit Connection" +msgstr "Редактировать контакт" + +#: ../../include/conversation.php:1077 +msgid "Message" +msgstr "Сообщение" + +#: ../../include/conversation.php:1087 ../../Zotlabs/Module/Pubsites.php:35 +#: ../../Zotlabs/Module/Ratings.php:97 +msgid "Ratings" +msgstr "Оценки" + +#: ../../include/conversation.php:1097 ../../Zotlabs/Lib/Apps.php:316 +#: ../../Zotlabs/Module/Poke.php:182 +msgid "Poke" +msgstr "Ткнуть" + +#: ../../include/conversation.php:1211 +#, php-format +msgid "%s likes this." +msgstr "%s нравится это." + +#: ../../include/conversation.php:1211 +#, php-format +msgid "%s doesn't like this." +msgstr "%s не нравится это." + +#: ../../include/conversation.php:1215 +#, php-format +msgid "%2$d people like this." +msgid_plural "%2$d people like this." +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1217 +#, php-format +msgid "%2$d people don't like this." +msgid_plural "%2$d people don't like this." +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1223 +msgid "and" +msgstr "и" + +#: ../../include/conversation.php:1226 +#, php-format +msgid ", and %d other people" +msgid_plural ", and %d other people" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1227 +#, php-format +msgid "%s like this." +msgstr "%s нравится это." + +#: ../../include/conversation.php:1227 +#, php-format +msgid "%s don't like this." +msgstr "%s не нравится это." + +#: ../../include/conversation.php:1270 +msgid "Set your location" +msgstr "Задать своё местоположение" + +#: ../../include/conversation.php:1271 +msgid "Clear browser location" +msgstr "Очистить местоположение из браузера" + +#: ../../include/conversation.php:1283 ../../Zotlabs/Module/Mail.php:288 +#: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 +#: ../../Zotlabs/Module/Editblock.php:116 +#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:207 +#: ../../Zotlabs/Module/Article_edit.php:101 +msgid "Insert web link" +msgstr "Вставить веб-ссылку" + +#: ../../include/conversation.php:1287 +msgid "Embed (existing) photo from your photo albums" +msgstr "Встроить (существующее) фото из вашего фотоальбома" + +#: ../../include/conversation.php:1322 ../../Zotlabs/Module/Mail.php:241 +#: ../../Zotlabs/Module/Mail.php:362 ../../Zotlabs/Module/Chat.php:205 +msgid "Please enter a link URL:" +msgstr "Пожалуйста введите URL ссылки:" + +#: ../../include/conversation.php:1323 +msgid "Tag term:" +msgstr "Теги:" + +#: ../../include/conversation.php:1324 +msgid "Where are you right now?" +msgstr "Где вы сейчас?" + +#: ../../include/conversation.php:1327 +#: ../../Zotlabs/Module/Profile_photo.php:467 +#: ../../Zotlabs/Module/Cover_photo.php:401 ../../Zotlabs/Module/Wiki.php:381 +msgid "Choose images to embed" +msgstr "Выбрать изображения для встраивания" + +#: ../../include/conversation.php:1328 +#: ../../Zotlabs/Module/Profile_photo.php:468 +#: ../../Zotlabs/Module/Cover_photo.php:402 ../../Zotlabs/Module/Wiki.php:382 +msgid "Choose an album" +msgstr "Выбрать альбом" + +#: ../../include/conversation.php:1329 +msgid "Choose a different album..." +msgstr "Выбрать другой альбом..." + +#: ../../include/conversation.php:1330 +#: ../../Zotlabs/Module/Profile_photo.php:470 +#: ../../Zotlabs/Module/Cover_photo.php:404 ../../Zotlabs/Module/Wiki.php:384 +msgid "Error getting album list" +msgstr "Ошибка получения списка альбомов" + +#: ../../include/conversation.php:1331 +#: ../../Zotlabs/Module/Profile_photo.php:471 +#: ../../Zotlabs/Module/Cover_photo.php:405 ../../Zotlabs/Module/Wiki.php:385 +msgid "Error getting photo link" +msgstr "Ошибка получения ссылки на фотографию" + +#: ../../include/conversation.php:1332 +#: ../../Zotlabs/Module/Profile_photo.php:472 +#: ../../Zotlabs/Module/Cover_photo.php:406 ../../Zotlabs/Module/Wiki.php:386 +msgid "Error getting album" +msgstr "Ошибка получения альбома" + +#: ../../include/conversation.php:1333 +msgid "Comments enabled" +msgstr "Комментарии включены" + +#: ../../include/conversation.php:1334 +msgid "Comments disabled" +msgstr "Комментарии отключены" + +#: ../../include/conversation.php:1341 ../../Zotlabs/Lib/ThreadItem.php:767 +#: ../../Zotlabs/Module/Photos.php:1128 ../../Zotlabs/Module/Events.php:478 +#: ../../Zotlabs/Module/Webpages.php:247 +msgid "Preview" +msgstr "Предварительный просмотр" + +#: ../../include/conversation.php:1374 ../../Zotlabs/Widget/Cdav.php:124 +#: ../../Zotlabs/Module/Photos.php:1107 ../../Zotlabs/Module/Layouts.php:194 +#: ../../Zotlabs/Module/Webpages.php:241 ../../Zotlabs/Module/Blocks.php:161 +#: ../../Zotlabs/Module/Wiki.php:287 +msgid "Share" +msgstr "Поделиться" + +#: ../../include/conversation.php:1383 +msgid "Page link name" +msgstr "Название ссылки на страницу " + +#: ../../include/conversation.php:1386 +msgid "Post as" +msgstr "Опубликовать как" + +#: ../../include/conversation.php:1388 ../../Zotlabs/Lib/ThreadItem.php:758 +msgid "Bold" +msgstr "Жирный" + +#: ../../include/conversation.php:1389 ../../Zotlabs/Lib/ThreadItem.php:759 +msgid "Italic" +msgstr "Курсив" + +#: ../../include/conversation.php:1390 ../../Zotlabs/Lib/ThreadItem.php:760 +msgid "Underline" +msgstr "Подчеркнутый" + +#: ../../include/conversation.php:1391 ../../Zotlabs/Lib/ThreadItem.php:761 +msgid "Quote" +msgstr "Цитата" + +#: ../../include/conversation.php:1392 ../../Zotlabs/Lib/ThreadItem.php:762 +msgid "Code" +msgstr "Код" + +#: ../../include/conversation.php:1393 ../../Zotlabs/Lib/ThreadItem.php:764 +msgid "Attach/Upload file" +msgstr "Прикрепить/загрузить файл" + +#: ../../include/conversation.php:1396 ../../Zotlabs/Module/Wiki.php:378 +msgid "Embed an image from your albums" +msgstr "Встроить изображение из ваших альбомов" + +#: ../../include/conversation.php:1397 ../../include/conversation.php:1446 +#: ../../Zotlabs/Module/Cdav.php:899 ../../Zotlabs/Module/Cdav.php:1188 +#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88 +#: ../../Zotlabs/Module/Card_edit.php:131 +#: ../../Zotlabs/Module/Profile_photo.php:465 +#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Editpost.php:109 +#: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 +#: ../../Zotlabs/Module/Connedit.php:924 +#: ../../Zotlabs/Module/Editwebpage.php:169 +#: ../../Zotlabs/Module/Editlayout.php:140 +#: ../../Zotlabs/Module/Admin/Addons.php:423 +#: ../../Zotlabs/Module/Cover_photo.php:399 +#: ../../Zotlabs/Module/Settings/Oauth2.php:86 +#: ../../Zotlabs/Module/Settings/Oauth2.php:114 +#: ../../Zotlabs/Module/Settings/Oauth.php:89 +#: ../../Zotlabs/Module/Settings/Oauth.php:115 +#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Module/Article_edit.php:131 +#: ../../Zotlabs/Module/Wiki.php:347 ../../Zotlabs/Module/Wiki.php:379 +#: ../../Zotlabs/Module/Profiles.php:801 +msgid "Cancel" +msgstr "Отменить" + +#: ../../include/conversation.php:1398 ../../include/conversation.php:1445 +#: ../../Zotlabs/Module/Profile_photo.php:466 +#: ../../Zotlabs/Module/Cover_photo.php:400 ../../Zotlabs/Module/Wiki.php:380 +msgid "OK" +msgstr "" + +#: ../../include/conversation.php:1400 +msgid "Toggle voting" +msgstr "Подключить голосование" + +#: ../../include/conversation.php:1403 +msgid "Disable comments" +msgstr "Отключить комментарии" + +#: ../../include/conversation.php:1404 +msgid "Toggle comments" +msgstr "Переключить комментарии" + +#: ../../include/conversation.php:1409 ../../Zotlabs/Module/Photos.php:703 +#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Card_edit.php:117 +#: ../../Zotlabs/Module/Editblock.php:129 +#: ../../Zotlabs/Module/Article_edit.php:117 +msgid "Title (optional)" +msgstr "Заголовок (необязательно)" + +#: ../../include/conversation.php:1412 +msgid "Categories (optional, comma-separated list)" +msgstr "Категории (необязательно, список через запятую)" + +#: ../../include/conversation.php:1413 ../../Zotlabs/Module/Events.php:479 +msgid "Permission settings" +msgstr "Настройки разрешений" + +#: ../../include/conversation.php:1435 +msgid "Other networks and post services" +msgstr "Другие сети и службы публикаций" + +#: ../../include/conversation.php:1438 ../../Zotlabs/Module/Mail.php:292 +#: ../../Zotlabs/Module/Mail.php:434 +msgid "Set expiration date" +msgstr "Установить срок действия" + +#: ../../include/conversation.php:1441 +msgid "Set publish date" +msgstr "Установить дату публикации" + +#: ../../include/conversation.php:1443 ../../Zotlabs/Lib/ThreadItem.php:771 +#: ../../Zotlabs/Module/Mail.php:294 ../../Zotlabs/Module/Mail.php:436 +#: ../../Zotlabs/Module/Chat.php:206 +msgid "Encrypt text" +msgstr "Зашифровать текст" + +#: ../../include/conversation.php:1702 +msgid "Commented Order" +msgstr "По комментариям" + +#: ../../include/conversation.php:1705 +msgid "Sort by Comment Date" +msgstr "Сортировать по дате комментария" + +#: ../../include/conversation.php:1709 +msgid "Posted Order" +msgstr "По публикациям" + +#: ../../include/conversation.php:1712 +msgid "Sort by Post Date" +msgstr "Сортировать по дате публикации" + +#: ../../include/conversation.php:1717 ../../Zotlabs/Module/Profiles.php:733 +msgid "Personal" +msgstr "Личное" + +#: ../../include/conversation.php:1720 +msgid "Posts that mention or involve you" +msgstr "Публикации, где вы были упомянуты или участвовали" + +#: ../../include/conversation.php:1726 ../../Zotlabs/Module/Connections.php:80 +#: ../../Zotlabs/Module/Connections.php:89 +#: ../../Zotlabs/Module/Notifications.php:50 ../../Zotlabs/Module/Menu.php:179 +msgid "New" +msgstr "Новые" + +#: ../../include/conversation.php:1729 +msgid "Activity Stream - by date" +msgstr "Поток активности - по дате" + +#: ../../include/conversation.php:1735 +msgid "Starred" +msgstr "Отмеченые" + +#: ../../include/conversation.php:1738 +msgid "Favourite Posts" +msgstr "Любимые публикации" + +#: ../../include/conversation.php:1745 +msgid "Spam" +msgstr "Спам" + +#: ../../include/conversation.php:1748 +msgid "Posts flagged as SPAM" +msgstr "Публикация помечена как спам" + +#: ../../include/conversation.php:1820 ../../include/nav.php:370 +#: ../../Zotlabs/Module/Admin/Channels.php:154 +msgid "Channel" +msgstr "Канал" + +#: ../../include/conversation.php:1823 ../../include/nav.php:373 +msgid "Status Messages and Posts" +msgstr "Статусы и публикации" + +#: ../../include/conversation.php:1833 ../../include/nav.php:383 +#: ../../Zotlabs/Module/Help.php:80 +msgid "About" +msgstr "О себе" + +#: ../../include/conversation.php:1836 ../../include/nav.php:386 +msgid "Profile Details" +msgstr "Информация о профиле" + +#: ../../include/conversation.php:1843 ../../include/nav.php:393 +#: ../../Zotlabs/Lib/Apps.php:310 ../../Zotlabs/Module/Fbrowser.php:29 +msgid "Photos" +msgstr "Фотографии" + +#: ../../include/conversation.php:1846 ../../include/nav.php:396 +#: ../../include/photos.php:667 +msgid "Photo Albums" +msgstr "Фотоальбомы" + +#: ../../include/conversation.php:1851 ../../include/nav.php:401 +#: ../../Zotlabs/Lib/Apps.php:305 ../../Zotlabs/Module/Fbrowser.php:85 +#: ../../Zotlabs/Storage/Browser.php:272 +msgid "Files" +msgstr "Файлы" + +#: ../../include/conversation.php:1854 ../../include/nav.php:404 +msgid "Files and Storage" +msgstr "Файлы и хранилище" + +#: ../../include/conversation.php:1862 ../../include/conversation.php:1865 +#: ../../Zotlabs/Lib/Apps.php:311 +msgid "Events" +msgstr "События" + +#: ../../include/conversation.php:1876 ../../include/conversation.php:1879 +#: ../../include/nav.php:426 ../../include/nav.php:429 +#: ../../Zotlabs/Widget/Chatroom_list.php:16 +msgid "Chatrooms" +msgstr "Чаты" + +#: ../../include/conversation.php:1891 ../../include/nav.php:439 +msgid "Bookmarks" +msgstr "Закладки" + +#: ../../include/conversation.php:1894 ../../include/nav.php:442 +msgid "Saved Bookmarks" +msgstr "Сохранённые закладки" + +#: ../../include/conversation.php:1902 ../../include/nav.php:450 +#: ../../include/features.php:123 ../../Zotlabs/Lib/Apps.php:293 +#: ../../Zotlabs/Module/Cards.php:42 ../../Zotlabs/Module/Cards.php:194 +msgid "Cards" +msgstr "Карточки" + +#: ../../include/conversation.php:1905 ../../include/nav.php:453 +msgid "View Cards" +msgstr "Просмотреть карточки" + +#: ../../include/conversation.php:1913 +msgid "articles" +msgstr "статьи" + +#: ../../include/conversation.php:1916 ../../include/nav.php:464 +msgid "View Articles" +msgstr "Просмотр статей" + +#: ../../include/conversation.php:1924 ../../include/nav.php:473 +#: ../../Zotlabs/Lib/Apps.php:306 ../../Zotlabs/Module/Webpages.php:237 +msgid "Webpages" +msgstr "Веб-страницы" + +#: ../../include/conversation.php:1927 ../../include/nav.php:476 +msgid "View Webpages" +msgstr "Просмотр веб-страниц" + +#: ../../include/conversation.php:1937 ../../include/nav.php:486 +#: ../../Zotlabs/Module/Wiki.php:197 +msgid "Wikis" +msgstr "" + +#: ../../include/conversation.php:1940 ../../include/nav.php:489 +#: ../../include/features.php:96 ../../Zotlabs/Lib/Apps.php:307 +msgid "Wiki" +msgstr "" + +#: ../../include/conversation.php:1990 ../../include/taxonomy.php:661 +#: ../../include/channel.php:1539 ../../Zotlabs/Lib/ThreadItem.php:216 +#: ../../Zotlabs/Module/Photos.php:1165 +msgctxt "noun" +msgid "Like" +msgid_plural "Likes" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1993 ../../Zotlabs/Lib/ThreadItem.php:221 +#: ../../Zotlabs/Module/Photos.php:1170 +msgctxt "noun" +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1996 +msgctxt "noun" +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:1999 +msgctxt "noun" +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:2002 +msgctxt "noun" +msgid "Undecided" +msgid_plural "Undecided" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:2005 +msgctxt "noun" +msgid "Agree" +msgid_plural "Agrees" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:2008 +msgctxt "noun" +msgid "Disagree" +msgid_plural "Disagrees" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/conversation.php:2011 +msgctxt "noun" +msgid "Abstain" +msgid_plural "Abstains" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/zot.php:772 +msgid "Invalid data packet" +msgstr "Неверный пакет данных" + +#: ../../include/zot.php:799 +msgid "Unable to verify channel signature" +msgstr "Невозможно проверить подпись канала" + +#: ../../include/zot.php:2557 +#, php-format +msgid "Unable to verify site signature for %s" +msgstr "Невозможно проверить подпись сайта %s" + +#: ../../include/zot.php:4221 +msgid "invalid target signature" +msgstr "недопустимая целевая подпись" + +#: ../../include/event.php:24 ../../include/event.php:71 +msgid "l F d, Y \\@ g:i A" +msgstr "" + +#: ../../include/event.php:32 ../../include/event.php:75 +msgid "Starts:" +msgstr "Начало:" + +#: ../../include/event.php:42 ../../include/event.php:79 +msgid "Finishes:" +msgstr "Окончание:" + +#: ../../include/event.php:54 ../../include/event.php:86 +#: ../../include/channel.php:1391 ../../Zotlabs/Module/Directory.php:324 +msgid "Location:" +msgstr "Откуда:" + +#: ../../include/event.php:1011 +msgid "This event has been added to your calendar." +msgstr "Это событие было добавлено в ваш календарь." + +#: ../../include/event.php:1227 +msgid "Not specified" +msgstr "Не указано" + +#: ../../include/event.php:1228 +msgid "Needs Action" +msgstr "Требует действия" + +#: ../../include/event.php:1229 +msgid "Completed" +msgstr "Завершено" + +#: ../../include/event.php:1230 +msgid "In Process" +msgstr "В процессе" + +#: ../../include/event.php:1231 +msgid "Cancelled" +msgstr "Отменено" + +#: ../../include/event.php:1308 ../../include/connections.php:696 +#: ../../Zotlabs/Module/Cdav.php:1179 ../../Zotlabs/Module/Connedit.php:915 +#: ../../Zotlabs/Module/Profiles.php:792 +msgid "Mobile" +msgstr "Мобильный" + +#: ../../include/event.php:1309 ../../include/connections.php:697 +#: ../../Zotlabs/Module/Cdav.php:1180 ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Module/Profiles.php:793 +msgid "Home" +msgstr "Домашний" + +#: ../../include/event.php:1310 ../../include/connections.php:698 +msgid "Home, Voice" +msgstr "Дом, голос" + +#: ../../include/event.php:1311 ../../include/connections.php:699 +msgid "Home, Fax" +msgstr "Дом, факс" + +#: ../../include/event.php:1312 ../../include/connections.php:700 +#: ../../Zotlabs/Module/Cdav.php:1181 ../../Zotlabs/Module/Connedit.php:917 +#: ../../Zotlabs/Module/Profiles.php:794 +msgid "Work" +msgstr "Рабочий" + +#: ../../include/event.php:1313 ../../include/connections.php:701 +msgid "Work, Voice" +msgstr "Работа, голос" + +#: ../../include/event.php:1314 ../../include/connections.php:702 +msgid "Work, Fax" +msgstr "Работа, факс" + +#: ../../include/event.php:1315 ../../include/event.php:1322 +#: ../../include/selectors.php:49 ../../include/selectors.php:66 +#: ../../include/selectors.php:104 ../../include/selectors.php:140 +#: ../../include/connections.php:703 ../../include/connections.php:710 +#: ../../Zotlabs/Access/PermissionRoles.php:306 +#: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/Connedit.php:918 +#: ../../Zotlabs/Module/Settings/Channel.php:496 +#: ../../Zotlabs/Module/New_channel.php:172 +#: ../../Zotlabs/Module/Register.php:233 ../../Zotlabs/Module/Profiles.php:795 +msgid "Other" +msgstr "Другой" + +#: ../../include/attach.php:265 ../../include/attach.php:374 +msgid "Item was not found." +msgstr "Элемент не найден." + +#: ../../include/attach.php:282 +msgid "Unknown error." +msgstr "Неизвестная ошибка." + +#: ../../include/attach.php:567 +msgid "No source file." +msgstr "Нет исходного файла." + +#: ../../include/attach.php:589 +msgid "Cannot locate file to replace" +msgstr "Не удается найти файл для замены" + +#: ../../include/attach.php:608 +msgid "Cannot locate file to revise/update" +msgstr "Не удается найти файл для пересмотра / обновления" + +#: ../../include/attach.php:750 +#, php-format +msgid "File exceeds size limit of %d" +msgstr "Файл превышает предельный размер %d" + +#: ../../include/attach.php:771 +#, php-format +msgid "You have reached your limit of %1$.0f Mbytes attachment storage." +msgstr "Вы достигли предела %1$.0f Мбайт для хранения вложений." + +#: ../../include/attach.php:953 +msgid "File upload failed. Possible system limit or action terminated." +msgstr "Загрузка файла не удалась. Возможно система перегружена или попытка прекращена." + +#: ../../include/attach.php:982 +msgid "Stored file could not be verified. Upload failed." +msgstr "Файл для сохранения не может быть проверен. Загрузка не удалась." + +#: ../../include/attach.php:1056 ../../include/attach.php:1072 +msgid "Path not available." +msgstr "Путь недоступен." + +#: ../../include/attach.php:1121 ../../include/attach.php:1286 +msgid "Empty pathname" +msgstr "Пустое имя пути" + +#: ../../include/attach.php:1147 +msgid "duplicate filename or path" +msgstr "дублирующееся имя файла или пути" + +#: ../../include/attach.php:1172 +msgid "Path not found." +msgstr "Путь не найден." + +#: ../../include/attach.php:1240 +msgid "mkdir failed." +msgstr "mkdir не удался" + +#: ../../include/attach.php:1244 +msgid "database storage failed." +msgstr "ошибка при записи базы данных." + +#: ../../include/attach.php:1292 +msgid "Empty path" +msgstr "Пустое имя пути" + +#: ../../include/feedutils.php:860 ../../include/text.php:1451 +msgid "unknown" +msgstr "неизвестный" + +#: ../../include/bookmarks.php:34 +#, php-format +msgid "%1$s's bookmarks" +msgstr "Закладки пользователя %1$s" + +#: ../../include/dir_fns.php:141 +msgid "Directory Options" +msgstr "Параметры каталога" + +#: ../../include/dir_fns.php:143 +msgid "Safe Mode" +msgstr "Безопасный режим" + +#: ../../include/dir_fns.php:144 +msgid "Public Forums Only" +msgstr "Только публичные форумы" + +#: ../../include/dir_fns.php:145 +msgid "This Website Only" +msgstr "Только этот веб-сайт" + +#: ../../include/network.php:760 +msgid "view full size" +msgstr "посмотреть в полный размер" + +#: ../../include/network.php:1763 ../../include/network.php:1764 +msgid "Friendica" +msgstr "" + +#: ../../include/network.php:1765 +msgid "OStatus" +msgstr "" + +#: ../../include/network.php:1766 +msgid "GNU-Social" +msgstr "GNU social" + +#: ../../include/network.php:1767 +msgid "RSS/Atom" +msgstr "" + +#: ../../include/network.php:1770 +msgid "Diaspora" +msgstr "" + +#: ../../include/network.php:1771 +msgid "Facebook" +msgstr "" + +#: ../../include/network.php:1772 +msgid "Zot" +msgstr "" + +#: ../../include/network.php:1773 +msgid "LinkedIn" +msgstr "" + +#: ../../include/network.php:1774 +msgid "XMPP/IM" +msgstr "" + +#: ../../include/network.php:1775 +msgid "MySpace" +msgstr "" + +#: ../../include/activities.php:41 +msgid " and " +msgstr " и " + +#: ../../include/activities.php:49 +msgid "public profile" +msgstr "общедоступный профиль" + +#: ../../include/activities.php:58 +#, php-format +msgid "%1$s changed %2$s to “%3$s”" +msgstr "%1$s изменил %2$s на “%3$s”" + +#: ../../include/activities.php:59 +#, php-format +msgid "Visit %1$s's %2$s" +msgstr "Посетить %1$s %2$s" + +#: ../../include/activities.php:62 +#, php-format +msgid "%1$s has an updated %2$s, changing %3$s." +msgstr "%1$s обновлено %2$s, изменено %3$s." + +#: ../../include/nav.php:88 +msgid "Remote authentication" +msgstr "Удаленная аутентификация" + +#: ../../include/nav.php:88 +msgid "Click to authenticate to your home hub" +msgstr "Нажмите, чтобы аутентифицировать себя на домашнем узле" + +#: ../../include/nav.php:94 ../../Zotlabs/Lib/Apps.php:302 +#: ../../Zotlabs/Module/Manage.php:170 +msgid "Channel Manager" +msgstr "Менеджер каналов" + +#: ../../include/nav.php:94 +msgid "Manage your channels" +msgstr "Управление вашими каналами" + +#: ../../include/nav.php:97 ../../include/group.php:320 +#: ../../include/features.php:221 ../../Zotlabs/Widget/Activity_filter.php:68 +#: ../../Zotlabs/Module/Group.php:113 ../../Zotlabs/Module/Group.php:124 +msgid "Privacy Groups" +msgstr "Группы безопасности" + +#: ../../include/nav.php:97 +msgid "Manage your privacy groups" +msgstr "Управление вашим группами безопасности" + +#: ../../include/nav.php:99 ../../Zotlabs/Lib/Apps.php:304 +#: ../../Zotlabs/Widget/Settings_menu.php:141 +#: ../../Zotlabs/Widget/Newmember.php:46 +#: ../../Zotlabs/Module/Admin/Addons.php:344 +#: ../../Zotlabs/Module/Admin/Themes.php:125 +msgid "Settings" +msgstr "Настройки" + +#: ../../include/nav.php:99 +msgid "Account/Channel Settings" +msgstr "Настройки аккаунта / канала" + +#: ../../include/nav.php:105 ../../include/nav.php:134 +msgid "End this session" +msgstr "Закончить эту сессию" + +#: ../../include/nav.php:108 +msgid "Your profile page" +msgstr "Страницa вашего профиля" + +#: ../../include/nav.php:111 ../../include/channel.php:1296 +#: ../../Zotlabs/Module/Profiles.php:830 +msgid "Edit Profiles" +msgstr "Редактирование профилей" + +#: ../../include/nav.php:111 +msgid "Manage/Edit profiles" +msgstr "Управление / редактирование профилей" + +#: ../../include/nav.php:113 ../../Zotlabs/Widget/Newmember.php:28 +msgid "Edit your profile" +msgstr "Редактировать профиль" + +#: ../../include/nav.php:120 ../../include/nav.php:124 +msgid "Sign in" +msgstr "Войти" + +#: ../../include/nav.php:151 +msgid "Take me home" +msgstr "Домой" + +#: ../../include/nav.php:153 +msgid "Log me out of this site" +msgstr "Выйти с этого сайта" + +#: ../../include/nav.php:158 +msgid "Create an account" +msgstr "Создать аккаунт" + +#: ../../include/nav.php:170 ../../include/nav.php:272 +#: ../../include/help.php:68 ../../include/help.php:74 +#: ../../Zotlabs/Lib/Apps.php:313 ../../Zotlabs/Module/Layouts.php:186 +msgid "Help" +msgstr "Помощь" + +#: ../../include/nav.php:170 +msgid "Help and documentation" +msgstr "Справочная информация и документация" + +#: ../../include/nav.php:185 ../../include/acl_selectors.php:118 +#: ../../include/text.php:1062 ../../include/text.php:1074 +#: ../../Zotlabs/Lib/Apps.php:318 ../../Zotlabs/Widget/Sitesearch.php:31 +#: ../../Zotlabs/Widget/Activity_filter.php:148 +#: ../../Zotlabs/Module/Connections.php:335 ../../Zotlabs/Module/Search.php:44 +msgid "Search" +msgstr "Поиск" + +#: ../../include/nav.php:185 +msgid "Search site @name, !forum, #tag, ?docs, content" +msgstr "Искать на сайте @name, !forum, #tag, ?docs, содержимое" + +#: ../../include/nav.php:191 ../../Zotlabs/Widget/Admin.php:55 +msgid "Admin" +msgstr "Администрирование" + +#: ../../include/nav.php:191 +msgid "Site Setup and Configuration" +msgstr "Установка и конфигурация сайта" + +#: ../../include/nav.php:276 ../../Zotlabs/Widget/Notifications.php:162 +#: ../../Zotlabs/Module/Connedit.php:852 ../../Zotlabs/Module/Defperms.php:240 +#: ../../Zotlabs/Module/New_channel.php:154 +#: ../../Zotlabs/Module/New_channel.php:161 +msgid "Loading" +msgstr "Загрузка" + +#: ../../include/nav.php:282 +msgid "@name, !forum, #tag, ?doc, content" +msgstr "@name, !forum, #tag, ?docs, содержимое" + +#: ../../include/nav.php:283 +msgid "Please wait..." +msgstr "Подождите пожалуйста ..." + +#: ../../include/nav.php:289 +msgid "Add Apps" +msgstr "Добавить приложения" + +#: ../../include/nav.php:290 +msgid "Arrange Apps" +msgstr "Управление приложениями" + +#: ../../include/nav.php:291 +msgid "Toggle System Apps" +msgstr "Переключить системные приложения" + +#: ../../include/nav.php:412 ../../include/nav.php:415 +#: ../../Zotlabs/Storage/Browser.php:140 +msgid "Calendar" +msgstr "Календарь" + +#: ../../include/nav.php:461 ../../include/features.php:133 +#: ../../Zotlabs/Lib/Apps.php:292 ../../Zotlabs/Module/Articles.php:38 +#: ../../Zotlabs/Module/Articles.php:191 +msgid "Articles" +msgstr "Статьи" + +#: ../../include/help.php:34 +msgid "Help:" +msgstr "Помощь:" + +#: ../../include/help.php:78 +msgid "Not Found" +msgstr "Не найдено" + +#: ../../include/help.php:81 ../../Zotlabs/Lib/NativeWikiPage.php:519 +#: ../../Zotlabs/Web/Router.php:167 ../../Zotlabs/Module/Block.php:77 +#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:141 +#: ../../Zotlabs/Module/Display.php:158 ../../Zotlabs/Module/Display.php:175 +msgid "Page not found." +msgstr "Страница не найдена." + +#: ../../include/group.php:22 +msgid "" +"A deleted group with this name was revived. Existing item permissions " +"may apply to this group and any future members. If this is " +"not what you intended, please create another group with a different name." +msgstr "Удаленная группа с этим названием была восстановлена. Существующие разрешения пункт могут применяться к этой группе и к её будущих участников. Если это не то, чего вы хотели, пожалуйста, создайте другую группу с другим именем." + +#: ../../include/group.php:264 +msgid "Add new connections to this privacy group" +msgstr "Добавить новые контакты в группу безопасности" + +#: ../../include/group.php:298 +msgid "edit" +msgstr "редактировать" + +#: ../../include/group.php:321 +msgid "Edit group" +msgstr "Редактировать группу" + +#: ../../include/group.php:322 +msgid "Add privacy group" +msgstr "Добавить группу безопасности" + +#: ../../include/group.php:323 +msgid "Channels not in any privacy group" +msgstr "Каналы не включены ни в одну группу безопасности" + +#: ../../include/group.php:325 ../../Zotlabs/Widget/Savedsearch.php:84 +msgid "add" +msgstr "добавить" + +#: ../../include/import.php:25 +msgid "Unable to import a removed channel." +msgstr "Невозможно импортировать удалённый канал." + +#: ../../include/import.php:51 +msgid "" +"Cannot create a duplicate channel identifier on this system. Import failed." +msgstr "Не удалось создать дублирующийся идентификатор канала. Импорт невозможен." + +#: ../../include/import.php:116 +msgid "Cloned channel not found. Import failed." +msgstr "Клон канала не найден. Импорт невозможен." + +#: ../../include/photo/photo_driver.php:741 +#: ../../Zotlabs/Module/Profile_photo.php:120 +#: ../../Zotlabs/Module/Profile_photo.php:248 +msgid "Profile Photos" +msgstr "Фотографии профиля" + +#: ../../include/taxonomy.php:320 +msgid "Trending" +msgstr "В тренде" + +#: ../../include/taxonomy.php:320 ../../include/taxonomy.php:449 +#: ../../include/taxonomy.php:470 ../../Zotlabs/Widget/Tagcloud.php:22 +msgid "Tags" +msgstr "Теги" + +#: ../../include/taxonomy.php:409 ../../include/taxonomy.php:491 +#: ../../include/taxonomy.php:511 ../../include/taxonomy.php:532 +#: ../../include/contact_widgets.php:97 ../../include/contact_widgets.php:141 +#: ../../include/contact_widgets.php:186 +#: ../../Zotlabs/Widget/Appcategories.php:43 +msgid "Categories" +msgstr "Категории" + +#: ../../include/taxonomy.php:552 +msgid "Keywords" +msgstr "Ключевые слова" + +#: ../../include/taxonomy.php:573 +msgid "have" +msgstr "иметь" + +#: ../../include/taxonomy.php:573 +msgid "has" +msgstr "есть" + +#: ../../include/taxonomy.php:574 +msgid "want" +msgstr "хотеть" + +#: ../../include/taxonomy.php:574 +msgid "wants" +msgstr "хотеть" + +#: ../../include/taxonomy.php:575 ../../Zotlabs/Lib/ThreadItem.php:285 +msgid "like" +msgstr "нравится" + +#: ../../include/taxonomy.php:575 +msgid "likes" +msgstr "нравится" + +#: ../../include/taxonomy.php:576 ../../Zotlabs/Lib/ThreadItem.php:286 +msgid "dislike" +msgstr "не нравится" + +#: ../../include/taxonomy.php:576 +msgid "dislikes" +msgstr "не нравится" + +#: ../../include/zid.php:351 +#, php-format +msgid "OpenWebAuth: %1$s welcomes %2$s" +msgstr "OpenWebAuth: %1$s приветствует %2$s" + +#: ../../include/language.php:397 ../../include/text.php:1866 +msgid "default" +msgstr "по умолчанию" + +#: ../../include/language.php:410 +msgid "Select an alternate language" +msgstr "Выбор дополнительного языка" + +#: ../../include/follow.php:37 +msgid "Channel is blocked on this site." +msgstr "Канал блокируется на этом сайте." + +#: ../../include/follow.php:42 +msgid "Channel location missing." +msgstr "Местоположение канала отсутствует." + +#: ../../include/follow.php:84 +msgid "Response from remote channel was incomplete." +msgstr "Ответ удаленного канала неполный." + +#: ../../include/follow.php:96 +msgid "Premium channel - please visit:" +msgstr "Премимум-канал - пожалуйста посетите:" + +#: ../../include/follow.php:110 +msgid "Channel was deleted and no longer exists." +msgstr "Канал удален и больше не существует." + +#: ../../include/follow.php:165 +msgid "Remote channel or protocol unavailable." +msgstr "Удалённый канал или протокол недоступен." + +#: ../../include/follow.php:188 +msgid "Channel discovery failed." +msgstr "Не удалось обнаружить канал." + +#: ../../include/follow.php:200 +msgid "Protocol disabled." +msgstr "Протокол отключен." + +#: ../../include/follow.php:211 +msgid "Cannot connect to yourself." +msgstr "Нельзя подключиться к самому себе." + +#: ../../include/acl_selectors.php:33 +#: ../../Zotlabs/Lib/PermissionDescription.php:34 +msgid "Visible to your default audience" +msgstr "Видно вашей аудитории по умолчанию." + +#: ../../include/acl_selectors.php:88 ../../Zotlabs/Module/Acl.php:120 +#: ../../Zotlabs/Module/Lockview.php:117 ../../Zotlabs/Module/Lockview.php:153 +msgctxt "acl" +msgid "Profile" +msgstr "Профиль" + +#: ../../include/acl_selectors.php:106 +#: ../../Zotlabs/Lib/PermissionDescription.php:107 +msgid "Only me" +msgstr "Только мне" + +#: ../../include/acl_selectors.php:113 +msgid "Who can see this?" +msgstr "Кто может это видеть?" + +#: ../../include/acl_selectors.php:114 +msgid "Custom selection" +msgstr "Настраиваемый выбор" + +#: ../../include/acl_selectors.php:115 +msgid "" +"Select \"Show\" to allow viewing. \"Don't show\" lets you override and limit " +"the scope of \"Show\"." +msgstr "Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам переопределить и ограничить область показа." + +#: ../../include/acl_selectors.php:116 +msgid "Show" +msgstr "Показать" + +#: ../../include/acl_selectors.php:117 +msgid "Don't show" +msgstr "Не показывать" + +#: ../../include/acl_selectors.php:123 ../../Zotlabs/Module/Photos.php:707 +#: ../../Zotlabs/Module/Photos.php:1076 +#: ../../Zotlabs/Module/Filestorage.php:170 +#: ../../Zotlabs/Module/Connedit.php:676 ../../Zotlabs/Module/Chat.php:235 +#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:372 +msgid "Permissions" +msgstr "Разрешения" + +#: ../../include/acl_selectors.php:125 ../../Zotlabs/Lib/ThreadItem.php:426 +#: ../../Zotlabs/Module/Photos.php:1298 +msgid "Close" +msgstr "Закрыть" + +#: ../../include/acl_selectors.php:150 +#, php-format +msgid "" +"Post permissions %s cannot be changed %s after a post is shared.
These " +"permissions set who is allowed to view the post." +msgstr "Разрешения публикации %s не могут быть изменены %s после того, как ею поделились. Эти разрешения устанавливают кому разрешено просматривать эту публикацию." + +#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:44 +#: ../../Zotlabs/Module/Profiles.php:736 +msgid "Miscellaneous" +msgstr "Прочее" + +#: ../../include/datetime.php:140 +msgid "Birthday" +msgstr "День рождения" + +#: ../../include/datetime.php:140 +msgid "Age: " +msgstr "Возраст:" + +#: ../../include/datetime.php:140 +msgid "YYYY-MM-DD or MM-DD" +msgstr "YYYY-MM-DD или MM-DD" + +#: ../../include/datetime.php:211 ../../Zotlabs/Module/Appman.php:141 +#: ../../Zotlabs/Module/Appman.php:142 ../../Zotlabs/Module/Events.php:460 +#: ../../Zotlabs/Module/Events.php:465 ../../Zotlabs/Module/Profiles.php:745 +#: ../../Zotlabs/Module/Profiles.php:749 +msgid "Required" +msgstr "Требуется" + +#: ../../include/datetime.php:244 +msgid "less than a second ago" +msgstr "менее чем одну секунду" + +#: ../../include/datetime.php:262 +#, php-format +msgctxt "e.g. 22 hours ago, 1 minute ago" +msgid "%1$d %2$s ago" +msgstr "%1$d %2$s тому назад" + +#: ../../include/datetime.php:273 +msgctxt "relative_date" +msgid "year" +msgid_plural "years" +msgstr[0] "год" +msgstr[1] "года" +msgstr[2] "лет" + +#: ../../include/datetime.php:276 +msgctxt "relative_date" +msgid "month" +msgid_plural "months" +msgstr[0] "месяц" +msgstr[1] "месяца" +msgstr[2] "месяцев" + +#: ../../include/datetime.php:279 +msgctxt "relative_date" +msgid "week" +msgid_plural "weeks" +msgstr[0] "неделю" +msgstr[1] "недели" +msgstr[2] "недель" + +#: ../../include/datetime.php:282 +msgctxt "relative_date" +msgid "day" +msgid_plural "days" +msgstr[0] "день" +msgstr[1] "дня" +msgstr[2] "дней" + +#: ../../include/datetime.php:285 +msgctxt "relative_date" +msgid "hour" +msgid_plural "hours" +msgstr[0] "час" +msgstr[1] "часа" +msgstr[2] "часов" + +#: ../../include/datetime.php:288 +msgctxt "relative_date" +msgid "minute" +msgid_plural "minutes" +msgstr[0] "минуту" +msgstr[1] "минуты" +msgstr[2] "минут" + +#: ../../include/datetime.php:291 +msgctxt "relative_date" +msgid "second" +msgid_plural "seconds" +msgstr[0] "секунду" +msgstr[1] "секунды" +msgstr[2] "секунд" + +#: ../../include/datetime.php:520 +#, php-format +msgid "%1$s's birthday" +msgstr "У %1$s День рождения" + +#: ../../include/datetime.php:521 +#, php-format +msgid "Happy Birthday %1$s" +msgstr "С Днем рождения %1$s !" + +#: ../../include/dba/dba_driver.php:178 +#, php-format +msgid "Cannot locate DNS info for database server '%s'" +msgstr "Не удается найти DNS информацию для сервера базы данных '%s'" + +#: ../../include/text.php:492 +msgid "prev" +msgstr "предыдущий" + +#: ../../include/text.php:494 +msgid "first" +msgstr "первый" + +#: ../../include/text.php:523 +msgid "last" +msgstr "последний" + +#: ../../include/text.php:526 +msgid "next" +msgstr "следующий" + +#: ../../include/text.php:537 +msgid "older" +msgstr "старше" + +#: ../../include/text.php:539 +msgid "newer" +msgstr "новее" + +#: ../../include/text.php:963 +msgid "No connections" +msgstr "Нет контактов" + +#: ../../include/text.php:975 ../../Zotlabs/Lib/Apps.php:298 +#: ../../Zotlabs/Module/Connections.php:331 +msgid "Connections" +msgstr "Контакты" + +#: ../../include/text.php:995 +#, php-format +msgid "View all %s connections" +msgstr "Просмотреть все %s контактов" + +#: ../../include/text.php:1051 +#, php-format +msgid "Network: %s" +msgstr "Сеть: %s" + +#: ../../include/text.php:1063 ../../include/text.php:1075 +#: ../../Zotlabs/Widget/Notes.php:18 ../../Zotlabs/Module/Rbmark.php:32 +#: ../../Zotlabs/Module/Rbmark.php:104 ../../Zotlabs/Module/Admin/Profs.php:94 +#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:53 +msgid "Save" +msgstr "Запомнить" + +#: ../../include/text.php:1140 ../../include/text.php:1144 +msgid "poke" +msgstr "Ткнуть" + +#: ../../include/text.php:1145 +msgid "ping" +msgstr "Пингануть" + +#: ../../include/text.php:1145 +msgid "pinged" +msgstr "Отпингован" + +#: ../../include/text.php:1146 +msgid "prod" +msgstr "Подтолкнуть" + +#: ../../include/text.php:1146 +msgid "prodded" +msgstr "Подтолкнут" + +#: ../../include/text.php:1147 +msgid "slap" +msgstr "Шлёпнуть" + +#: ../../include/text.php:1147 +msgid "slapped" +msgstr "Шлёпнут" + +#: ../../include/text.php:1148 +msgid "finger" +msgstr "Указать" + +#: ../../include/text.php:1148 +msgid "fingered" +msgstr "Указан" + +#: ../../include/text.php:1149 +msgid "rebuff" +msgstr "Дать отпор" + +#: ../../include/text.php:1149 +msgid "rebuffed" +msgstr "Дан отпор" + +#: ../../include/text.php:1172 +msgid "happy" +msgstr "счастливый" + +#: ../../include/text.php:1173 msgid "sad" msgstr "грустный" -#: ../../include/text.php:911 -msgid "mellow" -msgstr "спокойный" +#: ../../include/text.php:1174 +msgid "mellow" +msgstr "спокойный" + +#: ../../include/text.php:1175 +msgid "tired" +msgstr "усталый" + +#: ../../include/text.php:1176 +msgid "perky" +msgstr "весёлый" + +#: ../../include/text.php:1177 +msgid "angry" +msgstr "сердитый" + +#: ../../include/text.php:1178 +msgid "stupefied" +msgstr "отупевший" + +#: ../../include/text.php:1179 +msgid "puzzled" +msgstr "недоумевающий" + +#: ../../include/text.php:1180 +msgid "interested" +msgstr "заинтересованный" + +#: ../../include/text.php:1181 +msgid "bitter" +msgstr "едкий" + +#: ../../include/text.php:1182 +msgid "cheerful" +msgstr "бодрый" + +#: ../../include/text.php:1183 +msgid "alive" +msgstr "энергичный" + +#: ../../include/text.php:1184 +msgid "annoyed" +msgstr "раздражённый" + +#: ../../include/text.php:1185 +msgid "anxious" +msgstr "обеспокоенный" + +#: ../../include/text.php:1186 +msgid "cranky" +msgstr "капризный" + +#: ../../include/text.php:1187 +msgid "disturbed" +msgstr "встревоженный" + +#: ../../include/text.php:1188 +msgid "frustrated" +msgstr "разочарованный" + +#: ../../include/text.php:1189 +msgid "depressed" +msgstr "подавленный" + +#: ../../include/text.php:1190 +msgid "motivated" +msgstr "мотивированный" + +#: ../../include/text.php:1191 +msgid "relaxed" +msgstr "расслабленный" + +#: ../../include/text.php:1192 +msgid "surprised" +msgstr "удивленный" + +#: ../../include/text.php:1371 ../../include/js_strings.php:86 +msgid "Monday" +msgstr "Понедельник" + +#: ../../include/text.php:1371 ../../include/js_strings.php:87 +msgid "Tuesday" +msgstr "Вторник" + +#: ../../include/text.php:1371 ../../include/js_strings.php:88 +msgid "Wednesday" +msgstr "Среда" + +#: ../../include/text.php:1371 ../../include/js_strings.php:89 +msgid "Thursday" +msgstr "Четверг" + +#: ../../include/text.php:1371 ../../include/js_strings.php:90 +msgid "Friday" +msgstr "Пятница" + +#: ../../include/text.php:1371 ../../include/js_strings.php:91 +msgid "Saturday" +msgstr "Суббота" + +#: ../../include/text.php:1371 ../../include/js_strings.php:85 +msgid "Sunday" +msgstr "Воскресенье" + +#: ../../include/text.php:1375 ../../include/js_strings.php:61 +msgid "January" +msgstr "Январь" + +#: ../../include/text.php:1375 ../../include/js_strings.php:62 +msgid "February" +msgstr "Февраль" + +#: ../../include/text.php:1375 ../../include/js_strings.php:63 +msgid "March" +msgstr "Март" + +#: ../../include/text.php:1375 ../../include/js_strings.php:64 +msgid "April" +msgstr "Апрель" + +#: ../../include/text.php:1375 +msgid "May" +msgstr "Май" + +#: ../../include/text.php:1375 ../../include/js_strings.php:66 +msgid "June" +msgstr "Июнь" + +#: ../../include/text.php:1375 ../../include/js_strings.php:67 +msgid "July" +msgstr "Июль" + +#: ../../include/text.php:1375 ../../include/js_strings.php:68 +msgid "August" +msgstr "Август" + +#: ../../include/text.php:1375 ../../include/js_strings.php:69 +msgid "September" +msgstr "Сентябрь" + +#: ../../include/text.php:1375 ../../include/js_strings.php:70 +msgid "October" +msgstr "Октябрь" + +#: ../../include/text.php:1375 ../../include/js_strings.php:71 +msgid "November" +msgstr "Ноябрь" + +#: ../../include/text.php:1375 ../../include/js_strings.php:72 +msgid "December" +msgstr "Декабрь" + +#: ../../include/text.php:1449 +msgid "Unknown Attachment" +msgstr "Неизвестное вложение" + +#: ../../include/text.php:1451 ../../Zotlabs/Module/Sharedwithme.php:107 +#: ../../Zotlabs/Storage/Browser.php:287 +msgid "Size" +msgstr "Размер" + +#: ../../include/text.php:1487 +msgid "remove category" +msgstr "удалить категорию" + +#: ../../include/text.php:1561 +msgid "remove from file" +msgstr "удалить из файла" + +#: ../../include/text.php:1703 ../../include/message.php:12 +msgid "Download binary/encrypted content" +msgstr "Загрузить двоичное / зашифрованное содержимое" + +#: ../../include/text.php:1844 ../../Zotlabs/Module/Events.php:660 +#: ../../Zotlabs/Module/Cal.php:315 +msgid "Link to Source" +msgstr "Ссылка на источник" + +#: ../../include/text.php:1874 +msgid "Page layout" +msgstr "Шаблон страницы" + +#: ../../include/text.php:1874 +msgid "You can create your own with the layouts tool" +msgstr "Вы можете создать свой собственный с помощью инструмента шаблонов" + +#: ../../include/text.php:1884 ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +#: ../../Zotlabs/Module/Wiki.php:350 +msgid "BBcode" +msgstr "" + +#: ../../include/text.php:1885 +msgid "HTML" +msgstr "" + +#: ../../include/text.php:1887 ../../Zotlabs/Widget/Wiki_pages.php:36 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +msgid "Text" +msgstr "Текст" + +#: ../../include/text.php:1888 +msgid "Comanche Layout" +msgstr "Шаблон Comanche" + +#: ../../include/text.php:1893 +msgid "PHP" +msgstr "" + +#: ../../include/text.php:1902 +msgid "Page content type" +msgstr "Тип содержимого страницы" + +#: ../../include/text.php:2035 +msgid "activity" +msgstr "активность" + +#: ../../include/text.php:2135 +msgid "a-z, 0-9, -, and _ only" +msgstr "Только a-z, 0-9, -, и _" + +#: ../../include/text.php:2455 +msgid "Design Tools" +msgstr "Инструменты дизайна" + +#: ../../include/text.php:2458 ../../Zotlabs/Module/Blocks.php:154 +msgid "Blocks" +msgstr "Блокировки" + +#: ../../include/text.php:2459 ../../Zotlabs/Module/Menu.php:170 +msgid "Menus" +msgstr "Меню" + +#: ../../include/text.php:2460 ../../Zotlabs/Module/Layouts.php:184 +msgid "Layouts" +msgstr "Шаблоны" + +#: ../../include/text.php:2461 +msgid "Pages" +msgstr "Страницы" + +#: ../../include/text.php:2482 ../../Zotlabs/Module/Cal.php:344 +msgid "Import" +msgstr "Импортировать" + +#: ../../include/text.php:2483 +msgid "Import website..." +msgstr "Импорт веб-сайта..." + +#: ../../include/text.php:2484 +msgid "Select folder to import" +msgstr "Выбрать каталог для импорта" + +#: ../../include/text.php:2485 +msgid "Import from a zipped folder:" +msgstr "Импортировать из каталога в zip-архиве:" + +#: ../../include/text.php:2486 +msgid "Import from cloud files:" +msgstr "Импортировать из сетевых файлов:" + +#: ../../include/text.php:2487 +msgid "/cloud/channel/path/to/folder" +msgstr "" + +#: ../../include/text.php:2488 +msgid "Enter path to website files" +msgstr "Введите путь к файлам веб-сайта" + +#: ../../include/text.php:2489 +msgid "Select folder" +msgstr "Выбрать каталог" + +#: ../../include/text.php:2490 +msgid "Export website..." +msgstr "Экспорт веб-сайта..." + +#: ../../include/text.php:2491 +msgid "Export to a zip file" +msgstr "Экспортировать в ZIP файл." + +#: ../../include/text.php:2492 +msgid "website.zip" +msgstr "" + +#: ../../include/text.php:2493 +msgid "Enter a name for the zip file." +msgstr "Введите имя для ZIP файла." + +#: ../../include/text.php:2494 +msgid "Export to cloud files" +msgstr "Эскпортировать в сетевые файлы:" + +#: ../../include/text.php:2495 +msgid "/path/to/export/folder" +msgstr "" + +#: ../../include/text.php:2496 +msgid "Enter a path to a cloud files destination." +msgstr "Введите путь к расположению сетевых файлов." + +#: ../../include/text.php:2497 +msgid "Specify folder" +msgstr "Указать каталог" + +#: ../../include/text.php:2817 ../../Zotlabs/Storage/Browser.php:131 +msgid "Collection" +msgstr "Коллекция" + +#: ../../include/security.php:541 +msgid "" +"The form security token was not correct. This probably happened because the " +"form has been opened for too long (>3 hours) before submitting it." +msgstr "Не верный токен безопасности для формы. Вероятно, это произошло потому, что форма была открыта слишком долго (> 3-х часов) перед его отправкой." + +#: ../../include/menu.php:118 ../../include/channel.php:1296 +#: ../../include/channel.php:1300 ../../Zotlabs/Lib/ThreadItem.php:128 +#: ../../Zotlabs/Lib/Apps.php:475 ../../Zotlabs/Widget/Cdav.php:126 +#: ../../Zotlabs/Widget/Cdav.php:162 ../../Zotlabs/Module/Connections.php:281 +#: ../../Zotlabs/Module/Connections.php:319 +#: ../../Zotlabs/Module/Connections.php:339 +#: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Module/Card_edit.php:99 +#: ../../Zotlabs/Module/Editblock.php:114 ../../Zotlabs/Module/Webpages.php:240 +#: ../../Zotlabs/Module/Editwebpage.php:142 +#: ../../Zotlabs/Module/Editlayout.php:114 +#: ../../Zotlabs/Module/Admin/Profs.php:175 ../../Zotlabs/Module/Blocks.php:160 +#: ../../Zotlabs/Module/Menu.php:175 +#: ../../Zotlabs/Module/Settings/Oauth2.php:150 +#: ../../Zotlabs/Module/Settings/Oauth.php:150 +#: ../../Zotlabs/Module/Article_edit.php:99 ../../Zotlabs/Module/Wiki.php:202 +#: ../../Zotlabs/Module/Wiki.php:362 ../../Zotlabs/Module/Group.php:216 +#: ../../Zotlabs/Module/Thing.php:266 ../../Zotlabs/Storage/Browser.php:290 +msgid "Edit" +msgstr "Изменить" + +#: ../../include/items.php:891 ../../include/items.php:951 +msgid "(Unknown)" +msgstr "(Неизвестный)" + +#: ../../include/items.php:1137 +msgid "Visible to anybody on the internet." +msgstr "Виден всем в интернете." + +#: ../../include/items.php:1139 +msgid "Visible to you only." +msgstr "Видно только вам." + +#: ../../include/items.php:1141 +msgid "Visible to anybody in this network." +msgstr "Видно всем в этой сети." + +#: ../../include/items.php:1143 +msgid "Visible to anybody authenticated." +msgstr "Видно всем аутентифицированным." + +#: ../../include/items.php:1145 +#, php-format +msgid "Visible to anybody on %s." +msgstr "Видно всем в %s." + +#: ../../include/items.php:1147 +msgid "Visible to all connections." +msgstr "Видно всем контактам." + +#: ../../include/items.php:1149 +msgid "Visible to approved connections." +msgstr "Видно только одобренным контактам." + +#: ../../include/items.php:1151 +msgid "Visible to specific connections." +msgstr "Видно указанным контактам." + +#: ../../include/items.php:3566 ../../Zotlabs/Module/Viewsrc.php:25 +#: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Admin.php:62 +#: ../../Zotlabs/Module/Admin/Addons.php:259 +#: ../../Zotlabs/Module/Admin/Themes.php:72 ../../Zotlabs/Module/Thing.php:94 +#: ../../Zotlabs/Module/Display.php:46 ../../Zotlabs/Module/Display.php:453 +msgid "Item not found." +msgstr "Элемент не найден." + +#: ../../include/items.php:4125 ../../Zotlabs/Module/Group.php:51 +#: ../../Zotlabs/Module/Group.php:181 +msgid "Privacy group not found." +msgstr "Группа безопасности не найдена." + +#: ../../include/items.php:4141 +msgid "Privacy group is empty." +msgstr "Группа безопасности пуста" + +#: ../../include/items.php:4148 +#, php-format +msgid "Privacy group: %s" +msgstr "Группа безопасности: %s" + +#: ../../include/items.php:4158 ../../Zotlabs/Module/Connedit.php:850 +#, php-format +msgid "Connection: %s" +msgstr "Контакт: %s" + +#: ../../include/items.php:4160 +msgid "Connection not found." +msgstr "Контакт не найден." + +#: ../../include/items.php:4502 ../../Zotlabs/Module/Cover_photo.php:269 +msgid "female" +msgstr "женщина" + +#: ../../include/items.php:4503 ../../Zotlabs/Module/Cover_photo.php:270 +#, php-format +msgid "%1$s updated her %2$s" +msgstr "%1$s обновила её %2$s" + +#: ../../include/items.php:4504 ../../Zotlabs/Module/Cover_photo.php:271 +msgid "male" +msgstr "мужчина" + +#: ../../include/items.php:4505 ../../Zotlabs/Module/Cover_photo.php:272 +#, php-format +msgid "%1$s updated his %2$s" +msgstr "%1$s обновил его %2$s" + +#: ../../include/items.php:4507 ../../Zotlabs/Module/Cover_photo.php:274 +#, php-format +msgid "%1$s updated their %2$s" +msgstr "%1$s обновили их %2$s" + +#: ../../include/items.php:4509 +msgid "profile photo" +msgstr "Фотография профиля" + +#: ../../include/items.php:4700 +#, php-format +msgid "[Edited %s]" +msgstr "[Отредактировано %s]" + +#: ../../include/items.php:4700 +msgctxt "edit_activity" +msgid "Post" +msgstr "Публикация" + +#: ../../include/items.php:4700 +msgctxt "edit_activity" +msgid "Comment" +msgstr "Комментарий" + +#: ../../include/contact_widgets.php:11 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/contact_widgets.php:16 ../../Zotlabs/Module/Admin/Site.php:313 +msgid "Advanced" +msgstr "Дополнительно" + +#: ../../include/contact_widgets.php:19 +msgid "Find Channels" +msgstr "Поиск каналов" + +#: ../../include/contact_widgets.php:20 +msgid "Enter name or interest" +msgstr "Впишите имя или интерес" + +#: ../../include/contact_widgets.php:21 +msgid "Connect/Follow" +msgstr "Подключить / отслеживать" + +#: ../../include/contact_widgets.php:22 +msgid "Examples: Robert Morgenstein, Fishing" +msgstr "Примеры: Владимир Ильич, Революционер" + +#: ../../include/contact_widgets.php:23 +#: ../../Zotlabs/Module/Connections.php:338 +#: ../../Zotlabs/Module/Directory.php:401 +#: ../../Zotlabs/Module/Directory.php:406 +msgid "Find" +msgstr "Поиск" + +#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Suggest.php:64 +#: ../../Zotlabs/Module/Directory.php:405 +msgid "Channel Suggestions" +msgstr "Рекомендации каналов" + +#: ../../include/contact_widgets.php:26 +msgid "Random Profile" +msgstr "Случайный профиль" + +#: ../../include/contact_widgets.php:27 +msgid "Invite Friends" +msgstr "Пригласить друзей" + +#: ../../include/contact_widgets.php:29 +msgid "Advanced example: name=fred and country=iceland" +msgstr "Расширенный пример: name=ivan and country=russia" + +#: ../../include/contact_widgets.php:53 ../../include/features.php:488 +#: ../../Zotlabs/Widget/Filer.php:28 +#: ../../Zotlabs/Widget/Activity_filter.php:134 +msgid "Saved Folders" +msgstr "Сохранённые каталоги" + +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:100 +#: ../../include/contact_widgets.php:144 ../../include/contact_widgets.php:189 +#: ../../Zotlabs/Widget/Appcategories.php:46 ../../Zotlabs/Widget/Filer.php:31 +msgid "Everything" +msgstr "Всё" + +#: ../../include/contact_widgets.php:223 +msgid "Common Connections" +msgstr "Общие контакты" + +#: ../../include/contact_widgets.php:228 +#, php-format +msgid "View all %d common connections" +msgstr "Просмотреть все %d общих контактов" + +#: ../../include/channel.php:35 +msgid "Unable to obtain identity information from database" +msgstr "Невозможно получить идентификационную информацию из базы данных" + +#: ../../include/channel.php:68 +msgid "Empty name" +msgstr "Пустое имя" + +#: ../../include/channel.php:71 +msgid "Name too long" +msgstr "Слишком длинное имя" + +#: ../../include/channel.php:188 +msgid "No account identifier" +msgstr "Идентификатор аккаунта отсутствует" + +#: ../../include/channel.php:200 +msgid "Nickname is required." +msgstr "Требуется псевдоним." + +#: ../../include/channel.php:214 ../../include/channel.php:599 +#: ../../Zotlabs/Module/Changeaddr.php:46 +msgid "Reserved nickname. Please choose another." +msgstr "Зарезервированый псевдоним. Пожалуйста, выберите другой." + +#: ../../include/channel.php:219 ../../include/channel.php:604 +#: ../../Zotlabs/Module/Changeaddr.php:51 +msgid "" +"Nickname has unsupported characters or is already being used on this site." +msgstr "Псевдоним имеет недопустимые символы или уже используется на этом сайте." + +#: ../../include/channel.php:277 +msgid "Unable to retrieve created identity" +msgstr "Не удается получить созданный идентификатор" + +#: ../../include/channel.php:373 +msgid "Default Profile" +msgstr "Профиль по умолчанию" + +#: ../../include/channel.php:437 ../../include/channel.php:438 +#: ../../include/channel.php:445 ../../include/selectors.php:123 +#: ../../Zotlabs/Widget/Affinity.php:24 ../../Zotlabs/Module/Connedit.php:711 +#: ../../Zotlabs/Module/Settings/Channel.php:68 +#: ../../Zotlabs/Module/Settings/Channel.php:72 +#: ../../Zotlabs/Module/Settings/Channel.php:73 +#: ../../Zotlabs/Module/Settings/Channel.php:76 +#: ../../Zotlabs/Module/Settings/Channel.php:87 +msgid "Friends" +msgstr "Друзья" + +#: ../../include/channel.php:532 ../../include/channel.php:621 +msgid "Unable to retrieve modified identity" +msgstr "Не удается найти изменённый идентификатор" + +#: ../../include/channel.php:1197 ../../Zotlabs/Module/Connect.php:17 +#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Layouts.php:31 +#: ../../Zotlabs/Module/Filestorage.php:51 +#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Webpages.php:33 +#: ../../Zotlabs/Module/Editwebpage.php:32 +#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Articles.php:29 +#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Blocks.php:33 +#: ../../Zotlabs/Module/Menu.php:91 ../../Zotlabs/Module/Cards.php:33 +#: ../../Zotlabs/Module/Profile.php:20 +msgid "Requested profile is not available." +msgstr "Запрашиваемый профиль не доступен." + +#: ../../include/channel.php:1289 ../../Zotlabs/Module/Profiles.php:728 +msgid "Change profile photo" +msgstr "Изменить фотографию профиля" + +#: ../../include/channel.php:1297 +msgid "Create New Profile" +msgstr "Создать новый профиль" + +#: ../../include/channel.php:1315 ../../Zotlabs/Module/Profiles.php:820 +msgid "Profile Image" +msgstr "Изображение профиля" + +#: ../../include/channel.php:1318 +msgid "Visible to everybody" +msgstr "Видно всем" + +#: ../../include/channel.php:1319 ../../Zotlabs/Module/Profiles.php:725 +#: ../../Zotlabs/Module/Profiles.php:824 +msgid "Edit visibility" +msgstr "Редактировать видимость" + +#: ../../include/channel.php:1395 ../../include/channel.php:1523 +msgid "Gender:" +msgstr "Пол:" + +#: ../../include/channel.php:1397 ../../include/channel.php:1591 +msgid "Homepage:" +msgstr "Домашняя страница:" + +#: ../../include/channel.php:1398 +msgid "Online Now" +msgstr "Сейчас в сети" + +#: ../../include/channel.php:1451 +msgid "Change your profile photo" +msgstr "Изменить фотографию вашего профиля" + +#: ../../include/channel.php:1482 +msgid "Trans" +msgstr "Трансексуал" + +#: ../../include/channel.php:1484 ../../include/selectors.php:49 +msgid "Neuter" +msgstr "Среднего рода" + +#: ../../include/channel.php:1486 ../../include/selectors.php:49 +msgid "Non-specific" +msgstr "Неспецифический" + +#: ../../include/channel.php:1521 ../../Zotlabs/Module/Settings/Channel.php:522 +msgid "Full Name:" +msgstr "Полное имя:" + +#: ../../include/channel.php:1528 +msgid "Like this channel" +msgstr "нравится этот канал" + +#: ../../include/channel.php:1552 +msgid "j F, Y" +msgstr "" + +#: ../../include/channel.php:1553 +msgid "j F" +msgstr "" + +#: ../../include/channel.php:1560 +msgid "Birthday:" +msgstr "День рождения:" + +#: ../../include/channel.php:1564 ../../Zotlabs/Module/Directory.php:319 +msgid "Age:" +msgstr "Возраст:" + +#: ../../include/channel.php:1573 +#, php-format +msgid "for %1$d %2$s" +msgstr "для %1$d %2$s" + +#: ../../include/channel.php:1585 +msgid "Tags:" +msgstr "Теги:" + +#: ../../include/channel.php:1589 +msgid "Sexual Preference:" +msgstr "Сексуальные предпочтения:" + +#: ../../include/channel.php:1593 ../../Zotlabs/Module/Directory.php:335 +msgid "Hometown:" +msgstr "Родной город:" + +#: ../../include/channel.php:1595 +msgid "Political Views:" +msgstr "Политические взгляды:" + +#: ../../include/channel.php:1597 +msgid "Religion:" +msgstr "Религия:" + +#: ../../include/channel.php:1599 ../../Zotlabs/Module/Directory.php:337 +msgid "About:" +msgstr "О себе:" + +#: ../../include/channel.php:1601 +msgid "Hobbies/Interests:" +msgstr "Хобби / интересы:" + +#: ../../include/channel.php:1603 +msgid "Likes:" +msgstr "Что вам нравится:" + +#: ../../include/channel.php:1605 +msgid "Dislikes:" +msgstr "Что вам не нравится:" + +#: ../../include/channel.php:1607 +msgid "Contact information and Social Networks:" +msgstr "Контактная информация и социальные сети:" + +#: ../../include/channel.php:1609 +msgid "My other channels:" +msgstr "Мои другие каналы:" + +#: ../../include/channel.php:1611 +msgid "Musical interests:" +msgstr "Музыкальные интересы:" + +#: ../../include/channel.php:1613 +msgid "Books, literature:" +msgstr "Книги, литература:" + +#: ../../include/channel.php:1615 +msgid "Television:" +msgstr "Телевидение:" + +#: ../../include/channel.php:1617 +msgid "Film/dance/culture/entertainment:" +msgstr "Кино / танцы / культура / развлечения:" + +#: ../../include/channel.php:1619 +msgid "Love/Romance:" +msgstr "Любовь / романтика:" + +#: ../../include/channel.php:1621 +msgid "Work/employment:" +msgstr "Работа / занятость:" + +#: ../../include/channel.php:1623 +msgid "School/education:" +msgstr "Школа / образование:" + +#: ../../include/channel.php:1644 ../../Zotlabs/Module/Profperm.php:113 +msgid "Profile" +msgstr "Профиль" + +#: ../../include/channel.php:1646 +msgid "Like this thing" +msgstr "нравится этo" + +#: ../../include/channel.php:1647 ../../Zotlabs/Module/Events.php:691 +#: ../../Zotlabs/Module/Cal.php:341 +msgid "Export" +msgstr "Экспорт" + +#: ../../include/channel.php:2081 ../../Zotlabs/Module/Cover_photo.php:276 +msgid "cover photo" +msgstr "фотография обложки" + +#: ../../include/channel.php:2335 ../../Zotlabs/Module/Rmagic.php:76 +msgid "Enter your channel address (e.g. channel@example.com)" +msgstr "Введите адрес вашего канала (например: channel@example.com)" + +#: ../../include/channel.php:2336 ../../Zotlabs/Module/Rmagic.php:77 +msgid "Authenticate" +msgstr "Проверка подлинности" + +#: ../../include/channel.php:2490 ../../Zotlabs/Module/Admin/Accounts.php:91 +#, php-format +msgid "Account '%s' deleted" +msgstr "Аккаунт '%s' удален" + +#: ../../include/features.php:56 +msgid "General Features" +msgstr "Главные функции" + +#: ../../include/features.php:60 ../../Zotlabs/Widget/Newmember.php:62 +msgid "New Member Links" +msgstr "Ссылки для новичков" + +#: ../../include/features.php:61 +msgid "Display new member quick links menu" +msgstr "Показать меню быстрых ссылок для новых участников" + +#: ../../include/features.php:69 +msgid "Advanced Profiles" +msgstr "Расширенные профили" + +#: ../../include/features.php:70 +msgid "Additional profile sections and selections" +msgstr "Дополнительные секции и выборы профиля" + +#: ../../include/features.php:78 +msgid "Profile Import/Export" +msgstr "Импорт / экспорт профиля" + +#: ../../include/features.php:79 +msgid "Save and load profile details across sites/channels" +msgstr "Сохранение и загрузка настроек профиля на всех сайтах / каналах" + +#: ../../include/features.php:87 +msgid "Web Pages" +msgstr "Веб-страницы" + +#: ../../include/features.php:88 +msgid "Provide managed web pages on your channel" +msgstr "Предоставлять управляемые веб-страницы на Вашем канале" + +#: ../../include/features.php:97 +msgid "Provide a wiki for your channel" +msgstr "Предоставьте Wiki для вашего канала" + +#: ../../include/features.php:114 +msgid "Private Notes" +msgstr "Личные заметки" + +#: ../../include/features.php:115 +msgid "Enables a tool to store notes and reminders (note: not encrypted)" +msgstr "Включает инструмент для хранения заметок и напоминаний (прим.: не зашифровано)" + +#: ../../include/features.php:124 +msgid "Create personal planning cards" +msgstr "Создать личные карточки планирования" + +#: ../../include/features.php:134 +msgid "Create interactive articles" +msgstr "Создать интерактивные статьи" + +#: ../../include/features.php:142 +msgid "Navigation Channel Select" +msgstr "Выбор канала навигации" + +#: ../../include/features.php:143 +msgid "Change channels directly from within the navigation dropdown menu" +msgstr "Изменить канал напрямую из выпадающего меню" + +#: ../../include/features.php:151 +msgid "Photo Location" +msgstr "Местоположение фотографии" + +#: ../../include/features.php:152 +msgid "If location data is available on uploaded photos, link this to a map." +msgstr "Если данные о местоположении доступны на загруженных фотографий, связать их с картой." + +#: ../../include/features.php:160 +msgid "Access Controlled Chatrooms" +msgstr "Получить доступ к контролируемым чатам" + +#: ../../include/features.php:161 +msgid "Provide chatrooms and chat services with access control." +msgstr "Предоставлять чаты и их службы с контролем доступа." + +#: ../../include/features.php:170 +msgid "Smart Birthdays" +msgstr "\"Умные\" Дни рождений" + +#: ../../include/features.php:171 +msgid "" +"Make birthday events timezone aware in case your friends are scattered " +"across the planet." +msgstr "Сделать уведомления о днях рождения зависимыми от часового пояса в том случае, если ваши друзья разбросаны по планете." + +#: ../../include/features.php:179 +msgid "Event Timezone Selection" +msgstr "Выбор часового пояса события" + +#: ../../include/features.php:180 +msgid "Allow event creation in timezones other than your own." +msgstr "Разрешить создание события в часовой зоне отличной от вашей" + +#: ../../include/features.php:189 +msgid "Premium Channel" +msgstr "Премиум-канал" + +#: ../../include/features.php:190 +msgid "" +"Allows you to set restrictions and terms on those that connect with your " +"channel" +msgstr "Позволяет установить ограничения и условия для подключающихся к вашему каналу" + +#: ../../include/features.php:198 +msgid "Advanced Directory Search" +msgstr "Расширенный поиск в каталоге" + +#: ../../include/features.php:199 +msgid "Allows creation of complex directory search queries" +msgstr "Позволяет создание сложных поисковых запросов в каталоге" + +#: ../../include/features.php:207 +msgid "Advanced Theme and Layout Settings" +msgstr "Расширенный настройки темы и отображения" + +#: ../../include/features.php:208 +msgid "Allows fine tuning of themes and page layouts" +msgstr "Разрешает тонкую настройку тем и шаблонов страниц" + +#: ../../include/features.php:217 +msgid "Access Control and Permissions" +msgstr "Управление доступом и разрешениями" + +#: ../../include/features.php:222 +msgid "Enable management and selection of privacy groups" +msgstr "Включить управление и выбор групп безопасности" + +#: ../../include/features.php:230 +msgid "Multiple Profiles" +msgstr "Несколько профилей" + +#: ../../include/features.php:231 +msgid "Ability to create multiple profiles" +msgstr "Возможность создания нескольких профилей" + +#: ../../include/features.php:240 ../../Zotlabs/Widget/Settings_menu.php:108 +#: ../../Zotlabs/Module/Settings/Permcats.php:99 +msgid "Permission Categories" +msgstr "Категории разрешений" + +#: ../../include/features.php:241 +msgid "Create custom connection permission limits" +msgstr "Создать пользовательские ограничения на доступ к подключению" + +#: ../../include/features.php:249 +msgid "OAuth1 Clients" +msgstr "Клиенты OAuth1" + +#: ../../include/features.php:250 +msgid "Manage OAuth1 authenticatication tokens for mobile and remote apps." +msgstr "Управлять токенами аутентификации OAuth1 для мобильных и удалённых приложений." + +#: ../../include/features.php:258 +msgid "OAuth2 Clients" +msgstr "Клиенты OAuth2" + +#: ../../include/features.php:259 +msgid "Manage OAuth2 authenticatication tokens for mobile and remote apps." +msgstr "Управлять токенами аутентификации OAuth2 для мобильных и удалённых приложений." + +#: ../../include/features.php:267 +msgid "Access Tokens" +msgstr "Токены доступа" + +#: ../../include/features.php:268 +msgid "Create access tokens so that non-members can access private content." +msgstr "Создать токены доступа для доступа к приватному содержимому." + +#: ../../include/features.php:279 +msgid "Post Composition Features" +msgstr "Функции создания публикаций" + +#: ../../include/features.php:283 +msgid "Large Photos" +msgstr "Большие фотографии" + +#: ../../include/features.php:284 +msgid "" +"Include large (1024px) photo thumbnails in posts. If not enabled, use small " +"(640px) photo thumbnails" +msgstr "Включить большие (1024px) миниатюры изображений в публикациях. Если не включено, использовать маленькие (640px) миниатюры." + +#: ../../include/features.php:292 ../../Zotlabs/Widget/Settings_menu.php:133 +#: ../../Zotlabs/Module/Sources.php:99 +msgid "Channel Sources" +msgstr "Источники канала" + +#: ../../include/features.php:293 +msgid "Automatically import channel content from other channels or feeds" +msgstr "Автоматический импорт контента из других каналов или лент" + +#: ../../include/features.php:301 +msgid "Even More Encryption" +msgstr "Еще больше шифрования" + +#: ../../include/features.php:302 +msgid "" +"Allow optional encryption of content end-to-end with a shared secret key" +msgstr "Разрешить дополнительное end-to-end шифрование содержимого с общим секретным ключом" + +#: ../../include/features.php:310 +msgid "Enable Voting Tools" +msgstr "Включить инструменты голосования" + +#: ../../include/features.php:311 +msgid "Provide a class of post which others can vote on" +msgstr "Предоставь класс публикаций с возможностью голосования" + +#: ../../include/features.php:319 +msgid "Disable Comments" +msgstr "Отключить комментарии" + +#: ../../include/features.php:320 +msgid "Provide the option to disable comments for a post" +msgstr "Предоставить возможность отключать комментарии для публикаций" + +#: ../../include/features.php:328 +msgid "Delayed Posting" +msgstr "Задержанная публикация" + +#: ../../include/features.php:329 +msgid "Allow posts to be published at a later date" +msgstr "Разрешить размешать публикации следующими датами" + +#: ../../include/features.php:337 +msgid "Content Expiration" +msgstr "Истечение срока действия содержимого" + +#: ../../include/features.php:338 +msgid "Remove posts/comments and/or private messages at a future time" +msgstr "Удалять публикации / комментарии и / или личные сообщения" + +#: ../../include/features.php:346 +msgid "Suppress Duplicate Posts/Comments" +msgstr "Подавлять дублирующие публикации / комментарии" + +#: ../../include/features.php:347 +msgid "" +"Prevent posts with identical content to be published with less than two " +"minutes in between submissions." +msgstr "Предотвращает появление публикаций с одинаковым содержимым если интервал между ними менее 2 минут" + +#: ../../include/features.php:355 +msgid "Auto-save drafts of posts and comments" +msgstr "Автоматически сохранять черновики публикаций и комментариев" + +#: ../../include/features.php:356 +msgid "" +"Automatically saves post and comment drafts in local browser storage to help " +"prevent accidental loss of compositions" +msgstr "Автоматически сохраняет черновики публикаций и комментариев в локальном хранилище браузера для предотвращения их случайной утраты" + +#: ../../include/features.php:367 +msgid "Network and Stream Filtering" +msgstr "Фильтрация сети и потока" + +#: ../../include/features.php:371 +msgid "Search by Date" +msgstr "Поиск по дате" + +#: ../../include/features.php:372 +msgid "Ability to select posts by date ranges" +msgstr "Возможность выбора сообщений по диапазонам дат" + +#: ../../include/features.php:381 ../../Zotlabs/Widget/Savedsearch.php:83 +msgid "Saved Searches" +msgstr "Сохранённые поиски" + +#: ../../include/features.php:382 +msgid "Save search terms for re-use" +msgstr "Сохранять результаты поиска для повторного использования" + +#: ../../include/features.php:390 +msgid "Alternate Stream Order" +msgstr "Отображение потока" + +#: ../../include/features.php:391 +msgid "" +"Ability to order the stream by last post date, last comment date or " +"unthreaded activities" +msgstr "" +"Возможность показывать поток по дате последнего сообщения, последнего комментария или " +"по дате публикации" + +#: ../../include/features.php:399 +msgid "Contact Filter" +msgstr "Фильтр контактов" + +#: ../../include/features.php:400 +msgid "Ability to display only posts of a selected contact" +msgstr "Возможность показа публикаций только от выбранных контактов" + +#: ../../include/features.php:408 +msgid "Forum Filter" +msgstr "Фильтр по форумам" + +#: ../../include/features.php:409 +msgid "Ability to display only posts of a specific forum" +msgstr "Возможность показа публикаций только определённого форума" + +#: ../../include/features.php:417 +msgid "Personal Posts Filter" +msgstr "Персональный фильтр публикаций" + +#: ../../include/features.php:418 +msgid "Ability to display only posts that you've interacted on" +msgstr "Возможность показа только тех публикаций с которыми вы взаимодействовали" + +#: ../../include/features.php:426 +msgid "Affinity Tool" +msgstr "Инструмент сходства / соответствия" + +#: ../../include/features.php:427 +msgid "Filter stream activity by depth of relationships" +msgstr "Фильтровать потоки активности по глубине отношений" + +#: ../../include/features.php:435 ../../Zotlabs/Lib/Apps.php:300 +msgid "Suggest Channels" +msgstr "Предлагаемые каналы" + +#: ../../include/features.php:436 +msgid "Show friend and connection suggestions" +msgstr "Показать предложения в друзья" + +#: ../../include/features.php:444 +msgid "Connection Filtering" +msgstr "Фильтрация контактов" + +#: ../../include/features.php:445 +msgid "Filter incoming posts from connections based on keywords/content" +msgstr "Фильтр входящих сообщений от контактов на основе ключевых слов / контента" + +#: ../../include/features.php:457 +msgid "Post/Comment Tools" +msgstr "Инструменты публикаций / комментариев" + +#: ../../include/features.php:461 +msgid "Community Tagging" +msgstr "Отметки сообщества" + +#: ../../include/features.php:462 +msgid "Ability to tag existing posts" +msgstr "Возможность помечать тегами существующие публикации" + +#: ../../include/features.php:470 +msgid "Post Categories" +msgstr "Категории публикаций" + +#: ../../include/features.php:471 +msgid "Add categories to your posts" +msgstr "Добавить категории для ваших публикаций" + +#: ../../include/features.php:479 +msgid "Emoji Reactions" +msgstr "Реакции Emoji" + +#: ../../include/features.php:480 +msgid "Add emoji reaction ability to posts" +msgstr "Возможность добавлять реакции Emoji к публикациям" + +#: ../../include/features.php:489 +msgid "Ability to file posts under folders" +msgstr "Возможность размещать публикации в каталогах" + +#: ../../include/features.php:497 +msgid "Dislike Posts" +msgstr "Не нравящиеся публикации" + +#: ../../include/features.php:498 +msgid "Ability to dislike posts/comments" +msgstr "Возможность отмечать не нравящиеся публикации / комментарии" + +#: ../../include/features.php:506 +msgid "Star Posts" +msgstr "Помечать сообщения" + +#: ../../include/features.php:507 +msgid "Ability to mark special posts with a star indicator" +msgstr "Возможность отметить специальные сообщения индикатором-звёздочкой" + +#: ../../include/features.php:515 +msgid "Tag Cloud" +msgstr "Облако тегов" + +#: ../../include/features.php:516 +msgid "Provide a personal tag cloud on your channel page" +msgstr "Показывает личное облако тегов на странице канала" + +#: ../../include/message.php:40 +msgid "Unable to determine sender." +msgstr "Невозможно определить отправителя." + +#: ../../include/message.php:79 +msgid "No recipient provided." +msgstr "Получатель не предоставлен." + +#: ../../include/message.php:84 +msgid "[no subject]" +msgstr "[без темы]" + +#: ../../include/message.php:214 +msgid "Stored post could not be verified." +msgstr "Сохранённая публикация не может быть проверена." + +#: ../../include/selectors.php:30 +msgid "Frequently" +msgstr "Часто" + +#: ../../include/selectors.php:31 +msgid "Hourly" +msgstr "Ежечасно" + +#: ../../include/selectors.php:32 +msgid "Twice daily" +msgstr "Дважды в день" + +#: ../../include/selectors.php:33 +msgid "Daily" +msgstr "Ежедневно" + +#: ../../include/selectors.php:34 +msgid "Weekly" +msgstr "Еженедельно" + +#: ../../include/selectors.php:35 +msgid "Monthly" +msgstr "Ежемесячно" + +#: ../../include/selectors.php:49 +msgid "Currently Male" +msgstr "В настоящее время мужской" + +#: ../../include/selectors.php:49 +msgid "Currently Female" +msgstr "В настоящее время женский" + +#: ../../include/selectors.php:49 +msgid "Mostly Male" +msgstr "В основном мужской" + +#: ../../include/selectors.php:49 +msgid "Mostly Female" +msgstr "В основном женский" + +#: ../../include/selectors.php:49 +msgid "Transgender" +msgstr "Трансгендер" + +#: ../../include/selectors.php:49 +msgid "Intersex" +msgstr "Интерсексуал" + +#: ../../include/selectors.php:49 +msgid "Transsexual" +msgstr "Транссексуал" + +#: ../../include/selectors.php:49 +msgid "Hermaphrodite" +msgstr "Гермафродит" + +#: ../../include/selectors.php:49 +msgid "Undecided" +msgstr "Не решил" + +#: ../../include/selectors.php:85 ../../include/selectors.php:104 +msgid "Males" +msgstr "Мужчины" + +#: ../../include/selectors.php:85 ../../include/selectors.php:104 +msgid "Females" +msgstr "Женщины" + +#: ../../include/selectors.php:85 +msgid "Gay" +msgstr "Гей" + +#: ../../include/selectors.php:85 +msgid "Lesbian" +msgstr "Лесбиянка" + +#: ../../include/selectors.php:85 +msgid "No Preference" +msgstr "Без предпочтений" + +#: ../../include/selectors.php:85 +msgid "Bisexual" +msgstr "Бисексуал" + +#: ../../include/selectors.php:85 +msgid "Autosexual" +msgstr "Автосексуал" + +#: ../../include/selectors.php:85 +msgid "Abstinent" +msgstr "Воздержание" + +#: ../../include/selectors.php:85 +msgid "Virgin" +msgstr "Девственник" + +#: ../../include/selectors.php:85 +msgid "Deviant" +msgstr "Отклоняющийся от нормы" + +#: ../../include/selectors.php:85 +msgid "Fetish" +msgstr "Фетишист" + +#: ../../include/selectors.php:85 +msgid "Oodles" +msgstr "Множественный" + +#: ../../include/selectors.php:85 +msgid "Nonsexual" +msgstr "Асексуал" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Single" +msgstr "Одиночка" + +#: ../../include/selectors.php:123 +msgid "Lonely" +msgstr "Одинокий" + +#: ../../include/selectors.php:123 +msgid "Available" +msgstr "Свободен" + +#: ../../include/selectors.php:123 +msgid "Unavailable" +msgstr "Занят" + +#: ../../include/selectors.php:123 +msgid "Has crush" +msgstr "Влюблён" + +#: ../../include/selectors.php:123 +msgid "Infatuated" +msgstr "без ума" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Dating" +msgstr "Встречаюсь" + +#: ../../include/selectors.php:123 +msgid "Unfaithful" +msgstr "Неверный" + +#: ../../include/selectors.php:123 +msgid "Sex Addict" +msgstr "Эротоман" + +#: ../../include/selectors.php:123 +msgid "Friends/Benefits" +msgstr "Друзья / Выгоды" + +#: ../../include/selectors.php:123 +msgid "Casual" +msgstr "Легкомысленный" + +#: ../../include/selectors.php:123 +msgid "Engaged" +msgstr "Помолвлен" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Married" +msgstr "В браке" + +#: ../../include/selectors.php:123 +msgid "Imaginarily married" +msgstr "В воображаемом браке" + +#: ../../include/selectors.php:123 +msgid "Partners" +msgstr "Партнёрство" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Cohabiting" +msgstr "Сожительствующие" + +#: ../../include/selectors.php:123 +msgid "Common law" +msgstr "Гражданский брак" + +#: ../../include/selectors.php:123 +msgid "Happy" +msgstr "Счастлив" + +#: ../../include/selectors.php:123 +msgid "Not looking" +msgstr "Не нуждаюсь" + +#: ../../include/selectors.php:123 +msgid "Swinger" +msgstr "Свингер" + +#: ../../include/selectors.php:123 +msgid "Betrayed" +msgstr "Предан" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Separated" +msgstr "Разделён" + +#: ../../include/selectors.php:123 +msgid "Unstable" +msgstr "Нестабильно" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Divorced" +msgstr "В разводе" + +#: ../../include/selectors.php:123 +msgid "Imaginarily divorced" +msgstr "В воображаемом разводе" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "Widowed" +msgstr "Вдовец / вдова" + +#: ../../include/selectors.php:123 +msgid "Uncertain" +msgstr "Неопределенный" + +#: ../../include/selectors.php:123 ../../include/selectors.php:140 +msgid "It's complicated" +msgstr "Это сложно" + +#: ../../include/selectors.php:123 +msgid "Don't care" +msgstr "Всё равно" + +#: ../../include/selectors.php:123 +msgid "Ask me" +msgstr "Спроси меня" + +#: ../../include/js_strings.php:5 +msgid "Delete this item?" +msgstr "Удалить этот элемент?" + +#: ../../include/js_strings.php:6 ../../Zotlabs/Lib/ThreadItem.php:756 +#: ../../Zotlabs/Module/Photos.php:1126 ../../Zotlabs/Module/Photos.php:1244 +msgid "Comment" +msgstr "Комментарий" + +#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:463 +#, php-format +msgid "%s show all" +msgstr "%s показать всё" + +#: ../../include/js_strings.php:8 +#, php-format +msgid "%s show less" +msgstr "%s показать меньше" + +#: ../../include/js_strings.php:9 +#, php-format +msgid "%s expand" +msgstr "%s развернуть" + +#: ../../include/js_strings.php:10 +#, php-format +msgid "%s collapse" +msgstr "%s свернуть" + +#: ../../include/js_strings.php:11 +msgid "Password too short" +msgstr "Пароль слишком короткий" + +#: ../../include/js_strings.php:12 +msgid "Passwords do not match" +msgstr "Пароли не совпадают" + +#: ../../include/js_strings.php:13 +msgid "everybody" +msgstr "все" + +#: ../../include/js_strings.php:14 +msgid "Secret Passphrase" +msgstr "Тайный пароль" + +#: ../../include/js_strings.php:15 +msgid "Passphrase hint" +msgstr "Подсказка для пароля" + +#: ../../include/js_strings.php:16 +msgid "Notice: Permissions have changed but have not yet been submitted." +msgstr "Уведомление: Права доступа изменились, но до сих пор не сохранены." + +#: ../../include/js_strings.php:17 +msgid "close all" +msgstr "закрыть все" + +#: ../../include/js_strings.php:18 +msgid "Nothing new here" +msgstr "Здесь нет ничего нового" + +#: ../../include/js_strings.php:19 +msgid "Rate This Channel (this is public)" +msgstr "Оценкa этoго канала (общедоступно)" + +#: ../../include/js_strings.php:20 ../../Zotlabs/Module/Connedit.php:870 +#: ../../Zotlabs/Module/Rate.php:155 +msgid "Rating" +msgstr "Оценка" + +#: ../../include/js_strings.php:21 +msgid "Describe (optional)" +msgstr "Охарактеризовать (необязательно)" + +#: ../../include/js_strings.php:23 +msgid "Please enter a link URL" +msgstr "Пожалуйста, введите URL ссылки" + +#: ../../include/js_strings.php:24 +msgid "Unsaved changes. Are you sure you wish to leave this page?" +msgstr "Есть несохраненные изменения. Вы уверены, что хотите покинуть эту страницу?" + +#: ../../include/js_strings.php:25 ../../Zotlabs/Module/Cdav.php:872 +#: ../../Zotlabs/Module/Pubsites.php:52 ../../Zotlabs/Module/Events.php:475 +#: ../../Zotlabs/Module/Locs.php:117 ../../Zotlabs/Module/Profiles.php:509 +#: ../../Zotlabs/Module/Profiles.php:734 +msgid "Location" +msgstr "Место" + +#: ../../include/js_strings.php:26 +msgid "lovely" +msgstr "прекрасно" + +#: ../../include/js_strings.php:27 +msgid "wonderful" +msgstr "замечательно" + +#: ../../include/js_strings.php:28 +msgid "fantastic" +msgstr "фантастично" + +#: ../../include/js_strings.php:29 +msgid "great" +msgstr "отлично" + +#: ../../include/js_strings.php:30 +msgid "" +"Your chosen nickname was either already taken or not valid. Please use our " +"suggestion (" +msgstr "" +"Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать " +"наше предложение (" + +#: ../../include/js_strings.php:31 +msgid ") or enter a new one." +msgstr ") или введите новый." + +#: ../../include/js_strings.php:32 +msgid "Thank you, this nickname is valid." +msgstr "Спасибо, этот псевдоним может быть использован." + +#: ../../include/js_strings.php:33 +msgid "A channel name is required." +msgstr "Требуется название канала." + +#: ../../include/js_strings.php:34 +msgid "This is a " +msgstr "Это " + +#: ../../include/js_strings.php:35 +msgid " channel name" +msgstr " название канала" + +#: ../../include/js_strings.php:41 +msgid "timeago.prefixAgo" +msgstr "" + +#: ../../include/js_strings.php:42 +msgid "timeago.prefixFromNow" +msgstr "" + +#: ../../include/js_strings.php:43 +msgid "timeago.suffixAgo" +msgstr "назад" + +#: ../../include/js_strings.php:44 +msgid "timeago.suffixFromNow" +msgstr "" + +#: ../../include/js_strings.php:47 +msgid "less than a minute" +msgstr "менее чем одну минуту" + +#: ../../include/js_strings.php:48 +msgid "about a minute" +msgstr "около минуты" + +#: ../../include/js_strings.php:49 +#, php-format +msgid "%d minutes" +msgstr "%d минут" + +#: ../../include/js_strings.php:50 +msgid "about an hour" +msgstr "около часа" + +#: ../../include/js_strings.php:51 +#, php-format +msgid "about %d hours" +msgstr "около %d часов" + +#: ../../include/js_strings.php:52 +msgid "a day" +msgstr "день" + +#: ../../include/js_strings.php:53 +#, php-format +msgid "%d days" +msgstr "%d дней" + +#: ../../include/js_strings.php:54 +msgid "about a month" +msgstr "около месяца" + +#: ../../include/js_strings.php:55 +#, php-format +msgid "%d months" +msgstr "%d месяцев" + +#: ../../include/js_strings.php:56 +msgid "about a year" +msgstr "около года" + +#: ../../include/js_strings.php:57 +#, php-format +msgid "%d years" +msgstr "%d лет" + +#: ../../include/js_strings.php:58 +msgid " " +msgstr " " + +#: ../../include/js_strings.php:59 +msgid "timeago.numbers" +msgstr "" + +#: ../../include/js_strings.php:65 +msgctxt "long" +msgid "May" +msgstr "Май" + +#: ../../include/js_strings.php:73 +msgid "Jan" +msgstr "Янв" + +#: ../../include/js_strings.php:74 +msgid "Feb" +msgstr "Фев" + +#: ../../include/js_strings.php:75 +msgid "Mar" +msgstr "Мар" + +#: ../../include/js_strings.php:76 +msgid "Apr" +msgstr "Апр" + +#: ../../include/js_strings.php:77 +msgctxt "short" +msgid "May" +msgstr "Май" + +#: ../../include/js_strings.php:78 +msgid "Jun" +msgstr "Июн" + +#: ../../include/js_strings.php:79 +msgid "Jul" +msgstr "Июл" + +#: ../../include/js_strings.php:80 +msgid "Aug" +msgstr "Авг" + +#: ../../include/js_strings.php:81 +msgid "Sep" +msgstr "Сен" + +#: ../../include/js_strings.php:82 +msgid "Oct" +msgstr "Окт" + +#: ../../include/js_strings.php:83 +msgid "Nov" +msgstr "Ноя" + +#: ../../include/js_strings.php:84 +msgid "Dec" +msgstr "Дек" + +#: ../../include/js_strings.php:92 +msgid "Sun" +msgstr "Вск" + +#: ../../include/js_strings.php:93 +msgid "Mon" +msgstr "Пон" + +#: ../../include/js_strings.php:94 +msgid "Tue" +msgstr "Вт" + +#: ../../include/js_strings.php:95 +msgid "Wed" +msgstr "Ср" + +#: ../../include/js_strings.php:96 +msgid "Thu" +msgstr "Чет" + +#: ../../include/js_strings.php:97 +msgid "Fri" +msgstr "Пят" + +#: ../../include/js_strings.php:98 +msgid "Sat" +msgstr "Суб" + +#: ../../include/js_strings.php:99 +msgctxt "calendar" +msgid "today" +msgstr "сегодня" + +#: ../../include/js_strings.php:100 +msgctxt "calendar" +msgid "month" +msgstr "месяц" + +#: ../../include/js_strings.php:101 +msgctxt "calendar" +msgid "week" +msgstr "неделя" + +#: ../../include/js_strings.php:102 +msgctxt "calendar" +msgid "day" +msgstr "день" + +#: ../../include/js_strings.php:103 +msgctxt "calendar" +msgid "All day" +msgstr "Весь день" + +#: ../../include/oembed.php:224 +msgid "View PDF" +msgstr "Просмотреть PDF" + +#: ../../include/oembed.php:347 +msgid " by " +msgstr " по " + +#: ../../include/oembed.php:348 +msgid " on " +msgstr " на " + +#: ../../include/oembed.php:377 +msgid "Embedded content" +msgstr "Встроенное содержимое" + +#: ../../include/oembed.php:386 +msgid "Embedding disabled" +msgstr "Встраивание отключено" + +#: ../../include/photos.php:151 +#, php-format +msgid "Image exceeds website size limit of %lu bytes" +msgstr "Файл превышает предельный размер для сайта в %lu байт" + +#: ../../include/photos.php:162 +msgid "Image file is empty." +msgstr "Файл изображения пуст." + +#: ../../include/photos.php:196 ../../Zotlabs/Module/Profile_photo.php:225 +#: ../../Zotlabs/Module/Cover_photo.php:205 +msgid "Unable to process image" +msgstr "Не удается обработать изображение" + +#: ../../include/photos.php:327 +msgid "Photo storage failed." +msgstr "Ошибка хранилища фотографий." + +#: ../../include/photos.php:376 +msgid "a new photo" +msgstr "новая фотография" + +#: ../../include/photos.php:380 +#, php-format +msgctxt "photo_upload" +msgid "%1$s posted %2$s to %3$s" +msgstr "%1$s опубликовал %2$s к %3$s" + +#: ../../include/photos.php:668 ../../Zotlabs/Module/Photos.php:1370 +#: ../../Zotlabs/Module/Photos.php:1383 ../../Zotlabs/Module/Photos.php:1384 +msgid "Recent Photos" +msgstr "Последние фотографии" + +#: ../../include/photos.php:672 +msgid "Upload New Photos" +msgstr "Загрузить новые фотографии" + +#: ../../include/connections.php:133 +msgid "New window" +msgstr "Новое окно" + +#: ../../include/connections.php:134 +msgid "Open the selected location in a different window or browser tab" +msgstr "Открыть выбранное местоположение в другом окне или вкладке браузера" + +#: ../../Zotlabs/Lib/NativeWiki.php:151 +msgid "Wiki updated successfully" +msgstr "Wiki успешно обновлена" + +#: ../../Zotlabs/Lib/NativeWiki.php:205 +msgid "Wiki files deleted successfully" +msgstr "Wiki успешно удалена" + +#: ../../Zotlabs/Lib/Techlevels.php:10 +msgid "0. Beginner/Basic" +msgstr "Начинающий / Базовый" + +#: ../../Zotlabs/Lib/Techlevels.php:11 +msgid "1. Novice - not skilled but willing to learn" +msgstr "1. Новичок - не опытный, но желающий учиться" + +#: ../../Zotlabs/Lib/Techlevels.php:12 +msgid "2. Intermediate - somewhat comfortable" +msgstr "2. Промежуточный - более удобный" + +#: ../../Zotlabs/Lib/Techlevels.php:13 +msgid "3. Advanced - very comfortable" +msgstr "3. Продвинутый - очень удобный" + +#: ../../Zotlabs/Lib/Techlevels.php:14 +msgid "4. Expert - I can write computer code" +msgstr "4. Эксперт - я умею программировать" + +#: ../../Zotlabs/Lib/Techlevels.php:15 +msgid "5. Wizard - I probably know more than you do" +msgstr "5. Волшебник - возможно я знаю больше чем ты" + +#: ../../Zotlabs/Lib/PermissionDescription.php:108 +msgid "Public" +msgstr "Общедоступно" + +#: ../../Zotlabs/Lib/PermissionDescription.php:109 +msgid "Anybody in the $Projectname network" +msgstr "Любому в сети $Projectname" + +#: ../../Zotlabs/Lib/PermissionDescription.php:110 +#, php-format +msgid "Any account on %s" +msgstr "Любой аккаунт в %s" + +#: ../../Zotlabs/Lib/PermissionDescription.php:111 +msgid "Any of my connections" +msgstr "Любой из моих контактов" + +#: ../../Zotlabs/Lib/PermissionDescription.php:112 +msgid "Only connections I specifically allow" +msgstr "Только те контакты, кому я дам разрешение" + +#: ../../Zotlabs/Lib/PermissionDescription.php:113 +msgid "Anybody authenticated (could include visitors from other networks)" +msgstr "Любой аутентифицированный (может включать посетителей их других сетей)" + +#: ../../Zotlabs/Lib/PermissionDescription.php:114 +msgid "Any connections including those who haven't yet been approved" +msgstr "Любые контакты включая те, которые вы ещё не одобрили" + +#: ../../Zotlabs/Lib/PermissionDescription.php:150 +msgid "" +"This is your default setting for the audience of your normal stream, and " +"posts." +msgstr "Это настройка по умолчанию для аудитории ваших обычных потоков и публикаций" + +#: ../../Zotlabs/Lib/PermissionDescription.php:151 +msgid "" +"This is your default setting for who can view your default channel profile" +msgstr "Это настройка по умолчанию для тех, кто может просматривать профиль вашего основного канала" + +#: ../../Zotlabs/Lib/PermissionDescription.php:152 +msgid "This is your default setting for who can view your connections" +msgstr "Это настройка по умолчанию для тех, кто может просматривать ваши контакты" + +#: ../../Zotlabs/Lib/PermissionDescription.php:153 +msgid "" +"This is your default setting for who can view your file storage and photos" +msgstr "Это настройка по умолчанию для тех, кто может просматривать ваше хранилище файлов и фотографий" + +#: ../../Zotlabs/Lib/PermissionDescription.php:154 +msgid "This is your default setting for the audience of your webpages" +msgstr "Это настройка по умолчанию для аудитории ваших веб-страниц" + +#: ../../Zotlabs/Lib/ThreadItem.php:152 ../../Zotlabs/Storage/Browser.php:280 +msgid "Admin Delete" +msgstr "Удалено администратором" + +#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Module/Filer.php:54 +msgid "Save to Folder" +msgstr "Сохранить в каталог" + +#: ../../Zotlabs/Lib/ThreadItem.php:183 +msgid "I will attend" +msgstr "Я буду присутствовать" + +#: ../../Zotlabs/Lib/ThreadItem.php:183 +msgid "I will not attend" +msgstr "Я не буду присутствовать" + +#: ../../Zotlabs/Lib/ThreadItem.php:183 +msgid "I might attend" +msgstr "Я возможно буду присутствовать" + +#: ../../Zotlabs/Lib/ThreadItem.php:193 +msgid "I agree" +msgstr "Я согласен" + +#: ../../Zotlabs/Lib/ThreadItem.php:193 +msgid "I disagree" +msgstr "Я не согласен" + +#: ../../Zotlabs/Lib/ThreadItem.php:193 +msgid "I abstain" +msgstr "Я воздержался" + +#: ../../Zotlabs/Lib/ThreadItem.php:212 ../../Zotlabs/Lib/ThreadItem.php:224 +#: ../../Zotlabs/Module/Photos.php:1161 ../../Zotlabs/Module/Photos.php:1173 +msgid "View all" +msgstr "Просмотреть все" + +#: ../../Zotlabs/Lib/ThreadItem.php:267 +msgid "Add Tag" +msgstr "Добавить тег" + +#: ../../Zotlabs/Lib/ThreadItem.php:285 ../../Zotlabs/Module/Photos.php:1105 +msgid "I like this (toggle)" +msgstr "мне это нравится (переключение)" + +#: ../../Zotlabs/Lib/ThreadItem.php:286 ../../Zotlabs/Module/Photos.php:1106 +msgid "I don't like this (toggle)" +msgstr "мне это не нравится (переключение)" + +#: ../../Zotlabs/Lib/ThreadItem.php:290 +msgid "Share This" +msgstr "Поделиться этим" + +#: ../../Zotlabs/Lib/ThreadItem.php:290 +msgid "share" +msgstr "поделиться" + +#: ../../Zotlabs/Lib/ThreadItem.php:299 +msgid "Delivery Report" +msgstr "Отчёт о доставке" + +#: ../../Zotlabs/Lib/ThreadItem.php:317 +#, php-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "" +msgstr[1] "" + +#: ../../Zotlabs/Lib/ThreadItem.php:347 ../../Zotlabs/Lib/ThreadItem.php:348 +#, php-format +msgid "View %s's profile - %s" +msgstr "Просмотр %s профиля - %s" + +#: ../../Zotlabs/Lib/ThreadItem.php:351 +msgid "to" +msgstr "к" + +#: ../../Zotlabs/Lib/ThreadItem.php:352 +msgid "via" +msgstr "через" + +#: ../../Zotlabs/Lib/ThreadItem.php:353 +msgid "Wall-to-Wall" +msgstr "Стена-к-Стене" + +#: ../../Zotlabs/Lib/ThreadItem.php:354 +msgid "via Wall-To-Wall:" +msgstr "через Стена-к-Стене:" + +#: ../../Zotlabs/Lib/ThreadItem.php:379 +msgid "Attend" +msgstr "Посетить" + +#: ../../Zotlabs/Lib/ThreadItem.php:380 +msgid "Attendance Options" +msgstr "Параметры посещаемости" + +#: ../../Zotlabs/Lib/ThreadItem.php:381 +msgid "Vote" +msgstr "Голосовать" + +#: ../../Zotlabs/Lib/ThreadItem.php:382 +msgid "Voting Options" +msgstr "Параметры голосования" + +#: ../../Zotlabs/Lib/ThreadItem.php:404 +msgid "Add to Calendar" +msgstr "Добавить в календарь" + +#: ../../Zotlabs/Lib/ThreadItem.php:413 +#: ../../Zotlabs/Module/Notifications.php:60 +msgid "Mark all seen" +msgstr "Отметить как просмотренное" + +#: ../../Zotlabs/Lib/ThreadItem.php:420 ../../Zotlabs/Module/Photos.php:1292 +msgctxt "noun" +msgid "Likes" +msgstr "Нравится" + +#: ../../Zotlabs/Lib/ThreadItem.php:421 ../../Zotlabs/Module/Photos.php:1293 +msgctxt "noun" +msgid "Dislikes" +msgstr "Не нравится" + +#: ../../Zotlabs/Lib/ThreadItem.php:754 ../../Zotlabs/Module/Photos.php:1124 +#: ../../Zotlabs/Module/Photos.php:1242 +msgid "This is you" +msgstr "Это вы" + +#: ../../Zotlabs/Lib/ThreadItem.php:763 +msgid "Image" +msgstr "Изображение" + +#: ../../Zotlabs/Lib/ThreadItem.php:765 +msgid "Insert Link" +msgstr "Вставить ссылку" + +#: ../../Zotlabs/Lib/ThreadItem.php:766 +msgid "Video" +msgstr "Видео" + +#: ../../Zotlabs/Lib/ThreadItem.php:776 +msgid "Your full name (required)" +msgstr "Ваше полное имя (требуется)" + +#: ../../Zotlabs/Lib/ThreadItem.php:777 +msgid "Your email address (required)" +msgstr "Ваш адрес электронной почты (требуется)" + +#: ../../Zotlabs/Lib/ThreadItem.php:778 +msgid "Your website URL (optional)" +msgstr "URL вашего вебсайта (необязательно)" + +#: ../../Zotlabs/Lib/Apps.php:291 ../../Zotlabs/Module/Apps.php:50 +msgid "Apps" +msgstr "Приложения" + +#: ../../Zotlabs/Lib/Apps.php:294 +msgid "Site Admin" +msgstr "Администратор сайта" + +#: ../../Zotlabs/Lib/Apps.php:296 +msgid "View Bookmarks" +msgstr "Просмотреть закадки" + +#: ../../Zotlabs/Lib/Apps.php:297 +msgid "My Chatrooms" +msgstr "Мои чаты" + +#: ../../Zotlabs/Lib/Apps.php:299 +msgid "Remote Diagnostics" +msgstr "Удалённая диагностика" + +#: ../../Zotlabs/Lib/Apps.php:303 +msgid "Activity" +msgstr "Активность" + +#: ../../Zotlabs/Lib/Apps.php:308 +msgid "Channel Home" +msgstr "Главная канала" + +#: ../../Zotlabs/Lib/Apps.php:312 +msgid "Directory" +msgstr "Каталог" + +#: ../../Zotlabs/Lib/Apps.php:314 +msgid "Mail" +msgstr "Переписка" + +#: ../../Zotlabs/Lib/Apps.php:315 ../../Zotlabs/Module/Mood.php:135 +msgid "Mood" +msgstr "Настроение" + +#: ../../Zotlabs/Lib/Apps.php:317 +msgid "Chat" +msgstr "Чат" + +#: ../../Zotlabs/Lib/Apps.php:319 +msgid "Probe" +msgstr "Проба" + +#: ../../Zotlabs/Lib/Apps.php:320 +msgid "Suggest" +msgstr "Предложить" + +#: ../../Zotlabs/Lib/Apps.php:321 +msgid "Random Channel" +msgstr "Случайный канал" + +#: ../../Zotlabs/Lib/Apps.php:322 +msgid "Invite" +msgstr "Пригласить" + +#: ../../Zotlabs/Lib/Apps.php:323 ../../Zotlabs/Widget/Admin.php:26 +msgid "Features" +msgstr "Функции" + +#: ../../Zotlabs/Lib/Apps.php:325 +msgid "Post" +msgstr "Публикация" + +#: ../../Zotlabs/Lib/Apps.php:456 ../../Zotlabs/Module/Cdav.php:1186 +#: ../../Zotlabs/Module/Connedit.php:922 +#: ../../Zotlabs/Module/Admin/Addons.php:453 +#: ../../Zotlabs/Module/Settings/Oauth2.php:40 +#: ../../Zotlabs/Module/Settings/Oauth2.php:113 +#: ../../Zotlabs/Module/Settings/Oauth.php:43 +#: ../../Zotlabs/Module/Settings/Oauth.php:114 +#: ../../Zotlabs/Module/Profiles.php:799 +msgid "Update" +msgstr "Обновить" + +#: ../../Zotlabs/Lib/Apps.php:456 ../../Zotlabs/Module/Admin/Addons.php:422 +msgid "Install" +msgstr "Установить" + +#: ../../Zotlabs/Lib/Apps.php:473 +msgid "Purchase" +msgstr "Купить" + +#: ../../Zotlabs/Lib/Apps.php:477 +msgid "Undelete" +msgstr "Восстановить" + +#: ../../Zotlabs/Lib/Apps.php:485 +msgid "Add to app-tray" +msgstr "Добавить в app-tray" + +#: ../../Zotlabs/Lib/Apps.php:486 +msgid "Remove from app-tray" +msgstr "Удалить из app-tray" + +#: ../../Zotlabs/Lib/Apps.php:487 +msgid "Pin to navbar" +msgstr "Добавить на панель навигации" + +#: ../../Zotlabs/Lib/Apps.php:488 +msgid "Unpin from navbar" +msgstr "Удалить с панели навигации" + +#: ../../Zotlabs/Lib/Enotify.php:60 +msgid "$Projectname Notification" +msgstr "Оповещение $Projectname " + +#: ../../Zotlabs/Lib/Enotify.php:63 +msgid "Thank You," +msgstr "Спасибо," + +#: ../../Zotlabs/Lib/Enotify.php:66 +#, php-format +msgid "This email was sent by %1$s at %2$s." +msgstr "Это письмо было отправлено %1$s на %2$s." + +#: ../../Zotlabs/Lib/Enotify.php:67 +#, php-format +msgid "" +"To stop receiving these messages, please adjust your Notification Settings " +"at %s" +msgstr "Чтобы прекратить получать эти сообщения, настройте параметры уведомлений в %s" + +#: ../../Zotlabs/Lib/Enotify.php:68 +#, php-format +msgid "To stop receiving these messages, please adjust your %s." +msgstr "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s." + +#: ../../Zotlabs/Lib/Enotify.php:68 +#: ../../Zotlabs/Module/Settings/Channel.php:570 +msgid "Notification Settings" +msgstr "Настройки уведомлений" + +#: ../../Zotlabs/Lib/Enotify.php:123 +#, php-format +msgid "%s " +msgstr "" + +#: ../../Zotlabs/Lib/Enotify.php:127 +#, php-format +msgid "[$Projectname:Notify] New mail received at %s" +msgstr "[$Projectname:Notify] Получено новое сообщение в %s" + +#: ../../Zotlabs/Lib/Enotify.php:129 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "%1$s отправил вам новое личное сообщение в %2$s." + +#: ../../Zotlabs/Lib/Enotify.php:130 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "%1$s послал вам %2$s." + +#: ../../Zotlabs/Lib/Enotify.php:130 +msgid "a private message" +msgstr "личное сообщение" + +#: ../../Zotlabs/Lib/Enotify.php:131 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения." + +#: ../../Zotlabs/Lib/Enotify.php:144 +msgid "commented on" +msgstr " прокомментировал в" + +#: ../../Zotlabs/Lib/Enotify.php:155 +msgid "liked" +msgstr "понравилось" + +#: ../../Zotlabs/Lib/Enotify.php:158 +msgid "disliked" +msgstr "не понравилось" + +#: ../../Zotlabs/Lib/Enotify.php:201 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" +msgstr "" + +#: ../../Zotlabs/Lib/Enotify.php:209 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" +msgstr "" + +#: ../../Zotlabs/Lib/Enotify.php:218 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" +msgstr "%1$s%2$s [zrl=%3$s]ваш %4$s[/zrl]" + +#: ../../Zotlabs/Lib/Enotify.php:230 +#, php-format +msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s" +msgstr "[$Projectname:Notify] Отмодерирован комментарий к беседе #%1$d по %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:232 +#, php-format +msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s" +msgstr "[$Projectname:Notify] Комментарий к беседе #%1$d по %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:233 +#, php-format +msgid "%1$s commented on an item/conversation you have been following." +msgstr "%1$s прокомментировал тему / беседу за которым вы следите." + +#: ../../Zotlabs/Lib/Enotify.php:236 ../../Zotlabs/Lib/Enotify.php:317 +#: ../../Zotlabs/Lib/Enotify.php:333 ../../Zotlabs/Lib/Enotify.php:358 +#: ../../Zotlabs/Lib/Enotify.php:375 ../../Zotlabs/Lib/Enotify.php:388 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "Пожалуйста, посетите %s для просмотра и / или ответа в беседе." + +#: ../../Zotlabs/Lib/Enotify.php:240 ../../Zotlabs/Lib/Enotify.php:241 +#, php-format +msgid "Please visit %s to approve or reject this comment." +msgstr "Пожалуйста посетитет %s для одобрения и отклонения комментария." + +#: ../../Zotlabs/Lib/Enotify.php:299 +#, php-format +msgid "%1$s liked [zrl=%2$s]your %3$s[/zrl]" +msgstr "%1$s понравился [zrl=%2$s]ваш %3$s[/zrl]" + +#: ../../Zotlabs/Lib/Enotify.php:313 +#, php-format +msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s" +msgstr "[$Projectname:Notify] Беседа получила отметку \"нравится\" #%1$d от %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:314 +#, php-format +msgid "%1$s liked an item/conversation you created." +msgstr "%1$s нравится тема / беседа которую вы создали." + +#: ../../Zotlabs/Lib/Enotify.php:325 +#, php-format +msgid "[$Projectname:Notify] %s posted to your profile wall" +msgstr "[$Projectname:Notify] %s сделал публикацию на стене вашего профиля" + +#: ../../Zotlabs/Lib/Enotify.php:327 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "%1$s сделал публикацию на стене вашего профиля в %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:329 +#, php-format +msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]" +msgstr "%1$s опубликовал на [zrl=%2$s]вашей стене[/zrl]" + +#: ../../Zotlabs/Lib/Enotify.php:352 +#, php-format +msgid "[$Projectname:Notify] %s tagged you" +msgstr "[$Projectname:Notify] %s отметил вас" + +#: ../../Zotlabs/Lib/Enotify.php:353 +#, php-format +msgid "%1$s tagged you at %2$s" +msgstr "%1$s отметил вас в %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:354 +#, php-format +msgid "%1$s [zrl=%2$s]tagged you[/zrl]." +msgstr "%1$s [zrl=%2$s]отметил вас[/zrl]." + +#: ../../Zotlabs/Lib/Enotify.php:365 +#, php-format +msgid "[$Projectname:Notify] %1$s poked you" +msgstr "[$Projectname:Notify] %1$s ткнул вас" + +#: ../../Zotlabs/Lib/Enotify.php:366 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "%1$s ткнул вас в %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:367 +#, php-format +msgid "%1$s [zrl=%2$s]poked you[/zrl]." +msgstr "%1$s [zrl=%2$s]ткнул вас[/zrl]." + +#: ../../Zotlabs/Lib/Enotify.php:382 +#, php-format +msgid "[$Projectname:Notify] %s tagged your post" +msgstr "[$Projectname:Notify] %s отметил вашу публикацию" + +#: ../../Zotlabs/Lib/Enotify.php:383 +#, php-format +msgid "%1$s tagged your post at %2$s" +msgstr "%1$s отметил вашу публикацию на %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:384 +#, php-format +msgid "%1$s tagged [zrl=%2$s]your post[/zrl]" +msgstr "%1$s отметил [zrl=%2$s]вашу публикацию[/zrl]" + +#: ../../Zotlabs/Lib/Enotify.php:395 +msgid "[$Projectname:Notify] Introduction received" +msgstr "[$Projectname:Notify] Получено приглашение" + +#: ../../Zotlabs/Lib/Enotify.php:396 +#, php-format +msgid "You've received an new connection request from '%1$s' at %2$s" +msgstr "Вы получили новый запрос контакта от '%1$s' в %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:397 +#, php-format +msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s." +msgstr "Вы получили [zrl=%1$s]новый запрос контакта[/zrl] от %2$s." + +#: ../../Zotlabs/Lib/Enotify.php:400 ../../Zotlabs/Lib/Enotify.php:418 +#, php-format +msgid "You may visit their profile at %s" +msgstr "Вы можете увидеть его профиль по ссылке %s" + +#: ../../Zotlabs/Lib/Enotify.php:402 +#, php-format +msgid "Please visit %s to approve or reject the connection request." +msgstr "Пожалуйста, посетите %s, чтобы одобрить или отклонить запрос контакта." + +#: ../../Zotlabs/Lib/Enotify.php:409 +msgid "[$Projectname:Notify] Friend suggestion received" +msgstr "[$Projectname:Notify] Получено предложение дружить" + +#: ../../Zotlabs/Lib/Enotify.php:410 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "Вы получили предложение дружить от '%1$s' в %2$s" + +#: ../../Zotlabs/Lib/Enotify.php:411 +#, php-format +msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s." +msgstr "Вы получили [zrl=%1$s]предложение дружить[/zrl] для %2$s от %3$s." + +#: ../../Zotlabs/Lib/Enotify.php:416 +msgid "Name:" +msgstr "Имя:" + +#: ../../Zotlabs/Lib/Enotify.php:417 +msgid "Photo:" +msgstr "Фото:" + +#: ../../Zotlabs/Lib/Enotify.php:420 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "Пожалуйста, посетите %s, чтобы одобрить или отклонить предложение." + +#: ../../Zotlabs/Lib/Enotify.php:640 +msgid "[$Projectname:Notify]" +msgstr "" + +#: ../../Zotlabs/Lib/Enotify.php:808 +msgid "created a new post" +msgstr "создал новую публикацию" + +#: ../../Zotlabs/Lib/Enotify.php:809 +#, php-format +msgid "commented on %s's post" +msgstr "прокомментировал публикацию %s" + +#: ../../Zotlabs/Lib/Enotify.php:816 +#, php-format +msgid "edited a post dated %s" +msgstr "отредактировал публикацию датированную %s" + +#: ../../Zotlabs/Lib/Enotify.php:820 +#, php-format +msgid "edited a comment dated %s" +msgstr "отредактировал комментарий датированный %s" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:42 +#: ../../Zotlabs/Lib/NativeWikiPage.php:93 +msgid "(No Title)" +msgstr "(нет заголовка)" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:107 +msgid "Wiki page create failed." +msgstr "Не удалось создать страницу Wiki." + +#: ../../Zotlabs/Lib/NativeWikiPage.php:120 +msgid "Wiki not found." +msgstr "Wiki не найдена." + +#: ../../Zotlabs/Lib/NativeWikiPage.php:131 +msgid "Destination name already exists" +msgstr "Имя назначения уже существует" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:163 +#: ../../Zotlabs/Lib/NativeWikiPage.php:359 +msgid "Page not found" +msgstr "Страница не найдена." + +#: ../../Zotlabs/Lib/NativeWikiPage.php:194 +msgid "Error reading page content" +msgstr "Ошибка чтения содержимого страницы" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:350 +#: ../../Zotlabs/Lib/NativeWikiPage.php:400 +#: ../../Zotlabs/Lib/NativeWikiPage.php:467 +#: ../../Zotlabs/Lib/NativeWikiPage.php:508 +msgid "Error reading wiki" +msgstr "Ошибка чтения Wiki" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:388 +msgid "Page update failed." +msgstr "Не удалось обновить страницу." + +#: ../../Zotlabs/Lib/NativeWikiPage.php:422 +msgid "Nothing deleted" +msgstr "Ничего не удалено" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:488 +msgid "Compare: object not found." +msgstr "Сравнение: объект не найден." + +#: ../../Zotlabs/Lib/NativeWikiPage.php:494 +msgid "Page updated" +msgstr "Страница обновлена" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:497 +msgid "Untitled" +msgstr "Не озаглавлено" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:503 +msgid "Wiki resource_id required for git commit" +msgstr "Требуется resource_id Wiki для отправки в Git" + +#: ../../Zotlabs/Lib/NativeWikiPage.php:559 +#: ../../Zotlabs/Widget/Wiki_page_history.php:23 +msgctxt "wiki_history" +msgid "Message" +msgstr "Сообщение" + +#: ../../Zotlabs/Lib/Permcat.php:82 +msgctxt "permcat" +msgid "default" +msgstr "по умолчанию" + +#: ../../Zotlabs/Lib/Permcat.php:133 +msgctxt "permcat" +msgid "follower" +msgstr "поклонник" + +#: ../../Zotlabs/Lib/Permcat.php:137 +msgctxt "permcat" +msgid "contributor" +msgstr "участник" + +#: ../../Zotlabs/Lib/Permcat.php:141 +msgctxt "permcat" +msgid "publisher" +msgstr "издатель" + +#: ../../Zotlabs/Lib/DB_Upgrade.php:83 +#, php-format +msgid "Update Error at %s" +msgstr "Ошибка обновления на %s" + +#: ../../Zotlabs/Lib/DB_Upgrade.php:89 +#, php-format +msgid "Update %s failed. See error logs." +msgstr "Выполнение %s неудачно. Проверьте системный журнал." + +#: ../../Zotlabs/Lib/Chatroom.php:23 +msgid "Missing room name" +msgstr "Отсутствует название комнаты" + +#: ../../Zotlabs/Lib/Chatroom.php:32 +msgid "Duplicate room name" +msgstr "Название комнаты дублируется" + +#: ../../Zotlabs/Lib/Chatroom.php:82 ../../Zotlabs/Lib/Chatroom.php:90 +msgid "Invalid room specifier." +msgstr "Неверный указатель комнаты." + +#: ../../Zotlabs/Lib/Chatroom.php:122 +msgid "Room not found." +msgstr "Комната не найдена." + +#: ../../Zotlabs/Lib/Chatroom.php:143 +msgid "Room is full" +msgstr "Комната переполнена" + +#: ../../Zotlabs/Widget/Activity_order.php:86 +msgid "Commented Date" +msgstr "По комментариям" + +#: ../../Zotlabs/Widget/Activity_order.php:90 +msgid "Order by last commented date" +msgstr "Сортировка по дате последнего комментария" + +#: ../../Zotlabs/Widget/Activity_order.php:93 +msgid "Posted Date" +msgstr "По публикациям" + +#: ../../Zotlabs/Widget/Activity_order.php:97 +msgid "Order by last posted date" +msgstr "Сортировка по дате последней публикации" + +#: ../../Zotlabs/Widget/Activity_order.php:100 +msgid "Date Unthreaded" +msgstr "По порядку" + +#: ../../Zotlabs/Widget/Activity_order.php:104 +msgid "Order unthreaded by date" +msgstr "Сортировка в порядке поступления" + +#: ../../Zotlabs/Widget/Activity_order.php:119 +msgid "Activity Order" +msgstr "Сортировка по активности" + +#: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:308 +msgid "Site" +msgstr "Сайт" + +#: ../../Zotlabs/Widget/Admin.php:23 ../../Zotlabs/Module/Admin.php:96 +#: ../../Zotlabs/Module/Admin/Accounts.php:167 +#: ../../Zotlabs/Module/Admin/Accounts.php:180 +msgid "Accounts" +msgstr "Учётные записи" + +#: ../../Zotlabs/Widget/Admin.php:23 ../../Zotlabs/Widget/Admin.php:60 +msgid "Member registrations waiting for confirmation" +msgstr "Регистрации участников, ожидающие подверждения" + +#: ../../Zotlabs/Widget/Admin.php:24 ../../Zotlabs/Module/Admin.php:114 +#: ../../Zotlabs/Module/Admin/Channels.php:146 +msgid "Channels" +msgstr "Каналы" + +#: ../../Zotlabs/Widget/Admin.php:25 ../../Zotlabs/Module/Admin/Security.php:93 +msgid "Security" +msgstr "Безопасность" + +#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Addons.php:342 +#: ../../Zotlabs/Module/Admin/Addons.php:437 +msgid "Addons" +msgstr "Расширения" + +#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Module/Admin/Themes.php:123 +#: ../../Zotlabs/Module/Admin/Themes.php:157 +msgid "Themes" +msgstr "Темы" + +#: ../../Zotlabs/Widget/Admin.php:29 +msgid "Inspect queue" +msgstr "Просмотр очереди" + +#: ../../Zotlabs/Widget/Admin.php:30 ../../Zotlabs/Module/Admin/Profs.php:168 +msgid "Profile Fields" +msgstr "Поля профиля" + +#: ../../Zotlabs/Widget/Admin.php:31 +msgid "DB updates" +msgstr "Обновление базы данных" + +#: ../../Zotlabs/Widget/Admin.php:48 ../../Zotlabs/Widget/Admin.php:58 +#: ../../Zotlabs/Module/Admin/Logs.php:83 +msgid "Logs" +msgstr "Журналы" + +#: ../../Zotlabs/Widget/Admin.php:56 +msgid "Addon Features" +msgstr "Настройки расширений" + +#: ../../Zotlabs/Widget/Tasklist.php:23 +msgid "Tasks" +msgstr "Задачи" + +#: ../../Zotlabs/Widget/Suggestions.php:46 ../../Zotlabs/Module/Suggest.php:58 +msgid "Ignore/Hide" +msgstr "Игнорировать / cкрыть" + +#: ../../Zotlabs/Widget/Suggestions.php:51 +msgid "Suggestions" +msgstr "Рекомендации" + +#: ../../Zotlabs/Widget/Suggestions.php:52 +msgid "See more..." +msgstr "Просмотреть больше..." + +#: ../../Zotlabs/Widget/Conversations.php:17 +msgid "Received Messages" +msgstr "Полученные сообщения" + +#: ../../Zotlabs/Widget/Conversations.php:21 +msgid "Sent Messages" +msgstr "Отправленные сообщения" + +#: ../../Zotlabs/Widget/Conversations.php:25 +msgid "Conversations" +msgstr "Беседы" + +#: ../../Zotlabs/Widget/Conversations.php:37 +msgid "No messages." +msgstr "Сообщений нет." + +#: ../../Zotlabs/Widget/Conversations.php:57 +msgid "Delete conversation" +msgstr "Удалить беседу" + +#: ../../Zotlabs/Widget/Cdav.php:37 +msgid "Select Channel" +msgstr "Выбрать канал" + +#: ../../Zotlabs/Widget/Cdav.php:42 +msgid "Read-write" +msgstr "Чтение-запись" + +#: ../../Zotlabs/Widget/Cdav.php:43 +msgid "Read-only" +msgstr "Только чтение" + +#: ../../Zotlabs/Widget/Cdav.php:117 +msgid "My Calendars" +msgstr "Мои календари" + +#: ../../Zotlabs/Widget/Cdav.php:119 +msgid "Shared Calendars" +msgstr "Общие календари" + +#: ../../Zotlabs/Widget/Cdav.php:123 +msgid "Share this calendar" +msgstr "Поделиться этим календарём" + +#: ../../Zotlabs/Widget/Cdav.php:125 +msgid "Calendar name and color" +msgstr "Имя и цвет календаря" + +#: ../../Zotlabs/Widget/Cdav.php:127 +msgid "Create new calendar" +msgstr "Создать новый календарь" + +#: ../../Zotlabs/Widget/Cdav.php:128 ../../Zotlabs/Widget/Cdav.php:165 +#: ../../Zotlabs/Module/Cdav.php:1185 ../../Zotlabs/Module/Layouts.php:185 +#: ../../Zotlabs/Module/Connedit.php:921 ../../Zotlabs/Module/Webpages.php:239 +#: ../../Zotlabs/Module/Articles.php:96 ../../Zotlabs/Module/Blocks.php:159 +#: ../../Zotlabs/Module/Menu.php:181 ../../Zotlabs/Module/New_channel.php:188 +#: ../../Zotlabs/Module/Cards.php:100 ../../Zotlabs/Module/Profiles.php:798 +#: ../../Zotlabs/Storage/Browser.php:276 ../../Zotlabs/Storage/Browser.php:390 +msgid "Create" +msgstr "Создать" + +#: ../../Zotlabs/Widget/Cdav.php:129 +msgid "Calendar Name" +msgstr "Имя календаря" + +#: ../../Zotlabs/Widget/Cdav.php:130 +msgid "Calendar Tools" +msgstr "Инструменты календаря" + +#: ../../Zotlabs/Widget/Cdav.php:131 +msgid "Import calendar" +msgstr "Импортировать календарь" + +#: ../../Zotlabs/Widget/Cdav.php:132 +msgid "Select a calendar to import to" +msgstr "Выбрать календарь для импорта в" + +#: ../../Zotlabs/Widget/Cdav.php:133 ../../Zotlabs/Widget/Cdav.php:169 +#: ../../Zotlabs/Widget/Album.php:97 ../../Zotlabs/Widget/Portfolio.php:110 +#: ../../Zotlabs/Module/Photos.php:717 +#: ../../Zotlabs/Module/Profile_photo.php:459 +#: ../../Zotlabs/Module/Cover_photo.php:395 +#: ../../Zotlabs/Module/Embedphotos.php:158 +#: ../../Zotlabs/Storage/Browser.php:392 +msgid "Upload" +msgstr "Загрузка" + +#: ../../Zotlabs/Widget/Cdav.php:159 +msgid "Addressbooks" +msgstr "Адресные книги" + +#: ../../Zotlabs/Widget/Cdav.php:161 +msgid "Addressbook name" +msgstr "Имя адресной книги" + +#: ../../Zotlabs/Widget/Cdav.php:163 +msgid "Create new addressbook" +msgstr "Создать новую адресную книгу" + +#: ../../Zotlabs/Widget/Cdav.php:164 +msgid "Addressbook Name" +msgstr "Имя адресной книги" + +#: ../../Zotlabs/Widget/Cdav.php:166 +msgid "Addressbook Tools" +msgstr "Инструменты адресной книги" + +#: ../../Zotlabs/Widget/Cdav.php:167 +msgid "Import addressbook" +msgstr "Импортировать адресную книгу" + +#: ../../Zotlabs/Widget/Cdav.php:168 +msgid "Select an addressbook to import to" +msgstr "Выбрать адресную книгу для импорта в" + +#: ../../Zotlabs/Widget/Activity.php:50 +msgctxt "widget" +msgid "Activity" +msgstr "Активность" + +#: ../../Zotlabs/Widget/Hq_controls.php:14 +msgid "HQ Control Panel" +msgstr "Панель управления HQ" + +#: ../../Zotlabs/Widget/Hq_controls.php:17 +msgid "Create a new post" +msgstr "Создать новую публикацию" + +#: ../../Zotlabs/Widget/Wiki_pages.php:32 +#: ../../Zotlabs/Widget/Wiki_pages.php:89 +msgid "Add new page" +msgstr "Добавить новую страницу" + +#: ../../Zotlabs/Widget/Wiki_pages.php:39 +#: ../../Zotlabs/Widget/Wiki_pages.php:96 ../../Zotlabs/Module/Dreport.php:151 +msgid "Options" +msgstr "Параметры" + +#: ../../Zotlabs/Widget/Wiki_pages.php:83 +msgid "Wiki Pages" +msgstr "Wiki страницы" + +#: ../../Zotlabs/Widget/Wiki_pages.php:94 +msgid "Page name" +msgstr "Название страницы" + +#: ../../Zotlabs/Widget/Mailmenu.php:13 +msgid "Private Mail Menu" +msgstr "Меню личной переписки" + +#: ../../Zotlabs/Widget/Mailmenu.php:15 +msgid "Combined View" +msgstr "Комбинированный вид" + +#: ../../Zotlabs/Widget/Mailmenu.php:20 +msgid "Inbox" +msgstr "Входящие" + +#: ../../Zotlabs/Widget/Mailmenu.php:25 +msgid "Outbox" +msgstr "Исходящие" + +#: ../../Zotlabs/Widget/Mailmenu.php:30 +msgid "New Message" +msgstr "Новое сообщение" + +#: ../../Zotlabs/Widget/Photo_rand.php:58 ../../Zotlabs/Widget/Photo.php:48 +msgid "photo/image" +msgstr "фотография / изображение" + +#: ../../Zotlabs/Widget/Archive.php:43 +msgid "Archives" +msgstr "Архивы" + +#: ../../Zotlabs/Widget/Eventstools.php:13 +msgid "Events Tools" +msgstr "Инструменты для событий" + +#: ../../Zotlabs/Widget/Eventstools.php:14 +msgid "Export Calendar" +msgstr "Экспортировать календарь" + +#: ../../Zotlabs/Widget/Eventstools.php:15 +msgid "Import Calendar" +msgstr "Импортировать календарь" + +#: ../../Zotlabs/Widget/Wiki_list.php:15 +msgid "Wiki List" +msgstr "Список Wiki" + +#: ../../Zotlabs/Widget/Settings_menu.php:35 +msgid "Account settings" +msgstr "Настройки аккаунта" + +#: ../../Zotlabs/Widget/Settings_menu.php:41 +msgid "Channel settings" +msgstr "Выбор канала" + +#: ../../Zotlabs/Widget/Settings_menu.php:50 +msgid "Additional features" +msgstr "Дополнительные функции" + +#: ../../Zotlabs/Widget/Settings_menu.php:57 +msgid "Addon settings" +msgstr "Настройки расширений" + +#: ../../Zotlabs/Widget/Settings_menu.php:63 +msgid "Display settings" +msgstr "Настройки отображения" + +#: ../../Zotlabs/Widget/Settings_menu.php:70 +msgid "Manage locations" +msgstr "Управление местоположением" + +#: ../../Zotlabs/Widget/Settings_menu.php:77 +msgid "Export channel" +msgstr "Экспортировать канал" + +#: ../../Zotlabs/Widget/Settings_menu.php:84 +msgid "OAuth1 apps" +msgstr "Приложения OAuth1" + +#: ../../Zotlabs/Widget/Settings_menu.php:92 +msgid "OAuth2 apps" +msgstr "Приложения OAuth2" + +#: ../../Zotlabs/Widget/Settings_menu.php:100 +#: ../../Zotlabs/Module/Settings/Tokens.php:150 +msgid "Guest Access Tokens" +msgstr "Токен гостевого доступа" + +#: ../../Zotlabs/Widget/Settings_menu.php:117 +#: ../../Zotlabs/Module/Connedit.php:850 ../../Zotlabs/Module/Defperms.php:238 +msgid "Connection Default Permissions" +msgstr "Разрешения по умолчанию для контакта" + +#: ../../Zotlabs/Widget/Settings_menu.php:125 +msgid "Premium Channel Settings" +msgstr "Настройки премиум-канала" + +#: ../../Zotlabs/Widget/Album.php:78 ../../Zotlabs/Widget/Portfolio.php:87 +#: ../../Zotlabs/Module/Photos.php:816 ../../Zotlabs/Module/Photos.php:1355 +#: ../../Zotlabs/Module/Embedphotos.php:140 +msgid "View Photo" +msgstr "Посмотреть фотографию" + +#: ../../Zotlabs/Widget/Album.php:95 ../../Zotlabs/Widget/Portfolio.php:108 +#: ../../Zotlabs/Module/Photos.php:847 ../../Zotlabs/Module/Embedphotos.php:156 +msgid "Edit Album" +msgstr "Редактировать Фотоальбом" + +#: ../../Zotlabs/Widget/Pubsites.php:12 ../../Zotlabs/Module/Pubsites.php:24 +msgid "Public Hubs" +msgstr "Публичные хабы" + +#: ../../Zotlabs/Widget/Notes.php:16 +msgid "Notes" +msgstr "Заметки" + +#: ../../Zotlabs/Widget/Chatroom_list.php:20 +msgid "Overview" +msgstr "Обзор" + +#: ../../Zotlabs/Widget/Appstore.php:11 +msgid "App Collections" +msgstr "Коллекции приложений" + +#: ../../Zotlabs/Widget/Appstore.php:13 +msgid "Available Apps" +msgstr "Доступные приложения" + +#: ../../Zotlabs/Widget/Appstore.php:14 +msgid "Installed apps" +msgstr "Установленные приложения" + +#: ../../Zotlabs/Widget/Bookmarkedchats.php:24 +msgid "Bookmarked Chatrooms" +msgstr "Закладки чатов" + +#: ../../Zotlabs/Widget/Follow.php:22 +#, php-format +msgid "You have %1$.0f of %2$.0f allowed connections." +msgstr "У вас есть %1$.0f из %2$.0f разрешенных контактов." + +#: ../../Zotlabs/Widget/Follow.php:29 +msgid "Add New Connection" +msgstr "Добавить новый контакт" + +#: ../../Zotlabs/Widget/Follow.php:30 +msgid "Enter channel address" +msgstr "Введите адрес канала" + +#: ../../Zotlabs/Widget/Follow.php:31 +msgid "Examples: bob@example.com, https://example.com/barbara" +msgstr "Пример: ivan@example.com, http://example.com/ivan" + +#: ../../Zotlabs/Widget/Chatroom_members.php:11 +msgid "Chat Members" +msgstr "Участники чата" + +#: ../../Zotlabs/Widget/Suggestedchats.php:32 +msgid "Suggested Chatrooms" +msgstr "Рекомендуемые чаты" + +#: ../../Zotlabs/Widget/Rating.php:51 +msgid "Rating Tools" +msgstr "Инструменты оценки" + +#: ../../Zotlabs/Widget/Rating.php:55 ../../Zotlabs/Widget/Rating.php:57 +msgid "Rate Me" +msgstr "Оценить меня" + +#: ../../Zotlabs/Widget/Rating.php:60 +msgid "View Ratings" +msgstr "Просмотр оценок" + +#: ../../Zotlabs/Widget/Savedsearch.php:75 +msgid "Remove term" +msgstr "Удалить термин" + +#: ../../Zotlabs/Widget/Affinity.php:22 ../../Zotlabs/Module/Connedit.php:709 +msgid "Me" +msgstr "Я" + +#: ../../Zotlabs/Widget/Affinity.php:23 ../../Zotlabs/Module/Connedit.php:710 +msgid "Family" +msgstr "Семья" + +#: ../../Zotlabs/Widget/Affinity.php:25 ../../Zotlabs/Module/Connedit.php:712 +msgid "Acquaintances" +msgstr "Знакомые" + +#: ../../Zotlabs/Widget/Affinity.php:26 ../../Zotlabs/Module/Connections.php:94 +#: ../../Zotlabs/Module/Connections.php:108 +#: ../../Zotlabs/Module/Connedit.php:713 +msgid "All" +msgstr "Все" + +#: ../../Zotlabs/Widget/Affinity.php:45 +msgid "Refresh" +msgstr "Обновить" + +#: ../../Zotlabs/Widget/Activity_filter.php:24 +msgid "Personal Posts" +msgstr "Личные публикации" + +#: ../../Zotlabs/Widget/Activity_filter.php:28 +msgid "Show posts that mention or involve me" +msgstr "Показывать публикации где вы были упомянуты или привлечены" + +#: ../../Zotlabs/Widget/Activity_filter.php:39 +msgid "Starred Posts" +msgstr "Отмеченные публикации" + +#: ../../Zotlabs/Widget/Activity_filter.php:43 +msgid "Show posts that I have starred" +msgstr "Показывать публикации которые я отметил" + +#: ../../Zotlabs/Widget/Activity_filter.php:63 +#, php-format +msgid "Show posts related to the %s privacy group" +msgstr "Показывать публикации относящиеся к группе безопасности %s" + +#: ../../Zotlabs/Widget/Activity_filter.php:72 +msgid "Show my privacy groups" +msgstr "Показывать мои группы безопасности" + +#: ../../Zotlabs/Widget/Activity_filter.php:93 +msgid "Show posts to this forum" +msgstr "Показывать публикации этого форума" + +#: ../../Zotlabs/Widget/Activity_filter.php:100 +#: ../../Zotlabs/Widget/Notifications.php:119 +#: ../../Zotlabs/Widget/Notifications.php:120 +#: ../../Zotlabs/Widget/Forums.php:100 +msgid "Forums" +msgstr "Форумы" + +#: ../../Zotlabs/Widget/Activity_filter.php:104 +msgid "Show forums" +msgstr "Показывать форумы" + +#: ../../Zotlabs/Widget/Activity_filter.php:128 +#, php-format +msgid "Show posts that I have filed to %s" +msgstr "Показывать публикации которые я добавил в %s" + +#: ../../Zotlabs/Widget/Activity_filter.php:138 +msgid "Show filed post categories" +msgstr "Показывать категории добавленных публикаций" + +#: ../../Zotlabs/Widget/Activity_filter.php:152 +msgid "Panel search" +msgstr "Панель поиска" + +#: ../../Zotlabs/Widget/Activity_filter.php:162 +#: ../../Zotlabs/Widget/Notifications.php:27 +#: ../../Zotlabs/Widget/Notifications.php:46 +#: ../../Zotlabs/Widget/Notifications.php:122 +#: ../../Zotlabs/Widget/Notifications.php:153 +msgid "Filter by name" +msgstr "Отфильтровать по имени" + +#: ../../Zotlabs/Widget/Activity_filter.php:177 +msgid "Remove active filter" +msgstr "Удалить активный фильтр" + +#: ../../Zotlabs/Widget/Activity_filter.php:193 +msgid "Activity Filters" +msgstr "Фильтры активности" + +#: ../../Zotlabs/Widget/Cover_photo.php:54 +msgid "Click to show more" +msgstr "Нажмите чтобы показать больше" + +#: ../../Zotlabs/Widget/Notifications.php:16 +msgid "New Network Activity" +msgstr "Новая сетевая активность" + +#: ../../Zotlabs/Widget/Notifications.php:17 +msgid "New Network Activity Notifications" +msgstr "Новые уведомления о сетевой активности" + +#: ../../Zotlabs/Widget/Notifications.php:20 +msgid "View your network activity" +msgstr "Просмотреть вашу сетевую активность" + +#: ../../Zotlabs/Widget/Notifications.php:23 +msgid "Mark all notifications read" +msgstr "Пометить уведомления как прочитанные" + +#: ../../Zotlabs/Widget/Notifications.php:26 +#: ../../Zotlabs/Widget/Notifications.php:45 +#: ../../Zotlabs/Widget/Notifications.php:152 +msgid "Show new posts only" +msgstr "Показывать только новые публикации" + +#: ../../Zotlabs/Widget/Notifications.php:35 +msgid "New Home Activity" +msgstr "Новая локальная активность" + +#: ../../Zotlabs/Widget/Notifications.php:36 +msgid "New Home Activity Notifications" +msgstr "Новые уведомления локальной активности" + +#: ../../Zotlabs/Widget/Notifications.php:39 +msgid "View your home activity" +msgstr "Просмотреть локальную активность" + +#: ../../Zotlabs/Widget/Notifications.php:42 +#: ../../Zotlabs/Widget/Notifications.php:149 +msgid "Mark all notifications seen" +msgstr "Пометить уведомления как просмотренные" + +#: ../../Zotlabs/Widget/Notifications.php:54 +msgid "New Mails" +msgstr "Новая переписка" + +#: ../../Zotlabs/Widget/Notifications.php:55 +msgid "New Mails Notifications" +msgstr "Уведомления о новой переписке" + +#: ../../Zotlabs/Widget/Notifications.php:58 +msgid "View your private mails" +msgstr "Просмотреть вашу личную переписку" + +#: ../../Zotlabs/Widget/Notifications.php:61 +msgid "Mark all messages seen" +msgstr "Пометить сообщения как просмотренные" + +#: ../../Zotlabs/Widget/Notifications.php:69 +msgid "New Events" +msgstr "Новые события" + +#: ../../Zotlabs/Widget/Notifications.php:70 +msgid "New Events Notifications" +msgstr "Уведомления о новых событиях" + +#: ../../Zotlabs/Widget/Notifications.php:73 +msgid "View events" +msgstr "Просмотреть события" + +#: ../../Zotlabs/Widget/Notifications.php:76 +msgid "Mark all events seen" +msgstr "Пометить все события как просмотренные" + +#: ../../Zotlabs/Widget/Notifications.php:84 +#: ../../Zotlabs/Module/Connections.php:147 +msgid "New Connections" +msgstr "Новые контакты" + +#: ../../Zotlabs/Widget/Notifications.php:85 +msgid "New Connections Notifications" +msgstr "Уведомления о новых контактах" + +#: ../../Zotlabs/Widget/Notifications.php:88 +msgid "View all connections" +msgstr "Просмотр всех контактов" + +#: ../../Zotlabs/Widget/Notifications.php:96 +msgid "New Files" +msgstr "Новые файлы" + +#: ../../Zotlabs/Widget/Notifications.php:97 +msgid "New Files Notifications" +msgstr "Уведомления о новых файлах" + +#: ../../Zotlabs/Widget/Notifications.php:104 +#: ../../Zotlabs/Widget/Notifications.php:105 +msgid "Notices" +msgstr "Оповещения" + +#: ../../Zotlabs/Widget/Notifications.php:108 +msgid "View all notices" +msgstr "Просмотреть все оповещения" + +#: ../../Zotlabs/Widget/Notifications.php:111 +msgid "Mark all notices seen" +msgstr "Пометить все оповещения как просмотренные" + +#: ../../Zotlabs/Widget/Notifications.php:132 +msgid "New Registrations" +msgstr "Новые регистрации" + +#: ../../Zotlabs/Widget/Notifications.php:133 +msgid "New Registrations Notifications" +msgstr "Уведомления о новых регистрациях" + +#: ../../Zotlabs/Widget/Notifications.php:142 +#: ../../Zotlabs/Module/Pubstream.php:95 +msgid "Public Stream" +msgstr "Публичный поток" + +#: ../../Zotlabs/Widget/Notifications.php:143 +msgid "Public Stream Notifications" +msgstr "Уведомления публичного потока" + +#: ../../Zotlabs/Widget/Notifications.php:146 +msgid "View the public stream" +msgstr "Просмотреть публичный поток" + +#: ../../Zotlabs/Widget/Notifications.php:161 +msgid "Sorry, you have got no notifications at the moment" +msgstr "Извините, но сейчас у вас нет уведомлений" + +#: ../../Zotlabs/Widget/Newmember.php:24 +msgid "Profile Creation" +msgstr "Создание профиля" + +#: ../../Zotlabs/Widget/Newmember.php:26 +msgid "Upload profile photo" +msgstr "Загрузить фотографию профиля" + +#: ../../Zotlabs/Widget/Newmember.php:27 +msgid "Upload cover photo" +msgstr "Загрузить фотографию обложки" + +#: ../../Zotlabs/Widget/Newmember.php:31 +msgid "Find and Connect with others" +msgstr "Найти и вступить в контакт" + +#: ../../Zotlabs/Widget/Newmember.php:33 +msgid "View the directory" +msgstr "Просмотреть каталог" + +#: ../../Zotlabs/Widget/Newmember.php:34 ../../Zotlabs/Module/Go.php:38 +msgid "View friend suggestions" +msgstr "Просмотр рекомендуемых друзей" + +#: ../../Zotlabs/Widget/Newmember.php:35 +msgid "Manage your connections" +msgstr "Управлять вашими контактами" + +#: ../../Zotlabs/Widget/Newmember.php:38 +msgid "Communicate" +msgstr "Связаться" + +#: ../../Zotlabs/Widget/Newmember.php:40 +msgid "View your channel homepage" +msgstr "Домашняя страница канала" + +#: ../../Zotlabs/Widget/Newmember.php:41 +msgid "View your network stream" +msgstr "Просмотреть ваш сетевой поток" + +#: ../../Zotlabs/Widget/Newmember.php:47 +msgid "Documentation" +msgstr "Документация" + +#: ../../Zotlabs/Widget/Newmember.php:58 +msgid "View public stream" +msgstr "Просмотреть публичный поток" + +#: ../../Zotlabs/Access/PermissionRoles.php:283 +msgid "Social Networking" +msgstr "Социальная Сеть" + +#: ../../Zotlabs/Access/PermissionRoles.php:284 +msgid "Social - Federation" +msgstr "Социальная - Федерация" + +#: ../../Zotlabs/Access/PermissionRoles.php:285 +msgid "Social - Mostly Public" +msgstr "Социальная - В основном общественный" + +#: ../../Zotlabs/Access/PermissionRoles.php:286 +msgid "Social - Restricted" +msgstr "Социальная - Ограниченный" + +#: ../../Zotlabs/Access/PermissionRoles.php:287 +msgid "Social - Private" +msgstr "Социальная - Частный" + +#: ../../Zotlabs/Access/PermissionRoles.php:290 +msgid "Community Forum" +msgstr "Форум сообщества" + +#: ../../Zotlabs/Access/PermissionRoles.php:291 +msgid "Forum - Mostly Public" +msgstr "Форум - В основном общественный" + +#: ../../Zotlabs/Access/PermissionRoles.php:292 +msgid "Forum - Restricted" +msgstr "Форум - Ограниченный" + +#: ../../Zotlabs/Access/PermissionRoles.php:293 +msgid "Forum - Private" +msgstr "Форум - Частный" + +#: ../../Zotlabs/Access/PermissionRoles.php:296 +msgid "Feed Republish" +msgstr "Публиковать ленты новостей" + +#: ../../Zotlabs/Access/PermissionRoles.php:297 +msgid "Feed - Mostly Public" +msgstr "Ленты новостей - В основном общественный" + +#: ../../Zotlabs/Access/PermissionRoles.php:298 +msgid "Feed - Restricted" +msgstr "Ленты новостей - Ограниченный" + +#: ../../Zotlabs/Access/PermissionRoles.php:301 +msgid "Special Purpose" +msgstr "Спец. назначение" + +#: ../../Zotlabs/Access/PermissionRoles.php:302 +msgid "Special - Celebrity/Soapbox" +msgstr "Спец. назначение - Знаменитость/Soapbox" + +#: ../../Zotlabs/Access/PermissionRoles.php:303 +msgid "Special - Group Repository" +msgstr "Спец. назначение - Групповой репозиторий" + +#: ../../Zotlabs/Access/PermissionRoles.php:307 +msgid "Custom/Expert Mode" +msgstr "Экспертный режим" + +#: ../../Zotlabs/Access/Permissions.php:56 +msgid "Can view my channel stream and posts" +msgstr "Может просматривать мою ленту и сообщения" + +#: ../../Zotlabs/Access/Permissions.php:57 +msgid "Can send me their channel stream and posts" +msgstr "Может присылать мне свои потоки и сообщения" + +#: ../../Zotlabs/Access/Permissions.php:58 +msgid "Can view my default channel profile" +msgstr "Может просматривать мой стандартный профиль канала" + +#: ../../Zotlabs/Access/Permissions.php:59 +msgid "Can view my connections" +msgstr "Может просматривать мои контакты" -#: ../../include/text.php:912 -msgid "tired" -msgstr "усталый" +#: ../../Zotlabs/Access/Permissions.php:60 +msgid "Can view my file storage and photos" +msgstr "Может просматривать мое хранилище файлов" -#: ../../include/text.php:913 -msgid "perky" -msgstr "весёлый" +#: ../../Zotlabs/Access/Permissions.php:61 +msgid "Can upload/modify my file storage and photos" +msgstr "Может загружать/изменять мои файлы и фотографии в хранилище" -#: ../../include/text.php:914 -msgid "angry" -msgstr "сердитый" +#: ../../Zotlabs/Access/Permissions.php:62 +msgid "Can view my channel webpages" +msgstr "Может просматривать мои веб-страницы" -#: ../../include/text.php:915 -msgid "stupified" -msgstr "отупевший" +#: ../../Zotlabs/Access/Permissions.php:63 +msgid "Can view my wiki pages" +msgstr "Может просматривать мои вики-страницы" -#: ../../include/text.php:916 -msgid "puzzled" -msgstr "недоумённый" +#: ../../Zotlabs/Access/Permissions.php:64 +msgid "Can create/edit my channel webpages" +msgstr "Может редактировать мои веб-страницы" -#: ../../include/text.php:917 -msgid "interested" -msgstr "заинтересованный" +#: ../../Zotlabs/Access/Permissions.php:65 +msgid "Can write to my wiki pages" +msgstr "Может редактировать мои вики-страницы" -#: ../../include/text.php:918 -msgid "bitter" -msgstr "озлобленный" +#: ../../Zotlabs/Access/Permissions.php:66 +msgid "Can post on my channel (wall) page" +msgstr "Может публиковать на моей странице канала (\"стена\")" -#: ../../include/text.php:919 -msgid "cheerful" -msgstr "бодрый" +#: ../../Zotlabs/Access/Permissions.php:67 +msgid "Can comment on or like my posts" +msgstr "Может прокомментировать или отмечать как понравившиеся мои посты" -#: ../../include/text.php:920 -msgid "alive" -msgstr "энергичный" +#: ../../Zotlabs/Access/Permissions.php:68 +msgid "Can send me private mail messages" +msgstr "Может отправлять мне личные сообщения по эл. почте" -#: ../../include/text.php:921 -msgid "annoyed" -msgstr "раздражённый" +#: ../../Zotlabs/Access/Permissions.php:69 +msgid "Can like/dislike profiles and profile things" +msgstr "Может комментировать или отмечать как нравится/ненравится мой профиль" -#: ../../include/text.php:922 -msgid "anxious" -msgstr "обеспокоенный" +#: ../../Zotlabs/Access/Permissions.php:70 +msgid "Can forward to all my channel connections via ! mentions in posts" +msgstr "Может отправлять всем подписчикам моего канала через использование ! в публикациях" -#: ../../include/text.php:923 -msgid "cranky" -msgstr "капризный" +#: ../../Zotlabs/Access/Permissions.php:71 +msgid "Can chat with me" +msgstr "Может общаться со мной в чате" -#: ../../include/text.php:924 -msgid "disturbed" -msgstr "встревоженный" +#: ../../Zotlabs/Access/Permissions.php:72 +msgid "Can source my public posts in derived channels" +msgstr "Может использовать мои публичные сообщения в клонированных лентах сообщений" -#: ../../include/text.php:925 -msgid "frustrated" -msgstr "разочарованный" +#: ../../Zotlabs/Access/Permissions.php:73 +msgid "Can administer my channel" +msgstr "Может администрировать мой канал" -#: ../../include/text.php:926 -msgid "depressed" -msgstr "" +#: ../../Zotlabs/Zot/Auth.php:152 +msgid "" +"Remote authentication blocked. You are logged into this site locally. Please " +"logout and retry." +msgstr "Удалённая аутентификация заблокирована. Вы вошли на этот сайт локально. Пожалуйста, выйдите и попробуйте ещё раз." -#: ../../include/text.php:927 -msgid "motivated" -msgstr "мотивированный" +#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56 +msgid "App installed." +msgstr "Приложение установлено." -#: ../../include/text.php:928 -msgid "relaxed" -msgstr "расслабленный" +#: ../../Zotlabs/Module/Appman.php:49 +msgid "Malformed app." +msgstr "Неработающее приложение." -#: ../../include/text.php:929 -msgid "surprised" -msgstr "удивленный" +#: ../../Zotlabs/Module/Appman.php:130 +msgid "Embed code" +msgstr "Встроить код" -#: ../../include/text.php:1090 -msgid "Monday" -msgstr "Понедельник" +#: ../../Zotlabs/Module/Appman.php:136 +msgid "Edit App" +msgstr "Редактировать приложение" -#: ../../include/text.php:1090 -msgid "Tuesday" -msgstr "Вторник" +#: ../../Zotlabs/Module/Appman.php:136 +msgid "Create App" +msgstr "Создать приложение" -#: ../../include/text.php:1090 -msgid "Wednesday" -msgstr "Среда" +#: ../../Zotlabs/Module/Appman.php:141 +msgid "Name of app" +msgstr "Наименование приложения" -#: ../../include/text.php:1090 -msgid "Thursday" -msgstr "Четверг" +#: ../../Zotlabs/Module/Appman.php:142 +msgid "Location (URL) of app" +msgstr "Местоположение (URL) приложения" -#: ../../include/text.php:1090 -msgid "Friday" -msgstr "Пятница" +#: ../../Zotlabs/Module/Appman.php:144 +msgid "Photo icon URL" +msgstr "URL пиктограммы" -#: ../../include/text.php:1090 -msgid "Saturday" -msgstr "Суббота" +#: ../../Zotlabs/Module/Appman.php:144 +msgid "80 x 80 pixels - optional" +msgstr "80 x 80 пикселей - необязательно" + +#: ../../Zotlabs/Module/Appman.php:145 +msgid "Categories (optional, comma separated list)" +msgstr "Категории (необязательно, список через запятую)" + +#: ../../Zotlabs/Module/Appman.php:146 +msgid "Version ID" +msgstr "ID версии" + +#: ../../Zotlabs/Module/Appman.php:147 +msgid "Price of app" +msgstr "Цена приложения" + +#: ../../Zotlabs/Module/Appman.php:148 +msgid "Location (URL) to purchase app" +msgstr "Ссылка (URL) для покупки приложения" + +#: ../../Zotlabs/Module/Acl.php:359 +msgid "network" +msgstr "сеть" + +#: ../../Zotlabs/Module/Cdav.php:785 +msgid "INVALID EVENT DISMISSED!" +msgstr "НЕДЕЙСТВИТЕЛЬНОЕ СОБЫТИЕ ОТКЛОНЕНО!" + +#: ../../Zotlabs/Module/Cdav.php:786 +msgid "Summary: " +msgstr "Резюме:" + +#: ../../Zotlabs/Module/Cdav.php:787 +msgid "Date: " +msgstr "Дата:" + +#: ../../Zotlabs/Module/Cdav.php:788 ../../Zotlabs/Module/Cdav.php:795 +msgid "Reason: " +msgstr "Причина:" + +#: ../../Zotlabs/Module/Cdav.php:793 +msgid "INVALID CARD DISMISSED!" +msgstr "НЕДЕЙСТВИТЕЛЬНАЯ КАРТОЧКА ОТКЛОНЕНА!" + +#: ../../Zotlabs/Module/Cdav.php:794 +msgid "Name: " +msgstr "Имя:" + +#: ../../Zotlabs/Module/Cdav.php:868 ../../Zotlabs/Module/Events.php:460 +msgid "Event title" +msgstr "Наименование события" + +#: ../../Zotlabs/Module/Cdav.php:869 ../../Zotlabs/Module/Events.php:466 +msgid "Start date and time" +msgstr "Дата и время начала" + +#: ../../Zotlabs/Module/Cdav.php:869 ../../Zotlabs/Module/Cdav.php:870 +msgid "Example: YYYY-MM-DD HH:mm" +msgstr "Пример: YYYY-MM-DD HH:mm" + +#: ../../Zotlabs/Module/Cdav.php:870 +msgid "End date and time" +msgstr "Дата и время окончания" + +#: ../../Zotlabs/Module/Cdav.php:879 ../../Zotlabs/Module/Photos.php:976 +#: ../../Zotlabs/Module/Events.php:689 ../../Zotlabs/Module/Events.php:698 +#: ../../Zotlabs/Module/Cal.php:339 ../../Zotlabs/Module/Cal.php:346 +msgid "Previous" +msgstr "Предыдущая" + +#: ../../Zotlabs/Module/Cdav.php:880 ../../Zotlabs/Module/Photos.php:985 +#: ../../Zotlabs/Module/Events.php:690 ../../Zotlabs/Module/Events.php:699 +#: ../../Zotlabs/Module/Cal.php:340 ../../Zotlabs/Module/Cal.php:347 +#: ../../Zotlabs/Module/Setup.php:263 +msgid "Next" +msgstr "Следующая" + +#: ../../Zotlabs/Module/Cdav.php:881 ../../Zotlabs/Module/Events.php:700 +#: ../../Zotlabs/Module/Cal.php:348 +msgid "Today" +msgstr "Сегодня" + +#: ../../Zotlabs/Module/Cdav.php:882 ../../Zotlabs/Module/Events.php:695 +msgid "Month" +msgstr "Месяц" + +#: ../../Zotlabs/Module/Cdav.php:883 ../../Zotlabs/Module/Events.php:696 +msgid "Week" +msgstr "Неделя" + +#: ../../Zotlabs/Module/Cdav.php:884 ../../Zotlabs/Module/Events.php:697 +msgid "Day" +msgstr "День" + +#: ../../Zotlabs/Module/Cdav.php:885 +msgid "List month" +msgstr "Просмотреть месяц" + +#: ../../Zotlabs/Module/Cdav.php:886 +msgid "List week" +msgstr "Просмотреть неделю" + +#: ../../Zotlabs/Module/Cdav.php:887 +msgid "List day" +msgstr "Просмотреть день" + +#: ../../Zotlabs/Module/Cdav.php:894 +msgid "More" +msgstr "Больше" + +#: ../../Zotlabs/Module/Cdav.php:895 +msgid "Less" +msgstr "Меньше" + +#: ../../Zotlabs/Module/Cdav.php:896 +msgid "Select calendar" +msgstr "Выбрать календарь" + +#: ../../Zotlabs/Module/Cdav.php:898 +msgid "Delete all" +msgstr "Удалить всё" + +#: ../../Zotlabs/Module/Cdav.php:900 +msgid "Sorry! Editing of recurrent events is not yet implemented." +msgstr "Простите, но редактирование повторяющихся событий пока не реализовано." + +#: ../../Zotlabs/Module/Cdav.php:1171 ../../Zotlabs/Module/Connedit.php:907 +msgid "Organisation" +msgstr "Организация" + +#: ../../Zotlabs/Module/Cdav.php:1172 ../../Zotlabs/Module/Connedit.php:908 +msgid "Title" +msgstr "Наименование" + +#: ../../Zotlabs/Module/Cdav.php:1173 ../../Zotlabs/Module/Connedit.php:909 +#: ../../Zotlabs/Module/Profiles.php:786 +msgid "Phone" +msgstr "Телефон" + +#: ../../Zotlabs/Module/Cdav.php:1175 ../../Zotlabs/Module/Connedit.php:911 +#: ../../Zotlabs/Module/Profiles.php:788 +msgid "Instant messenger" +msgstr "Мессенджер" + +#: ../../Zotlabs/Module/Cdav.php:1176 ../../Zotlabs/Module/Connedit.php:912 +#: ../../Zotlabs/Module/Profiles.php:789 +msgid "Website" +msgstr "Веб-сайт" + +#: ../../Zotlabs/Module/Cdav.php:1177 ../../Zotlabs/Module/Connedit.php:913 +#: ../../Zotlabs/Module/Admin/Channels.php:160 +#: ../../Zotlabs/Module/Locs.php:118 ../../Zotlabs/Module/Profiles.php:502 +#: ../../Zotlabs/Module/Profiles.php:790 +msgid "Address" +msgstr "Адрес" + +#: ../../Zotlabs/Module/Cdav.php:1178 ../../Zotlabs/Module/Connedit.php:914 +#: ../../Zotlabs/Module/Profiles.php:791 +msgid "Note" +msgstr "Заметка" + +#: ../../Zotlabs/Module/Cdav.php:1184 ../../Zotlabs/Module/Connedit.php:920 +#: ../../Zotlabs/Module/Profiles.php:797 +msgid "Add Field" +msgstr "Добавить поле" + +#: ../../Zotlabs/Module/Cdav.php:1189 ../../Zotlabs/Module/Connedit.php:925 +msgid "P.O. Box" +msgstr "абонентский ящик" + +#: ../../Zotlabs/Module/Cdav.php:1190 ../../Zotlabs/Module/Connedit.php:926 +msgid "Additional" +msgstr "Дополнительно" + +#: ../../Zotlabs/Module/Cdav.php:1191 ../../Zotlabs/Module/Connedit.php:927 +msgid "Street" +msgstr "Улица" + +#: ../../Zotlabs/Module/Cdav.php:1192 ../../Zotlabs/Module/Connedit.php:928 +msgid "Locality" +msgstr "Населённый пункт" + +#: ../../Zotlabs/Module/Cdav.php:1193 ../../Zotlabs/Module/Connedit.php:929 +msgid "Region" +msgstr "Регион" + +#: ../../Zotlabs/Module/Cdav.php:1194 ../../Zotlabs/Module/Connedit.php:930 +msgid "ZIP Code" +msgstr "Индекс" + +#: ../../Zotlabs/Module/Cdav.php:1195 ../../Zotlabs/Module/Connedit.php:931 +#: ../../Zotlabs/Module/Profiles.php:757 +msgid "Country" +msgstr "Страна" + +#: ../../Zotlabs/Module/Cdav.php:1242 +msgid "Default Calendar" +msgstr "Календарь по умолчанию" + +#: ../../Zotlabs/Module/Cdav.php:1252 +msgid "Default Addressbook" +msgstr "Адресная книга по умолчанию" + +#: ../../Zotlabs/Module/Go.php:21 +msgid "This page is available only to site members" +msgstr "Эта страница доступна только для подписчиков сайта" + +#: ../../Zotlabs/Module/Go.php:27 +msgid "Welcome" +msgstr "Добро пожаловать" + +#: ../../Zotlabs/Module/Go.php:29 +msgid "What would you like to do?" +msgstr "Что бы вы хотели сделать?" + +#: ../../Zotlabs/Module/Go.php:31 +msgid "" +"Please bookmark this page if you would like to return to it in the future" +msgstr "Пожалуйста, запомните эту страницу если вы хотите вернуться на неё в будущем" + +#: ../../Zotlabs/Module/Go.php:35 +msgid "Upload a profile photo" +msgstr "Загрузить фотографию профиля" + +#: ../../Zotlabs/Module/Go.php:36 +msgid "Upload a cover photo" +msgstr "Загрузить фотографию обложки" + +#: ../../Zotlabs/Module/Go.php:37 +msgid "Edit your default profile" +msgstr "Редактировать ваш профиль по умолчанию" + +#: ../../Zotlabs/Module/Go.php:39 +msgid "View the channel directory" +msgstr "Просмотр каталога каналов" + +#: ../../Zotlabs/Module/Go.php:40 +msgid "View/edit your channel settings" +msgstr "Просмотреть / редактировать настройки вашего канала" + +#: ../../Zotlabs/Module/Go.php:41 +msgid "View the site or project documentation" +msgstr "Просмотр документации сайта / проекта" + +#: ../../Zotlabs/Module/Go.php:42 +msgid "Visit your channel homepage" +msgstr "Посетить страницу вашего канала" + +#: ../../Zotlabs/Module/Go.php:43 +msgid "" +"View your connections and/or add somebody whose address you already know" +msgstr "Просмотреть ваши контакты и / или добавить кого-то чей адрес в уже знаете" + +#: ../../Zotlabs/Module/Go.php:44 +msgid "" +"View your personal stream (this may be empty until you add some connections)" +msgstr "Ваш персональный поток (может быть пуст пока вы не добавите контакты)" + +#: ../../Zotlabs/Module/Go.php:52 +msgid "View the public stream. Warning: this content is not moderated" +msgstr "Просмотр публичного потока. Предупреждение: этот контент не модерируется" + +#: ../../Zotlabs/Module/Photos.php:78 +msgid "Page owner information could not be retrieved." +msgstr "Информация о владельце страницы не может быть получена." + +#: ../../Zotlabs/Module/Photos.php:94 ../../Zotlabs/Module/Photos.php:113 +msgid "Album not found." +msgstr "Альбом не найден." + +#: ../../Zotlabs/Module/Photos.php:103 +msgid "Delete Album" +msgstr "Удалить альбом" + +#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1088 +msgid "Delete Photo" +msgstr "Удалить фотографию" + +#: ../../Zotlabs/Module/Photos.php:545 ../../Zotlabs/Module/Ratings.php:83 +#: ../../Zotlabs/Module/Search.php:17 +#: ../../Zotlabs/Module/Viewconnections.php:23 +#: ../../Zotlabs/Module/Directory.php:63 ../../Zotlabs/Module/Directory.php:68 +#: ../../Zotlabs/Module/Display.php:30 +msgid "Public access denied." +msgstr "Общественный доступ запрещен." + +#: ../../Zotlabs/Module/Photos.php:556 +msgid "No photos selected" +msgstr "Никакие фотографии не выбраны" + +#: ../../Zotlabs/Module/Photos.php:605 +msgid "Access to this item is restricted." +msgstr "Доступ к этому элементу ограничен." + +#: ../../Zotlabs/Module/Photos.php:651 +#, php-format +msgid "%1$.2f MB of %2$.2f MB photo storage used." +msgstr "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото." + +#: ../../Zotlabs/Module/Photos.php:654 +#, php-format +msgid "%1$.2f MB photo storage used." +msgstr "Вы использовали %1$.2f мегабайт для хранения фото." + +#: ../../Zotlabs/Module/Photos.php:696 +msgid "Upload Photos" +msgstr "Загрузить фотографии" + +#: ../../Zotlabs/Module/Photos.php:700 +msgid "Enter an album name" +msgstr "Введите название альбома" + +#: ../../Zotlabs/Module/Photos.php:701 +msgid "or select an existing album (doubleclick)" +msgstr "или выберите существующий альбом (двойной щелчок)" + +#: ../../Zotlabs/Module/Photos.php:702 +msgid "Create a status post for this upload" +msgstr "Сделать публикацию о статусе для этой загрузки" + +#: ../../Zotlabs/Module/Photos.php:704 +msgid "Description (optional)" +msgstr "Описание (необязательно)" + +#: ../../Zotlabs/Module/Photos.php:790 +msgid "Show Newest First" +msgstr "Показать новые первыми" + +#: ../../Zotlabs/Module/Photos.php:792 +msgid "Show Oldest First" +msgstr "Показать старые первыми" + +#: ../../Zotlabs/Module/Photos.php:849 ../../Zotlabs/Module/Photos.php:1386 +msgid "Add Photos" +msgstr "Добавить фотографии" + +#: ../../Zotlabs/Module/Photos.php:897 +msgid "Permission denied. Access to this item may be restricted." +msgstr "Доступ запрещен. Доступ к этому элементу может быть ограничен." + +#: ../../Zotlabs/Module/Photos.php:899 +msgid "Photo not available" +msgstr "Фотография не доступна" + +#: ../../Zotlabs/Module/Photos.php:957 +msgid "Use as profile photo" +msgstr "Использовать в качестве фотографии профиля" + +#: ../../Zotlabs/Module/Photos.php:958 +msgid "Use as cover photo" +msgstr "Использовать в качестве фотографии обложки" + +#: ../../Zotlabs/Module/Photos.php:965 +msgid "Private Photo" +msgstr "Личная фотография" + +#: ../../Zotlabs/Module/Photos.php:980 +msgid "View Full Size" +msgstr "Посмотреть в полный размер" + +#: ../../Zotlabs/Module/Photos.php:1062 +msgid "Edit photo" +msgstr "Редактировать фотографию" + +#: ../../Zotlabs/Module/Photos.php:1064 +msgid "Rotate CW (right)" +msgstr "Повернуть CW (направо)" + +#: ../../Zotlabs/Module/Photos.php:1065 +msgid "Rotate CCW (left)" +msgstr "Повернуть CCW (налево)" + +#: ../../Zotlabs/Module/Photos.php:1068 +msgid "Move photo to album" +msgstr "Переместить фотографию в альбом" + +#: ../../Zotlabs/Module/Photos.php:1069 +msgid "Enter a new album name" +msgstr "Введите новое название альбома" + +#: ../../Zotlabs/Module/Photos.php:1070 +msgid "or select an existing one (doubleclick)" +msgstr "или выбрать существующую (двойной щелчок)" + +#: ../../Zotlabs/Module/Photos.php:1075 +msgid "Add a Tag" +msgstr "Добавить тег" + +#: ../../Zotlabs/Module/Photos.php:1083 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" +msgstr "Пример: @bob, @Barbara_Jensen, @jim@example.com" + +#: ../../Zotlabs/Module/Photos.php:1086 +msgid "Flag as adult in album view" +msgstr "Пометить как альбом \"для взрослых\"" + +#: ../../Zotlabs/Module/Photos.php:1270 +msgid "Photo Tools" +msgstr "Фото-Инструменты" + +#: ../../Zotlabs/Module/Photos.php:1279 +msgid "In This Photo:" +msgstr "На этой фотографии:" + +#: ../../Zotlabs/Module/Photos.php:1284 +msgid "Map" +msgstr "Карта" + +#: ../../Zotlabs/Module/Pubsites.php:27 +msgid "" +"The listed hubs allow public registration for the $Projectname network. All " +"hubs in the network are interlinked so membership on any of them conveys " +"membership in the network as a whole. Some hubs may require subscription or " +"provide tiered service plans. The hub itself may provide " +"additional details." +msgstr "Указанные хабы разрешают публичную регистрацию для сети $Projectname. Все хабы в сети взаимосвязаны, поэтому членство в любом из них передает членство во всю сеть. Некоторым хабам может потребоваться подписка или предоставление многоуровневых планов обслуживания. Сам хаб может предоставить дополнительные сведения." + +#: ../../Zotlabs/Module/Pubsites.php:33 +msgid "Hub URL" +msgstr "URL сервера" + +#: ../../Zotlabs/Module/Pubsites.php:33 +msgid "Access Type" +msgstr "Тип доступа" + +#: ../../Zotlabs/Module/Pubsites.php:33 +msgid "Registration Policy" +msgstr "Политика регистрации" + +#: ../../Zotlabs/Module/Pubsites.php:33 +msgid "Stats" +msgstr "Статистика" + +#: ../../Zotlabs/Module/Pubsites.php:33 +msgid "Software" +msgstr "Программное обеспечение" + +#: ../../Zotlabs/Module/Pubsites.php:49 +msgid "Rate" +msgstr "Оценка" + +#: ../../Zotlabs/Module/Pubsites.php:60 ../../Zotlabs/Module/Events.php:694 +#: ../../Zotlabs/Module/Layouts.php:198 ../../Zotlabs/Module/Webpages.php:246 +#: ../../Zotlabs/Module/Blocks.php:166 ../../Zotlabs/Module/Wiki.php:204 +msgid "View" +msgstr "Просмотр" + +#: ../../Zotlabs/Module/Connect.php:61 ../../Zotlabs/Module/Connect.php:109 +msgid "Continue" +msgstr "Продолжить" + +#: ../../Zotlabs/Module/Connect.php:90 +msgid "Premium Channel Setup" +msgstr "Установка премиум канала" + +#: ../../Zotlabs/Module/Connect.php:92 +msgid "Enable premium channel connection restrictions" +msgstr "Включить ограничения для премиум канала" + +#: ../../Zotlabs/Module/Connect.php:93 +msgid "" +"Please enter your restrictions or conditions, such as paypal receipt, usage " +"guidelines, etc." +msgstr "Пожалуйста введите ваши ограничения или условия, такие, как оплата PayPal, правила использования и т.п." + +#: ../../Zotlabs/Module/Connect.php:95 ../../Zotlabs/Module/Connect.php:115 +msgid "" +"This channel may require additional steps or acknowledgement of the " +"following conditions prior to connecting:" +msgstr "Этот канал до подключения может требовать дополнительных шагов или подтверждений следующих условий:" + +#: ../../Zotlabs/Module/Connect.php:96 +msgid "" +"Potential connections will then see the following text before proceeding:" +msgstr "Потенциальные соединения будут видеть следующий предварительный текст:" + +#: ../../Zotlabs/Module/Connect.php:97 ../../Zotlabs/Module/Connect.php:118 +msgid "" +"By continuing, I certify that I have complied with any instructions provided " +"on this page." +msgstr "Продолжая, я подтверждаю что я выполнил все условия представленные на данной странице." + +#: ../../Zotlabs/Module/Connect.php:106 +msgid "(No specific instructions have been provided by the channel owner.)" +msgstr "(Владельцем канала не было представлено никаких специальных инструкций.)" + +#: ../../Zotlabs/Module/Connect.php:114 +msgid "Restricted or Premium Channel" +msgstr "Ограниченный или Премиум канал" + +#: ../../Zotlabs/Module/Poke.php:183 +msgid "Poke somebody" +msgstr "Ткнуть кого-нибудь" + +#: ../../Zotlabs/Module/Poke.php:186 +msgid "Poke/Prod" +msgstr "Толкнуть / подтолкнуть" + +#: ../../Zotlabs/Module/Poke.php:187 +msgid "Poke, prod or do other things to somebody" +msgstr "Толкнуть, подтолкнуть или сделать что-то ещё с кем-то" + +#: ../../Zotlabs/Module/Poke.php:194 +msgid "Recipient" +msgstr "Получатель" -#: ../../include/text.php:1090 -msgid "Sunday" -msgstr "Воскресенье" +#: ../../Zotlabs/Module/Poke.php:195 +msgid "Choose what you wish to do to recipient" +msgstr "Выбрать что вы хотите сделать с получателем" -#: ../../include/text.php:1094 -msgid "January" -msgstr "Январь" +#: ../../Zotlabs/Module/Poke.php:198 ../../Zotlabs/Module/Poke.php:199 +msgid "Make this post private" +msgstr "Сделать эту публикацию приватной" -#: ../../include/text.php:1094 -msgid "February" -msgstr "Февраль" +#: ../../Zotlabs/Module/Oexchange.php:27 +msgid "Unable to find your hub." +msgstr "Невозможно найти ваш сервер" -#: ../../include/text.php:1094 -msgid "March" -msgstr "Март" +#: ../../Zotlabs/Module/Oexchange.php:41 +msgid "Post successful." +msgstr "Успешно опубликовано." -#: ../../include/text.php:1094 -msgid "April" -msgstr "Апрель" +#: ../../Zotlabs/Module/Impel.php:183 +#, php-format +msgid "%s element installed" +msgstr "%s элемент установлен" -#: ../../include/text.php:1094 -msgid "May" -msgstr "Май" +#: ../../Zotlabs/Module/Impel.php:186 +#, php-format +msgid "%s element installation failed" +msgstr "%sустановка элемента неудачна." -#: ../../include/text.php:1094 -msgid "June" -msgstr "Июнь" +#: ../../Zotlabs/Module/Ping.php:332 +msgid "sent you a private message" +msgstr "отправил вам личное сообщение" -#: ../../include/text.php:1094 -msgid "July" -msgstr "Июль" +#: ../../Zotlabs/Module/Ping.php:385 +msgid "added your channel" +msgstr "добавил ваш канал" -#: ../../include/text.php:1094 -msgid "August" -msgstr "Август" +#: ../../Zotlabs/Module/Ping.php:409 +msgid "requires approval" +msgstr "Требуется подтверждение" -#: ../../include/text.php:1094 -msgid "September" -msgstr "Сентябрь" +#: ../../Zotlabs/Module/Ping.php:419 +msgid "g A l F d" +msgstr "g A l F d" -#: ../../include/text.php:1094 -msgid "October" -msgstr "Октябрь" +#: ../../Zotlabs/Module/Ping.php:437 +msgid "[today]" +msgstr "[сегодня]" -#: ../../include/text.php:1094 -msgid "November" -msgstr "Ноябрь" +#: ../../Zotlabs/Module/Ping.php:446 +msgid "posted an event" +msgstr "событие опубликовано" -#: ../../include/text.php:1094 -msgid "December" -msgstr "Декабрь" +#: ../../Zotlabs/Module/Ping.php:479 +msgid "shared a file with you" +msgstr "с вами поделились файлом" -#: ../../include/text.php:1172 -msgid "unknown.???" -msgstr "неизвестный.???" +#: ../../Zotlabs/Module/Ping.php:654 +msgid "Private forum" +msgstr "Частный форум" -#: ../../include/text.php:1173 -msgid "bytes" -msgstr "байт" +#: ../../Zotlabs/Module/Ping.php:654 +msgid "Public forum" +msgstr "Публичный форум" -#: ../../include/text.php:1208 -msgid "remove category" -msgstr "" +#: ../../Zotlabs/Module/Achievements.php:38 +msgid "Some blurb about what to do when you're new here" +msgstr "Некоторые предложения о том, что делать, если вы здесь новичок " -#: ../../include/text.php:1257 -msgid "remove from file" -msgstr "" +#: ../../Zotlabs/Module/Connections.php:55 +#: ../../Zotlabs/Module/Connections.php:112 +#: ../../Zotlabs/Module/Connections.php:256 +msgid "Active" +msgstr "Активен" -#: ../../include/text.php:1318 ../../include/text.php:1330 -msgid "Click to open/close" -msgstr "Нажмите, чтобы открыть/закрыть" +#: ../../Zotlabs/Module/Connections.php:60 +#: ../../Zotlabs/Module/Connections.php:164 +#: ../../Zotlabs/Module/Connections.php:261 +msgid "Blocked" +msgstr "Заблокирован" -#: ../../include/text.php:1485 ../../mod/events.php:355 -msgid "Link to Source" -msgstr "Ссылка на источник" +#: ../../Zotlabs/Module/Connections.php:65 +#: ../../Zotlabs/Module/Connections.php:171 +#: ../../Zotlabs/Module/Connections.php:260 +msgid "Ignored" +msgstr "Игнорируется" -#: ../../include/text.php:1504 -msgid "Select a page layout: " -msgstr "" +#: ../../Zotlabs/Module/Connections.php:70 +#: ../../Zotlabs/Module/Connections.php:185 +#: ../../Zotlabs/Module/Connections.php:259 +msgid "Hidden" +msgstr "Скрыт" -#: ../../include/text.php:1507 ../../include/text.php:1572 -msgid "default" -msgstr "по умолчанию" +#: ../../Zotlabs/Module/Connections.php:75 +#: ../../Zotlabs/Module/Connections.php:178 +msgid "Archived/Unreachable" +msgstr "Заархивировано / недоступно" -#: ../../include/text.php:1543 -msgid "Page content type: " -msgstr "" +#: ../../Zotlabs/Module/Connections.php:140 +msgid "Active Connections" +msgstr "Активные контакты" -#: ../../include/text.php:1584 -msgid "Select an alternate language" -msgstr "Выбор альтернативного языка" +#: ../../Zotlabs/Module/Connections.php:143 +msgid "Show active connections" +msgstr "Показать активные контакты" -#: ../../include/text.php:1718 -msgid "activity" -msgstr "активность" +#: ../../Zotlabs/Module/Connections.php:150 +msgid "Show pending (new) connections" +msgstr "Просмотр (новых) ожидающих контактов" -#: ../../include/text.php:1977 -msgid "Design" -msgstr "Дизайн" +#: ../../Zotlabs/Module/Connections.php:167 +msgid "Only show blocked connections" +msgstr "Показать только заблокированные контакты" -#: ../../include/text.php:1979 -msgid "Blocks" -msgstr "Блоки" +#: ../../Zotlabs/Module/Connections.php:174 +msgid "Only show ignored connections" +msgstr "Показать только проигнорированные контакты" -#: ../../include/text.php:1980 -msgid "Menus" -msgstr "Меню" +#: ../../Zotlabs/Module/Connections.php:181 +msgid "Only show archived/unreachable connections" +msgstr "Показать только заархивированные / недоступные контакты" -#: ../../include/text.php:1981 -msgid "Layouts" -msgstr "Шаблоны" +#: ../../Zotlabs/Module/Connections.php:188 +msgid "Only show hidden connections" +msgstr "Показать только скрытые контакты" -#: ../../include/text.php:1982 -msgid "Pages" -msgstr "Страницы" +#: ../../Zotlabs/Module/Connections.php:200 +#: ../../Zotlabs/Module/Profperm.php:140 +msgid "All Connections" +msgstr "Все контакты" -#: ../../include/apps.php:118 -msgid "Site Admin" -msgstr "Админ сайта" +#: ../../Zotlabs/Module/Connections.php:203 +msgid "Show all connections" +msgstr "Просмотр всех контактов" -#: ../../include/apps.php:120 -msgid "Address Book" -msgstr "Адресная книга" +#: ../../Zotlabs/Module/Connections.php:257 +msgid "Pending approval" +msgstr "Ожидающие подтверждения" -#: ../../include/apps.php:134 ../../mod/mood.php:131 -msgid "Mood" -msgstr "Настроение" +#: ../../Zotlabs/Module/Connections.php:258 +msgid "Archived" +msgstr "Зархивирован" -#: ../../include/apps.php:138 -msgid "Probe" -msgstr "" +#: ../../Zotlabs/Module/Connections.php:262 +msgid "Not connected at this location" +msgstr "Не подключено в этом месте" -#: ../../include/apps.php:139 -msgid "Suggest" +#: ../../Zotlabs/Module/Connections.php:279 +#, php-format +msgid "%1$s [%2$s]" msgstr "" -#: ../../include/apps.php:224 ../../mod/settings.php:79 -#: ../../mod/settings.php:541 -msgid "Update" -msgstr "Обновление" +#: ../../Zotlabs/Module/Connections.php:280 +msgid "Edit connection" +msgstr "Редактировать контакт" -#: ../../include/apps.php:224 -msgid "Install" -msgstr "Установка" +#: ../../Zotlabs/Module/Connections.php:282 +msgid "Delete connection" +msgstr "Удалить контакт" -#: ../../include/apps.php:229 -msgid "Purchase" -msgstr "" +#: ../../Zotlabs/Module/Connections.php:291 +msgid "Channel address" +msgstr "Адрес канала" -#: ../../include/apps.php:313 ../../include/apps.php:364 -#: ../../mod/connedit.php:434 -msgid "Unknown" -msgstr "Неизвестный" +#: ../../Zotlabs/Module/Connections.php:293 +msgid "Network" +msgstr "Сеть" -#: ../../include/zot.php:607 -msgid "Invalid data packet" -msgstr "Неверный пакет данных" +#: ../../Zotlabs/Module/Connections.php:296 +msgid "Call" +msgstr "Вызов" -#: ../../include/zot.php:617 -msgid "Unable to verify channel signature" -msgstr "Невозможно проверить сигнатуру канала" +#: ../../Zotlabs/Module/Connections.php:298 +msgid "Status" +msgstr "Статус" -#: ../../include/zot.php:814 -#, php-format -msgid "Unable to verify site signature for %s" -msgstr "" +#: ../../Zotlabs/Module/Connections.php:300 +msgid "Connected" +msgstr "Подключено" -#: ../../include/message.php:18 -msgid "No recipient provided." -msgstr "" +#: ../../Zotlabs/Module/Connections.php:302 +msgid "Approve connection" +msgstr "Утвердить контакт" -#: ../../include/message.php:23 -msgid "[no subject]" -msgstr "[без темы]" +#: ../../Zotlabs/Module/Connections.php:304 +msgid "Ignore connection" +msgstr "Игнорировать контакт" -#: ../../include/message.php:42 -msgid "Unable to determine sender." -msgstr "Невозможно определить отправителя." +#: ../../Zotlabs/Module/Connections.php:305 +#: ../../Zotlabs/Module/Connedit.php:630 +msgid "Ignore" +msgstr "Игнорировать" -#: ../../include/message.php:143 -msgid "Stored post could not be verified." -msgstr "" +#: ../../Zotlabs/Module/Connections.php:306 +msgid "Recent activity" +msgstr "Последние действия" -#: ../../include/plugin.php:486 ../../include/plugin.php:488 -msgid "Click here to upgrade." -msgstr "Нажмите здесь, чтобы обновить." +#: ../../Zotlabs/Module/Connections.php:336 +msgid "Search your connections" +msgstr "Поиск ваших контактов" -#: ../../include/plugin.php:494 -msgid "This action exceeds the limits set by your subscription plan." -msgstr "" +#: ../../Zotlabs/Module/Connections.php:337 +msgid "Connections search" +msgstr "Поиск контаков" -#: ../../include/plugin.php:499 -msgid "This action is not available under your subscription plan." -msgstr "" +#: ../../Zotlabs/Module/Item.php:194 +msgid "Unable to locate original post." +msgstr "Не удалось найти оригинальную публикацию." -#: ../../include/widgets.php:80 -msgid "System" -msgstr "Система" +#: ../../Zotlabs/Module/Item.php:477 +msgid "Empty post discarded." +msgstr "Пустая публикация отклонена." -#: ../../include/widgets.php:83 -msgid "Create Personal App" -msgstr "Создать собственное приложение" +#: ../../Zotlabs/Module/Item.php:864 +msgid "Duplicate post suppressed." +msgstr "Подавлена дублирующаяся публикация." -#: ../../include/widgets.php:84 -msgid "Edit Personal App" -msgstr "Редактировать собственное приложение" +#: ../../Zotlabs/Module/Item.php:1009 +msgid "System error. Post not saved." +msgstr "Системная ошибка. Публикация не сохранена." -#: ../../include/widgets.php:130 ../../mod/suggest.php:53 -msgid "Ignore/Hide" -msgstr "Игнорировать / Скрыть" +#: ../../Zotlabs/Module/Item.php:1045 +msgid "Your comment is awaiting approval." +msgstr "Ваш комментарий ожидает одобрения." -#: ../../include/widgets.php:136 ../../mod/connections.php:267 -msgid "Suggestions" -msgstr "Рекомендации" +#: ../../Zotlabs/Module/Item.php:1162 +msgid "Unable to obtain post information from database." +msgstr "Невозможно получить информацию о публикации из базы данных" -#: ../../include/widgets.php:137 -msgid "See more..." -msgstr "Просмотреть больше..." +#: ../../Zotlabs/Module/Item.php:1191 +#, php-format +msgid "You have reached your limit of %1$.0f top level posts." +msgstr "Вы достигли вашего ограничения в %1$.0f публикаций высокого уровня." -#: ../../include/widgets.php:159 +#: ../../Zotlabs/Module/Item.php:1198 #, php-format -msgid "You have %1$.0f of %2$.0f allowed connections." -msgstr "" +msgid "You have reached your limit of %1$.0f webpages." +msgstr "Вы достигли вашего ограничения в %1$.0f страниц." -#: ../../include/widgets.php:165 -msgid "Add New Connection" -msgstr "Добавить новый контакт" +#: ../../Zotlabs/Module/Events.php:25 +msgid "Calendar entries imported." +msgstr "События календаря импортированы." -#: ../../include/widgets.php:166 -msgid "Enter the channel address" -msgstr "Введите адрес канала" +#: ../../Zotlabs/Module/Events.php:27 +msgid "No calendar entries found." +msgstr "Не найдено событий в календаре." -#: ../../include/widgets.php:167 -msgid "Example: bob@example.com, http://example.com/barbara" -msgstr "Пример: bob@example.com, http://example.com/barbara" +#: ../../Zotlabs/Module/Events.php:110 +msgid "Event can not end before it has started." +msgstr "Событие не может завершиться до его начала." -#: ../../include/widgets.php:184 -msgid "Notes" -msgstr "Заметки" +#: ../../Zotlabs/Module/Events.php:112 ../../Zotlabs/Module/Events.php:121 +#: ../../Zotlabs/Module/Events.php:143 +msgid "Unable to generate preview." +msgstr "Невозможно создать предварительный просмотр." -#: ../../include/widgets.php:256 -msgid "Remove term" -msgstr "Удалить термин" +#: ../../Zotlabs/Module/Events.php:119 +msgid "Event title and start time are required." +msgstr "Требуются наименование события и время начала." -#: ../../include/widgets.php:335 -msgid "Archives" -msgstr "Архивы" +#: ../../Zotlabs/Module/Events.php:141 ../../Zotlabs/Module/Events.php:265 +msgid "Event not found." +msgstr "Событие не найдено." -#: ../../include/widgets.php:397 -msgid "Refresh" -msgstr "Обновить" +#: ../../Zotlabs/Module/Events.php:460 +msgid "Edit event title" +msgstr "Редактировать наименование события" -#: ../../include/widgets.php:398 ../../mod/connedit.php:428 -msgid "Me" -msgstr "Я" +#: ../../Zotlabs/Module/Events.php:462 +msgid "Categories (comma-separated list)" +msgstr "Категории (список через запятую)" -#: ../../include/widgets.php:399 ../../mod/connedit.php:430 -msgid "Best Friends" -msgstr "Лучшие друзья" +#: ../../Zotlabs/Module/Events.php:463 +msgid "Edit Category" +msgstr "Редактировать категорию" -#: ../../include/widgets.php:401 -msgid "Co-workers" -msgstr "Сотрудники" +#: ../../Zotlabs/Module/Events.php:463 +msgid "Category" +msgstr "Категория" -#: ../../include/widgets.php:402 ../../mod/connedit.php:432 -msgid "Former Friends" -msgstr "Приятели" +#: ../../Zotlabs/Module/Events.php:466 +msgid "Edit start date and time" +msgstr "Редактировать дату и время начала" -#: ../../include/widgets.php:403 ../../mod/connedit.php:433 -msgid "Acquaintances" -msgstr "Знакомые" +#: ../../Zotlabs/Module/Events.php:467 ../../Zotlabs/Module/Events.php:470 +msgid "Finish date and time are not known or not relevant" +msgstr "Дата и время окончания неизвестны или неприменимы" -#: ../../include/widgets.php:404 -msgid "Everybody" -msgstr "Все" +#: ../../Zotlabs/Module/Events.php:469 +msgid "Edit finish date and time" +msgstr "Редактировать дату и время окончания" -#: ../../include/widgets.php:436 -msgid "Account settings" -msgstr "Настройки аккаунта" +#: ../../Zotlabs/Module/Events.php:469 +msgid "Finish date and time" +msgstr "Дата и время окончания" -#: ../../include/widgets.php:442 -msgid "Channel settings" -msgstr "Настройки канала" +#: ../../Zotlabs/Module/Events.php:471 ../../Zotlabs/Module/Events.php:472 +msgid "Adjust for viewer timezone" +msgstr "Настройте просмотр часовых поясов" -#: ../../include/widgets.php:448 -msgid "Additional features" -msgstr "Дополнительные функции" +#: ../../Zotlabs/Module/Events.php:471 +msgid "" +"Important for events that happen in a particular place. Not practical for " +"global holidays." +msgstr "Важно для событий, которые происходят в определённом месте. Не подходит для всеобщих праздников." -#: ../../include/widgets.php:454 -msgid "Feature settings" -msgstr "Настройки компонентов" +#: ../../Zotlabs/Module/Events.php:473 +msgid "Edit Description" +msgstr "Редактировать описание" -#: ../../include/widgets.php:460 -msgid "Display settings" -msgstr "Настройки отображения" +#: ../../Zotlabs/Module/Events.php:475 +msgid "Edit Location" +msgstr "Редактировать местоположение" -#: ../../include/widgets.php:466 -msgid "Connected apps" -msgstr "Подключенные приложения" +#: ../../Zotlabs/Module/Events.php:489 +msgid "Timezone:" +msgstr "Часовой пояс:" -#: ../../include/widgets.php:472 -msgid "Export channel" -msgstr "Экспорт канала" +#: ../../Zotlabs/Module/Events.php:494 +msgid "Advanced Options" +msgstr "Дополнительные настройки" -#: ../../include/widgets.php:484 -msgid "Automatic Permissions (Advanced)" -msgstr "Автоматические разрешения (дополнительно)" +#: ../../Zotlabs/Module/Events.php:605 ../../Zotlabs/Module/Cal.php:266 +msgid "l, F j" +msgstr "" -#: ../../include/widgets.php:494 -msgid "Premium Channel Settings" -msgstr "Настройки премиум канала" +#: ../../Zotlabs/Module/Events.php:633 +msgid "Edit event" +msgstr "Редактировать событие" -#: ../../include/widgets.php:531 -msgid "Check Mail" -msgstr "Проверить снова" +#: ../../Zotlabs/Module/Events.php:635 +msgid "Delete event" +msgstr "Удалить событие" -#: ../../include/widgets.php:612 -msgid "Chat Rooms" -msgstr "Чаты" +#: ../../Zotlabs/Module/Events.php:669 +msgid "calendar" +msgstr "календарь" -#: ../../include/widgets.php:630 -msgid "Bookmarked Chatrooms" -msgstr "Закладки чатов" +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 +msgid "Edit Event" +msgstr "Редактировать событие" -#: ../../include/widgets.php:648 -msgid "Suggested Chatrooms" -msgstr "Рекомендуемые чаты" +#: ../../Zotlabs/Module/Events.php:688 ../../Zotlabs/Module/Cal.php:338 +msgid "Create Event" +msgstr "Создать событие" -#: ../../include/ItemObject.php:118 -msgid "Save to Folder" -msgstr "Сохранить в папку" +#: ../../Zotlabs/Module/Events.php:731 +msgid "Event removed" +msgstr "Событие удалено" -#: ../../include/ItemObject.php:130 ../../include/ItemObject.php:142 -msgid "View all" -msgstr "Просмотреть все" +#: ../../Zotlabs/Module/Events.php:734 +msgid "Failed to remove event" +msgstr "Не удалось удалить событие" -#: ../../include/ItemObject.php:139 -msgctxt "noun" -msgid "Dislike" -msgid_plural "Dislikes" -msgstr[0] "не-нравится" -msgstr[1] "не-нравится" -msgstr[2] "не-нравится" +#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:189 +#: ../../Zotlabs/Module/Editlayout.php:128 +msgid "Layout Name" +msgstr "Название шаблона" -#: ../../include/ItemObject.php:167 -msgid "Add Star" -msgstr "Добавить маркировку" +#: ../../Zotlabs/Module/Layouts.php:132 ../../Zotlabs/Module/Editlayout.php:129 +msgid "Layout Description (Optional)" +msgstr "Описание шаблона (необязательно)" -#: ../../include/ItemObject.php:168 -msgid "Remove Star" -msgstr "Удалить маркировку" +#: ../../Zotlabs/Module/Layouts.php:186 +msgid "Comanche page description language help" +msgstr "Помощь по языку описания страниц Comanche " -#: ../../include/ItemObject.php:169 -msgid "Toggle Star Status" -msgstr "Переключить статус маркировки" +#: ../../Zotlabs/Module/Layouts.php:190 +msgid "Layout Description" +msgstr "Описание шаблона" -#: ../../include/ItemObject.php:173 -msgid "starred" -msgstr "помеченные" +#: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Module/Webpages.php:251 +#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Menu.php:177 +msgid "Created" +msgstr "Создано" -#: ../../include/ItemObject.php:190 -msgid "Add Tag" -msgstr "Добавить тег" +#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Webpages.php:252 +#: ../../Zotlabs/Module/Blocks.php:158 ../../Zotlabs/Module/Menu.php:178 +msgid "Edited" +msgstr "Отредактировано" -#: ../../include/ItemObject.php:208 ../../mod/photos.php:974 -msgid "I like this (toggle)" -msgstr "мне это нравится (переключение)" +#: ../../Zotlabs/Module/Layouts.php:195 +msgid "Download PDL file" +msgstr "Загрузить PDL файл" -#: ../../include/ItemObject.php:209 ../../mod/photos.php:975 -msgid "I don't like this (toggle)" -msgstr "мне это не нравится (переключение)" +#: ../../Zotlabs/Module/Notifications.php:55 ../../Zotlabs/Module/Notify.php:61 +msgid "No more system notifications." +msgstr "Нет новых оповещений системы." -#: ../../include/ItemObject.php:211 -msgid "Share This" -msgstr "Поделиться этим" +#: ../../Zotlabs/Module/Notifications.php:59 ../../Zotlabs/Module/Notify.php:65 +msgid "System Notifications" +msgstr "Системные оповещения " -#: ../../include/ItemObject.php:211 -msgid "share" -msgstr "поделиться" +#: ../../Zotlabs/Module/Pdledit.php:21 +msgid "Layout updated." +msgstr "Шаблон обновлен." -#: ../../include/ItemObject.php:235 ../../include/ItemObject.php:236 -#, php-format -msgid "View %s's profile - %s" -msgstr "Просмотр %s's профиля - %s" +#: ../../Zotlabs/Module/Pdledit.php:34 ../../Zotlabs/Module/Chat.php:219 +msgid "Feature disabled." +msgstr "Функция отключена." -#: ../../include/ItemObject.php:237 -msgid "to" -msgstr "к" +#: ../../Zotlabs/Module/Pdledit.php:47 ../../Zotlabs/Module/Pdledit.php:90 +msgid "Edit System Page Description" +msgstr "Редактировать описание системной страницы" -#: ../../include/ItemObject.php:238 -msgid "via" -msgstr "через" +#: ../../Zotlabs/Module/Pdledit.php:68 +msgid "(modified)" +msgstr "(изменено)" -#: ../../include/ItemObject.php:239 -msgid "Wall-to-Wall" -msgstr "Стена-к-Стене" +#: ../../Zotlabs/Module/Pdledit.php:68 ../../Zotlabs/Module/Lostpass.php:133 +msgid "Reset" +msgstr "Сбросить" -#: ../../include/ItemObject.php:240 -msgid "via Wall-To-Wall:" -msgstr "через Стена-к-Стене:" +#: ../../Zotlabs/Module/Pdledit.php:85 +msgid "Layout not found." +msgstr "Шаблон не найден." -#: ../../include/ItemObject.php:274 -msgid "Save Bookmarks" -msgstr "Сохранить закладки" +#: ../../Zotlabs/Module/Pdledit.php:91 +msgid "Module Name:" +msgstr "Имя модуля:" -#: ../../include/ItemObject.php:275 -msgid "Add to Calendar" -msgstr "Добавить в календарь" +#: ../../Zotlabs/Module/Pdledit.php:92 +msgid "Layout Help" +msgstr "Помощь к шаблону" -#: ../../include/ItemObject.php:283 -msgctxt "noun" -msgid "Likes" -msgstr "нравится" +#: ../../Zotlabs/Module/Pdledit.php:93 +msgid "Edit another layout" +msgstr "Редактировать другой шаблон" -#: ../../include/ItemObject.php:284 -msgctxt "noun" -msgid "Dislikes" -msgstr "не-нравится" +#: ../../Zotlabs/Module/Pdledit.php:94 +msgid "System layout" +msgstr "Системный шаблон" -#: ../../include/ItemObject.php:315 -#, php-format -msgid "%d comment" -msgid_plural "%d comments" -msgstr[0] "%d комментарий" -msgstr[1] "%d комментария" -msgstr[2] "%d комментариев" +#: ../../Zotlabs/Module/Mail.php:73 +msgid "Unable to lookup recipient." +msgstr "Не удалось найти получателя." -#: ../../include/ItemObject.php:316 ../../include/js_strings.php:7 -msgid "[+] show all" -msgstr "[+] показать все" +#: ../../Zotlabs/Module/Mail.php:80 +msgid "Unable to communicate with requested channel." +msgstr "Не удалось установить связь с запрашиваемым каналом." -#: ../../include/ItemObject.php:580 ../../mod/photos.php:993 -#: ../../mod/photos.php:1080 -msgid "This is you" -msgstr "Это вы" +#: ../../Zotlabs/Module/Mail.php:87 +msgid "Cannot verify requested channel." +msgstr "Не удалось установить подлинность требуемого канала." -#: ../../include/ItemObject.php:582 ../../include/js_strings.php:6 -#: ../../mod/photos.php:995 ../../mod/photos.php:1082 -msgid "Comment" -msgstr "Комментарий" +#: ../../Zotlabs/Module/Mail.php:105 +msgid "Selected channel has private message restrictions. Send failed." +msgstr "Выбранный канал ограничивает частные сообщения. Отправка не удалась." -#: ../../include/ItemObject.php:583 ../../mod/mood.php:135 -#: ../../mod/settings.php:515 ../../mod/settings.php:627 -#: ../../mod/settings.php:655 ../../mod/settings.php:679 -#: ../../mod/settings.php:749 ../../mod/settings.php:927 -#: ../../mod/poke.php:166 ../../mod/profiles.php:515 ../../mod/chat.php:177 -#: ../../mod/chat.php:211 ../../mod/connect.php:92 ../../mod/connedit.php:476 -#: ../../mod/setup.php:307 ../../mod/setup.php:350 ../../mod/pdledit.php:58 -#: ../../mod/photos.php:563 ../../mod/photos.php:668 ../../mod/photos.php:956 -#: ../../mod/photos.php:996 ../../mod/photos.php:1083 -#: ../../mod/sources.php:104 ../../mod/sources.php:138 -#: ../../mod/events.php:492 ../../mod/filestorage.php:137 -#: ../../mod/fsuggest.php:108 ../../mod/group.php:81 ../../mod/admin.php:442 -#: ../../mod/admin.php:751 ../../mod/admin.php:886 ../../mod/admin.php:1019 -#: ../../mod/admin.php:1218 ../../mod/admin.php:1305 ../../mod/thing.php:286 -#: ../../mod/thing.php:329 ../../mod/import.php:393 ../../mod/invite.php:156 -#: ../../mod/mail.php:223 ../../mod/mail.php:335 ../../mod/appman.php:99 -#: ../../view/theme/apw/php/config.php:256 -#: ../../view/theme/blogga/php/config.php:67 -#: ../../view/theme/blogga/view/theme/blog/config.php:67 -#: ../../view/theme/redbasic/php/config.php:99 -msgid "Submit" -msgstr "Отправить" +#: ../../Zotlabs/Module/Mail.php:160 +msgid "Messages" +msgstr "Сообщения" -#: ../../include/ItemObject.php:584 -msgid "Bold" -msgstr "Жирный" +#: ../../Zotlabs/Module/Mail.php:173 +msgid "message" +msgstr "сообщение" -#: ../../include/ItemObject.php:585 -msgid "Italic" -msgstr "Курсив" +#: ../../Zotlabs/Module/Mail.php:214 +msgid "Message recalled." +msgstr "Сообщение отозванно." + +#: ../../Zotlabs/Module/Mail.php:227 +msgid "Conversation removed." +msgstr "Разговор удален." -#: ../../include/ItemObject.php:586 -msgid "Underline" -msgstr "Подчеркнутый" +#: ../../Zotlabs/Module/Mail.php:242 ../../Zotlabs/Module/Mail.php:363 +msgid "Expires YYYY-MM-DD HH:MM" +msgstr "Истекает YYYY-MM-DD HH:MM" -#: ../../include/ItemObject.php:587 -msgid "Quote" -msgstr "Цитата" +#: ../../Zotlabs/Module/Mail.php:270 +msgid "Requested channel is not in this network" +msgstr "Запрашиваемый канал не доступен." -#: ../../include/ItemObject.php:588 -msgid "Code" -msgstr "Код" +#: ../../Zotlabs/Module/Mail.php:278 +msgid "Send Private Message" +msgstr "Отправить личное сообщение" -#: ../../include/ItemObject.php:589 -msgid "Image" -msgstr "Изображение" +#: ../../Zotlabs/Module/Mail.php:279 ../../Zotlabs/Module/Mail.php:421 +msgid "To:" +msgstr "Кому:" -#: ../../include/ItemObject.php:590 -msgid "Link" -msgstr "Ссылка" +#: ../../Zotlabs/Module/Mail.php:282 ../../Zotlabs/Module/Mail.php:423 +msgid "Subject:" +msgstr "Тема:" -#: ../../include/ItemObject.php:591 -msgid "Video" -msgstr "Видео" +#: ../../Zotlabs/Module/Mail.php:285 ../../Zotlabs/Module/Invite.php:140 +msgid "Your message:" +msgstr "Сообщение:" -#: ../../include/js_strings.php:5 -msgid "Delete this item?" -msgstr "Удалить этот элемент?" +#: ../../Zotlabs/Module/Mail.php:287 ../../Zotlabs/Module/Mail.php:429 +msgid "Attach file" +msgstr "Прикрепить файл" -#: ../../include/js_strings.php:8 -msgid "[-] show less" -msgstr "[-] показать меньше" +#: ../../Zotlabs/Module/Mail.php:289 +msgid "Send" +msgstr "Отправить" -#: ../../include/js_strings.php:9 -msgid "[+] expand" -msgstr "[+] развернуть" +#: ../../Zotlabs/Module/Mail.php:393 +msgid "Delete message" +msgstr "Удалить сообщение" -#: ../../include/js_strings.php:10 -msgid "[-] collapse" -msgstr "[-] свернуть" +#: ../../Zotlabs/Module/Mail.php:394 +msgid "Delivery report" +msgstr "Отчёт о доставке" -#: ../../include/js_strings.php:11 -msgid "Password too short" -msgstr "Пароль слишком короткий" +#: ../../Zotlabs/Module/Mail.php:395 +msgid "Recall message" +msgstr "Отозвать сообщение" -#: ../../include/js_strings.php:12 -msgid "Passwords do not match" -msgstr "Пароли не совпадают" +#: ../../Zotlabs/Module/Mail.php:397 +msgid "Message has been recalled." +msgstr "Сообщение отозванно" -#: ../../include/js_strings.php:13 ../../mod/photos.php:39 -msgid "everybody" -msgstr "все" +#: ../../Zotlabs/Module/Mail.php:414 +msgid "Delete Conversation" +msgstr "Удалить разговор" -#: ../../include/js_strings.php:14 -msgid "Secret Passphrase" -msgstr "Тайный пароль" +#: ../../Zotlabs/Module/Mail.php:416 +msgid "" +"No secure communications available. You may be able to " +"respond from the sender's profile page." +msgstr "Безопасная связь недоступна. Вы можете попытаться ответить со страницы профиля отправителя." -#: ../../include/js_strings.php:15 -msgid "Passphrase hint" -msgstr "" +#: ../../Zotlabs/Module/Mail.php:420 +msgid "Send Reply" +msgstr "Отправить ответ" -#: ../../include/js_strings.php:16 -msgid "Notice: Permissions have changed but have not yet been submitted." -msgstr "" +#: ../../Zotlabs/Module/Mail.php:425 +#, php-format +msgid "Your message for %s (%s):" +msgstr "Ваше сообщение для %s (%s):" -#: ../../include/js_strings.php:17 -msgid "close all" -msgstr "закрыть все" +#: ../../Zotlabs/Module/Removeme.php:35 +msgid "" +"Channel removals are not allowed within 48 hours of changing the account " +"password." +msgstr "Удаление канала не разрешается в течении 48 часов после смены пароля у аккаунта." -#: ../../include/js_strings.php:19 -msgid "timeago.prefixAgo" -msgstr "timeago.prefixAgo" +#: ../../Zotlabs/Module/Removeme.php:60 +msgid "Remove This Channel" +msgstr "Удалить этот канал" -#: ../../include/js_strings.php:20 -msgid "timeago.prefixFromNow" -msgstr "timeago.prefixFromNow" +#: ../../Zotlabs/Module/Removeme.php:61 +#: ../../Zotlabs/Module/Removeaccount.php:58 +#: ../../Zotlabs/Module/Changeaddr.php:78 +msgid "WARNING: " +msgstr "ПРЕДУПРЕЖДЕНИЕ:" -#: ../../include/js_strings.php:21 -msgid "ago" -msgstr "тому назад" +#: ../../Zotlabs/Module/Removeme.php:61 +msgid "This channel will be completely removed from the network. " +msgstr "Этот канал будет полностью удалён из сети." -#: ../../include/js_strings.php:22 -msgid "from now" -msgstr "с этого времени" +#: ../../Zotlabs/Module/Removeme.php:61 +#: ../../Zotlabs/Module/Removeaccount.php:58 +msgid "This action is permanent and can not be undone!" +msgstr "Это действие необратимо и не может быть отменено!" -#: ../../include/js_strings.php:23 -msgid "less than a minute" -msgstr "менее чем одну минуту назад" +#: ../../Zotlabs/Module/Removeme.php:62 +#: ../../Zotlabs/Module/Removeaccount.php:59 +#: ../../Zotlabs/Module/Changeaddr.php:79 +msgid "Please enter your password for verification:" +msgstr "Пожалуйста, введите ваш пароль для проверки:" -#: ../../include/js_strings.php:24 -msgid "about a minute" -msgstr "около минуты" +#: ../../Zotlabs/Module/Removeme.php:63 +msgid "Remove this channel and all its clones from the network" +msgstr "Удалить этот канал и все его клоны из сети" -#: ../../include/js_strings.php:25 -#, php-format -msgid "%d minutes" -msgstr "%d мин." +#: ../../Zotlabs/Module/Removeme.php:63 +msgid "" +"By default only the instance of the channel located on this hub will be " +"removed from the network" +msgstr "По умолчанию только представление канала расположенное на данном хабе будет удалено из сети" -#: ../../include/js_strings.php:26 -msgid "about an hour" -msgstr "около часа" +#: ../../Zotlabs/Module/Removeme.php:64 +#: ../../Zotlabs/Module/Settings/Channel.php:622 +msgid "Remove Channel" +msgstr "Удаление канала" + +#: ../../Zotlabs/Module/Hq.php:134 ../../Zotlabs/Module/Channel.php:164 +#: ../../Zotlabs/Module/Pubstream.php:80 ../../Zotlabs/Module/Network.php:204 +#: ../../Zotlabs/Module/Display.php:81 +msgid "Reset form" +msgstr "Очистить форму" + +#: ../../Zotlabs/Module/Hq.php:140 +msgid "Welcome to Hubzilla!" +msgstr "Добро пожаловать в Hubzilla!" + +#: ../../Zotlabs/Module/Hq.php:140 +msgid "You have got no unseen posts..." +msgstr "У вас нет видимых публикаций..." + +#: ../../Zotlabs/Module/Card_edit.php:17 ../../Zotlabs/Module/Card_edit.php:33 +#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95 +#: ../../Zotlabs/Module/Editpost.php:24 ../../Zotlabs/Module/Editwebpage.php:80 +#: ../../Zotlabs/Module/Editlayout.php:79 +#: ../../Zotlabs/Module/Article_edit.php:17 +#: ../../Zotlabs/Module/Article_edit.php:33 +msgid "Item not found" +msgstr "Элемент не найден" -#: ../../include/js_strings.php:27 -#, php-format -msgid "about %d hours" -msgstr "около %d час." +#: ../../Zotlabs/Module/Card_edit.php:44 ../../Zotlabs/Module/Block.php:41 +#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Cal.php:62 +#: ../../Zotlabs/Module/Wall_upload.php:31 +#: ../../Zotlabs/Module/Article_edit.php:44 +#: ../../Zotlabs/Module/Chanview.php:96 +msgid "Channel not found." +msgstr "Канал не найден." -#: ../../include/js_strings.php:28 -msgid "a day" -msgstr "день" +#: ../../Zotlabs/Module/Card_edit.php:128 +msgid "Edit Card" +msgstr "Редактировать карточку" -#: ../../include/js_strings.php:29 -#, php-format -msgid "%d days" -msgstr "%d дн." +#: ../../Zotlabs/Module/Xchan.php:10 +msgid "Xchan Lookup" +msgstr "Поиск Xchan" -#: ../../include/js_strings.php:30 -msgid "about a month" -msgstr "около месяца" +#: ../../Zotlabs/Module/Xchan.php:13 +msgid "Lookup xchan beginning with (or webbie): " +msgstr "Запрос Xchan начинается с (или webbie):" -#: ../../include/js_strings.php:31 -#, php-format -msgid "%d months" -msgstr "%d мес." +#: ../../Zotlabs/Module/Xchan.php:41 ../../Zotlabs/Module/Mitem.php:134 +#: ../../Zotlabs/Module/Menu.php:231 +msgid "Not found." +msgstr "Не найдено." -#: ../../include/js_strings.php:32 -msgid "about a year" -msgstr "около года" +#: ../../Zotlabs/Module/Suggest.php:39 +msgid "" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." +msgstr "Нет предложений. Если это новый сайт, повторите попытку через 24 часа." -#: ../../include/js_strings.php:33 -#, php-format -msgid "%d years" -msgstr "%d лет" +#: ../../Zotlabs/Module/Channel.php:50 ../../Zotlabs/Module/Hcard.php:37 +#: ../../Zotlabs/Module/Profile.php:45 +msgid "Posts and comments" +msgstr "Публикации и комментарии" -#: ../../include/js_strings.php:34 -msgid " " -msgstr " " +#: ../../Zotlabs/Module/Channel.php:57 ../../Zotlabs/Module/Hcard.php:44 +#: ../../Zotlabs/Module/Profile.php:52 +msgid "Only posts" +msgstr "Только публикации" -#: ../../include/js_strings.php:35 -msgid "timeago.numbers" -msgstr "timeago.numbers" +#: ../../Zotlabs/Module/Channel.php:112 +msgid "Insufficient permissions. Request redirected to profile page." +msgstr "Недостаточно прав. Запрос перенаправлен на страницу профиля." -#: ../../include/Contact.php:123 -msgid "New window" -msgstr "Новое окно" +#: ../../Zotlabs/Module/Channel.php:129 ../../Zotlabs/Module/Network.php:174 +msgid "Search Results For:" +msgstr "Результаты поиска для:" -#: ../../include/Contact.php:124 -msgid "Open the selected location in a different window or browser tab" -msgstr "Откройте выбранное местоположение в другом окне или вкладке браузера" +#: ../../Zotlabs/Module/Help.php:23 +msgid "Documentation Search" +msgstr "Поиск документации" -#: ../../include/profile_selectors.php:6 -msgid "Male" -msgstr "Мужской" +#: ../../Zotlabs/Module/Help.php:81 ../../Zotlabs/Module/Group.php:126 +msgid "Members" +msgstr "Участники" -#: ../../include/profile_selectors.php:6 -msgid "Female" -msgstr "Женский" +#: ../../Zotlabs/Module/Help.php:82 +msgid "Administrators" +msgstr "Администраторы" -#: ../../include/profile_selectors.php:6 -msgid "Currently Male" -msgstr "В настоящее время мужской" +#: ../../Zotlabs/Module/Help.php:83 +msgid "Developers" +msgstr "Разработчики" -#: ../../include/profile_selectors.php:6 -msgid "Currently Female" -msgstr "В настоящее время женский" +#: ../../Zotlabs/Module/Help.php:84 +msgid "Tutorials" +msgstr "Руководства" -#: ../../include/profile_selectors.php:6 -msgid "Mostly Male" -msgstr "В основном мужской" +#: ../../Zotlabs/Module/Help.php:95 +msgid "$Projectname Documentation" +msgstr "$Projectname Документация" -#: ../../include/profile_selectors.php:6 -msgid "Mostly Female" -msgstr "В основном женский" +#: ../../Zotlabs/Module/Help.php:96 +msgid "Contents" +msgstr "Содержимое" -#: ../../include/profile_selectors.php:6 -msgid "Transgender" -msgstr "Транссексуал" +#: ../../Zotlabs/Module/Regdir.php:49 ../../Zotlabs/Module/Dirsearch.php:25 +msgid "This site is not a directory server" +msgstr "Этот сайт не является сервером каталога" -#: ../../include/profile_selectors.php:6 -msgid "Intersex" -msgstr "Intersex" +#: ../../Zotlabs/Module/Uexport.php:57 ../../Zotlabs/Module/Uexport.php:58 +msgid "Export Channel" +msgstr "Экспорт канала" -#: ../../include/profile_selectors.php:6 -msgid "Transsexual" -msgstr "Транссексуал" +#: ../../Zotlabs/Module/Uexport.php:59 +msgid "" +"Export your basic channel information to a file. This acts as a backup of " +"your connections, permissions, profile and basic data, which can be used to " +"import your data to a new server hub, but does not contain your content." +msgstr "Экспортировать основную информацию из канала в файл. Служит в качестве резервной копии ваших контактов, основных данных и профиля, однако не включает содержимое. Может быть использовано для импорта ваши данных на новый сервер." -#: ../../include/profile_selectors.php:6 -msgid "Hermaphrodite" -msgstr "Гермафродит" +#: ../../Zotlabs/Module/Uexport.php:60 +msgid "Export Content" +msgstr "Экспортировать содержимое" -#: ../../include/profile_selectors.php:6 -msgid "Neuter" -msgstr "Среднего рода" +#: ../../Zotlabs/Module/Uexport.php:61 +msgid "" +"Export your channel information and recent content to a JSON backup that can " +"be restored or imported to another server hub. This backs up all of your " +"connections, permissions, profile data and several months of posts. This " +"file may be VERY large. Please be patient - it may take several minutes for " +"this download to begin." +msgstr "Экспортировать информацию из вашего канала и его содержимое в резервную копию в формате JSON которая может быть использована для восстановления или импорта на другом сервере. Сохраняет все ваши контакты, разрешения, данные профиля и публикации за несколько месяцев. Файл может иметь очень большой размер. Пожалуйста, будьте терпеливы и подождите несколько минут пока не начнётся загрузка." + +#: ../../Zotlabs/Module/Uexport.php:63 +msgid "Export your posts from a given year." +msgstr "Экспортировать ваши публикации за данный год." + +#: ../../Zotlabs/Module/Uexport.php:65 +msgid "" +"You may also export your posts and conversations for a particular year or " +"month. Adjust the date in your browser location bar to select other dates. " +"If the export fails (possibly due to memory exhaustion on your server hub), " +"please try again selecting a more limited date range." +msgstr "Вы также можете экспортировать ваши публикации и беседы за определённый месяц или год. Выберите дату в панели местоположения в браузере. Если экспорт будет неудачным (это возможно, например, из-за исчерпания памяти на сервере), повторите попытку, выбрав меньший диапазон дат." -#: ../../include/profile_selectors.php:6 -msgid "Non-specific" -msgstr "Неспецифический" +#: ../../Zotlabs/Module/Uexport.php:66 +#, php-format +msgid "" +"To select all posts for a given year, such as this year, visit %2$s" +msgstr "" +"Для выбора всех публикаций заданного года, например текущего, посетите %2$s" -#: ../../include/profile_selectors.php:6 -msgid "Other" -msgstr "Другой" +#: ../../Zotlabs/Module/Uexport.php:67 +#, php-format +msgid "" +"To select all posts for a given month, such as January of this year, visit " +"%2$s" +msgstr "" +"Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2$s" -#: ../../include/profile_selectors.php:6 -msgid "Undecided" -msgstr "Нерешительный" +#: ../../Zotlabs/Module/Uexport.php:68 +#, php-format +msgid "" +"These content files may be imported or restored by visiting " +"%2$s on any site containing your channel. For best results please import " +"or restore these in date order (oldest first)." +msgstr "" +"Данные файлы с содержимым могут быть импортированы и восстановлены на любом содержащем " +"ваш канал сайте. Посетите %2$s. Для лучших результатов пожалуйста " +"производите импорт и восстановление в порядке датировки (старые сначала)." -#: ../../include/profile_selectors.php:23 -msgid "Males" -msgstr "Самец" +#: ../../Zotlabs/Module/Chatsvc.php:131 +msgid "Away" +msgstr "Нет на месте" -#: ../../include/profile_selectors.php:23 -msgid "Females" -msgstr "Самка" +#: ../../Zotlabs/Module/Chatsvc.php:136 +msgid "Online" +msgstr "В сети" -#: ../../include/profile_selectors.php:23 -msgid "Gay" -msgstr "Гей" +#: ../../Zotlabs/Module/Block.php:29 ../../Zotlabs/Module/Page.php:39 +msgid "Invalid item." +msgstr "Недействительный элемент." -#: ../../include/profile_selectors.php:23 -msgid "Lesbian" -msgstr "Лесбиянка" +#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95 +msgid "Authorize application connection" +msgstr "Авторизовать подключение приложения" -#: ../../include/profile_selectors.php:23 -msgid "No Preference" -msgstr "Без предпочтений" +#: ../../Zotlabs/Module/Api.php:75 +msgid "Return to your app and insert this Security Code:" +msgstr "Вернитесь к своему приложению и вставьте этот код безопасности:" -#: ../../include/profile_selectors.php:23 -msgid "Bisexual" -msgstr "Двуполый" +#: ../../Zotlabs/Module/Api.php:85 +msgid "Please login to continue." +msgstr "Пожалуйста, войдите, чтобы продолжить." -#: ../../include/profile_selectors.php:23 -msgid "Autosexual" -msgstr "Autosexual" +#: ../../Zotlabs/Module/Api.php:97 +msgid "" +"Do you want to authorize this application to access your posts and contacts, " +"and/or create new posts for you?" +msgstr "Вы хотите авторизовать это приложение для доступа к вашим публикациям и контактам и / или созданию новых публикаций?" -#: ../../include/profile_selectors.php:23 -msgid "Abstinent" -msgstr "Воздержанный" +#: ../../Zotlabs/Module/Viewsrc.php:43 +msgid "item" +msgstr "пункт" -#: ../../include/profile_selectors.php:23 -msgid "Virgin" -msgstr "Девственница" +#: ../../Zotlabs/Module/Ratings.php:70 +msgid "No ratings" +msgstr "Оценок нет" -#: ../../include/profile_selectors.php:23 -msgid "Deviant" -msgstr "Отклоняющийся от нормы" +#: ../../Zotlabs/Module/Ratings.php:98 +msgid "Rating: " +msgstr "Оценкa:" -#: ../../include/profile_selectors.php:23 -msgid "Fetish" -msgstr "Фетиш" +#: ../../Zotlabs/Module/Ratings.php:99 +msgid "Website: " +msgstr "Веб-сайт:" -#: ../../include/profile_selectors.php:23 -msgid "Oodles" -msgstr "Множественный" +#: ../../Zotlabs/Module/Ratings.php:101 +msgid "Description: " +msgstr "Описание:" -#: ../../include/profile_selectors.php:23 -msgid "Nonsexual" -msgstr "Несексуальный" +#: ../../Zotlabs/Module/Sources.php:38 +msgid "Failed to create source. No channel selected." +msgstr "Не удалось создать источник. Канал не выбран." -#: ../../include/profile_selectors.php:42 -msgid "Single" -msgstr "Одинок" +#: ../../Zotlabs/Module/Sources.php:54 +msgid "Source created." +msgstr "Источник создан." -#: ../../include/profile_selectors.php:42 -msgid "Lonely" -msgstr "Уединенный" +#: ../../Zotlabs/Module/Sources.php:67 +msgid "Source updated." +msgstr "Источник обновлен." -#: ../../include/profile_selectors.php:42 -msgid "Available" -msgstr "Доступный" +#: ../../Zotlabs/Module/Sources.php:93 +msgid "*" +msgstr "" -#: ../../include/profile_selectors.php:42 -msgid "Unavailable" -msgstr "Недоступный" +#: ../../Zotlabs/Module/Sources.php:100 +msgid "Manage remote sources of content for your channel." +msgstr "Управлять удалённым источниками содержимого для вашего канала" -#: ../../include/profile_selectors.php:42 -msgid "Has crush" -msgstr "Столкновение" +#: ../../Zotlabs/Module/Sources.php:101 ../../Zotlabs/Module/Sources.php:111 +msgid "New Source" +msgstr "Новый источник" -#: ../../include/profile_selectors.php:42 -msgid "Infatuated" -msgstr "Влюбленный" +#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:146 +msgid "" +"Import all or selected content from the following channel into this channel " +"and distribute it according to your channel settings." +msgstr "Импортировать всё или выбранное содержимое из следующего канала в этот канал и распределить его в соответствии с вашими настройками." -#: ../../include/profile_selectors.php:42 -msgid "Dating" -msgstr "Датировка" +#: ../../Zotlabs/Module/Sources.php:113 ../../Zotlabs/Module/Sources.php:147 +msgid "Only import content with these words (one per line)" +msgstr "Импортировать содержимое только с этим текстом (построчно)" -#: ../../include/profile_selectors.php:42 -msgid "Unfaithful" -msgstr "Неверный" +#: ../../Zotlabs/Module/Sources.php:113 ../../Zotlabs/Module/Sources.php:147 +msgid "Leave blank to import all public content" +msgstr "Оставьте пустым для импорта всего общедоступного содержимого" -#: ../../include/profile_selectors.php:42 -msgid "Sex Addict" -msgstr "Секс наркоман" +#: ../../Zotlabs/Module/Sources.php:114 ../../Zotlabs/Module/Sources.php:153 +msgid "Channel Name" +msgstr "Название канала" -#: ../../include/profile_selectors.php:42 -msgid "Friends/Benefits" -msgstr "Друзья / Преимущества" +#: ../../Zotlabs/Module/Sources.php:115 ../../Zotlabs/Module/Sources.php:150 +msgid "" +"Add the following categories to posts imported from this source (comma " +"separated)" +msgstr "Добавить следующие категории к импортированным публикациям из этого источника (через запятые)" -#: ../../include/profile_selectors.php:42 -msgid "Casual" -msgstr "Случайный" +#: ../../Zotlabs/Module/Sources.php:115 ../../Zotlabs/Module/Sources.php:150 +#: ../../Zotlabs/Module/Settings/Oauth.php:94 +msgid "Optional" +msgstr "Необязательно" -#: ../../include/profile_selectors.php:42 -msgid "Engaged" -msgstr "Помолвленный" +#: ../../Zotlabs/Module/Sources.php:116 ../../Zotlabs/Module/Sources.php:151 +msgid "Resend posts with this channel as author" +msgstr "Отправить публикации в этот канал повторно как автор" -#: ../../include/profile_selectors.php:42 -msgid "Married" -msgstr "Женат" +#: ../../Zotlabs/Module/Sources.php:116 ../../Zotlabs/Module/Sources.php:151 +msgid "Copyrights may apply" +msgstr "Могут применяться авторские права" -#: ../../include/profile_selectors.php:42 -msgid "Imaginarily married" -msgstr "Мысленно женат" +#: ../../Zotlabs/Module/Sources.php:136 ../../Zotlabs/Module/Sources.php:166 +msgid "Source not found." +msgstr "Источник не найден." -#: ../../include/profile_selectors.php:42 -msgid "Partners" -msgstr "Партнеры" +#: ../../Zotlabs/Module/Sources.php:143 +msgid "Edit Source" +msgstr "Редактировать источник" -#: ../../include/profile_selectors.php:42 -msgid "Cohabiting" -msgstr "Сожительствующие" +#: ../../Zotlabs/Module/Sources.php:144 +msgid "Delete Source" +msgstr "Удалить источник" -#: ../../include/profile_selectors.php:42 -msgid "Common law" -msgstr "" +#: ../../Zotlabs/Module/Sources.php:174 +msgid "Source removed" +msgstr "Источник удален" -#: ../../include/profile_selectors.php:42 -msgid "Happy" -msgstr "Счастливый" +#: ../../Zotlabs/Module/Sources.php:176 +msgid "Unable to remove source." +msgstr "Невозможно удалить источник." -#: ../../include/profile_selectors.php:42 -msgid "Not looking" -msgstr "Не нуждаюсь" +#: ../../Zotlabs/Module/Siteinfo.php:21 +msgid "About this site" +msgstr "Об этом сайте" -#: ../../include/profile_selectors.php:42 -msgid "Swinger" -msgstr "" +#: ../../Zotlabs/Module/Siteinfo.php:22 +msgid "Site Name" +msgstr "Название сайта" -#: ../../include/profile_selectors.php:42 -msgid "Betrayed" -msgstr "" +#: ../../Zotlabs/Module/Siteinfo.php:24 ../../Zotlabs/Module/Admin/Site.php:325 +msgid "Site Information" +msgstr "Информация о сайте" -#: ../../include/profile_selectors.php:42 -msgid "Separated" -msgstr "" +#: ../../Zotlabs/Module/Siteinfo.php:26 +msgid "Administrator" +msgstr "Администратор" + +#: ../../Zotlabs/Module/Siteinfo.php:28 ../../Zotlabs/Module/Register.php:241 +msgid "Terms of Service" +msgstr "Условия предоставления услуг" -#: ../../include/profile_selectors.php:42 -msgid "Unstable" -msgstr "Колеблющийся" +#: ../../Zotlabs/Module/Siteinfo.php:29 +msgid "Software and Project information" +msgstr "Информация о программном обеспечении и проекте" -#: ../../include/profile_selectors.php:42 -msgid "Divorced" -msgstr "Разведенный" +#: ../../Zotlabs/Module/Siteinfo.php:30 +msgid "This site is powered by $Projectname" +msgstr "Этот сайт работает на $Projectname" -#: ../../include/profile_selectors.php:42 -msgid "Imaginarily divorced" -msgstr "Мысленно разведенный" +#: ../../Zotlabs/Module/Siteinfo.php:31 +msgid "" +"Federated and decentralised networking and identity services provided by Zot" +msgstr "Объединенные и децентрализованные сети и службы идентификациии обеспечиваются Zot" -#: ../../include/profile_selectors.php:42 -msgid "Widowed" -msgstr "Овдовевший" +#: ../../Zotlabs/Module/Siteinfo.php:34 +msgid "Additional federated transport protocols:" +msgstr "Дополнительные федеративные транспортные протоколы:" -#: ../../include/profile_selectors.php:42 -msgid "Uncertain" -msgstr "Неопределенный" +#: ../../Zotlabs/Module/Siteinfo.php:36 +#, php-format +msgid "Version %s" +msgstr "Версия %s" -#: ../../include/profile_selectors.php:42 -msgid "It's complicated" -msgstr "Это сложно" +#: ../../Zotlabs/Module/Siteinfo.php:37 +msgid "Project homepage" +msgstr "Домашняя страница проекта" -#: ../../include/profile_selectors.php:42 -msgid "Don't care" -msgstr "Не заботьтесь" +#: ../../Zotlabs/Module/Siteinfo.php:38 +msgid "Developer homepage" +msgstr "Домашняя страница разработчика" -#: ../../include/profile_selectors.php:42 -msgid "Ask me" -msgstr "Спроси меня" +#: ../../Zotlabs/Module/Profile_photo.php:66 +#: ../../Zotlabs/Module/Cover_photo.php:57 +msgid "Image uploaded but image cropping failed." +msgstr "Изображение загружено но обрезка не удалась." -#: ../../include/auth.php:79 -msgid "Logged out." -msgstr "Вышел из системы." +#: ../../Zotlabs/Module/Profile_photo.php:142 +#: ../../Zotlabs/Module/Cover_photo.php:191 +msgid "Image resize failed." +msgstr "Не удалось изменить размер изображения." -#: ../../include/auth.php:198 -msgid "Failed authentication" -msgstr "Ошибка аутентификации" +#: ../../Zotlabs/Module/Profile_photo.php:260 +#: ../../Zotlabs/Module/Cover_photo.php:229 +msgid "Image upload failed." +msgstr "Загрузка изображения не удалась." -#: ../../include/auth.php:213 ../../mod/openid.php:188 -msgid "Login failed." -msgstr "Не удалось войти." +#: ../../Zotlabs/Module/Profile_photo.php:279 +#: ../../Zotlabs/Module/Cover_photo.php:246 +msgid "Unable to process image." +msgstr "Невозможно обработать изображение." -#: ../../include/items.php:306 ../../mod/profperm.php:23 -#: ../../mod/subthread.php:49 ../../mod/group.php:68 ../../mod/like.php:202 -#: ../../index.php:360 -msgid "Permission denied" -msgstr "Доступ запрещен" +#: ../../Zotlabs/Module/Profile_photo.php:343 +#: ../../Zotlabs/Module/Profile_photo.php:390 +#: ../../Zotlabs/Module/Cover_photo.php:339 +#: ../../Zotlabs/Module/Cover_photo.php:354 +msgid "Photo not available." +msgstr "Фотография недоступна." -#: ../../include/items.php:830 -msgid "(Unknown)" -msgstr "(Неизвестный)" +#: ../../Zotlabs/Module/Profile_photo.php:454 +msgid "" +"Your default profile photo is visible to anybody on the internet. Profile " +"photos for alternate profiles will inherit the permissions of the profile" +msgstr "" +"Фотография вашего профиля по умолчанию видна всем в Интернете. Фотография" +"профиля для альтернативных профилей наследуют разрешения текущего профиля" -#: ../../include/items.php:3618 ../../mod/home.php:67 ../../mod/display.php:32 -#: ../../mod/filestorage.php:18 ../../mod/admin.php:159 -#: ../../mod/admin.php:923 ../../mod/admin.php:1126 ../../mod/thing.php:78 -#: ../../mod/viewsrc.php:18 -msgid "Item not found." -msgstr "Элемент не найден." +#: ../../Zotlabs/Module/Profile_photo.php:454 +msgid "" +"Your profile photo is visible to anybody on the internet and may be " +"distributed to other websites." +msgstr "" +"Фотография вашего профиля видна всем в Интернете и может быть отправлена " +"на другие сайты." -#: ../../include/items.php:4051 ../../mod/group.php:38 ../../mod/group.php:140 -msgid "Collection not found." -msgstr "Коллекция не найдена." +#: ../../Zotlabs/Module/Profile_photo.php:456 +#: ../../Zotlabs/Module/Cover_photo.php:392 +msgid "Upload File:" +msgstr "Загрузить файл:" -#: ../../include/items.php:4066 -msgid "Collection is empty." -msgstr "Коллекция пуста." +#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Cover_photo.php:393 +msgid "Select a profile:" +msgstr "Выбрать профиль:" -#: ../../include/items.php:4073 -#, php-format -msgid "Collection: %s" -msgstr "Коллекции: %s" +#: ../../Zotlabs/Module/Profile_photo.php:458 +msgid "Use Photo for Profile" +msgstr "Использовать фотографию для профиля" -#: ../../include/items.php:4084 -#, php-format -msgid "Connection: %s" -msgstr "Контакты: %s" +#: ../../Zotlabs/Module/Profile_photo.php:458 +msgid "Change Profile Photo" +msgstr "Изменить фотографию профиля" -#: ../../include/items.php:4087 -msgid "Connection not found." -msgstr "Контакт не найден." +#: ../../Zotlabs/Module/Profile_photo.php:459 +msgid "Use" +msgstr "Использовать" + +#: ../../Zotlabs/Module/Profile_photo.php:463 +#: ../../Zotlabs/Module/Profile_photo.php:464 +#: ../../Zotlabs/Module/Cover_photo.php:397 +#: ../../Zotlabs/Module/Cover_photo.php:398 +msgid "Use a photo from your albums" +msgstr "Использовать фотографию из ваших альбомов" + +#: ../../Zotlabs/Module/Profile_photo.php:469 +#: ../../Zotlabs/Module/Cover_photo.php:403 ../../Zotlabs/Module/Wiki.php:383 +msgid "Choose a different album" +msgstr "Выбрать другой альбом" + +#: ../../Zotlabs/Module/Profile_photo.php:474 +#: ../../Zotlabs/Module/Cover_photo.php:409 +msgid "Select existing photo" +msgstr "Выбрать существующую фотографию" + +#: ../../Zotlabs/Module/Profile_photo.php:493 +#: ../../Zotlabs/Module/Cover_photo.php:426 +msgid "Crop Image" +msgstr "Обрезать изображение" + +#: ../../Zotlabs/Module/Profile_photo.php:494 +#: ../../Zotlabs/Module/Cover_photo.php:427 +msgid "Please adjust the image cropping for optimum viewing." +msgstr "Пожалуйста настройте обрезку изображения для оптимального просмотра." -#: ../../include/permissions.php:13 -msgid "Can view my \"public\" stream and posts" -msgstr "Может просматривать мои \"публичные\" поток и сообщения" +#: ../../Zotlabs/Module/Profile_photo.php:496 +#: ../../Zotlabs/Module/Cover_photo.php:429 +msgid "Done Editing" +msgstr "Закончить редактирование" -#: ../../include/permissions.php:14 -msgid "Can view my \"public\" channel profile" -msgstr "Может просматривать мой \"публичный\" профиль канала" +#: ../../Zotlabs/Module/Subthread.php:142 +#, php-format +msgid "%1$s is following %2$s's %3$s" +msgstr "%1$s отслеживает %2$s's %3$s" -#: ../../include/permissions.php:15 -msgid "Can view my \"public\" photo albums" -msgstr "Может просматривать мои \"публичные\" фотоальбомы" +#: ../../Zotlabs/Module/Subthread.php:144 +#, php-format +msgid "%1$s stopped following %2$s's %3$s" +msgstr "%1$s прекратил отслеживать %2$s's %3$s" -#: ../../include/permissions.php:16 -msgid "Can view my \"public\" address book" -msgstr "Может просматривать мою \"публичную\" адресную книгу" +#: ../../Zotlabs/Module/Common.php:14 +msgid "No channel." +msgstr "Канала нет." -#: ../../include/permissions.php:17 -msgid "Can view my \"public\" file storage" -msgstr "Может просматривать мои \"публичные\" файлы" +#: ../../Zotlabs/Module/Common.php:45 +msgid "No connections in common." +msgstr "Общих контактов нет." -#: ../../include/permissions.php:18 -msgid "Can view my \"public\" pages" -msgstr "Может просматривать мои \"публичные\" страницы" +#: ../../Zotlabs/Module/Common.php:65 +msgid "View Common Connections" +msgstr "Просмотр общий контактов" -#: ../../include/permissions.php:21 -msgid "Can send me their channel stream and posts" -msgstr "Может прислать мне свои потоки и сообщения" +#: ../../Zotlabs/Module/Filestorage.php:79 +msgid "Permission Denied." +msgstr "Доступ запрещен." -#: ../../include/permissions.php:22 -msgid "Can post on my channel page (\"wall\")" -msgstr "Может публиковать на моей странице канала (\"стена\")" +#: ../../Zotlabs/Module/Filestorage.php:112 +msgid "File not found." +msgstr "Файл не найден." -#: ../../include/permissions.php:23 -msgid "Can comment on my posts" -msgstr "Может комментировать мои сообщения" +#: ../../Zotlabs/Module/Filestorage.php:165 +msgid "Edit file permissions" +msgstr "Редактировать разрешения файла" -#: ../../include/permissions.php:24 -msgid "Can send me private mail messages" -msgstr "Может отправлять мне личные сообщения по эл. почте" +#: ../../Zotlabs/Module/Filestorage.php:177 +msgid "Set/edit permissions" +msgstr "Редактировать разрешения" -#: ../../include/permissions.php:25 -msgid "Can post photos to my photo albums" -msgstr "Может публиковать фотографии в мои фотоальбомы" +#: ../../Zotlabs/Module/Filestorage.php:178 +msgid "Include all files and sub folders" +msgstr "Включить все файлы и подкаталоги" -#: ../../include/permissions.php:26 -msgid "Can forward to all my channel contacts via post @mentions" -msgstr "" +#: ../../Zotlabs/Module/Filestorage.php:179 +msgid "Return to file list" +msgstr "Вернутся к списку файлов" -#: ../../include/permissions.php:26 -msgid "Advanced - useful for creating group forum channels" -msgstr "" +#: ../../Zotlabs/Module/Filestorage.php:181 +msgid "Copy/paste this code to attach file to a post" +msgstr "Копировать / вставить этот код для прикрепления файла к публикации" -#: ../../include/permissions.php:27 -msgid "Can chat with me (when available)" -msgstr "Можете общаться со мной в чате (при наличии)" +#: ../../Zotlabs/Module/Filestorage.php:182 +msgid "Copy/paste this URL to link file from a web page" +msgstr "Копировать / вставить эту URL для ссылки на файл со страницы" -#: ../../include/permissions.php:28 -msgid "Can write to my \"public\" file storage" -msgstr "Может писать в моё \"публичное\" хранилище файлов" +#: ../../Zotlabs/Module/Filestorage.php:184 +msgid "Share this file" +msgstr "Поделиться этим файлом" -#: ../../include/permissions.php:29 -msgid "Can edit my \"public\" pages" -msgstr "Может редактировать мои \"публичные\" страницы" +#: ../../Zotlabs/Module/Filestorage.php:185 +msgid "Show URL to this file" +msgstr "Показать URL этого файла" -#: ../../include/permissions.php:31 -msgid "Can source my \"public\" posts in derived channels" -msgstr "" +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Storage/Browser.php:405 +msgid "Show in your contacts shared folder" +msgstr "Показать общий каталог в ваших контактах" -#: ../../include/permissions.php:31 -msgid "Somewhat advanced - very useful in open communities" -msgstr "" +#: ../../Zotlabs/Module/Tagger.php:48 +msgid "Post not found." +msgstr "Публикация не найдена" -#: ../../include/permissions.php:33 -msgid "Can administer my channel resources" -msgstr "Может администрировать мои ресурсы канала" +#: ../../Zotlabs/Module/Tagger.php:119 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s отметил тегом %2$s %3$s с %4$s" -#: ../../include/permissions.php:33 +#: ../../Zotlabs/Module/Page.php:173 msgid "" -"Extremely advanced. Leave this alone unless you know what you are doing" -msgstr "" - -#: ../../mod/mood.php:132 -msgid "Set your current mood and tell your friends" -msgstr "" +"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " +"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " +"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " +"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +msgstr "Бля бля бля Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + +#: ../../Zotlabs/Module/Editblock.php:113 ../../Zotlabs/Module/Blocks.php:97 +#: ../../Zotlabs/Module/Blocks.php:155 +msgid "Block Name" +msgstr "Название блока" -#: ../../mod/mitem.php:14 ../../mod/menu.php:92 -msgid "Menu not found." -msgstr "Меню не найдено." +#: ../../Zotlabs/Module/Editblock.php:138 +msgid "Edit Block" +msgstr "Редактировать блок" -#: ../../mod/mitem.php:47 -msgid "Menu element updated." -msgstr "Меню обновлено." +#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43 +msgid "Item is not editable" +msgstr "Элемент нельзя редактировать" -#: ../../mod/mitem.php:51 -msgid "Unable to update menu element." -msgstr "" +#: ../../Zotlabs/Module/Editpost.php:108 ../../Zotlabs/Module/Rpost.php:144 +msgid "Edit post" +msgstr "Редактировать сообщение" -#: ../../mod/mitem.php:57 -msgid "Menu element added." -msgstr "Элемент меню добавлен." +#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98 +msgid "Tag removed" +msgstr "Тег удалён" -#: ../../mod/mitem.php:61 -msgid "Unable to add menu element." -msgstr "Невозможно добавить элемент меню." +#: ../../Zotlabs/Module/Tagrm.php:123 +msgid "Remove Item Tag" +msgstr "Удалить тег элемента" -#: ../../mod/mitem.php:78 ../../mod/dirprofile.php:175 ../../mod/menu.php:120 -#: ../../mod/xchan.php:27 -msgid "Not found." -msgstr "Не найдено." +#: ../../Zotlabs/Module/Tagrm.php:125 +msgid "Select a tag to remove: " +msgstr "Выбрать тег для удаления:" -#: ../../mod/mitem.php:96 -msgid "Manage Menu Elements" -msgstr "Управление элементов меню" +#: ../../Zotlabs/Module/Removeaccount.php:35 +msgid "" +"Account removals are not allowed within 48 hours of changing the account " +"password." +msgstr "Удаление канала не разрешается в течении 48 часов после смены пароля у аккаунта." -#: ../../mod/mitem.php:99 -msgid "Edit menu" -msgstr "Редактировать меню" +#: ../../Zotlabs/Module/Removeaccount.php:57 +msgid "Remove This Account" +msgstr "Удалить этот аккаунт" -#: ../../mod/mitem.php:102 -msgid "Edit element" -msgstr "Редактировать элемент" +#: ../../Zotlabs/Module/Removeaccount.php:58 +msgid "" +"This account and all its channels will be completely removed from the " +"network. " +msgstr "Этот аккаунт и все его каналы будут полностью удалены из сети." -#: ../../mod/mitem.php:103 -msgid "Drop element" -msgstr "Удалить элемент" +#: ../../Zotlabs/Module/Removeaccount.php:60 +msgid "" +"Remove this account, all its channels and all its channel clones from the " +"network" +msgstr "Удалить этот аккаунт, все его каналы и их клоны из сети." -#: ../../mod/mitem.php:104 -msgid "New element" -msgstr "Новый элемент" +#: ../../Zotlabs/Module/Removeaccount.php:60 +msgid "" +"By default only the instances of the channels located on this hub will be " +"removed from the network" +msgstr "По умолчанию только представление канала расположенное на данном хабе будет удалено из сети" -#: ../../mod/mitem.php:105 -msgid "Edit this menu container" -msgstr "" +#: ../../Zotlabs/Module/Removeaccount.php:61 +#: ../../Zotlabs/Module/Settings/Account.php:120 +msgid "Remove Account" +msgstr "Удалить аккаунт" -#: ../../mod/mitem.php:106 -msgid "Add menu element" -msgstr "Добавить элемент меню" +#: ../../Zotlabs/Module/Admin.php:97 +msgid "Blocked accounts" +msgstr "Заблокированные аккаунты" -#: ../../mod/mitem.php:107 -msgid "Delete this menu item" -msgstr "Удалить элемент меню" +#: ../../Zotlabs/Module/Admin.php:98 +msgid "Expired accounts" +msgstr "Просроченные аккаунты" -#: ../../mod/mitem.php:108 -msgid "Edit this menu item" -msgstr "Редактировать элемент меню" +#: ../../Zotlabs/Module/Admin.php:99 +msgid "Expiring accounts" +msgstr "Близкие к просрочке аккаунты" -#: ../../mod/mitem.php:131 -msgid "New Menu Element" -msgstr "Новый элемент меню" +#: ../../Zotlabs/Module/Admin.php:115 ../../Zotlabs/Module/Locs.php:119 +msgid "Primary" +msgstr "Основной" -#: ../../mod/mitem.php:133 ../../mod/mitem.php:176 -msgid "Menu Item Permissions" -msgstr "" +#: ../../Zotlabs/Module/Admin.php:116 +msgid "Clones" +msgstr "Клоны" -#: ../../mod/mitem.php:134 ../../mod/mitem.php:177 ../../mod/settings.php:960 -msgid "(click to open/close)" -msgstr "(нажмите, чтобы открыть / закрыть)" +#: ../../Zotlabs/Module/Admin.php:122 +msgid "Message queues" +msgstr "Очередь сообщений" + +#: ../../Zotlabs/Module/Admin.php:136 +msgid "Your software should be updated" +msgstr "Ваше программное обеспечение должно быть обновлено" + +#: ../../Zotlabs/Module/Admin.php:140 ../../Zotlabs/Module/Admin/Addons.php:341 +#: ../../Zotlabs/Module/Admin/Addons.php:436 +#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Logs.php:82 +#: ../../Zotlabs/Module/Admin/Accounts.php:166 +#: ../../Zotlabs/Module/Admin/Security.php:92 +#: ../../Zotlabs/Module/Admin/Themes.php:122 +#: ../../Zotlabs/Module/Admin/Themes.php:156 +#: ../../Zotlabs/Module/Admin/Channels.php:145 +msgid "Administration" +msgstr "Администрирование" -#: ../../mod/mitem.php:136 ../../mod/mitem.php:180 -msgid "Link text" -msgstr "Текст ссылки" +#: ../../Zotlabs/Module/Admin.php:141 +msgid "Summary" +msgstr "Резюме" -#: ../../mod/mitem.php:137 ../../mod/mitem.php:181 -msgid "URL of link" -msgstr "URL ссылки" +#: ../../Zotlabs/Module/Admin.php:144 +msgid "Registered accounts" +msgstr "Зарегистрированные аккаунты" -#: ../../mod/mitem.php:138 ../../mod/mitem.php:182 -msgid "Use Red magic-auth if available" -msgstr "" +#: ../../Zotlabs/Module/Admin.php:145 +msgid "Pending registrations" +msgstr "Ждут утверждения" -#: ../../mod/mitem.php:139 ../../mod/mitem.php:183 -msgid "Open link in new window" -msgstr "Открыть ссылку в новом окне" +#: ../../Zotlabs/Module/Admin.php:146 +msgid "Registered channels" +msgstr "Зарегистрированные каналы" -#: ../../mod/mitem.php:141 ../../mod/mitem.php:185 -msgid "Order in list" -msgstr "" +#: ../../Zotlabs/Module/Admin.php:147 +msgid "Active addons" +msgstr "Активные расширения" -#: ../../mod/mitem.php:141 ../../mod/mitem.php:185 -msgid "Higher numbers will sink to bottom of listing" -msgstr "" +#: ../../Zotlabs/Module/Admin.php:148 +msgid "Version" +msgstr "Версия системы" -#: ../../mod/mitem.php:154 -msgid "Menu item not found." -msgstr "Элемент меню не найден." +#: ../../Zotlabs/Module/Admin.php:149 +msgid "Repository version (master)" +msgstr "Версия репозитория (master)" -#: ../../mod/mitem.php:163 -msgid "Menu item deleted." -msgstr "Элемент меню удален." +#: ../../Zotlabs/Module/Admin.php:150 +msgid "Repository version (dev)" +msgstr "Версия репозитория (dev)" -#: ../../mod/mitem.php:165 -msgid "Menu item could not be deleted." -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:79 ../../Zotlabs/Module/Defperms.php:59 +msgid "Could not access contact record." +msgstr "Не удалось получить доступ к записи контакта." -#: ../../mod/mitem.php:174 -msgid "Edit Menu Element" -msgstr "Редактировать элемент меню" +#: ../../Zotlabs/Module/Connedit.php:109 +msgid "Could not locate selected profile." +msgstr "Не удалось обнаружить выбранный профиль." -#: ../../mod/mitem.php:186 ../../mod/menu.php:114 -msgid "Modify" -msgstr "Изменить" +#: ../../Zotlabs/Module/Connedit.php:246 +msgid "Connection updated." +msgstr "Контакты обновлены." -#: ../../mod/ping.php:192 -msgid "sent you a private message" -msgstr "отправил вам личное сообщение" +#: ../../Zotlabs/Module/Connedit.php:248 +msgid "Failed to update connection record." +msgstr "Не удалось обновить запись контакта." -#: ../../mod/ping.php:250 -msgid "added your channel" -msgstr "добавил ваш канал" +#: ../../Zotlabs/Module/Connedit.php:302 +msgid "is now connected to" +msgstr "теперь подключён к" -#: ../../mod/ping.php:294 -msgid "posted an event" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:427 +msgid "Could not access address book record." +msgstr "Не удалось получить доступ к записи адресной книги." -#: ../../mod/acl.php:239 -msgid "network" -msgstr "сеть" +#: ../../Zotlabs/Module/Connedit.php:475 +msgid "Refresh failed - channel is currently unavailable." +msgstr "Обновление невозможно - в настоящее время канал недоступен." -#: ../../mod/settings.php:71 -msgid "Name is required" -msgstr "Необходимо имя" +#: ../../Zotlabs/Module/Connedit.php:490 ../../Zotlabs/Module/Connedit.php:499 +#: ../../Zotlabs/Module/Connedit.php:508 ../../Zotlabs/Module/Connedit.php:517 +#: ../../Zotlabs/Module/Connedit.php:530 +msgid "Unable to set address book parameters." +msgstr "Не удалось получить доступ к параметрам адресной книги." -#: ../../mod/settings.php:75 -msgid "Key and Secret are required" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:554 +msgid "Connection has been removed." +msgstr "Контакт был удалён." -#: ../../mod/settings.php:195 -msgid "Passwords do not match. Password unchanged." -msgstr "Пароли не совпадают. Пароль не изменён." +#: ../../Zotlabs/Module/Connedit.php:597 +#, php-format +msgid "View %s's profile" +msgstr "Просмотр %s профиля" -#: ../../mod/settings.php:199 -msgid "Empty passwords are not allowed. Password unchanged." -msgstr "Пустые пароли не допускаются. Пароль не изменён." +#: ../../Zotlabs/Module/Connedit.php:601 +msgid "Refresh Permissions" +msgstr "Обновить разрешения" -#: ../../mod/settings.php:212 -msgid "Password changed." -msgstr "Пароль изменен." +#: ../../Zotlabs/Module/Connedit.php:604 +msgid "Fetch updated permissions" +msgstr "Получить обновлённые разрешения" -#: ../../mod/settings.php:214 -msgid "Password update failed. Please try again." -msgstr "Изменение пароля закончилось неуспешно. Пожалуйста, попробуйте еще раз." +#: ../../Zotlabs/Module/Connedit.php:608 +msgid "Refresh Photo" +msgstr "Обновить фотографию" -#: ../../mod/settings.php:228 -msgid "Not valid email." -msgstr "Не действительный адрес электронной почты." +#: ../../Zotlabs/Module/Connedit.php:611 +msgid "Fetch updated photo" +msgstr "Получить обновлённую фотографию" -#: ../../mod/settings.php:231 -msgid "Protected email address. Cannot change to that email." -msgstr "Защищенный адрес электронной почты. Нельзя изменить." +#: ../../Zotlabs/Module/Connedit.php:618 +msgid "View recent posts and comments" +msgstr "Просмотреть последние публикации и комментарии" -#: ../../mod/settings.php:240 -msgid "System failure storing new email. Please try again." -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:622 +#: ../../Zotlabs/Module/Admin/Accounts.php:177 +msgid "Unblock" +msgstr "Разблокировать" -#: ../../mod/settings.php:443 -msgid "Settings updated." -msgstr "Настройки обновленны." +#: ../../Zotlabs/Module/Connedit.php:622 +#: ../../Zotlabs/Module/Admin/Accounts.php:176 +msgid "Block" +msgstr "Блокировать" -#: ../../mod/settings.php:514 ../../mod/settings.php:540 -#: ../../mod/settings.php:576 -msgid "Add application" -msgstr "Добавить приложения" +#: ../../Zotlabs/Module/Connedit.php:625 +msgid "Block (or Unblock) all communications with this connection" +msgstr "Блокировать (или разблокировать) связи с этим контактом" -#: ../../mod/settings.php:517 ../../mod/settings.php:543 -#: ../../mod/admin.php:893 -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:35 -msgid "Name" -msgstr "Имя" +#: ../../Zotlabs/Module/Connedit.php:626 +msgid "This connection is blocked!" +msgstr "Этот контакт заблокирован!" -#: ../../mod/settings.php:517 -msgid "Name of application" -msgstr "Название приложения" +#: ../../Zotlabs/Module/Connedit.php:630 +msgid "Unignore" +msgstr "Не игнорировать" -#: ../../mod/settings.php:518 ../../mod/settings.php:544 -msgid "Consumer Key" -msgstr "Ключ клиента" +#: ../../Zotlabs/Module/Connedit.php:633 +msgid "Ignore (or Unignore) all inbound communications from this connection" +msgstr "Игнорировать (или не игнорировать) все связи для этого контакта" -#: ../../mod/settings.php:518 ../../mod/settings.php:519 -msgid "Automatically generated - change if desired. Max length 20" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:634 +msgid "This connection is ignored!" +msgstr "Этот контакт игнорируется!" -#: ../../mod/settings.php:519 ../../mod/settings.php:545 -msgid "Consumer Secret" -msgstr "Секрет клиента" +#: ../../Zotlabs/Module/Connedit.php:638 +msgid "Unarchive" +msgstr "Разархивировать" -#: ../../mod/settings.php:520 ../../mod/settings.php:546 -msgid "Redirect" -msgstr "Перенаправление" +#: ../../Zotlabs/Module/Connedit.php:638 +msgid "Archive" +msgstr "Заархивировать" -#: ../../mod/settings.php:520 +#: ../../Zotlabs/Module/Connedit.php:641 msgid "" -"Redirect URI - leave blank unless your application specifically requires " -"this" -msgstr "" +"Archive (or Unarchive) this connection - mark channel dead but keep content" +msgstr "Заархивировать (или разархивировать) этот контакт - пометить канал отключённым но сохранить содержимое" -#: ../../mod/settings.php:521 ../../mod/settings.php:547 -msgid "Icon url" -msgstr "URL-адрес значка" +#: ../../Zotlabs/Module/Connedit.php:642 +msgid "This connection is archived!" +msgstr "Этот контакт заархивирован!" -#: ../../mod/settings.php:521 -msgid "Optional" -msgstr "Необязательно" +#: ../../Zotlabs/Module/Connedit.php:646 +msgid "Unhide" +msgstr "Показать" -#: ../../mod/settings.php:532 -msgid "You can't edit this application." -msgstr "Вы не можете редактировать это приложение." +#: ../../Zotlabs/Module/Connedit.php:646 +msgid "Hide" +msgstr "Скрыть" -#: ../../mod/settings.php:575 -msgid "Connected Apps" -msgstr "Подключенные приложения" +#: ../../Zotlabs/Module/Connedit.php:649 +msgid "Hide or Unhide this connection from your other connections" +msgstr "Скрыть или показать этот контакт от / для остальных" -#: ../../mod/settings.php:579 -msgid "Client key starts with" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:650 +msgid "This connection is hidden!" +msgstr "Этот контакт скрыт!" -#: ../../mod/settings.php:580 -msgid "No name" -msgstr "Без названия" +#: ../../Zotlabs/Module/Connedit.php:657 +msgid "Delete this connection" +msgstr "Удалить этот контакт" -#: ../../mod/settings.php:581 -msgid "Remove authorization" -msgstr "Удалить разрешение" +#: ../../Zotlabs/Module/Connedit.php:665 +msgid "Fetch Vcard" +msgstr "Получить vCard" -#: ../../mod/settings.php:592 -msgid "No feature settings configured" -msgstr "Параметры функций не настроены" +#: ../../Zotlabs/Module/Connedit.php:668 +msgid "Fetch electronic calling card for this connection" +msgstr "Получить электронную телефонную карточку для этого контакта" -#: ../../mod/settings.php:600 -msgid "Feature Settings" -msgstr "Настройки функции" +#: ../../Zotlabs/Module/Connedit.php:679 +msgid "Open Individual Permissions section by default" +msgstr "Открывать раздел \"Индивидуальные разрешения\" по умолчанию" -#: ../../mod/settings.php:623 -msgid "Account Settings" -msgstr "Настройки аккаунта" +#: ../../Zotlabs/Module/Connedit.php:702 +msgid "Affinity" +msgstr "Сходство" -#: ../../mod/settings.php:624 -msgid "Password Settings" -msgstr "Настройки пароля" +#: ../../Zotlabs/Module/Connedit.php:705 +msgid "Open Set Affinity section by default" +msgstr "Открыть секцию установления сходства по умолчанию" -#: ../../mod/settings.php:625 -msgid "New Password:" -msgstr "Новый пароль:" +#: ../../Zotlabs/Module/Connedit.php:739 +msgid "Filter" +msgstr "Фильтр" -#: ../../mod/settings.php:626 -msgid "Confirm:" -msgstr "Подтверждение:" +#: ../../Zotlabs/Module/Connedit.php:742 +msgid "Open Custom Filter section by default" +msgstr "Открывать секцию \"Настраиваемый фильтр\" по умолчанию" -#: ../../mod/settings.php:626 -msgid "Leave password fields blank unless changing" -msgstr "Оставьте поля пустыми, если не меняется" +#: ../../Zotlabs/Module/Connedit.php:779 +msgid "Approve this connection" +msgstr "Утвердить этот контакт" -#: ../../mod/settings.php:628 ../../mod/settings.php:936 -msgid "Email Address:" -msgstr "Адрес электронной почты:" +#: ../../Zotlabs/Module/Connedit.php:779 +msgid "Accept connection to allow communication" +msgstr "Принять контакт чтобы разрешить связь" -#: ../../mod/settings.php:629 -msgid "Remove Account" -msgstr "Удалить аккаунт" +#: ../../Zotlabs/Module/Connedit.php:784 +msgid "Set Affinity" +msgstr "Установить сходство" -#: ../../mod/settings.php:630 -msgid "Warning: This action is permanent and cannot be reversed." -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:787 +msgid "Set Profile" +msgstr "Установить профиль" -#: ../../mod/settings.php:646 -msgid "Off" -msgstr "Выкл." +#: ../../Zotlabs/Module/Connedit.php:790 +msgid "Set Affinity & Profile" +msgstr "Установить сходство и профиль" -#: ../../mod/settings.php:646 -msgid "On" -msgstr "Вкл." +#: ../../Zotlabs/Module/Connedit.php:838 +msgid "This connection is unreachable from this location." +msgstr "Этот контакт недоступен для данного местоположения" -#: ../../mod/settings.php:653 -msgid "Additional Features" -msgstr "Дополнительные функции" +#: ../../Zotlabs/Module/Connedit.php:839 +msgid "This connection may be unreachable from other channel locations." +msgstr "Этот контакт может быть недоступен из других мест размещения канала" -#: ../../mod/settings.php:678 -msgid "Connector Settings" -msgstr "Настройки соединителя" +#: ../../Zotlabs/Module/Connedit.php:841 +msgid "Location independence is not supported by their network." +msgstr "Независимое местоположение не поддерживается их сетью." -#: ../../mod/settings.php:708 ../../mod/admin.php:390 -msgid "No special theme for mobile devices" -msgstr "Нет специальной темы для мобильных устройств" +#: ../../Zotlabs/Module/Connedit.php:847 +msgid "" +"This connection is unreachable from this location. Location independence is " +"not supported by their network." +msgstr "Этот контакт недоступен из данного местоположения. Независимое местоположение не поддерживается их сетью." -#: ../../mod/settings.php:717 -#, php-format -msgid "%s - (Experimental)" -msgstr "%s - (экспериментальный)" +#: ../../Zotlabs/Module/Connedit.php:851 ../../Zotlabs/Module/Defperms.php:239 +msgid "Apply these permissions automatically" +msgstr "Применить эти разрешения автоматически" -#: ../../mod/settings.php:747 -msgid "Display Settings" -msgstr "Настройки отображения" +#: ../../Zotlabs/Module/Connedit.php:851 +msgid "Connection requests will be approved without your interaction" +msgstr "Запросы контактов будут одобрены без вашего участия" -#: ../../mod/settings.php:753 -msgid "Display Theme:" -msgstr "Тема отображения:" +#: ../../Zotlabs/Module/Connedit.php:852 ../../Zotlabs/Module/Defperms.php:240 +msgid "Permission role" +msgstr "Роль разрешения" -#: ../../mod/settings.php:754 -msgid "Mobile Theme:" -msgstr "Мобильная тема отображения:" +#: ../../Zotlabs/Module/Connedit.php:853 ../../Zotlabs/Module/Defperms.php:241 +msgid "Add permission role" +msgstr "Добавить роль разрешения" -#: ../../mod/settings.php:755 -msgid "Update browser every xx seconds" -msgstr "Обновление браузера каждые ХХ секунд" +#: ../../Zotlabs/Module/Connedit.php:860 +msgid "This connection's primary address is" +msgstr "Главный адрес это контакта" -#: ../../mod/settings.php:755 -msgid "Minimum of 10 seconds, no maximum" -msgstr "Минимум 10 секунд, без максимума" +#: ../../Zotlabs/Module/Connedit.php:861 +msgid "Available locations:" +msgstr "Доступные расположения:" -#: ../../mod/settings.php:756 -msgid "Maximum number of conversations to load at any time:" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:866 ../../Zotlabs/Module/Defperms.php:245 +msgid "" +"The permissions indicated on this page will be applied to all new " +"connections." +msgstr "Разрешения, указанные на этой странице, будут применяться ко всем новым соединениям." -#: ../../mod/settings.php:756 -msgid "Maximum of 100 items" -msgstr "Максимум 100 элементов" +#: ../../Zotlabs/Module/Connedit.php:867 +msgid "Connection Tools" +msgstr "Инструменты контактов" -#: ../../mod/settings.php:757 -msgid "Don't show emoticons" -msgstr "Не показывать emoticons" +#: ../../Zotlabs/Module/Connedit.php:869 +msgid "Slide to adjust your degree of friendship" +msgstr "Прокрутить для настройки степени дружбы" -#: ../../mod/settings.php:758 -msgid "System Page Layout Editor - (advanced)" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:871 +msgid "Slide to adjust your rating" +msgstr "Прокрутить для настройки оценки" -#: ../../mod/settings.php:793 -msgid "Nobody except yourself" -msgstr "Никто, кроме вас" +#: ../../Zotlabs/Module/Connedit.php:872 ../../Zotlabs/Module/Connedit.php:877 +msgid "Optionally explain your rating" +msgstr "Объясните свою оценку (не обязательно)" -#: ../../mod/settings.php:794 -msgid "Only those you specifically allow" -msgstr "Только комы вы разрешили" +#: ../../Zotlabs/Module/Connedit.php:874 +msgid "Custom Filter" +msgstr "Настраиваемый фильтр" -#: ../../mod/settings.php:795 -msgid "Approved connections" -msgstr "Утвержденные контакты" +#: ../../Zotlabs/Module/Connedit.php:875 +msgid "Only import posts with this text" +msgstr "Импортировать публикации только с этим текстом" -#: ../../mod/settings.php:796 -msgid "Any connections" -msgstr "Все контакты" +#: ../../Zotlabs/Module/Connedit.php:875 ../../Zotlabs/Module/Connedit.php:876 +#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:348 +msgid "" +"words one per line or #tags or /patterns/ or lang=xx, leave blank to import " +"all posts" +msgstr "слова по одному в строку, #тег, /шаблон/ или lang=xxl; оставьте пустым для импорта всех публикаций" -#: ../../mod/settings.php:797 -msgid "Anybody on this website" -msgstr "Любой на этом веб-сайте" +#: ../../Zotlabs/Module/Connedit.php:876 +msgid "Do not import posts with this text" +msgstr "Не импортировать публикации с этим текстом" -#: ../../mod/settings.php:798 -msgid "Anybody in this network" -msgstr "Любой в этой сети" +#: ../../Zotlabs/Module/Connedit.php:878 +msgid "This information is public!" +msgstr "Эта информация общедоступна!" -#: ../../mod/settings.php:799 -msgid "Anybody authenticated" -msgstr "" +#: ../../Zotlabs/Module/Connedit.php:883 +msgid "Connection Pending Approval" +msgstr "Ожидающие подтверждения контактов" -#: ../../mod/settings.php:800 -msgid "Anybody on the internet" -msgstr "Любой в интернете" +#: ../../Zotlabs/Module/Connedit.php:886 ../../Zotlabs/Module/Defperms.php:248 +#: ../../Zotlabs/Module/Settings/Permcats.php:110 +#: ../../Zotlabs/Module/Settings/Tokens.php:163 +msgid "inherited" +msgstr "наследуется" -#: ../../mod/settings.php:877 -msgid "Publish your default profile in the network directory" -msgstr "Публикация вашего профиля по умолчанию в каталоге сети" +#: ../../Zotlabs/Module/Connedit.php:888 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." +msgstr "Пожалуйста, выберите профиль который вы хотит показывать в %s при безопасном просмотре." -#: ../../mod/settings.php:877 ../../mod/settings.php:882 -#: ../../mod/settings.php:953 ../../mod/api.php:106 ../../mod/profiles.php:493 -#: ../../mod/admin.php:420 -msgid "No" -msgstr "Нет" +#: ../../Zotlabs/Module/Connedit.php:890 +#: ../../Zotlabs/Module/Settings/Tokens.php:160 +msgid "Their Settings" +msgstr "Их настройки" -#: ../../mod/settings.php:877 ../../mod/settings.php:882 -#: ../../mod/settings.php:953 ../../mod/api.php:105 ../../mod/profiles.php:492 -#: ../../mod/admin.php:422 -msgid "Yes" -msgstr "Да" +#: ../../Zotlabs/Module/Connedit.php:891 ../../Zotlabs/Module/Defperms.php:250 +#: ../../Zotlabs/Module/Settings/Permcats.php:108 +#: ../../Zotlabs/Module/Settings/Tokens.php:161 +msgid "My Settings" +msgstr "Мои настройки" -#: ../../mod/settings.php:882 -msgid "Allow us to suggest you as a potential friend to new members?" +#: ../../Zotlabs/Module/Connedit.php:893 ../../Zotlabs/Module/Defperms.php:253 +#: ../../Zotlabs/Module/Settings/Permcats.php:113 +#: ../../Zotlabs/Module/Settings/Tokens.php:166 +msgid "Individual Permissions" +msgstr "Индивидуальные разрешения" + +#: ../../Zotlabs/Module/Connedit.php:894 +#: ../../Zotlabs/Module/Settings/Permcats.php:114 +#: ../../Zotlabs/Module/Settings/Tokens.php:167 +msgid "" +"Some permissions may be inherited from your channel's privacy settings, which have higher priority than " +"individual settings. You can not change those settings here." msgstr "" +"Некоторые разрешения могут наследовать из " +"настроек приватности ваших каналов которые могут иметь более высокий приоритет " +"чем индивидуальные. Вы не можете менять эти настройки здесь." -#: ../../mod/settings.php:886 ../../mod/profile_photo.php:365 -msgid "or" -msgstr "или" +#: ../../Zotlabs/Module/Connedit.php:895 +msgid "" +"Some permissions may be inherited from your channel's privacy settings, which have higher priority than " +"individual settings. You can change those settings here but they wont have " +"any impact unless the inherited setting changes." +msgstr "" +"Некоторые разрешения могут быть унаследованы из " +"настроек приватности вашего канала, которые могут иметь более высокий приоритет " +"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения " +"переданных по наследству настроек." -#: ../../mod/settings.php:891 -msgid "Your channel address is" -msgstr "Адрес канала:" +#: ../../Zotlabs/Module/Connedit.php:896 +msgid "Last update:" +msgstr "Последнее обновление:" -#: ../../mod/settings.php:925 -msgid "Channel Settings" -msgstr "Настройки канала" +#: ../../Zotlabs/Module/Connedit.php:904 +msgid "Details" +msgstr "Сведения" -#: ../../mod/settings.php:934 -msgid "Basic Settings" -msgstr "Основные настройки" +#: ../../Zotlabs/Module/Webpages.php:54 +msgid "Import Webpage Elements" +msgstr "Импортировать части веб-страницы" -#: ../../mod/settings.php:937 -msgid "Your Timezone:" -msgstr "Часовой пояс:" +#: ../../Zotlabs/Module/Webpages.php:55 +msgid "Import selected" +msgstr "Импортировать выбранное" -#: ../../mod/settings.php:938 -msgid "Default Post Location:" -msgstr "Откуда по умолчанию:" +#: ../../Zotlabs/Module/Webpages.php:78 +msgid "Export Webpage Elements" +msgstr "Экспортировать часть веб-страницы" -#: ../../mod/settings.php:938 -msgid "Geographical location to display on your posts" -msgstr "" +#: ../../Zotlabs/Module/Webpages.php:79 +msgid "Export selected" +msgstr "Экспортировать выбранное" -#: ../../mod/settings.php:939 -msgid "Use Browser Location:" -msgstr "Использовать указание браузерa:" +#: ../../Zotlabs/Module/Webpages.php:248 +msgid "Actions" +msgstr "Действия" -#: ../../mod/settings.php:941 -msgid "Adult Content" -msgstr "Содержимое для взрослых" +#: ../../Zotlabs/Module/Webpages.php:249 +msgid "Page Link" +msgstr "Ссылка страницы" -#: ../../mod/settings.php:941 -msgid "" -"This channel frequently or regularly publishes adult content. (Please tag " -"any adult material and/or nudity with #NSFW)" -msgstr "" +#: ../../Zotlabs/Module/Webpages.php:250 +msgid "Page Title" +msgstr "Заголовок страницы" -#: ../../mod/settings.php:943 -msgid "Security and Privacy Settings" -msgstr "Параметры безопасности и конфиденциальности" +#: ../../Zotlabs/Module/Webpages.php:280 +msgid "Invalid file type." +msgstr "Неверный тип файла." -#: ../../mod/settings.php:945 -msgid "Hide my online presence" -msgstr "Скрыть мое присутствие" +#: ../../Zotlabs/Module/Webpages.php:292 +msgid "Error opening zip file" +msgstr "Ошибка открытия ZIP файла" -#: ../../mod/settings.php:945 -msgid "Prevents displaying in your profile that you are online" -msgstr "Предотвращает показ в вашем профиле, что вы онлайн" +#: ../../Zotlabs/Module/Webpages.php:303 +msgid "Invalid folder path." +msgstr "Неверный путь к каталогу." -#: ../../mod/settings.php:947 -msgid "Simple Privacy Settings:" -msgstr "Быстрые настройки:" +#: ../../Zotlabs/Module/Webpages.php:330 +msgid "No webpage elements detected." +msgstr "Не обнаружено частей веб-страницы." -#: ../../mod/settings.php:948 -msgid "" -"Very Public - extremely permissive (should be used with caution)" -msgstr "" +#: ../../Zotlabs/Module/Webpages.php:405 +msgid "Import complete." +msgstr "Импорт завершен." -#: ../../mod/settings.php:949 -msgid "" -"Typical - default public, privacy when desired (similar to social " -"network permissions but with improved privacy)" -msgstr "" +#: ../../Zotlabs/Module/Editwebpage.php:139 +msgid "Page link" +msgstr "Ссылка страницы" -#: ../../mod/settings.php:950 -msgid "Private - default private, never open or public" -msgstr "" +#: ../../Zotlabs/Module/Editwebpage.php:166 +msgid "Edit Webpage" +msgstr "Редактировать веб-страницу" -#: ../../mod/settings.php:951 -msgid "Blocked - default blocked to/from everybody" -msgstr "" +#: ../../Zotlabs/Module/Editlayout.php:137 +msgid "Edit Layout" +msgstr "Редактировать шаблон" -#: ../../mod/settings.php:953 -msgid "Allow others to tag your posts" -msgstr "Разрешить другим помечать сообщения" +#: ../../Zotlabs/Module/Dirsearch.php:33 +msgid "This directory server requires an access token" +msgstr "Для доступа к этому серверу каталогов требуется токен" -#: ../../mod/settings.php:953 -msgid "" -"Often used by the community to retro-actively flag inappropriate content" -msgstr "" +#: ../../Zotlabs/Module/Moderate.php:65 +msgid "Comment approved" +msgstr "Комментарий одобрен" -#: ../../mod/settings.php:955 -msgid "Advanced Privacy Settings" -msgstr "Дополнительные настройки" +#: ../../Zotlabs/Module/Moderate.php:69 +msgid "Comment deleted" +msgstr "Комментарий удалён" -#: ../../mod/settings.php:957 -msgid "Expire other channel content after this many days" -msgstr "" +#: ../../Zotlabs/Module/Articles.php:95 +msgid "Add Article" +msgstr "Добавить статью" -#: ../../mod/settings.php:957 -msgid "0 or blank prevents expiration" -msgstr "" +#: ../../Zotlabs/Module/Bookmarks.php:56 +msgid "Bookmark added" +msgstr "Закладка добавлена" -#: ../../mod/settings.php:958 -msgid "Maximum Friend Requests/Day:" -msgstr "" +#: ../../Zotlabs/Module/Bookmarks.php:79 +msgid "My Bookmarks" +msgstr "Мои закладки" -#: ../../mod/settings.php:958 -msgid "May reduce spam activity" -msgstr "Может уменьшить активность спам" +#: ../../Zotlabs/Module/Bookmarks.php:90 +msgid "My Connections Bookmarks" +msgstr "Закладки моих контактов" -#: ../../mod/settings.php:959 -msgid "Default Post Permissions" -msgstr "Настройки по умолчанию" +#: ../../Zotlabs/Module/Sharedwithme.php:104 +msgid "Files: shared with me" +msgstr "Файлы: поделились со мной" -#: ../../mod/settings.php:971 -msgid "Maximum private messages per day from unknown people:" -msgstr "Максимальное количество личных сообщений от незнакомых людей:" +#: ../../Zotlabs/Module/Sharedwithme.php:106 +msgid "NEW" +msgstr "НОВОЕ" -#: ../../mod/settings.php:971 -msgid "Useful to reduce spamming" -msgstr "Полезно для уменьшения активности спам" +#: ../../Zotlabs/Module/Sharedwithme.php:108 +#: ../../Zotlabs/Storage/Browser.php:288 +msgid "Last Modified" +msgstr "Последнее изменение" -#: ../../mod/settings.php:974 -msgid "Notification Settings" -msgstr "Настройки уведомлений" +#: ../../Zotlabs/Module/Sharedwithme.php:109 +msgid "Remove all files" +msgstr "Удалить все файлы" -#: ../../mod/settings.php:975 -msgid "By default post a status message when:" -msgstr "" +#: ../../Zotlabs/Module/Sharedwithme.php:110 +msgid "Remove this file" +msgstr "Удалить этот файл" -#: ../../mod/settings.php:976 -msgid "accepting a friend request" -msgstr "" +#: ../../Zotlabs/Module/Rbmark.php:94 +msgid "Select a bookmark folder" +msgstr "Выбрать каталог для закладок" -#: ../../mod/settings.php:977 -msgid "joining a forum/community" -msgstr "" +#: ../../Zotlabs/Module/Rbmark.php:99 +msgid "Save Bookmark" +msgstr "Сохранить закладку" -#: ../../mod/settings.php:978 -msgid "making an interesting profile change" -msgstr "" +#: ../../Zotlabs/Module/Rbmark.php:100 +msgid "URL of bookmark" +msgstr "URL закладки" -#: ../../mod/settings.php:979 -msgid "Send a notification email when:" -msgstr "Отправить уведомление по электронной почте, если:" +#: ../../Zotlabs/Module/Rbmark.php:105 +msgid "Or enter new bookmark folder name" +msgstr "или введите новое имя каталога закладок" -#: ../../mod/settings.php:980 -msgid "You receive a connection request" -msgstr "" +#: ../../Zotlabs/Module/Cal.php:69 +msgid "Permissions denied." +msgstr "Доступ запрещен." -#: ../../mod/settings.php:981 -msgid "Your connections are confirmed" -msgstr "" +#: ../../Zotlabs/Module/Authorize.php:17 +msgid "Unknown App" +msgstr "Неизвестное приложение" -#: ../../mod/settings.php:982 -msgid "Someone writes on your profile wall" -msgstr "" +#: ../../Zotlabs/Module/Authorize.php:22 +msgid "Authorize" +msgstr "Авторизовать" -#: ../../mod/settings.php:983 -msgid "Someone writes a followup comment" -msgstr "" +#: ../../Zotlabs/Module/Authorize.php:23 +#, php-format +msgid "Do you authorize the app %s to access your channel data?" +msgstr "Авторизуете ли вы приложение %s для доступа к данным вашего канала?" -#: ../../mod/settings.php:984 -msgid "You receive a private message" -msgstr "Вы получили личное сообщение" +#: ../../Zotlabs/Module/Authorize.php:25 +msgid "Allow" +msgstr "Разрешить" -#: ../../mod/settings.php:985 -msgid "You receive a friend suggestion" -msgstr "Вы получили предложение дружить" +#: ../../Zotlabs/Module/Authorize.php:26 +#: ../../Zotlabs/Module/Admin/Accounts.php:174 +msgid "Deny" +msgstr "Запретить" -#: ../../mod/settings.php:986 -msgid "You are tagged in a post" -msgstr "" +#: ../../Zotlabs/Module/Search.php:230 +#, php-format +msgid "Items tagged with: %s" +msgstr "Объекты помечены как: %s" -#: ../../mod/settings.php:987 -msgid "You are poked/prodded/etc. in a post" -msgstr "" +#: ../../Zotlabs/Module/Search.php:232 +#, php-format +msgid "Search results for: %s" +msgstr "Результаты поиска для: %s" -#: ../../mod/settings.php:990 -msgid "Advanced Account/Page Type Settings" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:170 +msgid "$Projectname Server - Setup" +msgstr "$Projectname сервер - Установка" -#: ../../mod/settings.php:991 -msgid "Change the behaviour of this account for special situations" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:174 +msgid "Could not connect to database." +msgstr "Не удалось подключиться к серверу баз данных." -#: ../../mod/settings.php:994 +#: ../../Zotlabs/Module/Setup.php:178 msgid "" -"Please enable expert mode (in Settings > " -"Additional features) to adjust!" -msgstr "" - -#: ../../mod/settings.php:995 -msgid "Miscellaneous Settings" -msgstr "Дополнительные настройки" +"Could not connect to specified site URL. Possible SSL certificate or DNS " +"issue." +msgstr "Не удалось подключиться к указанному URL. Вероятно проблема с SSL сертификатом или DNS." -#: ../../mod/settings.php:997 -msgid "Personal menu to display in your channel pages" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:185 +msgid "Could not create table." +msgstr "Не удалось создать таблицу." -#: ../../mod/poke.php:159 -msgid "Poke/Prod" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:191 +msgid "Your site database has been installed." +msgstr "Ваша база данных установлена." -#: ../../mod/poke.php:160 -msgid "poke, prod or do other things to somebody" +#: ../../Zotlabs/Module/Setup.php:197 +msgid "" +"You may need to import the file \"install/schema_xxx.sql\" manually using a " +"database client." msgstr "" +"Вам может понадобится импортировать файл \"install/schema_xxx.sql\" " +"вручную используя клиент базы данных." -#: ../../mod/poke.php:161 -msgid "Recipient" -msgstr "Получатель" - -#: ../../mod/poke.php:162 -msgid "Choose what you wish to do to recipient" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:198 ../../Zotlabs/Module/Setup.php:262 +#: ../../Zotlabs/Module/Setup.php:749 +msgid "Please see the file \"install/INSTALL.txt\"." +msgstr "Пожалуйста, обратитесь к файлу \"install/INSTALL.txt\"." -#: ../../mod/poke.php:165 -msgid "Make this post private" -msgstr "Сделать это сообщение личным" +#: ../../Zotlabs/Module/Setup.php:259 +msgid "System check" +msgstr "Проверка системы" -#: ../../mod/api.php:76 ../../mod/api.php:102 -msgid "Authorize application connection" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:264 +msgid "Check again" +msgstr "Перепроверить" -#: ../../mod/api.php:77 -msgid "Return to your app and insert this Securty Code:" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:286 +msgid "Database connection" +msgstr "Подключение к базе данных" -#: ../../mod/api.php:89 -msgid "Please login to continue." -msgstr "Пожалуйста, войдите, чтобы продолжить." +#: ../../Zotlabs/Module/Setup.php:287 +msgid "" +"In order to install $Projectname we need to know how to connect to your " +"database." +msgstr "Для установки $Projectname необходимо знать как подключиться к ваше базе данных." -#: ../../mod/api.php:104 +#: ../../Zotlabs/Module/Setup.php:288 msgid "" -"Do you want to authorize this application to access your posts and contacts," -" and/or create new posts for you?" -msgstr "" +"Please contact your hosting provider or site administrator if you have " +"questions about these settings." +msgstr "Пожалуйста, свяжитесь с вашим хостинг провайдером или администрацией сайта если у вас есть вопросы об этих настройках." -#: ../../mod/post.php:226 +#: ../../Zotlabs/Module/Setup.php:289 msgid "" -"Remote authentication blocked. You are logged into this site locally. Please" -" logout and retry." -msgstr "" +"The database you specify below should already exist. If it does not, please " +"create it before continuing." +msgstr "Указанная ниже база данных должна существовать. Если это не так, пожалуйста, создайте её перед тем, как продолжить." -#: ../../mod/post.php:257 ../../mod/openid.php:72 ../../mod/openid.php:178 -#, php-format -msgid "Welcome %s. Remote authentication successful." -msgstr "Добро пожаловать %s. Удаленная аутентификация успешно завершена." +#: ../../Zotlabs/Module/Setup.php:293 +msgid "Database Server Name" +msgstr "Имя сервера баз данных" -#: ../../mod/attach.php:9 -msgid "Item not available." -msgstr "Элемент недоступен." +#: ../../Zotlabs/Module/Setup.php:293 +msgid "Default is 127.0.0.1" +msgstr "По умолчанию 127.0.0.1" -#: ../../mod/probe.php:23 ../../mod/probe.php:29 -#, php-format -msgid "Fetching URL returns error: %1$s" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:294 +msgid "Database Port" +msgstr "Порт сервера баз данных" -#: ../../mod/block.php:27 ../../mod/page.php:35 -msgid "Invalid item." -msgstr "Недействительный элемент." +#: ../../Zotlabs/Module/Setup.php:294 +msgid "Communication port number - use 0 for default" +msgstr "Порт коммуникации - используйте 0 по умолчанию" -#: ../../mod/block.php:39 ../../mod/chanview.php:77 ../../mod/page.php:47 -#: ../../mod/home.php:54 ../../mod/wall_upload.php:28 -msgid "Channel not found." -msgstr "Канал не найден." +#: ../../Zotlabs/Module/Setup.php:295 +msgid "Database Login Name" +msgstr "Имя для подключения к базе данных" -#: ../../mod/block.php:75 ../../mod/page.php:83 ../../mod/display.php:100 -#: ../../mod/help.php:72 ../../index.php:236 -msgid "Page not found." -msgstr "Страница не найдена." +#: ../../Zotlabs/Module/Setup.php:296 +msgid "Database Login Password" +msgstr "Пароль для подключения к базе данных" -#: ../../mod/profile_photo.php:108 -msgid "Image uploaded but image cropping failed." -msgstr "" +#: ../../Zotlabs/Module/Setup.php:297 +msgid "Database Name" +msgstr "Имя базы данных" -#: ../../mod/profile_photo.php:161 -msgid "Image resize failed." -msgstr "Изменение размера изображения не удалось." +#: ../../Zotlabs/Module/Setup.php:298 +msgid "Database Type" +msgstr "Тип базы данных" + +#: ../../Zotlabs/Module/Setup.php:300 ../../Zotlabs/Module/Setup.php:341 +msgid "Site administrator email address" +msgstr "Адрес электронной почты администратора сайта" -#: ../../mod/profile_photo.php:205 +#: ../../Zotlabs/Module/Setup.php:300 ../../Zotlabs/Module/Setup.php:341 msgid "" -"Shift-reload the page or clear browser cache if the new photo does not " -"display immediately." -msgstr "" +"Your account email address must match this in order to use the web admin " +"panel." +msgstr "Ваш адрес электронной почты должен соответствовать этому для использования веб-панели администратора." -#: ../../mod/profile_photo.php:232 -#, php-format -msgid "Image exceeds size limit of %d" -msgstr "" +#: ../../Zotlabs/Module/Setup.php:301 ../../Zotlabs/Module/Setup.php:343 +msgid "Website URL" +msgstr "URL веб-сайта" -#: ../../mod/profile_photo.php:241 -msgid "Unable to process image." -msgstr "Невозможно обработать изображение." +#: ../../Zotlabs/Module/Setup.php:301 ../../Zotlabs/Module/Setup.php:343 +msgid "Please use SSL (https) URL if available." +msgstr "Пожалуйста, используйте SSL (https) URL если возможно." -#: ../../mod/profile_photo.php:290 ../../mod/profile_photo.php:339 -msgid "Photo not available." -msgstr "Фотография не доступна." +#: ../../Zotlabs/Module/Setup.php:302 ../../Zotlabs/Module/Setup.php:345 +msgid "Please select a default timezone for your website" +msgstr "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта" -#: ../../mod/profile_photo.php:358 -msgid "Upload File:" -msgstr "Загрузить файл:" +#: ../../Zotlabs/Module/Setup.php:330 +msgid "Site settings" +msgstr "Настройки сайта" -#: ../../mod/profile_photo.php:359 -msgid "Select a profile:" -msgstr "Выберите профиль:" +#: ../../Zotlabs/Module/Setup.php:384 +msgid "PHP version 5.5 or greater is required." +msgstr "Требуется PHP версии 5.5 или выше" + +#: ../../Zotlabs/Module/Setup.php:385 +msgid "PHP version" +msgstr "Версия PHP" + +#: ../../Zotlabs/Module/Setup.php:401 +msgid "Could not find a command line version of PHP in the web server PATH." +msgstr "Не удалось найти консольную версию PHP в путях переменной PATH веб-сервера." + +#: ../../Zotlabs/Module/Setup.php:402 +msgid "" +"If you don't have a command line version of PHP installed on server, you " +"will not be able to run background polling via cron." +msgstr "Если у вас на сервере не установлена консольная версия PHP вы не сможете запустить фоновый опрос через cron. " + +#: ../../Zotlabs/Module/Setup.php:406 +msgid "PHP executable path" +msgstr "Пусть к исполняемому модулю PHP" + +#: ../../Zotlabs/Module/Setup.php:406 +msgid "" +"Enter full path to php executable. You can leave this blank to continue the " +"installation." +msgstr "Введите полный путь к исполняемому модулю PHP. Вы можете оставить его пустым для продолжения установки." -#: ../../mod/profile_photo.php:360 -msgid "Upload Profile Photo" -msgstr "Загрузить фотографию профиля" +#: ../../Zotlabs/Module/Setup.php:411 +msgid "Command line PHP" +msgstr "Командная строка PHP" -#: ../../mod/profile_photo.php:365 -msgid "skip this step" -msgstr "пропустить этот шаг" +#: ../../Zotlabs/Module/Setup.php:421 +msgid "" +"Unable to check command line PHP, as shell_exec() is disabled. This is " +"required." +msgstr "Невозможно проверить командную строку PHP поскольку требуемая функция shell_exec() отключена." -#: ../../mod/profile_photo.php:365 -msgid "select a photo from your photo albums" +#: ../../Zotlabs/Module/Setup.php:424 +msgid "" +"The command line version of PHP on your system does not have " +"\"register_argc_argv\" enabled." msgstr "" +"В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". " -#: ../../mod/profile_photo.php:379 -msgid "Crop Image" -msgstr "Обрезать изображение" +#: ../../Zotlabs/Module/Setup.php:425 +msgid "This is required for message delivery to work." +msgstr "Это необходимо для функционирования доставки сообщений." -#: ../../mod/profile_photo.php:380 -msgid "Please adjust the image cropping for optimum viewing." +#: ../../Zotlabs/Module/Setup.php:428 +msgid "PHP register_argc_argv" msgstr "" -#: ../../mod/profile_photo.php:382 -msgid "Done Editing" -msgstr "Закончить редактирование" +#: ../../Zotlabs/Module/Setup.php:446 +#, php-format +msgid "" +"Your max allowed total upload size is set to %s. Maximum size of one file to " +"upload is set to %s. You are allowed to upload up to %d files at once." +msgstr "Максимально разрешённый общий размер загрузок установлен в %s. Максимальный размер одной загрузки установлен в %s. Вам разрешено загружать до %d файлов за один приём." -#: ../../mod/profile_photo.php:425 -msgid "Image uploaded successfully." -msgstr "Загрузка изображениея прошла успешно." +#: ../../Zotlabs/Module/Setup.php:451 +msgid "You can adjust these settings in the server php.ini file." +msgstr "Вы можете изменить эти настройки в файле php.ini на сервере." -#: ../../mod/profile_photo.php:427 -msgid "Image upload failed." -msgstr "Загрузка изображениея прошла безуспешно." +#: ../../Zotlabs/Module/Setup.php:453 +msgid "PHP upload limits" +msgstr "Максимальный размер загрузки в PHP" -#: ../../mod/profile_photo.php:436 -#, php-format -msgid "Image size reduction [%s] failed." +#: ../../Zotlabs/Module/Setup.php:476 +msgid "" +"Error: the \"openssl_pkey_new\" function on this system is not able to " +"generate encryption keys" msgstr "" +"Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования" -#: ../../mod/blocks.php:66 -msgid "Block Name" -msgstr "Название блока" +#: ../../Zotlabs/Module/Setup.php:477 +msgid "" +"If running under Windows, please see \"http://www.php.net/manual/en/openssl." +"installation.php\"." +msgstr "" +"Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." -#: ../../mod/profiles.php:18 ../../mod/profiles.php:138 -#: ../../mod/profiles.php:168 ../../mod/profiles.php:472 -msgid "Profile not found." -msgstr "Профиль не найден." +#: ../../Zotlabs/Module/Setup.php:480 +msgid "Generate encryption keys" +msgstr "Генерация ключей шифрования" -#: ../../mod/profiles.php:38 -msgid "Profile deleted." -msgstr "Профиль удален." +#: ../../Zotlabs/Module/Setup.php:497 +msgid "libCurl PHP module" +msgstr "" -#: ../../mod/profiles.php:56 ../../mod/profiles.php:92 -msgid "Profile-" -msgstr "Профиль-" +#: ../../Zotlabs/Module/Setup.php:498 +msgid "GD graphics PHP module" +msgstr "" -#: ../../mod/profiles.php:77 ../../mod/profiles.php:120 -msgid "New profile created." -msgstr "Новый профиль создан." +#: ../../Zotlabs/Module/Setup.php:499 +msgid "OpenSSL PHP module" +msgstr "" -#: ../../mod/profiles.php:98 -msgid "Profile unavailable to clone." -msgstr "Профиль недоступен для клонирования." +#: ../../Zotlabs/Module/Setup.php:500 +msgid "PDO database PHP module" +msgstr "" -#: ../../mod/profiles.php:178 -msgid "Profile Name is required." -msgstr "Имя профиля требуется." +#: ../../Zotlabs/Module/Setup.php:501 +msgid "mb_string PHP module" +msgstr "" -#: ../../mod/profiles.php:294 -msgid "Marital Status" -msgstr "Семейное положение" +#: ../../Zotlabs/Module/Setup.php:502 +msgid "xml PHP module" +msgstr "" -#: ../../mod/profiles.php:298 -msgid "Romantic Partner" -msgstr "Романтический партнер" +#: ../../Zotlabs/Module/Setup.php:503 +msgid "zip PHP module" +msgstr "" -#: ../../mod/profiles.php:302 -msgid "Likes" -msgstr "нравится" +#: ../../Zotlabs/Module/Setup.php:507 ../../Zotlabs/Module/Setup.php:509 +msgid "Apache mod_rewrite module" +msgstr "" -#: ../../mod/profiles.php:306 -msgid "Dislikes" -msgstr "не-нравится" +#: ../../Zotlabs/Module/Setup.php:507 +msgid "" +"Error: Apache webserver mod-rewrite module is required but not installed." +msgstr "Ошибка: требуемый модуль mod_rewrite веб-сервера Apache не установлен." -#: ../../mod/profiles.php:310 -msgid "Work/Employment" -msgstr "Работа / Занятость" +#: ../../Zotlabs/Module/Setup.php:513 ../../Zotlabs/Module/Setup.php:516 +msgid "exec" +msgstr "" -#: ../../mod/profiles.php:313 -msgid "Religion" -msgstr "Религия" +#: ../../Zotlabs/Module/Setup.php:513 +msgid "" +"Error: exec is required but is either not installed or has been disabled in " +"php.ini" +msgstr "" -#: ../../mod/profiles.php:317 -msgid "Political Views" -msgstr "Политические взгляды" +#: ../../Zotlabs/Module/Setup.php:519 ../../Zotlabs/Module/Setup.php:522 +msgid "shell_exec" +msgstr "" -#: ../../mod/profiles.php:321 -msgid "Gender" -msgstr "Пол" +#: ../../Zotlabs/Module/Setup.php:519 +msgid "" +"Error: shell_exec is required but is either not installed or has been " +"disabled in php.ini" +msgstr "" -#: ../../mod/profiles.php:325 -msgid "Sexual Preference" -msgstr "Сексуальная ориентация" +#: ../../Zotlabs/Module/Setup.php:527 +msgid "Error: libCURL PHP module required but not installed." +msgstr "" -#: ../../mod/profiles.php:329 -msgid "Homepage" -msgstr "Домашняя страница" +#: ../../Zotlabs/Module/Setup.php:531 +msgid "" +"Error: GD graphics PHP module with JPEG support required but not installed." +msgstr "" -#: ../../mod/profiles.php:333 -msgid "Interests" -msgstr "Интересы" +#: ../../Zotlabs/Module/Setup.php:535 +msgid "Error: openssl PHP module required but not installed." +msgstr "" -#: ../../mod/profiles.php:337 ../../mod/admin.php:893 -msgid "Address" -msgstr "Адрес" +#: ../../Zotlabs/Module/Setup.php:539 +msgid "Error: PDO database PHP module required but not installed." +msgstr "" -#: ../../mod/profiles.php:344 ../../mod/pubsites.php:25 -msgid "Location" -msgstr "Место" +#: ../../Zotlabs/Module/Setup.php:543 +msgid "Error: mb_string PHP module required but not installed." +msgstr "" -#: ../../mod/profiles.php:427 -msgid "Profile updated." -msgstr "Профиль обновлен." +#: ../../Zotlabs/Module/Setup.php:547 +msgid "Error: xml PHP module required for DAV but not installed." +msgstr "" -#: ../../mod/profiles.php:491 -msgid "Hide your contact/friend list from viewers of this profile?" -msgstr "Скрывать от просмотра ваш список контактов/друзей в этом профиле?" +#: ../../Zotlabs/Module/Setup.php:551 +msgid "Error: zip PHP module required but not installed." +msgstr "" -#: ../../mod/profiles.php:514 -msgid "Edit Profile Details" -msgstr "Редактирование профиля" +#: ../../Zotlabs/Module/Setup.php:570 ../../Zotlabs/Module/Setup.php:579 +msgid ".htconfig.php is writable" +msgstr "" -#: ../../mod/profiles.php:516 -msgid "View this profile" -msgstr "Посмотреть этот профиль" +#: ../../Zotlabs/Module/Setup.php:575 +msgid "" +"The web installer needs to be able to create a file called \".htconfig.php\" " +"in the top folder of your web server and it is unable to do so." +msgstr "" -#: ../../mod/profiles.php:517 -msgid "Change Profile Photo" -msgstr "Изменить фотографию профиля" +#: ../../Zotlabs/Module/Setup.php:576 +msgid "" +"This is most often a permission setting, as the web server may not be able " +"to write files in your folder - even if you can." +msgstr "" -#: ../../mod/profiles.php:518 -msgid "Create a new profile using these settings" -msgstr "Создайте новый профиль со следующими настройками" +#: ../../Zotlabs/Module/Setup.php:577 +msgid "Please see install/INSTALL.txt for additional information." +msgstr "" -#: ../../mod/profiles.php:519 -msgid "Clone this profile" -msgstr "Клонировать этот профиль" +#: ../../Zotlabs/Module/Setup.php:593 +msgid "" +"This software uses the Smarty3 template engine to render its web views. " +"Smarty3 compiles templates to PHP to speed up rendering." +msgstr "" -#: ../../mod/profiles.php:520 -msgid "Delete this profile" -msgstr "Удалить этот профиль" +#: ../../Zotlabs/Module/Setup.php:594 +#, php-format +msgid "" +"In order to store these compiled templates, the web server needs to have " +"write access to the directory %s under the top level web folder." +msgstr "" -#: ../../mod/profiles.php:521 -msgid "Profile Name:" -msgstr "Имя профиля:" +#: ../../Zotlabs/Module/Setup.php:595 ../../Zotlabs/Module/Setup.php:616 +msgid "" +"Please ensure that the user that your web server runs as (e.g. www-data) has " +"write access to this folder." +msgstr "" -#: ../../mod/profiles.php:522 -msgid "Your Full Name:" -msgstr "Ваше полное имя:" +#: ../../Zotlabs/Module/Setup.php:596 +#, php-format +msgid "" +"Note: as a security measure, you should give the web server write access to " +"%s only--not the template files (.tpl) that it contains." +msgstr "" -#: ../../mod/profiles.php:523 -msgid "Title/Description:" -msgstr "Название / Описание:" +#: ../../Zotlabs/Module/Setup.php:599 +#, php-format +msgid "%s is writable" +msgstr "%s доступен для записи" -#: ../../mod/profiles.php:524 -msgid "Your Gender:" -msgstr "Ваш пол:" +#: ../../Zotlabs/Module/Setup.php:615 +msgid "" +"This software uses the store directory to save uploaded files. The web " +"server needs to have write access to the store directory under the top level " +"web folder" +msgstr "Эта программа использует каталог хранения для загруженных файлов. Для веб-сервера требуется доступ на запись начиная с верхнего уровня каталога хранения." -#: ../../mod/profiles.php:525 -#, php-format -msgid "Birthday (%s):" -msgstr "Ваш День Рождения (%s):" +#: ../../Zotlabs/Module/Setup.php:619 +msgid "store is writable" +msgstr "хранилище доступно для записи" -#: ../../mod/profiles.php:526 -msgid "Street Address:" -msgstr "Улица:" +#: ../../Zotlabs/Module/Setup.php:651 +msgid "" +"SSL certificate cannot be validated. Fix certificate or disable https access " +"to this site." +msgstr "" -#: ../../mod/profiles.php:527 -msgid "Locality/City:" -msgstr "Населенный пункт / город:" +#: ../../Zotlabs/Module/Setup.php:652 +msgid "" +"If you have https access to your website or allow connections to TCP port " +"443 (the https: port), you MUST use a browser-valid certificate. You MUST " +"NOT use self-signed certificates!" +msgstr "" -#: ../../mod/profiles.php:528 -msgid "Postal/Zip Code:" -msgstr "Почтовый индекс:" +#: ../../Zotlabs/Module/Setup.php:653 +msgid "" +"This restriction is incorporated because public posts from you may for " +"example contain references to images on your own hub." +msgstr "Эти ограничения приняты поскольку ваши общедоступные публикации могут, например, содержать ссылки на изображения на вашем собственном хабе." -#: ../../mod/profiles.php:529 -msgid "Country:" -msgstr "Страна:" +#: ../../Zotlabs/Module/Setup.php:654 +msgid "" +"If your certificate is not recognized, members of other sites (who may " +"themselves have valid certificates) will get a warning message on their own " +"site complaining about security issues." +msgstr "" -#: ../../mod/profiles.php:530 -msgid "Region/State:" -msgstr "Регион / Область:" +#: ../../Zotlabs/Module/Setup.php:655 +msgid "" +"This can cause usability issues elsewhere (not just on your own site) so we " +"must insist on this requirement." +msgstr "" -#: ../../mod/profiles.php:531 -msgid " Marital Status:" +#: ../../Zotlabs/Module/Setup.php:656 +msgid "" +"Providers are available that issue free certificates which are browser-valid." msgstr "" -#: ../../mod/profiles.php:532 -msgid "Who: (if applicable)" -msgstr "Кто: (если это применимо)" +#: ../../Zotlabs/Module/Setup.php:658 +msgid "" +"If you are confident that the certificate is valid and signed by a trusted " +"authority, check to see if you have failed to install an intermediate cert. " +"These are not normally required by browsers, but are required for server-to-" +"server communications." +msgstr "" -#: ../../mod/profiles.php:533 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" -msgstr "Примеры: cathy123, Cathy Williams, cathy@example.com" +#: ../../Zotlabs/Module/Setup.php:660 +msgid "SSL certificate validation" +msgstr "" -#: ../../mod/profiles.php:534 -msgid "Since [date]:" -msgstr "С тех пор [date]:" +#: ../../Zotlabs/Module/Setup.php:666 +msgid "" +"Url rewrite in .htaccess is not working. Check your server configuration." +"Test: " +msgstr "" -#: ../../mod/profiles.php:536 -msgid "Homepage URL:" -msgstr "URL-адрес домашней страницы:" +#: ../../Zotlabs/Module/Setup.php:669 +msgid "Url rewrite is working" +msgstr "Перезапись URL работает" -#: ../../mod/profiles.php:539 -msgid "Religious Views:" -msgstr "Религиозные взгляды:" +#: ../../Zotlabs/Module/Setup.php:683 +msgid "" +"The database configuration file \".htconfig.php\" could not be written. " +"Please use the enclosed text to create a configuration file in your web " +"server root." +msgstr "" -#: ../../mod/profiles.php:540 -msgid "Keywords:" -msgstr "Ключевые слова:" +#: ../../Zotlabs/Module/Setup.php:747 +msgid "

What next?

" +msgstr "

Что дальше?

" -#: ../../mod/profiles.php:543 -msgid "Example: fishing photography software" -msgstr "Пример: fishing photography software" +#: ../../Zotlabs/Module/Setup.php:748 +msgid "" +"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." +msgstr "Вам понадобится [вручную] настроить запланированную задачу для опрашивателя." -#: ../../mod/profiles.php:544 -msgid "Used in directory listings" -msgstr "" +#: ../../Zotlabs/Module/Lockview.php:75 +msgid "Remote privacy information not available." +msgstr "Удаленная информация о конфиденциальности недоступна." -#: ../../mod/profiles.php:545 -msgid "Tell us about yourself..." -msgstr "Расскажите нам о себе ..." +#: ../../Zotlabs/Module/Lockview.php:96 +msgid "Visible to:" +msgstr "Видимо для:" -#: ../../mod/profiles.php:546 -msgid "Hobbies/Interests" -msgstr "Хобби / интересы" +#: ../../Zotlabs/Module/Follow.php:36 +msgid "Connection added." +msgstr "Контакт добавлен." -#: ../../mod/profiles.php:547 -msgid "Contact information and Social Networks" -msgstr "Информация и социальные сети контакта" +#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:208 +msgid "Menu not found." +msgstr "Меню не найдено" -#: ../../mod/profiles.php:548 -msgid "My other channels" -msgstr "Мои другие контакты" +#: ../../Zotlabs/Module/Mitem.php:63 +msgid "Unable to create element." +msgstr "Невозможно создать элемент." -#: ../../mod/profiles.php:549 -msgid "Musical interests" -msgstr "Музыкальные интересы" +#: ../../Zotlabs/Module/Mitem.php:87 +msgid "Unable to update menu element." +msgstr "Невозможно обновить элемент меню." -#: ../../mod/profiles.php:550 -msgid "Books, literature" -msgstr "Книги, литература" +#: ../../Zotlabs/Module/Mitem.php:103 +msgid "Unable to add menu element." +msgstr "Невозможно добавить элемент меню." -#: ../../mod/profiles.php:551 -msgid "Television" -msgstr "Телевидение" +#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246 +msgid "Menu Item Permissions" +msgstr "Разрешения на пункт меню" -#: ../../mod/profiles.php:552 -msgid "Film/dance/culture/entertainment" -msgstr "Кино / танцы / культура / развлечения" +#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247 +#: ../../Zotlabs/Module/Settings/Channel.php:549 +msgid "(click to open/close)" +msgstr "(нажмите чтобы открыть/закрыть)" -#: ../../mod/profiles.php:553 -msgid "Love/romance" -msgstr "Любовь / Романс" +#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191 +msgid "Link Name" +msgstr "Имя ссылки" -#: ../../mod/profiles.php:554 -msgid "Work/employment" -msgstr "Работа / Занятость" +#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255 +msgid "Link or Submenu Target" +msgstr "Ссылка или цель подменю" -#: ../../mod/profiles.php:555 -msgid "School/education" -msgstr "Школа / образование" +#: ../../Zotlabs/Module/Mitem.php:175 +msgid "Enter URL of the link or select a menu name to create a submenu" +msgstr "Введите URL ссылки или выберите имя меню для создания подменю" -#: ../../mod/profiles.php:560 -msgid "" -"This is your public profile.
It may " -"be visible to anybody using the internet." -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256 +msgid "Use magic-auth if available" +msgstr "Использовать magic-auth если возможно" -#: ../../mod/profiles.php:570 ../../mod/directory.php:143 -#: ../../mod/dirprofile.php:92 -msgid "Age: " -msgstr "Возраст:" +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257 +msgid "Open link in new window" +msgstr "Открыть ссылку в новом окне" -#: ../../mod/profiles.php:609 -msgid "Edit/Manage Profiles" -msgstr "Редактирование / Управление профилей" +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 +msgid "Order in list" +msgstr "Порядок в списке" -#: ../../mod/profiles.php:610 -msgid "Add profile things" -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 +msgid "Higher numbers will sink to bottom of listing" +msgstr "Большие значения в конце списка" -#: ../../mod/profiles.php:611 -msgid "Include desirable objects in your profile" -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:179 +msgid "Submit and finish" +msgstr "Отправить и завершить" -#: ../../mod/bookmarks.php:38 -msgid "Bookmark added" -msgstr "Закладка добавлена" +#: ../../Zotlabs/Module/Mitem.php:180 +msgid "Submit and continue" +msgstr "Отправить и продолжить" -#: ../../mod/bookmarks.php:58 -msgid "My Bookmarks" -msgstr "Мои закладки" +#: ../../Zotlabs/Module/Mitem.php:189 +msgid "Menu:" +msgstr "Меню:" -#: ../../mod/bookmarks.php:69 -msgid "My Connections Bookmarks" -msgstr "Закладки моих контактов" +#: ../../Zotlabs/Module/Mitem.php:192 +msgid "Link Target" +msgstr "Цель ссылки" -#: ../../mod/profperm.php:29 ../../mod/profperm.php:58 -msgid "Invalid profile identifier." -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:195 +msgid "Edit menu" +msgstr "Редактировать меню" -#: ../../mod/profperm.php:110 -msgid "Profile Visibility Editor" -msgstr "Редактор видимости профиля" +#: ../../Zotlabs/Module/Mitem.php:198 +msgid "Edit element" +msgstr "Редактировать элемент" -#: ../../mod/profperm.php:114 -msgid "Click on a contact to add or remove." -msgstr "Нажмите на канал, чтобы добавить или удалить." +#: ../../Zotlabs/Module/Mitem.php:199 +msgid "Drop element" +msgstr "Удалить элемент" -#: ../../mod/profperm.php:123 -msgid "Visible To" -msgstr "Видно" +#: ../../Zotlabs/Module/Mitem.php:200 +msgid "New element" +msgstr "Новый элемент" -#: ../../mod/profperm.php:139 ../../mod/connections.php:279 -msgid "All Connections" -msgstr "Все контакты" +#: ../../Zotlabs/Module/Mitem.php:201 +msgid "Edit this menu container" +msgstr "Редактировать контейнер меню" -#: ../../mod/pubsites.php:16 -msgid "Public Sites" -msgstr "Публичные сайты" +#: ../../Zotlabs/Module/Mitem.php:202 +msgid "Add menu element" +msgstr "Добавить элемент меню" -#: ../../mod/pubsites.php:19 -msgid "" -"The listed sites allow public registration into the Hubzilla. All sites in" -" the matrix are interlinked so membership on any of them conveys membership " -"in the matrix as a whole. Some sites may require subscription or provide " -"tiered service plans. The provider links may provide " -"additional details." -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:203 +msgid "Delete this menu item" +msgstr "Удалить этот элемент меню" -#: ../../mod/pubsites.php:25 -msgid "Site URL" -msgstr "URL веб-сайта" +#: ../../Zotlabs/Module/Mitem.php:204 +msgid "Edit this menu item" +msgstr "Редактировать этот элемент меню" -#: ../../mod/pubsites.php:25 -msgid "Access Type" -msgstr "Тип доступа" +#: ../../Zotlabs/Module/Mitem.php:222 +msgid "Menu item not found." +msgstr "Элемент меню не найден." -#: ../../mod/pubsites.php:25 -msgid "Registration Policy" -msgstr "Правила регистрации" +#: ../../Zotlabs/Module/Mitem.php:235 +msgid "Menu item deleted." +msgstr "Элемент меню удалён." -#: ../../mod/channel.php:25 ../../mod/chat.php:19 -msgid "You must be logged in to see this page." -msgstr "Вы должны авторизоваться, чтобы увидеть эту страницу." +#: ../../Zotlabs/Module/Mitem.php:237 +msgid "Menu item could not be deleted." +msgstr "Невозможно удалить элемент меню." -#: ../../mod/channel.php:86 -msgid "Insufficient permissions. Request redirected to profile page." -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:244 +msgid "Edit Menu Element" +msgstr "Редактировать элемент меню" -#: ../../mod/rbmark.php:88 -msgid "Select a bookmark folder" -msgstr "" +#: ../../Zotlabs/Module/Mitem.php:254 +msgid "Link text" +msgstr "Текст ссылки" -#: ../../mod/rbmark.php:93 -msgid "Save Bookmark" -msgstr "Сохранить закладки" +#: ../../Zotlabs/Module/Admin/Addons.php:289 +#, php-format +msgid "Plugin %s disabled." +msgstr "Плагин %s отключен." -#: ../../mod/rbmark.php:94 -msgid "URL of bookmark" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:294 +#, php-format +msgid "Plugin %s enabled." +msgstr "Плагин %s включен." -#: ../../mod/rbmark.php:95 ../../mod/appman.php:93 -msgid "Description" -msgstr "Описание" +#: ../../Zotlabs/Module/Admin/Addons.php:310 +#: ../../Zotlabs/Module/Admin/Themes.php:95 +msgid "Disable" +msgstr "Запретить" -#: ../../mod/rbmark.php:99 -msgid "Or enter new bookmark folder name" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:313 +#: ../../Zotlabs/Module/Admin/Themes.php:97 +msgid "Enable" +msgstr "Разрешить" -#: ../../mod/chat.php:167 -msgid "Room not found" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:343 +#: ../../Zotlabs/Module/Admin/Themes.php:124 +msgid "Toggle" +msgstr "Переключить" -#: ../../mod/chat.php:178 -msgid "Leave Room" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:351 +#: ../../Zotlabs/Module/Admin/Themes.php:134 +msgid "Author: " +msgstr "Автор: " -#: ../../mod/chat.php:179 -msgid "Delete This Room" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:352 +#: ../../Zotlabs/Module/Admin/Themes.php:135 +msgid "Maintainer: " +msgstr "Сопровождающий:" -#: ../../mod/chat.php:180 -msgid "I am away right now" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:353 +msgid "Minimum project version: " +msgstr "Минимальная версия проекта:" -#: ../../mod/chat.php:181 -msgid "I am online" -msgstr "Я в сети" +#: ../../Zotlabs/Module/Admin/Addons.php:354 +msgid "Maximum project version: " +msgstr "Максимальная версия проекта:" -#: ../../mod/chat.php:183 -msgid "Bookmark this room" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:355 +msgid "Minimum PHP version: " +msgstr "Минимальная версия PHP:" -#: ../../mod/chat.php:207 ../../mod/chat.php:229 -msgid "New Chatroom" -msgstr "Новый чат" +#: ../../Zotlabs/Module/Admin/Addons.php:356 +msgid "Compatible Server Roles: " +msgstr "Совместимые роли сервера:" -#: ../../mod/chat.php:208 -msgid "Chatroom Name" -msgstr "Название чата" +#: ../../Zotlabs/Module/Admin/Addons.php:357 +msgid "Requires: " +msgstr "Необходимо:" -#: ../../mod/chat.php:225 -#, php-format -msgid "%1$s's Chatrooms" -msgstr "Чаты пользователя %1$s" +#: ../../Zotlabs/Module/Admin/Addons.php:358 +#: ../../Zotlabs/Module/Admin/Addons.php:442 +msgid "Disabled - version incompatibility" +msgstr "Отключено - несовместимость версий" -#: ../../mod/register.php:43 -msgid "Maximum daily site registrations exceeded. Please try again tomorrow." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:411 +msgid "Enter the public git repository URL of the addon repo." +msgstr "Введите URL публичного репозитория расширений git" -#: ../../mod/register.php:49 -msgid "" -"Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:412 +msgid "Addon repo git URL" +msgstr "URL репозитория расширений git" -#: ../../mod/register.php:77 -msgid "Passwords do not match." -msgstr "Пароли не совпадают." +#: ../../Zotlabs/Module/Admin/Addons.php:413 +msgid "Custom repo name" +msgstr "Пользовательское имя репозитория" -#: ../../mod/register.php:105 -msgid "" -"Registration successful. Please check your email for validation " -"instructions." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:413 +msgid "(optional)" +msgstr "(необязательно)" -#: ../../mod/register.php:111 -msgid "Your registration is pending approval by the site owner." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:414 +msgid "Download Addon Repo" +msgstr "Загрузить репозиторий расширений" -#: ../../mod/register.php:114 -msgid "Your registration can not be processed." -msgstr "Ваша регистрация не может быть обработана." +#: ../../Zotlabs/Module/Admin/Addons.php:421 +msgid "Install new repo" +msgstr "Установить новый репозиторий" -#: ../../mod/register.php:147 -msgid "Registration on this site/hub is by approval only." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:445 +msgid "Manage Repos" +msgstr "Управление репозиториями" -#: ../../mod/register.php:148 -msgid "Register at another affiliated site/hub" -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:446 +msgid "Installed Addon Repositories" +msgstr "Установленные репозитории расширений" -#: ../../mod/register.php:156 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "" +#: ../../Zotlabs/Module/Admin/Addons.php:447 +msgid "Install a New Addon Repository" +msgstr "Установить новый репозиторий расширений" -#: ../../mod/register.php:167 -msgid "Terms of Service" -msgstr "Условия предоставления услуг" +#: ../../Zotlabs/Module/Admin/Addons.php:454 +msgid "Switch branch" +msgstr "Переключить ветку" -#: ../../mod/register.php:173 -#, php-format -msgid "I accept the %s for this website" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:172 +msgid "Site settings updated." +msgstr "Настройки сайта обновлены." -#: ../../mod/register.php:175 +#: ../../Zotlabs/Module/Admin/Site.php:209 +#: ../../Zotlabs/Module/Settings/Display.php:130 #, php-format -msgid "I am over 13 years of age and accept the %s for this website" -msgstr "" +msgid "%s - (Incompatible)" +msgstr "%s - (несовместимо)" -#: ../../mod/register.php:189 ../../mod/admin.php:443 -msgid "Registration" -msgstr "Регистрация" +#: ../../Zotlabs/Module/Admin/Site.php:216 +msgid "mobile" +msgstr "мобильный" -#: ../../mod/register.php:194 -msgid "Membership on this site is by invitation only." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:218 +msgid "experimental" +msgstr "экспериментальный" -#: ../../mod/register.php:195 -msgid "Please enter your invitation code" -msgstr "Пожалуйста, введите Ваш код приглашения" +#: ../../Zotlabs/Module/Admin/Site.php:220 +msgid "unsupported" +msgstr "неподдерживаемый" -#: ../../mod/register.php:198 -msgid "Your email address" -msgstr "Ваш адрес электронной почты" +#: ../../Zotlabs/Module/Admin/Site.php:267 +msgid "Yes - with approval" +msgstr "Да - требует подтверждения" -#: ../../mod/register.php:199 -msgid "Choose a password" -msgstr "Выберите пароль" +#: ../../Zotlabs/Module/Admin/Site.php:273 +msgid "My site is not a public server" +msgstr "Мой сайт не является публичным сервером" -#: ../../mod/register.php:200 -msgid "Please re-enter your password" -msgstr "Пожалуйста, введите пароль еще раз" +#: ../../Zotlabs/Module/Admin/Site.php:274 +msgid "My site has paid access only" +msgstr "Мой сайт доступен только с оплатой " -#: ../../mod/chatsvc.php:111 -msgid "Away" -msgstr "Нет на месте" +#: ../../Zotlabs/Module/Admin/Site.php:275 +msgid "My site has free access only" +msgstr "На моём сайте разрешён свободный доступ" -#: ../../mod/chatsvc.php:115 -msgid "Online" -msgstr "Сейчас в сети" +#: ../../Zotlabs/Module/Admin/Site.php:276 +msgid "My site offers free accounts with optional paid upgrades" +msgstr "На моём сайте разрешены бесплатные аккаунты с дополнительными платными услугами" -#: ../../mod/regmod.php:12 -msgid "Please login." -msgstr "Войдите пожалуйста." +#: ../../Zotlabs/Module/Admin/Site.php:288 +msgid "Beginner/Basic" +msgstr "Начинающий/Базовый" -#: ../../mod/cloud.php:113 -msgid "Hubzilla - Guests: Username: {your email address}, Password: +++" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:289 +msgid "Novice - not skilled but willing to learn" +msgstr "Новичок - не опытный, но желающий учиться" -#: ../../mod/removeme.php:49 -msgid "Remove This Channel" -msgstr "Удалить этот канал" +#: ../../Zotlabs/Module/Admin/Site.php:290 +msgid "Intermediate - somewhat comfortable" +msgstr "Промежуточный - более удобный" -#: ../../mod/removeme.php:50 -msgid "" -"This will completely remove this channel from the network. Once this has " -"been done it is not recoverable." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:291 +msgid "Advanced - very comfortable" +msgstr "Продвинутый - очень удобный" -#: ../../mod/removeme.php:51 -msgid "Please enter your password for verification:" -msgstr "Пожалуйста, введите пароль для проверки:" +#: ../../Zotlabs/Module/Admin/Site.php:292 +msgid "Expert - I can write computer code" +msgstr "Эксперт - я умею программировать" -#: ../../mod/removeme.php:52 -msgid "Remove this channel and all its clones from the network" -msgstr "Удалить этот канал и все его клоны из сети" +#: ../../Zotlabs/Module/Admin/Site.php:293 +msgid "Wizard - I probably know more than you do" +msgstr "Волшебник - возможно я знаю больше чем ты" -#: ../../mod/removeme.php:52 +#: ../../Zotlabs/Module/Admin/Site.php:299 +msgid "Default permission role for new accounts" +msgstr "Разрешения по умолчанию для новых аккаунтов" + +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "" -"By default only the instance of the channel located on this hub will be " -"removed from the network" +"This role will be used for the first channel created after registration." msgstr "" +"Эта роль будет использоваться для первого канала, созданного после регистрации." -#: ../../mod/removeme.php:53 -msgid "Remove Channel" -msgstr "Удалить канал" +#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Register.php:278 +msgid "Registration" +msgstr "Регистрация" -#: ../../mod/common.php:10 -msgid "No channel." -msgstr "Не канал." +#: ../../Zotlabs/Module/Admin/Site.php:311 +msgid "File upload" +msgstr "Загрузка файла" -#: ../../mod/common.php:39 -msgid "Common connections" -msgstr "Общие контакты" +#: ../../Zotlabs/Module/Admin/Site.php:312 +msgid "Policies" +msgstr "Правила" -#: ../../mod/common.php:44 -msgid "No connections in common." -msgstr "Общих контактов нет." +#: ../../Zotlabs/Module/Admin/Site.php:319 +msgid "Site default technical skill level" +msgstr "Уровень технических навыков на сайте по умолчанию" -#: ../../mod/rmagic.php:38 -msgid "" -"We encountered a problem while logging in with the OpenID you provided. " -"Please check the correct spelling of the ID." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:319 +msgid "Used to provide a member experience matched to technical comfort level" +msgstr "Используется чтобы обеспечить удобство на уровне технических навыков пользователя" -#: ../../mod/rmagic.php:38 -msgid "The error message was:" -msgstr "Сообщение об ошибке было:" +#: ../../Zotlabs/Module/Admin/Site.php:321 +msgid "Lock the technical skill level setting" +msgstr "Заблокировать уровень технических навыков" -#: ../../mod/rmagic.php:42 -msgid "Authentication failed." -msgstr "Ошибка проверки подлинности." +#: ../../Zotlabs/Module/Admin/Site.php:321 +msgid "Members can set their own technical comfort level by default" +msgstr "Участники могут выбрать уровень своих технических навыков по умолчанию" -#: ../../mod/rmagic.php:78 -msgid "Remote Authentication" -msgstr "Удаленная аутентификация" +#: ../../Zotlabs/Module/Admin/Site.php:323 +msgid "Banner/Logo" +msgstr "Баннер / логотип" -#: ../../mod/rmagic.php:79 -msgid "Enter your channel address (e.g. channel@example.com)" -msgstr "Введите адрес вашего канала (например: channel@example.com)" +#: ../../Zotlabs/Module/Admin/Site.php:323 +msgid "Unfiltered HTML/CSS/JS is allowed" +msgstr "Разрешён нефильтруемый HTML/CSS/JS" -#: ../../mod/rmagic.php:80 -msgid "Authenticate" -msgstr "Проверка подлинности" +#: ../../Zotlabs/Module/Admin/Site.php:324 +msgid "Administrator Information" +msgstr "Информация об администраторе" -#: ../../mod/connect.php:55 ../../mod/connect.php:103 -msgid "Continue" -msgstr "Продолжить" +#: ../../Zotlabs/Module/Admin/Site.php:324 +msgid "" +"Contact information for site administrators. Displayed on siteinfo page. " +"BBCode can be used here" +msgstr "Контактная информация для администраторов сайта. Показывается на информационной странице сайта. Можно использовать BBCode." -#: ../../mod/connect.php:84 -msgid "Premium Channel Setup" -msgstr "Установка премиум канала" +#: ../../Zotlabs/Module/Admin/Site.php:325 +msgid "" +"Publicly visible description of this site. Displayed on siteinfo page. " +"BBCode can be used here" +msgstr "Публичное видимое описание сайта. Показывается на информационной странице сайта. Можно использовать BBCode." -#: ../../mod/connect.php:86 -msgid "Enable premium channel connection restrictions" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:326 +msgid "System language" +msgstr "Язык системы" -#: ../../mod/connect.php:87 -msgid "" -"Please enter your restrictions or conditions, such as paypal receipt, usage " -"guidelines, etc." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:327 +msgid "System theme" +msgstr "Системная тема" -#: ../../mod/connect.php:89 ../../mod/connect.php:109 +#: ../../Zotlabs/Module/Admin/Site.php:327 msgid "" -"This channel may require additional steps or acknowledgement of the " -"following conditions prior to connecting:" -msgstr "" +"Default system theme - may be over-ridden by user profiles - change theme settings" +msgstr "Системная тема по умолчанию - может быть изменена в профиле пользователя - изменить параметры темы." -#: ../../mod/connect.php:90 -msgid "" -"Potential connections will then see the following text before proceeding:" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:330 +msgid "Allow Feeds as Connections" +msgstr "Разрешить ленты новостей как контакты" -#: ../../mod/connect.php:91 ../../mod/connect.php:112 -msgid "" -"By continuing, I certify that I have complied with any instructions provided" -" on this page." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:330 +msgid "(Heavy system resource usage)" +msgstr "(Высокое использование системных ресурсов)" -#: ../../mod/connect.php:100 -msgid "(No specific instructions have been provided by the channel owner.)" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:331 +msgid "Maximum image size" +msgstr "Максимальный размер изображения" -#: ../../mod/connect.php:108 -msgid "Restricted or Premium Channel" -msgstr "Ограниченный или Премиум канал" +#: ../../Zotlabs/Module/Admin/Site.php:331 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." +msgstr "Максимальный размер загруженных изображений в байтах. По умолчанию 0 или без ограничений." -#: ../../mod/network.php:79 -msgid "No such group" -msgstr "Нет такой группы" +#: ../../Zotlabs/Module/Admin/Site.php:332 +msgid "Does this site allow new member registration?" +msgstr "Разрешается ли регистрация новых пользователей на этом сайте?" -#: ../../mod/network.php:118 -msgid "Search Results For:" -msgstr "Результаты поиска для:" +#: ../../Zotlabs/Module/Admin/Site.php:333 +msgid "Invitation only" +msgstr "Только по приглашениям" -#: ../../mod/network.php:172 -msgid "Collection is empty" -msgstr "Коллекция пуста" +#: ../../Zotlabs/Module/Admin/Site.php:333 +msgid "" +"Only allow new member registrations with an invitation code. Above register " +"policy must be set to Yes." +msgstr "" +"Регистрация пользователей разрешается только по приглашениям. Вышеуказанная " +"политика регистрация должны быть установлена в \"Да\"." -#: ../../mod/network.php:180 -msgid "Collection: " -msgstr "Коллекции: " +#: ../../Zotlabs/Module/Admin/Site.php:334 +msgid "Minimum age" +msgstr "Минимальный возраст" -#: ../../mod/network.php:193 -msgid "Connection: " -msgstr "Контакты: " +#: ../../Zotlabs/Module/Admin/Site.php:334 +msgid "Minimum age (in years) for who may register on this site." +msgstr "Минимальный возраст (в годах) для регистрации на этом сайте." -#: ../../mod/network.php:196 -msgid "Invalid connection." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:335 +msgid "Which best describes the types of account offered by this hub?" +msgstr "Как лучше описать тип учётных записей предлагаемых на этом хабе?" -#: ../../mod/connections.php:37 ../../mod/connedit.php:64 -msgid "Could not access contact record." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:336 +msgid "Register text" +msgstr "Текст регистрации" -#: ../../mod/connections.php:51 ../../mod/connedit.php:78 -msgid "Could not locate selected profile." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:336 +msgid "Will be displayed prominently on the registration page." +msgstr "Будет отображаться на странице регистрации на видном месте." -#: ../../mod/connections.php:94 ../../mod/connedit.php:131 -msgid "Connection updated." -msgstr "Связи обновленны." +#: ../../Zotlabs/Module/Admin/Site.php:338 +msgid "Site homepage to show visitors (default: login box)" +msgstr "Домашняя страница, которая будет показываться посетителям сайт (по умочанию - форма входа)." -#: ../../mod/connections.php:96 ../../mod/connedit.php:133 -msgid "Failed to update connection record." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:338 +msgid "" +"example: 'public' to show public stream, 'page/sys/home' to show a system " +"webpage called 'home' or 'include:home.html' to include a file." +msgstr "например: 'public' для показа публичного потока, 'page/sys/home' показывает системную страницу home или 'include:home.html' для подключения файла." -#: ../../mod/connections.php:191 ../../mod/connections.php:292 -msgid "Blocked" -msgstr "Заблокированные" +#: ../../Zotlabs/Module/Admin/Site.php:339 +msgid "Preserve site homepage URL" +msgstr "Сохранить URL главной страницы сайта" -#: ../../mod/connections.php:196 ../../mod/connections.php:299 -msgid "Ignored" -msgstr "Игнорируемые" +#: ../../Zotlabs/Module/Admin/Site.php:339 +msgid "" +"Present the site homepage in a frame at the original location instead of " +"redirecting" +msgstr "Показывать домашнюю страницу сайта во фрейме вместо стандартной переадресации" -#: ../../mod/connections.php:201 ../../mod/connections.php:313 -msgid "Hidden" -msgstr "Скрытые" +#: ../../Zotlabs/Module/Admin/Site.php:340 +msgid "Accounts abandoned after x days" +msgstr "Аккаунты считаются заброшенными после N дней" -#: ../../mod/connections.php:206 ../../mod/connections.php:306 -msgid "Archived" -msgstr "Зархивированные" +#: ../../Zotlabs/Module/Admin/Site.php:340 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "Системные ресурсы не будут расходоваться для опроса внешних сайтов для заброшенных аккаунтов. Введите 0 для отсутствия ограничений." -#: ../../mod/connections.php:230 ../../mod/connections.php:245 -msgid "All" -msgstr "Все" +#: ../../Zotlabs/Module/Admin/Site.php:341 +msgid "Allowed friend domains" +msgstr "Разрешенные домены друзей" -#: ../../mod/connections.php:240 ../../mod/connections.php:320 -msgid "Unconnected" -msgstr "Неприсоединенные" +#: ../../Zotlabs/Module/Admin/Site.php:341 +msgid "" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" +msgstr "Список разделённых запятыми доменов с которыми разрешено устанавливать дружеские отношения на этом сайте. Wildcards разрешены. Пусто означает разрешены любые домены." -#: ../../mod/connections.php:270 -msgid "Suggest new connections" -msgstr "Предлагать новые контакты" +#: ../../Zotlabs/Module/Admin/Site.php:342 +msgid "Verify Email Addresses" +msgstr "Проверка адреса электронной почты" -#: ../../mod/connections.php:273 -msgid "New Connections" -msgstr "Новые контакты" +#: ../../Zotlabs/Module/Admin/Site.php:342 +msgid "" +"Check to verify email addresses used in account registration (recommended)." +msgstr "Включите для проверки адреса электронной почты использованного при регистрации (рекомендуется)." -#: ../../mod/connections.php:276 -msgid "Show pending (new) connections" -msgstr "Просмотр (новых) ждущих контактов" +#: ../../Zotlabs/Module/Admin/Site.php:343 +msgid "Force publish" +msgstr "Принудительно публиковать" -#: ../../mod/connections.php:282 -msgid "Show all connections" -msgstr "Просмотр всех контактов" +#: ../../Zotlabs/Module/Admin/Site.php:343 +msgid "" +"Check to force all profiles on this site to be listed in the site directory." +msgstr "Включите для принудительного включения всех учётных записей на данном сайте в каталог." -#: ../../mod/connections.php:285 -msgid "Unblocked" -msgstr "Разрешенные" +#: ../../Zotlabs/Module/Admin/Site.php:344 +msgid "Import Public Streams" +msgstr "Импортированные публичные потоки" -#: ../../mod/connections.php:288 -msgid "Only show unblocked connections" -msgstr "Показать только разрешенные контакты" +#: ../../Zotlabs/Module/Admin/Site.php:344 +msgid "" +"Import and allow access to public content pulled from other sites. Warning: " +"this content is unmoderated." +msgstr "Импортировать и разрешить публичный доступ к загружаемым с других сайтов потоков. Внимание - этот контент не может модерироваться." -#: ../../mod/connections.php:295 -msgid "Only show blocked connections" -msgstr "Показать только заблокированные контакты" +#: ../../Zotlabs/Module/Admin/Site.php:345 +msgid "Site only Public Streams" +msgstr "Публичные потоки только с сайта" -#: ../../mod/connections.php:302 -msgid "Only show ignored connections" -msgstr "Показать только проигнорированные контакты" +#: ../../Zotlabs/Module/Admin/Site.php:345 +msgid "" +"Allow access to public content originating only from this site if Imported " +"Public Streams are disabled." +msgstr "Разрешить доступ к общедоступному контенту, исходящему только с этого сайта, если импортированные публичные потоки отключены." -#: ../../mod/connections.php:309 -msgid "Only show archived connections" -msgstr "Показать только архивированные контакты" +#: ../../Zotlabs/Module/Admin/Site.php:346 +msgid "Allow anybody on the internet to access the Public streams" +msgstr "Разрешить всем доступ к публичным потокам" -#: ../../mod/connections.php:316 -msgid "Only show hidden connections" -msgstr "Показать только скрытые контакты" +#: ../../Zotlabs/Module/Admin/Site.php:346 +msgid "" +"Disable to require authentication before viewing. Warning: this content is " +"unmoderated." +msgstr "Отключите если для просмотра требуется аутентификация. Внимание - этот контент не может модерироваться." -#: ../../mod/connections.php:323 -msgid "Only show one-way connections" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:347 +msgid "Only import Public stream posts with this text" +msgstr "Импортировать только публичные потоки с этим текстом" -#: ../../mod/connections.php:368 -#, php-format -msgid "%1$s [%2$s]" -msgstr "%1$s [%2$s]" +#: ../../Zotlabs/Module/Admin/Site.php:348 +msgid "Do not import Public stream posts with this text" +msgstr "Не импортировать публичные потоки с этим текстом" -#: ../../mod/connections.php:369 -msgid "Edit contact" -msgstr "Редактировать контакт" +#: ../../Zotlabs/Module/Admin/Site.php:351 +msgid "Login on Homepage" +msgstr "Вход на домашней странице" -#: ../../mod/connections.php:390 -msgid "Search your connections" -msgstr "Поиск ваших связей" +#: ../../Zotlabs/Module/Admin/Site.php:351 +msgid "" +"Present a login box to visitors on the home page if no other content has " +"been configured." +msgstr "Предоставлять форму входа для посетителей на домашней странице если другого содержимого не настроено." -#: ../../mod/connections.php:391 -msgid "Finding: " -msgstr "Поиск:" +#: ../../Zotlabs/Module/Admin/Site.php:352 +msgid "Enable context help" +msgstr "Включить контекстную помощь" -#: ../../mod/rpost.php:97 ../../mod/editpost.php:42 -msgid "Edit post" -msgstr "Редактировать сообщение" +#: ../../Zotlabs/Module/Admin/Site.php:352 +msgid "" +"Display contextual help for the current page when the help button is pressed." +msgstr "Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." -#: ../../mod/connedit.php:243 -msgid "Could not access address book record." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:354 +msgid "Reply-to email address for system generated email." +msgstr "Адрес email Reply-to для генерируемых системой сообщений." -#: ../../mod/connedit.php:257 -msgid "Refresh failed - channel is currently unavailable." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:355 +msgid "Sender (From) email address for system generated email." +msgstr "Адрес email отправителя (From) для генерируемых системой сообщений." -#: ../../mod/connedit.php:264 -msgid "Channel has been unblocked" -msgstr "Канал разблокирован" +#: ../../Zotlabs/Module/Admin/Site.php:356 +msgid "Name of email sender for system generated email." +msgstr "Имя отправителя для генерируемых системой сообщений." -#: ../../mod/connedit.php:265 -msgid "Channel has been blocked" -msgstr "Канал заблокирован" +#: ../../Zotlabs/Module/Admin/Site.php:358 +msgid "Directory Server URL" +msgstr "URL сервера каталогов" -#: ../../mod/connedit.php:269 ../../mod/connedit.php:281 -#: ../../mod/connedit.php:293 ../../mod/connedit.php:305 -#: ../../mod/connedit.php:320 -msgid "Unable to set address book parameters." -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:358 +msgid "Default directory server" +msgstr "Сервер каталогов по умолчанию" -#: ../../mod/connedit.php:276 -msgid "Channel has been unignored" -msgstr "Канал не проигнорирован" +#: ../../Zotlabs/Module/Admin/Site.php:360 +msgid "Proxy user" +msgstr "Имя пользователя proxy-сервера" -#: ../../mod/connedit.php:277 -msgid "Channel has been ignored" -msgstr "Канал проигнорирован" +#: ../../Zotlabs/Module/Admin/Site.php:361 +msgid "Proxy URL" +msgstr "URL proxy-сервера" -#: ../../mod/connedit.php:288 -msgid "Channel has been unarchived" -msgstr "Канал разархивирован" +#: ../../Zotlabs/Module/Admin/Site.php:362 +msgid "Network timeout" +msgstr "Время ожидания сети" -#: ../../mod/connedit.php:289 -msgid "Channel has been archived" -msgstr "Канал заархивирован" +#: ../../Zotlabs/Module/Admin/Site.php:362 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +msgstr "Значение в секундах. Если установлен в 0 - без ограничений (не рекомендуется)." -#: ../../mod/connedit.php:300 -msgid "Channel has been unhidden" -msgstr "Канал открыт" +#: ../../Zotlabs/Module/Admin/Site.php:363 +msgid "Delivery interval" +msgstr "Интервал доставки" -#: ../../mod/connedit.php:301 -msgid "Channel has been hidden" -msgstr "Канал скрыт" +#: ../../Zotlabs/Module/Admin/Site.php:363 +msgid "" +"Delay background delivery processes by this many seconds to reduce system " +"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " +"for large dedicated servers." +msgstr "Значение задержки фоновых процессов доставки в секундах для снижения нагрузки на систему. Рекомендуется 4-5 для серверов совместного использования, 2-3 для частных виртуальных и 0-1 для выделенных серверов." -#: ../../mod/connedit.php:315 -msgid "Channel has been approved" -msgstr "Канал одобрен" +#: ../../Zotlabs/Module/Admin/Site.php:364 +msgid "Deliveries per process" +msgstr "Доставок на процесс" -#: ../../mod/connedit.php:316 -msgid "Channel has been unapproved" -msgstr "Канал не одобрен" +#: ../../Zotlabs/Module/Admin/Site.php:364 +msgid "" +"Number of deliveries to attempt in a single operating system process. Adjust " +"if necessary to tune system performance. Recommend: 1-5." +msgstr "Количество доставок для одного процесса. Настройте в соответствии с производительностью системы. Рекомендуется 1-5." -#: ../../mod/connedit.php:334 -msgid "Connection has been removed." -msgstr "Соединение было удалено." +#: ../../Zotlabs/Module/Admin/Site.php:365 +msgid "Queue Threshold" +msgstr "Порог очереди" -#: ../../mod/connedit.php:354 -#, php-format -msgid "View %s's profile" -msgstr "Просмотр %s's профиля" +#: ../../Zotlabs/Module/Admin/Site.php:365 +msgid "" +"Always defer immediate delivery if queue contains more than this number of " +"entries." +msgstr "Всегда откладывать немедленную доставку, если в очереди содержится большее количество записей, чем это." -#: ../../mod/connedit.php:358 -msgid "Refresh Permissions" -msgstr "Обновить разрешения" +#: ../../Zotlabs/Module/Admin/Site.php:366 +msgid "Poll interval" +msgstr "Интервал опроса" -#: ../../mod/connedit.php:361 -msgid "Fetch updated permissions" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:366 +msgid "" +"Delay background polling processes by this many seconds to reduce system " +"load. If 0, use delivery interval." +msgstr "Задержка фоновых процессов опроса на указанное количество секунд для снижения нагрузки на систему. Если 0 - использовать интервал доставки." -#: ../../mod/connedit.php:365 -msgid "Recent Activity" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:367 +msgid "Path to ImageMagick convert program" +msgstr "Путь к ImageMagick" -#: ../../mod/connedit.php:368 -msgid "View recent posts and comments" -msgstr "" +#: ../../Zotlabs/Module/Admin/Site.php:367 +msgid "" +"If set, use this program to generate photo thumbnails for huge images ( > " +"4000 pixels in either dimension), otherwise memory exhaustion may occur. " +"Example: /usr/bin/convert" +msgstr "При установке эта программа генерирует миниатюры изображений для больших файлов (свыше 4000 в любом измерении) для предотвращения утечки памяти. Пример: /usr/bin/convert" -#: ../../mod/connedit.php:372 ../../mod/connedit.php:515 -#: ../../mod/admin.php:760 -msgid "Unblock" -msgstr "Разрешить" +#: ../../Zotlabs/Module/Admin/Site.php:368 +msgid "Allow SVG thumbnails in file browser" +msgstr "Разрешить SVG миниатюры в просмотрщике файлов" -#: ../../mod/connedit.php:372 ../../mod/connedit.php:515 -#: ../../mod/admin.php:759 -msgid "Block" -msgstr "Заблокировать" +#: ../../Zotlabs/Module/Admin/Site.php:368 +msgid "WARNING: SVG images may contain malicious code." +msgstr "Внимание: изображения SVG могут содержать вредоносный код." -#: ../../mod/connedit.php:375 -msgid "Block or Unblock this connection" -msgstr "Запретить или разрешить этот канал" +#: ../../Zotlabs/Module/Admin/Site.php:369 +msgid "Maximum Load Average" +msgstr "Максимальная средняя нагрузка" -#: ../../mod/connedit.php:379 ../../mod/connedit.php:516 -msgid "Unignore" -msgstr "Не игнорировать" +#: ../../Zotlabs/Module/Admin/Site.php:369 +msgid "" +"Maximum system load before delivery and poll processes are deferred - " +"default 50." +msgstr "Максимальная нагрузка системы для откладывания процессов опроса и доставки - по умолчанию 50." -#: ../../mod/connedit.php:379 ../../mod/connedit.php:516 -#: ../../mod/notifications.php:51 -msgid "Ignore" -msgstr "Игнорировать" +#: ../../Zotlabs/Module/Admin/Site.php:370 +msgid "Expiration period in days for imported (grid/network) content" +msgstr "Срок хранения в днях для импортированного содержимого (из матрицы / сети)." -#: ../../mod/connedit.php:382 -msgid "Ignore or Unignore this connection" -msgstr "Игнорировать или не игнорировать этот канал" +#: ../../Zotlabs/Module/Admin/Site.php:370 +msgid "0 for no expiration of imported content" +msgstr "0 для постоянного хранения импортированного содержимого" -#: ../../mod/connedit.php:385 -msgid "Unarchive" -msgstr "Разархивировать" +#: ../../Zotlabs/Module/Admin/Site.php:371 +msgid "" +"Do not expire any posts which have comments less than this many days ago" +msgstr "Продлевать строк хранения для любых публикаций, которые имею комментарии возрастом менее этого значения" -#: ../../mod/connedit.php:385 -msgid "Archive" -msgstr "Заархивировать" +#: ../../Zotlabs/Module/Admin/Site.php:373 +msgid "" +"Public servers: Optional landing (marketing) webpage for new registrants" +msgstr "Публичные серверы: необязательная маркетинговая лэндинг-страница для новых пользователей" -#: ../../mod/connedit.php:388 -msgid "Archive or Unarchive this connection" -msgstr " Заархивировать или разархивировать этот канал" +#: ../../Zotlabs/Module/Admin/Site.php:373 +#, php-format +msgid "Create this page first. Default is %s/register" +msgstr "Создать эту страницу первой. По умолчанию %s/register" -#: ../../mod/connedit.php:391 -msgid "Unhide" -msgstr "Показать" +#: ../../Zotlabs/Module/Admin/Site.php:374 +msgid "Page to display after creating a new channel" +msgstr "Страница для показа после создания нового канала" -#: ../../mod/connedit.php:391 -msgid "Hide" -msgstr "Скрыть" +#: ../../Zotlabs/Module/Admin/Site.php:374 +msgid "Default: profiles" +msgstr "По умолчанию: профили" -#: ../../mod/connedit.php:394 -msgid "Hide or Unhide this connection" -msgstr "Скрыть или показывать этот канал" +#: ../../Zotlabs/Module/Admin/Site.php:376 +msgid "Optional: site location" +msgstr "Необязательно: место размещения сайта" -#: ../../mod/connedit.php:401 -msgid "Delete this connection" -msgstr "Удалить этот контакт" +#: ../../Zotlabs/Module/Admin/Site.php:376 +msgid "Region or country" +msgstr "Регион или страна" -#: ../../mod/connedit.php:444 ../../mod/connedit.php:473 -msgid "Approve this connection" -msgstr "Утвердить этот контакт" +#: ../../Zotlabs/Module/Admin/Logs.php:28 +msgid "Log settings updated." +msgstr "Настройки журнала обновлены." -#: ../../mod/connedit.php:444 -msgid "Accept connection to allow communication" -msgstr "" +#: ../../Zotlabs/Module/Admin/Logs.php:85 +msgid "Clear" +msgstr "Очистить" -#: ../../mod/connedit.php:460 -msgid "Automatic Permissions Settings" -msgstr "Настройки автоматических разрешений" +#: ../../Zotlabs/Module/Admin/Logs.php:91 +msgid "Debugging" +msgstr "Отладка" -#: ../../mod/connedit.php:460 -#, php-format -msgid "Connections: settings for %s" -msgstr "" +#: ../../Zotlabs/Module/Admin/Logs.php:92 +msgid "Log file" +msgstr "Файл журнала" -#: ../../mod/connedit.php:464 +#: ../../Zotlabs/Module/Admin/Logs.php:92 msgid "" -"When receiving a channel introduction, any permissions provided here will be" -" applied to the new connection automatically and the introduction approved. " -"Leave this page if you do not wish to use this feature." -msgstr "" +"Must be writable by web server. Relative to your top-level webserver " +"directory." +msgstr "Должен быть доступен для записи веб-сервером. Пусть относителен основного каталога веб-сайта." -#: ../../mod/connedit.php:466 -msgid "Slide to adjust your degree of friendship" -msgstr "" +#: ../../Zotlabs/Module/Admin/Logs.php:93 +msgid "Log level" +msgstr "Уровень журнала" -#: ../../mod/connedit.php:472 -msgid "inherited" -msgstr "унаследованный" +#: ../../Zotlabs/Module/Admin/Accounts.php:37 +#, php-format +msgid "%s account blocked/unblocked" +msgid_plural "%s account blocked/unblocked" +msgstr[0] "" +msgstr[1] "" -#: ../../mod/connedit.php:474 -msgid "Connection has no individual permissions!" -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:44 +#, php-format +msgid "%s account deleted" +msgid_plural "%s accounts deleted" +msgstr[0] "" +msgstr[1] "" -#: ../../mod/connedit.php:475 -msgid "" -"This may be appropriate based on your privacy " -"settings, though you may wish to review the \"Advanced Permissions\"." -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:80 +msgid "Account not found" +msgstr "Аккаунт не найден" -#: ../../mod/connedit.php:477 -msgid "Profile Visibility" -msgstr "Видимость профиля" +#: ../../Zotlabs/Module/Admin/Accounts.php:99 +#, php-format +msgid "Account '%s' blocked" +msgstr "Аккаунт '%s' заблокирован" -#: ../../mod/connedit.php:478 +#: ../../Zotlabs/Module/Admin/Accounts.php:107 #, php-format -msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." -msgstr "" +msgid "Account '%s' unblocked" +msgstr "Аккаунт '%s' разблокирован" -#: ../../mod/connedit.php:479 -msgid "Contact Information / Notes" -msgstr "Информация / Примечания о канале" +#: ../../Zotlabs/Module/Admin/Accounts.php:169 +#: ../../Zotlabs/Module/Admin/Channels.php:148 +msgid "select all" +msgstr "выбрать все" -#: ../../mod/connedit.php:480 -msgid "Edit contact notes" -msgstr "Редактировать примечания канала" +#: ../../Zotlabs/Module/Admin/Accounts.php:170 +msgid "Registrations waiting for confirm" +msgstr "Регистрации ждут подтверждения" -#: ../../mod/connedit.php:482 -msgid "Their Settings" -msgstr "Их настройки" +#: ../../Zotlabs/Module/Admin/Accounts.php:171 +msgid "Request date" +msgstr "Дата запроса" -#: ../../mod/connedit.php:483 -msgid "My Settings" -msgstr "Мои настройки" +#: ../../Zotlabs/Module/Admin/Accounts.php:172 +msgid "No registrations." +msgstr "Нет новых регистраций." -#: ../../mod/connedit.php:485 -msgid "Clear/Disable Automatic Permissions" +#: ../../Zotlabs/Module/Admin/Accounts.php:182 +msgid "ID" msgstr "" -#: ../../mod/connedit.php:486 -msgid "Forum Members" -msgstr "Участники форума" +#: ../../Zotlabs/Module/Admin/Accounts.php:184 +msgid "All Channels" +msgstr "Все каналы" -#: ../../mod/connedit.php:487 -msgid "Soapbox" -msgstr "Soapbox" +#: ../../Zotlabs/Module/Admin/Accounts.php:185 +msgid "Register date" +msgstr "Дата регистрации" -#: ../../mod/connedit.php:488 -msgid "Full Sharing (typical social network permissions)" -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:186 +msgid "Last login" +msgstr "Последний вход" -#: ../../mod/connedit.php:489 -msgid "Cautious Sharing " -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:187 +msgid "Expires" +msgstr "Срок действия" -#: ../../mod/connedit.php:490 -msgid "Follow Only" -msgstr "Только следовать" +#: ../../Zotlabs/Module/Admin/Accounts.php:188 +msgid "Service Class" +msgstr "Класс обслуживания" -#: ../../mod/connedit.php:491 -msgid "Individual Permissions" -msgstr "Индивидуальные разрешения" +#: ../../Zotlabs/Module/Admin/Accounts.php:190 +msgid "" +"Selected accounts will be deleted!\\n\\nEverything these accounts had posted " +"on this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" +"Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано " +"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" -#: ../../mod/connedit.php:492 +#: ../../Zotlabs/Module/Admin/Accounts.php:191 msgid "" -"Some permissions may be inherited from your channel privacy settings, which have higher priority than " -"individual settings. Changing those inherited settings on this page will " -"have no effect." +"The account {0} will be deleted!\\n\\nEverything this account has posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" +"Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом " +"сайте будет удалено навсегда!\\n\\nВы уверены?" -#: ../../mod/connedit.php:493 -msgid "Advanced Permissions" -msgstr "Дополнительные разрешения" +#: ../../Zotlabs/Module/Admin/Security.php:83 +msgid "" +"By default, unfiltered HTML is allowed in embedded media. This is inherently " +"insecure." +msgstr "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." -#: ../../mod/connedit.php:494 -msgid "Simple Permissions (select one and submit)" -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:86 +msgid "" +"The recommended setting is to only allow unfiltered HTML from the following " +"sites:" +msgstr "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" -#: ../../mod/connedit.php:498 -#, php-format -msgid "Visit %s's profile - %s" -msgstr "Посетить %s's ​​профиль - %s" +#: ../../Zotlabs/Module/Admin/Security.php:87 +msgid "" +"https://youtube.com/
https://www.youtube.com/
https://youtu.be/" +"
https://vimeo.com/
https://soundcloud.com/
" +msgstr "" -#: ../../mod/connedit.php:499 -msgid "Block/Unblock contact" -msgstr "Запретить/разрешить контакт" +#: ../../Zotlabs/Module/Admin/Security.php:88 +msgid "" +"All other embedded content will be filtered, unless " +"embedded content from that site is explicitly blocked." +msgstr "се остальные встроенные материалы будут отфильтрованы, если встроенное содержимое с этого сайта явно заблокировано." -#: ../../mod/connedit.php:500 -msgid "Ignore contact" -msgstr "Игнорировать контакт" +#: ../../Zotlabs/Module/Admin/Security.php:95 +msgid "Block public" +msgstr "Блокировать публичный доступ" -#: ../../mod/connedit.php:501 -msgid "Repair URL settings" -msgstr "Ремонт настройки URL" +#: ../../Zotlabs/Module/Admin/Security.php:95 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently authenticated." +msgstr "Установите флажок для блокировки публичного доступа ко всем другим общедоступным страницам на этом сайте, если вы в настоящее время не аутентифицированы." -#: ../../mod/connedit.php:502 -msgid "View conversations" -msgstr "Просмотр разговоров" +#: ../../Zotlabs/Module/Admin/Security.php:96 +msgid "Provide a cloud root directory" +msgstr "Предоставить корневой каталог в облаке" -#: ../../mod/connedit.php:504 -msgid "Delete contact" -msgstr "Удалить контакт" +#: ../../Zotlabs/Module/Admin/Security.php:96 +msgid "" +"The cloud root directory lists all channel names which provide public files" +msgstr "" +"В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы" -#: ../../mod/connedit.php:507 -msgid "Last update:" -msgstr "Последнее обновление:" +#: ../../Zotlabs/Module/Admin/Security.php:97 +msgid "Show total disk space available to cloud uploads" +msgstr "Показывать общее доступное для загрузок место в хранилище" -#: ../../mod/connedit.php:509 -msgid "Update public posts" -msgstr "Обновить публичные сообщения" +#: ../../Zotlabs/Module/Admin/Security.php:98 +msgid "Set \"Transport Security\" HTTP header" +msgstr "Установить HTTP-заголовок \"Transport Security\"" -#: ../../mod/connedit.php:511 -msgid "Update now" -msgstr "Обновить сейчас" +#: ../../Zotlabs/Module/Admin/Security.php:99 +msgid "Set \"Content Security Policy\" HTTP header" +msgstr "Установить HTTP-заголовок \"Content Security Policy\"" -#: ../../mod/connedit.php:517 -msgid "Currently blocked" -msgstr "В настоящее время заблокирован" +#: ../../Zotlabs/Module/Admin/Security.php:100 +msgid "Allowed email domains" +msgstr "Разрешённые домены email" -#: ../../mod/connedit.php:518 -msgid "Currently ignored" -msgstr "В настоящее время игнорируются" +#: ../../Zotlabs/Module/Admin/Security.php:100 +msgid "" +"Comma separated list of domains which are allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains" +msgstr "Список разделённых запятыми доменов для которых разрешена регистрация " +"на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены." -#: ../../mod/connedit.php:519 -msgid "Currently archived" -msgstr "В настоящее время зархивированны" +#: ../../Zotlabs/Module/Admin/Security.php:101 +msgid "Not allowed email domains" +msgstr "Запрещённые домены email" -#: ../../mod/connedit.php:520 -msgid "Currently pending" -msgstr "В настоящее время в ожидании" +#: ../../Zotlabs/Module/Admin/Security.php:101 +msgid "" +"Comma separated list of domains which are not allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains, unless allowed domains have been defined." +msgstr "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. " +"Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые " +"домены не будут указаны." -#: ../../mod/connedit.php:521 -msgid "Hide this contact from others" -msgstr "Скрыть этот канал от других" +#: ../../Zotlabs/Module/Admin/Security.php:102 +msgid "Allow communications only from these sites" +msgstr "Разрешить связь только с этими сайтами" -#: ../../mod/connedit.php:521 +#: ../../Zotlabs/Module/Admin/Security.php:102 msgid "" -"Replies/likes to your public posts may still be visible" -msgstr "" +"One site per line. Leave empty to allow communication from anywhere by " +"default" +msgstr "Один сайт на строку. Оставьте пустым для разрешения взаимодействия без ограничений (по умочанию)." -#: ../../mod/delegate.php:95 -msgid "No potential page delegates located." -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:103 +msgid "Block communications from these sites" +msgstr "Блокировать связь с этими сайтами" -#: ../../mod/delegate.php:121 -msgid "Delegate Page Management" -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:104 +msgid "Allow communications only from these channels" +msgstr "Разрешить связь только для этих каналов" -#: ../../mod/delegate.php:123 +#: ../../Zotlabs/Module/Admin/Security.php:104 msgid "" -"Delegates are able to manage all aspects of this account/page except for " -"basic account settings. Please do not delegate your personal account to " -"anybody that you do not trust completely." -msgstr "" +"One channel (hash) per line. Leave empty to allow from any channel by default" +msgstr "Один канал (или его хэш) на строку. Оставьте пустым для разрешения взаимодействия с любым каналом (по умолчанию)." -#: ../../mod/delegate.php:124 -msgid "Existing Page Managers" -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:105 +msgid "Block communications from these channels" +msgstr "Блокировать связь с этими каналами" -#: ../../mod/delegate.php:126 -msgid "Existing Page Delegates" -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:106 +msgid "Only allow embeds from secure (SSL) websites and links." +msgstr "Разрешать встраивание только для безопасных (SSL/TLS) сайтов и ссылок." -#: ../../mod/delegate.php:128 -msgid "Potential Delegates" -msgstr "" +#: ../../Zotlabs/Module/Admin/Security.php:107 +msgid "Allow unfiltered embedded HTML content only from these domains" +msgstr "Разрешить встраивать нефильтруемое HTML-содержимое только для этих доменов" -#: ../../mod/delegate.php:130 ../../mod/photos.php:906 ../../mod/tagrm.php:93 -msgid "Remove" -msgstr "Удалить" +#: ../../Zotlabs/Module/Admin/Security.php:107 +msgid "One site per line. By default embedded content is filtered." +msgstr "Один сайт на строку. По умолчанию встраиваемое содержимое фильтруется." -#: ../../mod/delegate.php:131 -msgid "Add" -msgstr "Добавить" +#: ../../Zotlabs/Module/Admin/Security.php:108 +msgid "Block embedded HTML from these domains" +msgstr "Блокировать встраивание HTML-содержимого для этих доменов" -#: ../../mod/delegate.php:132 -msgid "No entries." -msgstr "Нет записей." +#: ../../Zotlabs/Module/Admin/Dbsync.php:19 +msgid "Update has been marked successful" +msgstr "Обновление было помечено как успешное" -#: ../../mod/search.php:13 ../../mod/directory.php:15 -#: ../../mod/dirprofile.php:9 ../../mod/display.php:9 ../../mod/photos.php:443 -#: ../../mod/viewconnections.php:17 -msgid "Public access denied." -msgstr "Общественный доступ запрещен." +#: ../../Zotlabs/Module/Admin/Dbsync.php:31 +#, php-format +msgid "Executing %s failed. Check system logs." +msgstr "Выполнение %s неудачно. Проверьте системный журнал." -#: ../../mod/directory.php:146 ../../mod/dirprofile.php:95 -msgid "Gender: " -msgstr "Пол:" +#: ../../Zotlabs/Module/Admin/Dbsync.php:34 +#, php-format +msgid "Update %s was successfully applied." +msgstr "Обновление %sбыло успешно применено." -#: ../../mod/directory.php:207 -msgid "Finding:" -msgstr "Поиск:" +#: ../../Zotlabs/Module/Admin/Dbsync.php:38 +#, php-format +msgid "Update %s did not return a status. Unknown if it succeeded." +msgstr "Обновление %s не вернуло статус. Неизвестно было ли оно успешным." -#: ../../mod/directory.php:215 -msgid "next page" -msgstr "следующая страница" +#: ../../Zotlabs/Module/Admin/Dbsync.php:41 +#, php-format +msgid "Update function %s could not be found." +msgstr "Функция обновления %sне может быть найдена." -#: ../../mod/directory.php:215 -msgid "previous page" -msgstr "предыдущая страница" +#: ../../Zotlabs/Module/Admin/Dbsync.php:59 +msgid "Failed Updates" +msgstr "Обновления с ошибками" -#: ../../mod/directory.php:222 -msgid "No entries (some entries may be hidden)." -msgstr "" +#: ../../Zotlabs/Module/Admin/Dbsync.php:61 +msgid "Mark success (if update was manually applied)" +msgstr "Пометить успешным (если обновление было применено вручную)" -#: ../../mod/dirprofile.php:108 -msgid "Status: " -msgstr "Статус:" +#: ../../Zotlabs/Module/Admin/Dbsync.php:62 +msgid "Attempt to execute this update step automatically" +msgstr "Попытаться применить это обновление автоматически" -#: ../../mod/dirprofile.php:109 -msgid "Sexual Preference: " -msgstr "Сексуальная ориентация:" +#: ../../Zotlabs/Module/Admin/Dbsync.php:67 +msgid "No failed updates." +msgstr "Ошибок обновлений нет." -#: ../../mod/dirprofile.php:111 -msgid "Homepage: " -msgstr "Домашняя страница:" +#: ../../Zotlabs/Module/Admin/Profs.php:89 +msgid "New Profile Field" +msgstr "Поле нового профиля" + +#: ../../Zotlabs/Module/Admin/Profs.php:90 +#: ../../Zotlabs/Module/Admin/Profs.php:110 +msgid "Field nickname" +msgstr "Псевдоним поля" + +#: ../../Zotlabs/Module/Admin/Profs.php:90 +#: ../../Zotlabs/Module/Admin/Profs.php:110 +msgid "System name of field" +msgstr "Системное имя поля" + +#: ../../Zotlabs/Module/Admin/Profs.php:91 +#: ../../Zotlabs/Module/Admin/Profs.php:111 +msgid "Input type" +msgstr "Тип ввода" + +#: ../../Zotlabs/Module/Admin/Profs.php:92 +#: ../../Zotlabs/Module/Admin/Profs.php:112 +msgid "Field Name" +msgstr "Имя поля" + +#: ../../Zotlabs/Module/Admin/Profs.php:92 +#: ../../Zotlabs/Module/Admin/Profs.php:112 +msgid "Label on profile pages" +msgstr "Метка на странице профиля" + +#: ../../Zotlabs/Module/Admin/Profs.php:93 +#: ../../Zotlabs/Module/Admin/Profs.php:113 +msgid "Help text" +msgstr "Текст подсказки" + +#: ../../Zotlabs/Module/Admin/Profs.php:93 +#: ../../Zotlabs/Module/Admin/Profs.php:113 +msgid "Additional info (optional)" +msgstr "Дополнительная информация (необязательно)" + +#: ../../Zotlabs/Module/Admin/Profs.php:103 +msgid "Field definition not found" +msgstr "Определения поля не найдено" + +#: ../../Zotlabs/Module/Admin/Profs.php:109 +msgid "Edit Profile Field" +msgstr "Редактировать поле профиля" + +#: ../../Zotlabs/Module/Admin/Profs.php:169 +msgid "Basic Profile Fields" +msgstr "Основные поля профиля" + +#: ../../Zotlabs/Module/Admin/Profs.php:170 +msgid "Advanced Profile Fields" +msgstr "Дополнительные поля профиля" + +#: ../../Zotlabs/Module/Admin/Profs.php:170 +msgid "(In addition to basic fields)" +msgstr "(к основым полям)" + +#: ../../Zotlabs/Module/Admin/Profs.php:172 +msgid "All available fields" +msgstr "Все доступные поля" + +#: ../../Zotlabs/Module/Admin/Profs.php:173 +msgid "Custom Fields" +msgstr "Настраиваемые поля" + +#: ../../Zotlabs/Module/Admin/Profs.php:177 +msgid "Create Custom Field" +msgstr "Создать настраиваемое поле" + +#: ../../Zotlabs/Module/Admin/Themes.php:26 +msgid "Theme settings updated." +msgstr "Настройки темы обновленны." -#: ../../mod/dirprofile.php:112 -msgid "Hometown: " -msgstr "Город проживания:" +#: ../../Zotlabs/Module/Admin/Themes.php:61 +msgid "No themes found." +msgstr "Темы не найдены." -#: ../../mod/dirprofile.php:114 -msgid "About: " -msgstr "О себе:" +#: ../../Zotlabs/Module/Admin/Themes.php:116 +msgid "Screenshot" +msgstr "Снимок экрана" -#: ../../mod/dirprofile.php:162 -msgid "Keywords: " -msgstr "Ключевые слова:" +#: ../../Zotlabs/Module/Admin/Themes.php:162 +msgid "[Experimental]" +msgstr "[экспериментальный]" -#: ../../mod/dirsearch.php:21 -msgid "This site is not a directory server" -msgstr "Этот сайт не является сервером каталога" +#: ../../Zotlabs/Module/Admin/Themes.php:163 +msgid "[Unsupported]" +msgstr "[неподдерживаемый]" -#: ../../mod/home.php:81 -msgid "Hubzilla - "The Network"" -msgstr "" +#: ../../Zotlabs/Module/Admin/Features.php:55 +#: ../../Zotlabs/Module/Admin/Features.php:56 +#: ../../Zotlabs/Module/Settings/Features.php:65 +msgid "Off" +msgstr "Выкл." + +#: ../../Zotlabs/Module/Admin/Features.php:55 +#: ../../Zotlabs/Module/Admin/Features.php:56 +#: ../../Zotlabs/Module/Settings/Features.php:65 +msgid "On" +msgstr "Вкл." -#: ../../mod/home.php:94 +#: ../../Zotlabs/Module/Admin/Features.php:56 #, php-format -msgid "Welcome to %s" -msgstr "Добро пожаловать в %s" +msgid "Lock feature %s" +msgstr "Функция блокировки \"%s\"" -#: ../../mod/setup.php:162 -msgid "Hubzilla Server - Setup" -msgstr "Hubzilla Сервер - Установка" +#: ../../Zotlabs/Module/Admin/Features.php:64 +msgid "Manage Additional Features" +msgstr "Управлять дополнительными функциями" -#: ../../mod/setup.php:168 -msgid "Could not connect to database." -msgstr "Не удалось подключиться к серверу баз данных." +#: ../../Zotlabs/Module/Admin/Queue.php:35 +msgid "Queue Statistics" +msgstr "Статистика очереди" -#: ../../mod/setup.php:172 -msgid "" -"Could not connect to specified site URL. Possible SSL certificate or DNS " -"issue." -msgstr "" +#: ../../Zotlabs/Module/Admin/Queue.php:36 +msgid "Total Entries" +msgstr "Всего записей" -#: ../../mod/setup.php:179 -msgid "Could not create table." -msgstr "Не удалось создать таблицу." +#: ../../Zotlabs/Module/Admin/Queue.php:37 +msgid "Priority" +msgstr "Приоритет" -#: ../../mod/setup.php:185 -msgid "Your site database has been installed." -msgstr "Ваша база данных установлена." +#: ../../Zotlabs/Module/Admin/Queue.php:38 +msgid "Destination URL" +msgstr "Конечный URL-адрес" -#: ../../mod/setup.php:190 -msgid "" -"You may need to import the file \"install/database.sql\" manually using " -"phpmyadmin or mysql." -msgstr "" +#: ../../Zotlabs/Module/Admin/Queue.php:39 +msgid "Mark hub permanently offline" +msgstr "Пометить хаб как постоянно отключенный" -#: ../../mod/setup.php:191 ../../mod/setup.php:260 ../../mod/setup.php:655 -msgid "Please see the file \"install/INSTALL.txt\"." -msgstr "Пожалуйста, обратитесь к файлу \"install/INSTALL.txt\"." +#: ../../Zotlabs/Module/Admin/Queue.php:40 +msgid "Empty queue for this hub" +msgstr "Освободить очередь для этого хаба" -#: ../../mod/setup.php:257 -msgid "System check" -msgstr "Проверка системы" +#: ../../Zotlabs/Module/Admin/Queue.php:41 +msgid "Last known contact" +msgstr "Последний известный контакт" -#: ../../mod/setup.php:261 ../../mod/events.php:380 -msgid "Next" -msgstr "Следующая" +#: ../../Zotlabs/Module/Admin/Account_edit.php:29 +#, php-format +msgid "Password changed for account %d." +msgstr "Пароль для аккаунта %d изменён." -#: ../../mod/setup.php:262 -msgid "Check again" -msgstr "Проверить снова" +#: ../../Zotlabs/Module/Admin/Account_edit.php:46 +msgid "Account settings updated." +msgstr "Настройки аккаунта обновлены." -#: ../../mod/setup.php:284 -msgid "Database connection" -msgstr "Подключение к базе данных" +#: ../../Zotlabs/Module/Admin/Account_edit.php:61 +msgid "Account not found." +msgstr "Учётная запись не найдена." -#: ../../mod/setup.php:285 -msgid "" -"In order to install Hubzilla we need to know how to connect to your " -"database." -msgstr "" +#: ../../Zotlabs/Module/Admin/Account_edit.php:68 +msgid "Account Edit" +msgstr "Редактировать аккаунт" -#: ../../mod/setup.php:286 -msgid "" -"Please contact your hosting provider or site administrator if you have " -"questions about these settings." -msgstr "" +#: ../../Zotlabs/Module/Admin/Account_edit.php:69 +msgid "New Password" +msgstr "Новый пароль" -#: ../../mod/setup.php:287 -msgid "" -"The database you specify below should already exist. If it does not, please " -"create it before continuing." -msgstr "" +#: ../../Zotlabs/Module/Admin/Account_edit.php:70 +msgid "New Password again" +msgstr "Повторите новый пароль" -#: ../../mod/setup.php:291 -msgid "Database Server Name" -msgstr "Имя сервера базы данных" +#: ../../Zotlabs/Module/Admin/Account_edit.php:71 +msgid "Technical skill level" +msgstr "Уровень технических навыков" -#: ../../mod/setup.php:291 -msgid "Default is localhost" -msgstr "По умолчанию localhost" +#: ../../Zotlabs/Module/Admin/Account_edit.php:72 +msgid "Account language (for emails)" +msgstr "Язык сообщения для email" -#: ../../mod/setup.php:292 -msgid "Database Port" -msgstr "Порт базы данных" +#: ../../Zotlabs/Module/Admin/Account_edit.php:73 +msgid "Service class" +msgstr "Класс обслуживания" -#: ../../mod/setup.php:292 -msgid "Communication port number - use 0 for default" -msgstr "Порт коммуникации - используйте 0 по умолчанию" +#: ../../Zotlabs/Module/Admin/Channels.php:31 +#, php-format +msgid "%s channel censored/uncensored" +msgid_plural "%s channels censored/uncensored" +msgstr[0] "" +msgstr[1] "" -#: ../../mod/setup.php:293 -msgid "Database Login Name" -msgstr "Имя для подключения к базе данных" +#: ../../Zotlabs/Module/Admin/Channels.php:40 +#, php-format +msgid "%s channel code allowed/disallowed" +msgid_plural "%s channels code allowed/disallowed" +msgstr[0] "" +msgstr[1] "" -#: ../../mod/setup.php:294 -msgid "Database Login Password" -msgstr "Пароль для подключения к базе данных" +#: ../../Zotlabs/Module/Admin/Channels.php:46 +#, php-format +msgid "%s channel deleted" +msgid_plural "%s channels deleted" +msgstr[0] "" +msgstr[1] "" -#: ../../mod/setup.php:295 -msgid "Database Name" -msgstr "Имя базы данных" +#: ../../Zotlabs/Module/Admin/Channels.php:65 +msgid "Channel not found" +msgstr "Канал не найден" -#: ../../mod/setup.php:297 ../../mod/setup.php:339 -msgid "Site administrator email address" -msgstr "Адрес электронной почты администратора сайта" +#: ../../Zotlabs/Module/Admin/Channels.php:75 +#, php-format +msgid "Channel '%s' deleted" +msgstr "Канал '%s' удалён" -#: ../../mod/setup.php:297 ../../mod/setup.php:339 -msgid "" -"Your account email address must match this in order to use the web admin " -"panel." -msgstr "" +#: ../../Zotlabs/Module/Admin/Channels.php:87 +#, php-format +msgid "Channel '%s' censored" +msgstr "Канал '%s' цензурируется" -#: ../../mod/setup.php:298 ../../mod/setup.php:341 -msgid "Website URL" -msgstr "URL веб-сайта" +#: ../../Zotlabs/Module/Admin/Channels.php:87 +#, php-format +msgid "Channel '%s' uncensored" +msgstr "Канал '%s' нецензурируется" -#: ../../mod/setup.php:298 ../../mod/setup.php:341 -msgid "Please use SSL (https) URL if available." -msgstr "Пожалуйста, используйте SSL (https) URL если возможно." +#: ../../Zotlabs/Module/Admin/Channels.php:98 +#, php-format +msgid "Channel '%s' code allowed" +msgstr "Код в канале '%s' разрешён" -#: ../../mod/setup.php:301 ../../mod/setup.php:344 -msgid "Please select a default timezone for your website" -msgstr "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта" +#: ../../Zotlabs/Module/Admin/Channels.php:98 +#, php-format +msgid "Channel '%s' code disallowed" +msgstr "Код в канале '%s' запрещён" + +#: ../../Zotlabs/Module/Admin/Channels.php:150 +msgid "Censor" +msgstr "Цензурировать" + +#: ../../Zotlabs/Module/Admin/Channels.php:151 +msgid "Uncensor" +msgstr "Нецензурировать" + +#: ../../Zotlabs/Module/Admin/Channels.php:152 +msgid "Allow Code" +msgstr "Разрешить код" -#: ../../mod/setup.php:328 -msgid "Site settings" -msgstr "Настройки сайта" +#: ../../Zotlabs/Module/Admin/Channels.php:153 +msgid "Disallow Code" +msgstr "Запретить код" -#: ../../mod/setup.php:387 -msgid "Could not find a command line version of PHP in the web server PATH." +#: ../../Zotlabs/Module/Admin/Channels.php:158 +msgid "UID" msgstr "" -#: ../../mod/setup.php:388 +#: ../../Zotlabs/Module/Admin/Channels.php:162 msgid "" -"If you don't have a command line version of PHP installed on server, you " -"will not be able to run background polling via cron." +"Selected channels will be deleted!\\n\\nEverything that was posted in these " +"channels on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" +"Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах " +"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" -#: ../../mod/setup.php:392 -msgid "PHP executable path" -msgstr "PHP executable путь" - -#: ../../mod/setup.php:392 +#: ../../Zotlabs/Module/Admin/Channels.php:163 msgid "" -"Enter full path to php executable. You can leave this blank to continue the " -"installation." +"The channel {0} will be deleted!\\n\\nEverything that was posted in this " +"channel on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" +"Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале " +"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" -#: ../../mod/setup.php:397 -msgid "Command line PHP" -msgstr "Command line PHP" +#: ../../Zotlabs/Module/Email_validation.php:24 +#: ../../Zotlabs/Module/Email_resend.php:12 +msgid "Token verification failed." +msgstr "Не удалось выполнить проверку токена." + +#: ../../Zotlabs/Module/Email_validation.php:36 +msgid "Email Verification Required" +msgstr "Требуется проверка адреса email" -#: ../../mod/setup.php:406 +#: ../../Zotlabs/Module/Email_validation.php:37 +#, php-format msgid "" -"The command line version of PHP on your system does not have " -"\"register_argc_argv\" enabled." +"A verification token was sent to your email address [%s]. Enter that token " +"here to complete the account verification step. Please allow a few minutes " +"for delivery, and check your spam folder if you do not see the message." msgstr "" +"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен " +"здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут " +"для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма." -#: ../../mod/setup.php:407 -msgid "This is required for message delivery to work." -msgstr "Это требуется для доставки сообщений." - -#: ../../mod/setup.php:409 -msgid "PHP register_argc_argv" -msgstr "PHP register_argc_argv" +#: ../../Zotlabs/Module/Email_validation.php:38 +msgid "Resend Email" +msgstr "Выслать повторно" -#: ../../mod/setup.php:430 -msgid "" -"Error: the \"openssl_pkey_new\" function on this system is not able to " -"generate encryption keys" -msgstr "" +#: ../../Zotlabs/Module/Email_validation.php:41 +msgid "Validation token" +msgstr "Проверочный токен" -#: ../../mod/setup.php:431 -msgid "" -"If running under Windows, please see " -"\"http://www.php.net/manual/en/openssl.installation.php\"." -msgstr "Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." +#: ../../Zotlabs/Module/Invite.php:29 +msgid "Total invitation limit exceeded." +msgstr "Превышено общее количество приглашений." -#: ../../mod/setup.php:433 -msgid "Generate encryption keys" -msgstr "Генерация ключей шифрования" +#: ../../Zotlabs/Module/Invite.php:53 +#, php-format +msgid "%s : Not a valid email address." +msgstr "%s : Недействительный адрес электронной почты." -#: ../../mod/setup.php:440 -msgid "libCurl PHP module" -msgstr "libCurl PHP модуль" +#: ../../Zotlabs/Module/Invite.php:67 +msgid "Please join us on $Projectname" +msgstr "Присоединятесь к $Projectname !" -#: ../../mod/setup.php:441 -msgid "GD graphics PHP module" -msgstr "GD graphics PHP модуль" +#: ../../Zotlabs/Module/Invite.php:77 +msgid "Invitation limit exceeded. Please contact your site administrator." +msgstr "Превышен лимит приглашений. Пожалуйста, свяжитесь с администрацией сайта." -#: ../../mod/setup.php:442 -msgid "OpenSSL PHP module" -msgstr "OpenSSL PHP модуль" +#: ../../Zotlabs/Module/Invite.php:86 +#, php-format +msgid "%d message sent." +msgid_plural "%d messages sent." +msgstr[0] "" +msgstr[1] "" -#: ../../mod/setup.php:443 -msgid "mysqli PHP module" -msgstr "mysqli PHP модуль" +#: ../../Zotlabs/Module/Invite.php:107 +msgid "You have no more invitations available" +msgstr "У вас больше нет приглашений" -#: ../../mod/setup.php:444 -msgid "mb_string PHP module" -msgstr "mb_string PHP модуль" +#: ../../Zotlabs/Module/Invite.php:138 +msgid "Send invitations" +msgstr "Отправить приглашение" -#: ../../mod/setup.php:445 -msgid "mcrypt PHP module" -msgstr "mcrypt PHP модуль" +#: ../../Zotlabs/Module/Invite.php:139 +msgid "Enter email addresses, one per line:" +msgstr "Введите адреса электронной почты, по одному в строке:" -#: ../../mod/setup.php:450 ../../mod/setup.php:452 -msgid "Apache mod_rewrite module" -msgstr "Apache mod_rewrite модуль" +#: ../../Zotlabs/Module/Invite.php:141 +msgid "Please join my community on $Projectname." +msgstr "Присоединятесь к нашему сообществу $Projectname !" -#: ../../mod/setup.php:450 -msgid "" -"Error: Apache webserver mod-rewrite module is required but not installed." -msgstr "Ошибка: Apache веб-сервер модуль mod-rewrite требуется, но не установлен." +#: ../../Zotlabs/Module/Invite.php:143 +msgid "You will need to supply this invitation code:" +msgstr "Вам нужно предоставит этот код приглашения:" -#: ../../mod/setup.php:456 ../../mod/setup.php:459 -msgid "proc_open" -msgstr "proc_open" +#: ../../Zotlabs/Module/Invite.php:144 +msgid "1. Register at any $Projectname location (they are all inter-connected)" +msgstr "1. Зарегистрируйтесь на любом из серверов $Projectname" -#: ../../mod/setup.php:456 -msgid "" -"Error: proc_open is required but is either not installed or has been " -"disabled in php.ini" -msgstr "Ошибка: proc_open требуется, но не установлен или отключен в php.ini" +#: ../../Zotlabs/Module/Invite.php:146 +msgid "2. Enter my $Projectname network address into the site searchbar." +msgstr "2. Введите сетевой адрес $Projectname в поисковой строке сайта" -#: ../../mod/setup.php:464 -msgid "Error: libCURL PHP module required but not installed." -msgstr "Ошибка: Модуль libCURL PHP требуется, но не установлен." +#: ../../Zotlabs/Module/Invite.php:147 +msgid "or visit" +msgstr "или посетите" -#: ../../mod/setup.php:468 -msgid "" -"Error: GD graphics PHP module with JPEG support required but not installed." -msgstr "Ошибка: GD graphics PHP модуль с поддержкой JPEG требуется, но не установлен." +#: ../../Zotlabs/Module/Invite.php:149 +msgid "3. Click [Connect]" +msgstr "Нажать [Подключиться]" -#: ../../mod/setup.php:472 -msgid "Error: openssl PHP module required but not installed." -msgstr "Ошибка: openssl PHP модуль требуется, но не установлен." +#: ../../Zotlabs/Module/Blocks.php:156 +msgid "Block Title" +msgstr "Заблокировать заголовок" -#: ../../mod/setup.php:476 -msgid "Error: mysqli PHP module required but not installed." -msgstr "Ошибка: mysqli PHP модуль требуется, но не установлен." +#: ../../Zotlabs/Module/Cover_photo.php:168 +#: ../../Zotlabs/Module/Cover_photo.php:218 +msgid "Cover Photos" +msgstr "Фотографии обложки" -#: ../../mod/setup.php:480 -msgid "Error: mb_string PHP module required but not installed." -msgstr "Ошибка: mb_string PHP модуль требуется, но не установлен." +#: ../../Zotlabs/Module/Cover_photo.php:390 +msgid "Your cover photo may be visible to anybody on the internet" +msgstr "Ваше фото обложки может быть видно кому угодно в Интернете" -#: ../../mod/setup.php:484 -msgid "Error: mcrypt PHP module required but not installed." -msgstr "Ошибка: mcrypt PHP модуль требуется, но не установлен." +#: ../../Zotlabs/Module/Cover_photo.php:394 +msgid "Change Cover Photo" +msgstr "Изменить фотографию обложки" -#: ../../mod/setup.php:500 -msgid "" -"The web installer needs to be able to create a file called \".htconfig.php\"" -" in the top folder of your web server and it is unable to do so." -msgstr "Веб-установщик должен быть в состоянии создать файл с именем \".htconfig.php\" в верхней папке вашего веб-сервера, но он не в состоянии сделать это." +#: ../../Zotlabs/Module/Like.php:54 +msgid "Like/Dislike" +msgstr "Нравится / не нравится" -#: ../../mod/setup.php:501 -msgid "" -"This is most often a permission setting, as the web server may not be able " -"to write files in your folder - even if you can." -msgstr "" +#: ../../Zotlabs/Module/Like.php:59 +msgid "This action is restricted to members." +msgstr "Это действие доступно только участникам." -#: ../../mod/setup.php:502 +#: ../../Zotlabs/Module/Like.php:60 msgid "" -"At the end of this procedure, we will give you a text to save in a file " -"named .htconfig.php in your Red top folder." +"Please login with your $Projectname ID or register as a new $Projectname member to continue." msgstr "" +"Пожалуйста, для продолжения войдите с вашим $Projectname " +"ID или зарегистрируйтесь как новый участник $Projectname." -#: ../../mod/setup.php:503 -msgid "" -"You can alternatively skip this procedure and perform a manual installation." -" Please see the file \"install/INSTALL.txt\" for instructions." -msgstr "Вы можете пропустить эту процедуру и выполнить установку вручную. Обратитесь к файлу \"install/INSTALL.txt\" для получения инструкций." +#: ../../Zotlabs/Module/Like.php:109 ../../Zotlabs/Module/Like.php:135 +#: ../../Zotlabs/Module/Like.php:173 +msgid "Invalid request." +msgstr "Неверный запрос." -#: ../../mod/setup.php:506 -msgid ".htconfig.php is writable" -msgstr ".htconfig.php доступен для записи" +#: ../../Zotlabs/Module/Like.php:150 +msgid "thing" +msgstr "предмет" -#: ../../mod/setup.php:516 -msgid "" -"Red uses the Smarty3 template engine to render its web views. Smarty3 " -"compiles templates to PHP to speed up rendering." -msgstr "" +#: ../../Zotlabs/Module/Like.php:196 +msgid "Channel unavailable." +msgstr "Канал недоступен." -#: ../../mod/setup.php:517 -msgid "" -"In order to store these compiled templates, the web server needs to have " -"write access to the directory view/tpl/smarty3/ under the Red top level " -"folder." -msgstr "" +#: ../../Zotlabs/Module/Like.php:244 +msgid "Previous action reversed." +msgstr "Предыдущее действие отменено." -#: ../../mod/setup.php:518 ../../mod/setup.php:536 -msgid "" -"Please ensure that the user that your web server runs as (e.g. www-data) has" -" write access to this folder." -msgstr "" +#: ../../Zotlabs/Module/Like.php:442 +#, php-format +msgid "%1$s agrees with %2$s's %3$s" +msgstr "%1$s согласен с %2$s %3$s" -#: ../../mod/setup.php:519 -msgid "" -"Note: as a security measure, you should give the web server write access to " -"view/tpl/smarty3/ only--not the template files (.tpl) that it contains." -msgstr "" +#: ../../Zotlabs/Module/Like.php:444 +#, php-format +msgid "%1$s doesn't agree with %2$s's %3$s" +msgstr "%1$s не согласен с %2$s %3$s" -#: ../../mod/setup.php:522 -msgid "view/tpl/smarty3 is writable" -msgstr "view/tpl/smarty3 доступен для записи" +#: ../../Zotlabs/Module/Like.php:446 +#, php-format +msgid "%1$s abstains from a decision on %2$s's %3$s" +msgstr "%1$s воздерживается от решения по %2$s%3$s" -#: ../../mod/setup.php:535 -msgid "" -"Red uses the store directory to save uploaded files. The web server needs to" -" have write access to the store directory under the Red top level folder" -msgstr "" +#: ../../Zotlabs/Module/Like.php:564 +msgid "Action completed." +msgstr "Действие завершено." -#: ../../mod/setup.php:539 -msgid "store is writable" -msgstr "" +#: ../../Zotlabs/Module/Like.php:565 +msgid "Thank you." +msgstr "Спасибо." -#: ../../mod/setup.php:569 +#: ../../Zotlabs/Module/Defperms.php:239 +#: ../../Zotlabs/Module/Settings/Channel.php:488 msgid "" -"SSL certificate cannot be validated. Fix certificate or disable https access" -" to this site." -msgstr "" +"If enabled, connection requests will be approved without your interaction" +msgstr "Если включено, запросы контактов будут одобрены без вашего участия" -#: ../../mod/setup.php:570 -msgid "" -"If you have https access to your website or allow connections to TCP port " -"443 (the https: port), you MUST use a browser-valid certificate. You MUST " -"NOT use self-signed certificates!" -msgstr "" +#: ../../Zotlabs/Module/Defperms.php:246 +msgid "Automatic approval settings" +msgstr "Настройки автоматического одобрения" -#: ../../mod/setup.php:571 +#: ../../Zotlabs/Module/Defperms.php:254 msgid "" -"This restriction is incorporated because public posts from you may for " -"example contain references to images on your own hub." -msgstr "" +"Some individual permissions may have been preset or locked based on your " +"channel type and privacy settings." +msgstr "Некоторые индивидуальные разрешения могут быть предустановлены или заблокированы на основании типа вашего канала и настроек приватности." -#: ../../mod/setup.php:572 -msgid "" -"If your certificate is not recognised, members of other sites (who may " -"themselves have valid certificates) will get a warning message on their own " -"site complaining about security issues." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:67 +msgid "Unable to update menu." +msgstr "Невозможно обновить меню." -#: ../../mod/setup.php:573 -msgid "" -"This can cause usability issues elsewhere (not just on your own site) so we " -"must insist on this requirement." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:78 +msgid "Unable to create menu." +msgstr "Невозможно создать меню." -#: ../../mod/setup.php:574 -msgid "" -"Providers are available that issue free certificates which are browser-" -"valid." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:160 ../../Zotlabs/Module/Menu.php:173 +msgid "Menu Name" +msgstr "Название меню" -#: ../../mod/setup.php:576 -msgid "SSL certificate validation" -msgstr "проверка сертификата SSL" +#: ../../Zotlabs/Module/Menu.php:160 +msgid "Unique name (not visible on webpage) - required" +msgstr "Уникальное название (не видимо на странице) - требуется" -#: ../../mod/setup.php:582 -msgid "" -"Url rewrite in .htaccess is not working. Check your server configuration." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174 +msgid "Menu Title" +msgstr "Заголовок меню" -#: ../../mod/setup.php:584 -msgid "Url rewrite is working" -msgstr "Url rewrite работает" +#: ../../Zotlabs/Module/Menu.php:161 +msgid "Visible on webpage - leave empty for no title" +msgstr "Видимость на странице - оставьте пустым если не хотите иметь заголовок" -#: ../../mod/setup.php:594 -msgid "" -"The database configuration file \".htconfig.php\" could not be written. " -"Please use the enclosed text to create a configuration file in your web " -"server root." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:162 +msgid "Allow Bookmarks" +msgstr "Разрешить закладки" -#: ../../mod/setup.php:618 -msgid "Errors encountered creating database tables." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:221 +msgid "Menu may be used to store saved bookmarks" +msgstr "Меню может использоваться, чтобы сохранить закладки" -#: ../../mod/setup.php:653 -msgid "

What next

" -msgstr "

Что дальше

" +#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:224 +msgid "Submit and proceed" +msgstr "Отправить и обработать" -#: ../../mod/setup.php:654 -msgid "" -"IMPORTANT: You will need to [manually] setup a scheduled task for the " -"poller." -msgstr "" +#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Locs.php:120 +msgid "Drop" +msgstr "Удалить" -#: ../../mod/editblock.php:8 ../../mod/editblock.php:27 -#: ../../mod/editblock.php:53 ../../mod/editlayout.php:36 -#: ../../mod/editpost.php:20 ../../mod/editwebpage.php:32 -msgid "Item not found" -msgstr "Элемент не найден" +#: ../../Zotlabs/Module/Menu.php:180 +msgid "Bookmarks allowed" +msgstr "Закладки разрешены" -#: ../../mod/editblock.php:77 -msgid "Edit Block" -msgstr "Редактировать блок" +#: ../../Zotlabs/Module/Menu.php:182 +msgid "Delete this menu" +msgstr "Удалить это меню" -#: ../../mod/editblock.php:87 -msgid "Delete block?" -msgstr "Удалить блок?" +#: ../../Zotlabs/Module/Menu.php:183 ../../Zotlabs/Module/Menu.php:218 +msgid "Edit menu contents" +msgstr "Редактировать содержание меню" -#: ../../mod/editblock.php:115 ../../mod/editlayout.php:110 -#: ../../mod/editpost.php:116 ../../mod/editwebpage.php:147 -msgid "Insert YouTube video" -msgstr "Вставить YouTube видео" +#: ../../Zotlabs/Module/Menu.php:184 +msgid "Edit this menu" +msgstr "Редактировать это меню" -#: ../../mod/editblock.php:116 ../../mod/editlayout.php:111 -#: ../../mod/editpost.php:117 ../../mod/editwebpage.php:148 -msgid "Insert Vorbis [.ogg] video" -msgstr "Вставить Vorbis [.ogg] видео" +#: ../../Zotlabs/Module/Menu.php:200 +msgid "Menu could not be deleted." +msgstr "Меню не может быть удалено." -#: ../../mod/editblock.php:117 ../../mod/editlayout.php:112 -#: ../../mod/editpost.php:118 ../../mod/editwebpage.php:149 -msgid "Insert Vorbis [.ogg] audio" -msgstr "Вставить Vorbis [.ogg] музыку" +#: ../../Zotlabs/Module/Menu.php:213 +msgid "Edit Menu" +msgstr "Редактировать меню" -#: ../../mod/editblock.php:153 -msgid "Delete Block" -msgstr "Удалить блок" +#: ../../Zotlabs/Module/Menu.php:217 +msgid "Add or remove entries to this menu" +msgstr "Добавить или удалить пункты этого меню" -#: ../../mod/pdledit.php:13 -msgid "Layout updated." -msgstr "Шаблон обновлен." +#: ../../Zotlabs/Module/Menu.php:219 +msgid "Menu name" +msgstr "Название меню" -#: ../../mod/pdledit.php:28 ../../mod/pdledit.php:53 -msgid "Edit System Page Description" -msgstr "" +#: ../../Zotlabs/Module/Menu.php:219 +msgid "Must be unique, only seen by you" +msgstr "Должно быть уникальным (видно только вам)" -#: ../../mod/pdledit.php:48 -msgid "Layout not found." -msgstr "Шаблон не найден" +#: ../../Zotlabs/Module/Menu.php:220 +msgid "Menu title" +msgstr "Заголовок меню" -#: ../../mod/pdledit.php:54 -msgid "Module Name:" -msgstr "Имя модуля:" +#: ../../Zotlabs/Module/Menu.php:220 +msgid "Menu title as seen by others" +msgstr "Видимый другими заголовок меню" -#: ../../mod/pdledit.php:55 ../../mod/layouts.php:59 -msgid "Layout Help" -msgstr "Помощь к шаблону" +#: ../../Zotlabs/Module/Menu.php:221 +msgid "Allow bookmarks" +msgstr "Разрешить закладки" -#: ../../mod/editlayout.php:72 -msgid "Edit Layout" -msgstr "Редактировать шаблон" +#: ../../Zotlabs/Module/Manage.php:138 ../../Zotlabs/Module/New_channel.php:147 +#, php-format +msgid "You have created %1$.0f of %2$.0f allowed channels." +msgstr "Вы создали %1$.0f из %2$.0f возможных каналов." -#: ../../mod/editlayout.php:82 -msgid "Delete layout?" -msgstr "Удалить шаблон?" +#: ../../Zotlabs/Module/Manage.php:145 +msgid "Create a new channel" +msgstr "Создать новый канал" -#: ../../mod/editlayout.php:146 -msgid "Delete Layout" -msgstr "Удалить шаблон" +#: ../../Zotlabs/Module/Manage.php:145 ../../Zotlabs/Module/Chat.php:256 +#: ../../Zotlabs/Module/Wiki.php:205 ../../Zotlabs/Module/Profiles.php:831 +msgid "Create New" +msgstr "Создать новый" -#: ../../mod/editpost.php:31 -msgid "Item is not editable" -msgstr "Элемент нельзя редактировать" +#: ../../Zotlabs/Module/Manage.php:171 +msgid "Current Channel" +msgstr "Текущий канал" -#: ../../mod/editpost.php:53 -msgid "Delete item?" -msgstr "Удалить элемент?" +#: ../../Zotlabs/Module/Manage.php:173 +msgid "Switch to one of your channels by selecting it." +msgstr "Выбрать и переключиться на один из ваших каналов" -#: ../../mod/editwebpage.php:106 -msgid "Edit Webpage" -msgstr "Редактировать веб-страницу" +#: ../../Zotlabs/Module/Manage.php:174 +msgid "Default Channel" +msgstr "Основной канал" -#: ../../mod/editwebpage.php:116 -msgid "Delete webpage?" -msgstr "Удалить веб-страницу?" +#: ../../Zotlabs/Module/Manage.php:175 +msgid "Make Default" +msgstr "Сделать основным" -#: ../../mod/editwebpage.php:186 -msgid "Delete Webpage" -msgstr "Удалить веб-страницу" +#: ../../Zotlabs/Module/Manage.php:178 +#, php-format +msgid "%d new messages" +msgstr "%d новых сообщений" -#: ../../mod/siteinfo.php:57 +#: ../../Zotlabs/Module/Manage.php:179 #, php-format -msgid "Version %s" -msgstr "Версия %s" +msgid "%d new introductions" +msgstr "%d новых представлений" -#: ../../mod/siteinfo.php:76 -msgid "Installed plugins/addons/apps:" -msgstr "" +#: ../../Zotlabs/Module/Manage.php:181 +msgid "Delegated Channel" +msgstr "Делегированный канал" -#: ../../mod/siteinfo.php:89 -msgid "No installed plugins/addons/apps" -msgstr "" +#: ../../Zotlabs/Module/Changeaddr.php:35 +msgid "" +"Channel name changes are not allowed within 48 hours of changing the account " +"password." +msgstr "Изменение названия канала не разрешается в течении 48 часов после смены пароля у аккаунта." -#: ../../mod/siteinfo.php:97 -msgid "Red" -msgstr "Red" +#: ../../Zotlabs/Module/Changeaddr.php:77 +msgid "Change channel nickname/address" +msgstr "Изменить псевдоним / адрес канала" -#: ../../mod/siteinfo.php:98 -msgid "" -"This is a hub of the Hubzilla - a global cooperative network of " -"decentralised privacy enhanced websites." -msgstr "" +#: ../../Zotlabs/Module/Changeaddr.php:78 +msgid "Any/all connections on other networks will be lost!" +msgstr "Любые / все контакты в других сетях будут утеряны!" -#: ../../mod/siteinfo.php:101 -msgid "Running at web location" -msgstr "" +#: ../../Zotlabs/Module/Changeaddr.php:80 +msgid "New channel address" +msgstr "Новый адрес канала" -#: ../../mod/siteinfo.php:102 -msgid "" -"Please visit GetZot.com to learn more " -"about the Hubzilla." -msgstr "Пожалуйста посетите GetZot.com чтобы узнать больше о Hubzilla." +#: ../../Zotlabs/Module/Changeaddr.php:81 +msgid "Rename Channel" +msgstr "Переименовать канал" -#: ../../mod/siteinfo.php:103 -msgid "Bug reports and issues: please visit" -msgstr "" +#: ../../Zotlabs/Module/Settings/Features.php:73 +msgid "Additional Features" +msgstr "Дополнительные функции" + +#: ../../Zotlabs/Module/Settings/Features.php:74 +#: ../../Zotlabs/Module/Settings/Account.php:116 +msgid "Your technical skill level" +msgstr "Ваш уровень технических навыков" -#: ../../mod/siteinfo.php:106 +#: ../../Zotlabs/Module/Settings/Features.php:74 +#: ../../Zotlabs/Module/Settings/Account.php:116 msgid "" -"Suggestions, praise, etc. - please email \"hubzilla\" at librelist - dot " -"com" -msgstr "" +"Used to provide a member experience and additional features consistent with " +"your comfort level" +msgstr "Используется чтобы обеспечить соответствие опыта пользователя и функций на комфортном для вас уровне" -#: ../../mod/siteinfo.php:108 -msgid "Site Administrators" -msgstr "Администратор сайта" +#: ../../Zotlabs/Module/Settings/Channel.php:333 +msgid "Nobody except yourself" +msgstr "Никто кроме вас" -#: ../../mod/photos.php:77 -msgid "Page owner information could not be retrieved." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:334 +msgid "Only those you specifically allow" +msgstr "Только персонально разрешённые" -#: ../../mod/photos.php:97 -msgid "Album not found." -msgstr "Альбом не найден." +#: ../../Zotlabs/Module/Settings/Channel.php:335 +msgid "Approved connections" +msgstr "Одобренные контакты" -#: ../../mod/photos.php:119 ../../mod/photos.php:669 -msgid "Delete Album" -msgstr "Удалить альбом" +#: ../../Zotlabs/Module/Settings/Channel.php:336 +msgid "Any connections" +msgstr "Любые контакты" -#: ../../mod/photos.php:159 ../../mod/photos.php:957 -msgid "Delete Photo" -msgstr "Удалить фотографию" +#: ../../Zotlabs/Module/Settings/Channel.php:337 +msgid "Anybody on this website" +msgstr "Любой на этом сайте" -#: ../../mod/photos.php:453 -msgid "No photos selected" -msgstr "Никакие фотографии не выбраны" +#: ../../Zotlabs/Module/Settings/Channel.php:338 +msgid "Anybody in this network" +msgstr "Любой в этой сети" -#: ../../mod/photos.php:500 -msgid "Access to this item is restricted." -msgstr "Доступ к этому элементу ограничен." +#: ../../Zotlabs/Module/Settings/Channel.php:339 +msgid "Anybody authenticated" +msgstr "Любой аутентифицированный" -#: ../../mod/photos.php:574 -#, php-format -msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." -msgstr "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото." +#: ../../Zotlabs/Module/Settings/Channel.php:340 +msgid "Anybody on the internet" +msgstr "Любой в интернете" -#: ../../mod/photos.php:577 -#, php-format -msgid "You have used %1$.2f Mbytes of photo storage." -msgstr "Вы использовали %1$.2f мегабайт для хранения фото." +#: ../../Zotlabs/Module/Settings/Channel.php:415 +msgid "Publish your default profile in the network directory" +msgstr "Публиковать ваш профиль по умолчанию в сетевом каталоге" -#: ../../mod/photos.php:596 -msgid "Upload Photos" -msgstr "Загрузить фотографии" +#: ../../Zotlabs/Module/Settings/Channel.php:420 +msgid "Allow us to suggest you as a potential friend to new members?" +msgstr "Разрешить предлагать вас как потенциального друга для новых пользователей?" + +#: ../../Zotlabs/Module/Settings/Channel.php:424 +msgid "or" +msgstr "или" + +#: ../../Zotlabs/Module/Settings/Channel.php:433 +msgid "Your channel address is" +msgstr "Адрес вашего канала" + +#: ../../Zotlabs/Module/Settings/Channel.php:436 +msgid "Your files/photos are accessible via WebDAV at" +msgstr "Ваши файы / фотографии доступны через WebDAV по" + +#: ../../Zotlabs/Module/Settings/Channel.php:488 +msgid "Automatic membership approval" +msgstr "Членство одобрено автоматически" + +#: ../../Zotlabs/Module/Settings/Channel.php:514 +msgid "Channel Settings" +msgstr "Выбор канала" + +#: ../../Zotlabs/Module/Settings/Channel.php:521 +msgid "Basic Settings" +msgstr "Основные настройки" + +#: ../../Zotlabs/Module/Settings/Channel.php:523 +#: ../../Zotlabs/Module/Settings/Account.php:119 +msgid "Email Address:" +msgstr "Адрес email:" + +#: ../../Zotlabs/Module/Settings/Channel.php:524 +msgid "Your Timezone:" +msgstr "Часовой пояс:" + +#: ../../Zotlabs/Module/Settings/Channel.php:525 +msgid "Default Post Location:" +msgstr "Расположение по умолчанию:" + +#: ../../Zotlabs/Module/Settings/Channel.php:525 +msgid "Geographical location to display on your posts" +msgstr "Показывать географическое положение в ваших публикациях" + +#: ../../Zotlabs/Module/Settings/Channel.php:526 +msgid "Use Browser Location:" +msgstr "Определять расположение из браузера" + +#: ../../Zotlabs/Module/Settings/Channel.php:528 +msgid "Adult Content" +msgstr "Содержимое для взрослых" -#: ../../mod/photos.php:600 ../../mod/photos.php:664 -msgid "New album name: " -msgstr "Название нового альбома:" +#: ../../Zotlabs/Module/Settings/Channel.php:528 +msgid "" +"This channel frequently or regularly publishes adult content. (Please tag " +"any adult material and/or nudity with #NSFW)" +msgstr "Этот канал часто или регулярно публикует содержимое для взрослых. Пожалуйста, помечайте любой такой материал тегом #NSFW" + +#: ../../Zotlabs/Module/Settings/Channel.php:530 +msgid "Security and Privacy Settings" +msgstr "Безопасность и настройки приватности" + +#: ../../Zotlabs/Module/Settings/Channel.php:532 +msgid "Your permissions are already configured. Click to view/adjust" +msgstr "Ваши разрешения уже настроены. Нажмите чтобы просмотреть или изменить" + +#: ../../Zotlabs/Module/Settings/Channel.php:534 +msgid "Hide my online presence" +msgstr "Скрывать моё присутствие онлайн" -#: ../../mod/photos.php:601 -msgid "or existing album name: " -msgstr "или существующий альбом:" +#: ../../Zotlabs/Module/Settings/Channel.php:534 +msgid "Prevents displaying in your profile that you are online" +msgstr "Предотвращает отображения статуса \"в сети\" в вашем профиле" + +#: ../../Zotlabs/Module/Settings/Channel.php:536 +msgid "Simple Privacy Settings:" +msgstr "Простые настройки безопасности:" + +#: ../../Zotlabs/Module/Settings/Channel.php:537 +msgid "" +"Very Public - extremely permissive (should be used with caution)" +msgstr "Полностью открытый - сверхлиберальный (должен использоваться с осторожностью)" + +#: ../../Zotlabs/Module/Settings/Channel.php:538 +msgid "" +"Typical - default public, privacy when desired (similar to social " +"network permissions but with improved privacy)" +msgstr "Обычный - открытый по умолчанию, приватность по желанию (как в социальных сетях, но с улучшенными настройками)" -#: ../../mod/photos.php:602 -msgid "Do not show a status post for this upload" -msgstr "Не показывать пост о состоянии этой загрузки" +#: ../../Zotlabs/Module/Settings/Channel.php:539 +msgid "Private - default private, never open or public" +msgstr "Частный - частный по умочанию, не открытый и не публичный" -#: ../../mod/photos.php:653 ../../mod/photos.php:675 ../../mod/photos.php:1129 -#: ../../mod/photos.php:1144 -msgid "Contact Photos" -msgstr "Фотографии контакта" +#: ../../Zotlabs/Module/Settings/Channel.php:540 +msgid "Blocked - default blocked to/from everybody" +msgstr "Закрытый - заблокированный по умолчанию от / для всех" -#: ../../mod/photos.php:679 -msgid "Edit Album" -msgstr "Редактировать Фотоальбом" +#: ../../Zotlabs/Module/Settings/Channel.php:542 +msgid "Allow others to tag your posts" +msgstr "Разрешить другим отмечать ваши публикации" -#: ../../mod/photos.php:685 -msgid "Show Newest First" -msgstr "Показать новые первыми" +#: ../../Zotlabs/Module/Settings/Channel.php:542 +msgid "" +"Often used by the community to retro-actively flag inappropriate content" +msgstr "Часто используется сообществом для маркировки неподобающего содержания" -#: ../../mod/photos.php:687 -msgid "Show Oldest First" -msgstr "Показать старые первыми" +#: ../../Zotlabs/Module/Settings/Channel.php:544 +msgid "Channel Permission Limits" +msgstr "Ограничения разрешений канала" -#: ../../mod/photos.php:730 ../../mod/photos.php:1176 -msgid "View Photo" -msgstr "Посмотреть фотографию" +#: ../../Zotlabs/Module/Settings/Channel.php:546 +msgid "Expire other channel content after this many days" +msgstr "Храненить содержимое других каналов, дней" -#: ../../mod/photos.php:776 -msgid "Permission denied. Access to this item may be restricted." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:546 +msgid "0 or blank to use the website limit." +msgstr "0 или пусто - использовать настройки сайта." -#: ../../mod/photos.php:778 -msgid "Photo not available" -msgstr "Фотография не доступна" +#: ../../Zotlabs/Module/Settings/Channel.php:546 +#, php-format +msgid "This website expires after %d days." +msgstr "Срок хранения содержимого этого сайта истекает через %d дней" -#: ../../mod/photos.php:838 -msgid "Use as profile photo" -msgstr "Использовать в качестве фотографии профиля" +#: ../../Zotlabs/Module/Settings/Channel.php:546 +msgid "This website does not expire imported content." +msgstr "Срок хранения импортированного содержимого этого сайта не ограничен." -#: ../../mod/photos.php:862 -msgid "View Full Size" -msgstr "Посмотреть в полный размер" +#: ../../Zotlabs/Module/Settings/Channel.php:546 +msgid "The website limit takes precedence if lower than your limit." +msgstr "Ограничение сайта имеет приоритет если ниже вашего значения." -#: ../../mod/photos.php:940 -msgid "Edit photo" -msgstr "Редактировать фотографию" +#: ../../Zotlabs/Module/Settings/Channel.php:547 +msgid "Maximum Friend Requests/Day:" +msgstr "Запросов в друзья в день:" -#: ../../mod/photos.php:942 -msgid "Rotate CW (right)" -msgstr "Повернуть CW (направо)" +#: ../../Zotlabs/Module/Settings/Channel.php:547 +msgid "May reduce spam activity" +msgstr "Может ограничить спам активность" -#: ../../mod/photos.php:943 -msgid "Rotate CCW (left)" -msgstr "Повернуть CCW (налево)" +#: ../../Zotlabs/Module/Settings/Channel.php:548 +msgid "Default Privacy Group" +msgstr "Группа конфиденциальности по умолчанию" -#: ../../mod/photos.php:946 -msgid "New album name" -msgstr "Новое название альбома:" +#: ../../Zotlabs/Module/Settings/Channel.php:550 +msgid "Use my default audience setting for the type of object published" +msgstr "Использовать настройки аудитории по умолчанию для типа опубликованного объекта" -#: ../../mod/photos.php:949 -msgid "Caption" -msgstr "Подпись" +#: ../../Zotlabs/Module/Settings/Channel.php:551 +msgid "Profile to assign new connections" +msgstr "Назначить профиль для новых контактов" -#: ../../mod/photos.php:951 -msgid "Add a Tag" -msgstr "Добавить тег" +#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/New_channel.php:177 +#: ../../Zotlabs/Module/Register.php:266 +msgid "Channel role and privacy" +msgstr "Роль и конфиденциальность канала" -#: ../../mod/photos.php:954 -msgid "" -"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -msgstr "Например: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" +#: ../../Zotlabs/Module/Settings/Channel.php:561 +msgid "Default Permissions Group" +msgstr "Группа разрешений по умолчанию" -#: ../../mod/photos.php:1107 -msgid "In This Photo:" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:567 +msgid "Maximum private messages per day from unknown people:" +msgstr "Максимально количество сообщений от незнакомых людей, в день:" -#: ../../mod/photos.php:1182 -msgid "View Album" -msgstr "Посмотреть фотоальбом" +#: ../../Zotlabs/Module/Settings/Channel.php:567 +msgid "Useful to reduce spamming" +msgstr "Полезно для сокращения количества спама" -#: ../../mod/photos.php:1191 -msgid "Recent Photos" -msgstr "Последние фотографии" +#: ../../Zotlabs/Module/Settings/Channel.php:571 +msgid "By default post a status message when:" +msgstr "По умолчанию публиковать новый статус при:" -#: ../../mod/sources.php:32 -msgid "Failed to create source. No channel selected." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:572 +msgid "accepting a friend request" +msgstr "одобрении запроса в друзья" -#: ../../mod/sources.php:45 -msgid "Source created." -msgstr "Источник создан" +#: ../../Zotlabs/Module/Settings/Channel.php:573 +msgid "joining a forum/community" +msgstr "вступлении в сообщество / форум" -#: ../../mod/sources.php:57 -msgid "Source updated." -msgstr "Источник обновлен." +#: ../../Zotlabs/Module/Settings/Channel.php:574 +msgid "making an interesting profile change" +msgstr "интересном изменении профиля" -#: ../../mod/sources.php:82 -msgid "*" -msgstr "*" +#: ../../Zotlabs/Module/Settings/Channel.php:575 +msgid "Send a notification email when:" +msgstr "Отправить уведомление по email когда:" -#: ../../mod/sources.php:89 -msgid "Manage remote sources of content for your channel." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:576 +msgid "You receive a connection request" +msgstr "вы получили новый запрос контакта" -#: ../../mod/sources.php:90 ../../mod/sources.php:100 -msgid "New Source" -msgstr "Новый источник" +#: ../../Zotlabs/Module/Settings/Channel.php:577 +msgid "Your connections are confirmed" +msgstr "ваш запрос контакта был одобрен" -#: ../../mod/sources.php:101 ../../mod/sources.php:133 -msgid "" -"Import all or selected content from the following channel into this channel " -"and distribute it according to your channel settings." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:578 +msgid "Someone writes on your profile wall" +msgstr "кто-то написал на стене вашего профиля" -#: ../../mod/sources.php:102 ../../mod/sources.php:134 -msgid "Only import content with these words (one per line)" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:579 +msgid "Someone writes a followup comment" +msgstr "кто-то пишет комментарий" -#: ../../mod/sources.php:102 ../../mod/sources.php:134 -msgid "Leave blank to import all public content" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:580 +msgid "You receive a private message" +msgstr "вы получили личное сообщение" -#: ../../mod/sources.php:103 ../../mod/sources.php:137 -#: ../../mod/new_channel.php:110 -msgid "Channel Name" -msgstr "Имя канала" +#: ../../Zotlabs/Module/Settings/Channel.php:581 +msgid "You receive a friend suggestion" +msgstr "вы получили предложение друзей" -#: ../../mod/sources.php:123 ../../mod/sources.php:150 -msgid "Source not found." -msgstr "Источник не найден." +#: ../../Zotlabs/Module/Settings/Channel.php:582 +msgid "You are tagged in a post" +msgstr "вы были отмечены в публикации" -#: ../../mod/sources.php:130 -msgid "Edit Source" -msgstr "Редактировать источник" +#: ../../Zotlabs/Module/Settings/Channel.php:583 +msgid "You are poked/prodded/etc. in a post" +msgstr "вас толкнули, подтолкнули и т.п. в публикации" -#: ../../mod/sources.php:131 -msgid "Delete Source" -msgstr "Удалить источник" +#: ../../Zotlabs/Module/Settings/Channel.php:585 +msgid "Someone likes your post/comment" +msgstr "кому-то нравится ваша публикация / комментарий" -#: ../../mod/sources.php:158 -msgid "Source removed" -msgstr "Источник удален" +#: ../../Zotlabs/Module/Settings/Channel.php:588 +msgid "Show visual notifications including:" +msgstr "Показывать визуальные оповещения включая:" -#: ../../mod/sources.php:160 -msgid "Unable to remove source." -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:590 +msgid "Unseen grid activity" +msgstr "невидимую сетевую активность" -#: ../../mod/filer.php:49 -msgid "- select -" -msgstr "- выбрать -" +#: ../../Zotlabs/Module/Settings/Channel.php:591 +msgid "Unseen channel activity" +msgstr "невидимую активность в канале" -#: ../../mod/events.php:72 -msgid "Event title and start time are required." -msgstr "Название события и время начала требуется." +#: ../../Zotlabs/Module/Settings/Channel.php:592 +msgid "Unseen private messages" +msgstr "невидимое личное сообщение" -#: ../../mod/events.php:310 -msgid "l, F j" -msgstr "l, F j" +#: ../../Zotlabs/Module/Settings/Channel.php:593 +msgid "Upcoming events" +msgstr "грядущие события" -#: ../../mod/events.php:332 -msgid "Edit event" -msgstr "Редактировать мероприятие" +#: ../../Zotlabs/Module/Settings/Channel.php:594 +msgid "Events today" +msgstr "события сегодня" -#: ../../mod/events.php:378 -msgid "Create New Event" -msgstr "Создать новое мероприятие" +#: ../../Zotlabs/Module/Settings/Channel.php:595 +msgid "Upcoming birthdays" +msgstr "грядущие дни рождения" -#: ../../mod/events.php:379 -msgid "Previous" -msgstr "Предыдущая" +#: ../../Zotlabs/Module/Settings/Channel.php:595 +msgid "Not available in all themes" +msgstr "не доступно во всех темах" -#: ../../mod/events.php:450 -msgid "hour:minute" -msgstr "часы:минуты" +#: ../../Zotlabs/Module/Settings/Channel.php:596 +msgid "System (personal) notifications" +msgstr "системные (личные) уведомления" -#: ../../mod/events.php:470 -msgid "Event details" -msgstr "Детали мероприятия" +#: ../../Zotlabs/Module/Settings/Channel.php:597 +msgid "System info messages" +msgstr "сообщения с системной информацией" -#: ../../mod/events.php:471 -#, php-format -msgid "Format is %s %s. Starting date and Title are required." -msgstr "Формат: %s %s. Дата начала и название необходимы." +#: ../../Zotlabs/Module/Settings/Channel.php:598 +msgid "System critical alerts" +msgstr "критические уведомления системы" -#: ../../mod/events.php:473 -msgid "Event Starts:" -msgstr "Начало мероприятия:" +#: ../../Zotlabs/Module/Settings/Channel.php:599 +msgid "New connections" +msgstr "новые контакты" -#: ../../mod/events.php:473 ../../mod/events.php:487 ../../mod/appman.php:91 -#: ../../mod/appman.php:92 -msgid "Required" -msgstr "Необходимо" +#: ../../Zotlabs/Module/Settings/Channel.php:600 +msgid "System Registrations" +msgstr "системные регистрации" -#: ../../mod/events.php:476 -msgid "Finish date/time is not known or not relevant" -msgstr "Дата окончания или время окончания не известно / не релевантно." +#: ../../Zotlabs/Module/Settings/Channel.php:601 +msgid "Unseen shared files" +msgstr "невидимые общие файлы" -#: ../../mod/events.php:478 -msgid "Event Finishes:" -msgstr "\t\nКонец мероприятий:" +#: ../../Zotlabs/Module/Settings/Channel.php:602 +msgid "Unseen public activity" +msgstr "невидимая публичная активность" -#: ../../mod/events.php:481 -msgid "Adjust for viewer timezone" -msgstr "Отрегулируйте для просмотра часовых поясов" +#: ../../Zotlabs/Module/Settings/Channel.php:603 +msgid "Unseen likes and dislikes" +msgstr "невидимые лайки и дислайки" -#: ../../mod/events.php:483 -msgid "Description:" -msgstr "Описание:" +#: ../../Zotlabs/Module/Settings/Channel.php:604 +msgid "Unseen forum posts" +msgstr "Невидимые публикации на форуме" -#: ../../mod/events.php:487 -msgid "Title:" -msgstr "Заголовок:" +#: ../../Zotlabs/Module/Settings/Channel.php:605 +msgid "Email notification hub (hostname)" +msgstr "Центр уведомлений по email (имя хоста)" -#: ../../mod/events.php:489 -msgid "Share this event" -msgstr "Поделиться этим мероприятием" +#: ../../Zotlabs/Module/Settings/Channel.php:605 +#, php-format +msgid "" +"If your channel is mirrored to multiple hubs, set this to your preferred " +"location. This will prevent duplicate email notifications. Example: %s" +msgstr "" +"Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное " +"местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s" -#: ../../mod/filestorage.php:68 -msgid "Permission Denied." -msgstr "Доступ запрещен." +#: ../../Zotlabs/Module/Settings/Channel.php:606 +msgid "Show new wall posts, private messages and connections under Notices" +msgstr "Показать новые сообщения на стене, личные сообщения и контакты в \"Уведомлениях\"" -#: ../../mod/filestorage.php:85 -msgid "File not found." -msgstr "Файл не найден." +#: ../../Zotlabs/Module/Settings/Channel.php:608 +msgid "Notify me of events this many days in advance" +msgstr "Уведомлять меня о событиях заранее, дней" -#: ../../mod/filestorage.php:122 -msgid "Edit file permissions" -msgstr "Редактировать разрешения файла" +#: ../../Zotlabs/Module/Settings/Channel.php:608 +msgid "Must be greater than 0" +msgstr "Должно быть больше 0" -#: ../../mod/filestorage.php:131 -msgid "Set/edit permissions" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:614 +msgid "Advanced Account/Page Type Settings" +msgstr "Дополнительные настройки учётной записи / страницы" -#: ../../mod/filestorage.php:132 -msgid "Include all files and sub folders" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:615 +msgid "Change the behaviour of this account for special situations" +msgstr "Изменить поведение этого аккаунта в особых ситуациях" -#: ../../mod/filestorage.php:133 -msgid "Return to file list" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:617 +msgid "Miscellaneous Settings" +msgstr "Дополнительные настройки" -#: ../../mod/filestorage.php:135 -msgid "Copy/paste this code to attach file to a post" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:618 +msgid "Default photo upload folder" +msgstr "Каталог загрузки фотографий по умолчанию" -#: ../../mod/filestorage.php:136 -msgid "Copy/paste this URL to link file from a web page" -msgstr "" +#: ../../Zotlabs/Module/Settings/Channel.php:618 +#: ../../Zotlabs/Module/Settings/Channel.php:619 +msgid "%Y - current year, %m - current month" +msgstr "%Y - текущий год, %y - текущий месяц" -#: ../../mod/follow.php:25 -msgid "Channel added." -msgstr "Контакт добавлен." +#: ../../Zotlabs/Module/Settings/Channel.php:619 +msgid "Default file upload folder" +msgstr "Каталог загрузки файлов по умолчанию" -#: ../../mod/subthread.php:103 -#, php-format -msgid "%1$s is following %2$s's %3$s" -msgstr "%1$s следит %2$s's %3$s" +#: ../../Zotlabs/Module/Settings/Channel.php:621 +msgid "Personal menu to display in your channel pages" +msgstr "Персональное меню для отображения на странице вашего канала" -#: ../../mod/fsuggest.php:20 ../../mod/fsuggest.php:92 -msgid "Contact not found." -msgstr "Контакт не найден." +#: ../../Zotlabs/Module/Settings/Channel.php:623 +msgid "Remove this channel." +msgstr "Удалить этот канал." -#: ../../mod/fsuggest.php:63 -msgid "Friend suggestion sent." -msgstr "Предложение дружить отправлено." +#: ../../Zotlabs/Module/Settings/Channel.php:624 +msgid "Firefox Share $Projectname provider" +msgstr "" -#: ../../mod/fsuggest.php:97 -msgid "Suggest Friends" -msgstr "Пригласить друзей" +#: ../../Zotlabs/Module/Settings/Channel.php:625 +msgid "Start calendar week on Monday" +msgstr "Начинать календарную неделю с понедельника" -#: ../../mod/fsuggest.php:99 -#, php-format -msgid "Suggest a friend for %s" -msgstr "" +#: ../../Zotlabs/Module/Settings/Featured.php:23 +msgid "Affinity Slider settings updated." +msgstr "Обновлены настройки слайдера cходства." -#: ../../mod/suggest.php:35 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." -msgstr "" +#: ../../Zotlabs/Module/Settings/Featured.php:38 +msgid "No feature settings configured" +msgstr "Параметры функций не настроены" -#: ../../mod/group.php:20 -msgid "Collection created." -msgstr "Коллекция создана." +#: ../../Zotlabs/Module/Settings/Featured.php:45 +msgid "Default maximum affinity level" +msgstr "Максимальный уровень сходства по умолчанию." -#: ../../mod/group.php:26 -msgid "Could not create collection." -msgstr "Не удалось создать коллекцию." +#: ../../Zotlabs/Module/Settings/Featured.php:45 +msgid "0-99 default 99" +msgstr "0-99 (по умолчанию 99)" -#: ../../mod/group.php:54 -msgid "Collection updated." -msgstr "" +#: ../../Zotlabs/Module/Settings/Featured.php:50 +msgid "Default minimum affinity level" +msgstr "Минимальный уровень сходства по умолчанию." -#: ../../mod/group.php:86 -msgid "Create a collection of channels." -msgstr "Создать коллекцию контактов" +#: ../../Zotlabs/Module/Settings/Featured.php:50 +msgid "0-99 - default 0" +msgstr "0-99 (по умолчанию 0)" -#: ../../mod/group.php:87 ../../mod/group.php:183 -msgid "Collection Name: " -msgstr "Название коллекции:" +#: ../../Zotlabs/Module/Settings/Featured.php:54 +msgid "Affinity Slider Settings" +msgstr "Настройки слайдера сходства" -#: ../../mod/group.php:89 ../../mod/group.php:186 -msgid "Members are visible to other channels" -msgstr "Пользователи могут видеть другие каналы" +#: ../../Zotlabs/Module/Settings/Featured.php:67 +msgid "Addon Settings" +msgstr "Настройки расширений" -#: ../../mod/group.php:107 -msgid "Collection removed." -msgstr "Коллекция удалена." +#: ../../Zotlabs/Module/Settings/Featured.php:68 +msgid "Please save/submit changes to any panel before opening another." +msgstr "Пожалуйста сохраните / отправьте изменения на панели прежде чем открывать другую." -#: ../../mod/group.php:109 -msgid "Unable to remove collection." -msgstr "Невозможно удалить коллекцию." +#: ../../Zotlabs/Module/Settings/Account.php:20 +msgid "Not valid email." +msgstr "Не действительный адрес email." -#: ../../mod/group.php:182 -msgid "Collection Editor" -msgstr "Редактор коллекций" +#: ../../Zotlabs/Module/Settings/Account.php:23 +msgid "Protected email address. Cannot change to that email." +msgstr "Защищенный адрес электронной почты. Нельзя изменить." -#: ../../mod/group.php:196 -msgid "Members" -msgstr "Участники" +#: ../../Zotlabs/Module/Settings/Account.php:32 +msgid "System failure storing new email. Please try again." +msgstr "Системная ошибка сохранения email. Пожалуйста попробуйте ещё раз." -#: ../../mod/group.php:198 -msgid "All Connected Channels" -msgstr "Все подключенные контакы" +#: ../../Zotlabs/Module/Settings/Account.php:40 +msgid "Technical skill level updated" +msgstr "Уровень технических навыков обновлён" -#: ../../mod/group.php:231 -msgid "Click on a channel to add or remove." -msgstr "Нажмите на канал, чтобы добавить или удалить." +#: ../../Zotlabs/Module/Settings/Account.php:56 +msgid "Password verification failed." +msgstr "Не удалось выполнить проверку пароля." -#: ../../mod/tagger.php:98 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "" +#: ../../Zotlabs/Module/Settings/Account.php:63 +msgid "Passwords do not match. Password unchanged." +msgstr "Пароли не совпадают. Пароль не изменён." -#: ../../mod/help.php:43 ../../mod/help.php:49 ../../mod/help.php:55 -msgid "Help:" -msgstr "Помощь:" +#: ../../Zotlabs/Module/Settings/Account.php:67 +msgid "Empty passwords are not allowed. Password unchanged." +msgstr "Пустые пароли не допускаются. Пароль не изменён." -#: ../../mod/help.php:69 ../../index.php:233 -msgid "Not Found" -msgstr "Не найдено" +#: ../../Zotlabs/Module/Settings/Account.php:81 +msgid "Password changed." +msgstr "Пароль изменен." -#: ../../mod/tagrm.php:41 -msgid "Tag removed" -msgstr "Тег удален" +#: ../../Zotlabs/Module/Settings/Account.php:83 +msgid "Password update failed. Please try again." +msgstr "Изменение пароля не удалось. Пожалуйста, попробуйте ещё раз." -#: ../../mod/tagrm.php:79 -msgid "Remove Item Tag" -msgstr "Удалить Тег" +#: ../../Zotlabs/Module/Settings/Account.php:112 +msgid "Account Settings" +msgstr "Настройки аккаунта" -#: ../../mod/tagrm.php:81 -msgid "Select a tag to remove: " -msgstr "Выбрать тег для удаления: " +#: ../../Zotlabs/Module/Settings/Account.php:113 +msgid "Current Password" +msgstr "Текущий пароль" -#: ../../mod/admin.php:52 -msgid "Theme settings updated." -msgstr "Настройки темы обновленны." +#: ../../Zotlabs/Module/Settings/Account.php:114 +msgid "Enter New Password" +msgstr "Введите новый пароль:" -#: ../../mod/admin.php:92 ../../mod/admin.php:441 -msgid "Site" -msgstr "Сайт" +#: ../../Zotlabs/Module/Settings/Account.php:115 +msgid "Confirm New Password" +msgstr "Подтвердите новый пароль:" -#: ../../mod/admin.php:93 -msgid "Accounts" -msgstr "Пользователи" +#: ../../Zotlabs/Module/Settings/Account.php:115 +msgid "Leave password fields blank unless changing" +msgstr "Оставьте поля пустыми до измнения" -#: ../../mod/admin.php:94 ../../mod/admin.php:885 -msgid "Channels" -msgstr "Каналы" +#: ../../Zotlabs/Module/Settings/Account.php:121 +msgid "Remove this account including all its channels" +msgstr "Удалить этот аккаунт включая все каналы" -#: ../../mod/admin.php:95 ../../mod/admin.php:976 ../../mod/admin.php:1018 -msgid "Plugins" -msgstr "Плагины" +#: ../../Zotlabs/Module/Settings/Display.php:139 +#, php-format +msgid "%s - (Experimental)" +msgstr "%s - (экспериментальный)" -#: ../../mod/admin.php:96 ../../mod/admin.php:1181 ../../mod/admin.php:1217 -msgid "Themes" -msgstr "Темы" +#: ../../Zotlabs/Module/Settings/Display.php:187 +msgid "Display Settings" +msgstr "Настройки отображения" -#: ../../mod/admin.php:97 ../../mod/admin.php:541 -msgid "Server" -msgstr "Серверы" +#: ../../Zotlabs/Module/Settings/Display.php:188 +msgid "Theme Settings" +msgstr "Настройки темы" -#: ../../mod/admin.php:98 -msgid "DB updates" -msgstr "Обновление базы данных" +#: ../../Zotlabs/Module/Settings/Display.php:189 +msgid "Custom Theme Settings" +msgstr "Дополнительные настройки темы" -#: ../../mod/admin.php:112 ../../mod/admin.php:119 ../../mod/admin.php:1304 -msgid "Logs" -msgstr "Журналы" +#: ../../Zotlabs/Module/Settings/Display.php:190 +msgid "Content Settings" +msgstr "Настройки содержимого" -#: ../../mod/admin.php:118 -msgid "Plugin Features" -msgstr "Функции плагинов" +#: ../../Zotlabs/Module/Settings/Display.php:196 +msgid "Display Theme:" +msgstr "Тема отображения:" -#: ../../mod/admin.php:120 -msgid "User registrations waiting for confirmation" -msgstr "Регистрации пользователей, которые ждут подтверждения" +#: ../../Zotlabs/Module/Settings/Display.php:197 +msgid "Select scheme" +msgstr "Выбрать схему" -#: ../../mod/admin.php:197 -msgid "Message queues" -msgstr "Очередь недоставленных сообщений" +#: ../../Zotlabs/Module/Settings/Display.php:199 +msgid "Preload images before rendering the page" +msgstr "Предзагрузка изображений перед обработкой страницы" -#: ../../mod/admin.php:202 ../../mod/admin.php:440 ../../mod/admin.php:540 -#: ../../mod/admin.php:749 ../../mod/admin.php:884 ../../mod/admin.php:975 -#: ../../mod/admin.php:1017 ../../mod/admin.php:1180 ../../mod/admin.php:1216 -#: ../../mod/admin.php:1303 -msgid "Administration" -msgstr "Администрация" +#: ../../Zotlabs/Module/Settings/Display.php:199 +msgid "" +"The subjective page load time will be longer but the page will be ready when " +"displayed" +msgstr "Субъективное время загрузки страницы будет длиннее, но страница будет готова при отображении" -#: ../../mod/admin.php:203 -msgid "Summary" -msgstr "Резюме" +#: ../../Zotlabs/Module/Settings/Display.php:200 +msgid "Enable user zoom on mobile devices" +msgstr "Включить масштабирование на мобильных устройствах" -#: ../../mod/admin.php:205 -msgid "Registered users" -msgstr "Всего пользователeй" +#: ../../Zotlabs/Module/Settings/Display.php:201 +msgid "Update browser every xx seconds" +msgstr "Обновление браузера каждые N секунд" -#: ../../mod/admin.php:207 ../../mod/admin.php:544 -msgid "Pending registrations" -msgstr "Ждут утверждения" +#: ../../Zotlabs/Module/Settings/Display.php:201 +msgid "Minimum of 10 seconds, no maximum" +msgstr "Минимум 10 секунд, без максимума" -#: ../../mod/admin.php:208 -msgid "Version" -msgstr "Версия системы" +#: ../../Zotlabs/Module/Settings/Display.php:202 +msgid "Maximum number of conversations to load at any time:" +msgstr "Максимальное количество бесед для загрузки одновременно:" -#: ../../mod/admin.php:210 ../../mod/admin.php:545 -msgid "Active plugins" -msgstr "Активные плагины" +#: ../../Zotlabs/Module/Settings/Display.php:202 +msgid "Maximum of 100 items" +msgstr "Максимум 100 элементов" -#: ../../mod/admin.php:361 -msgid "Site settings updated." -msgstr "Настройки сайта обновлены." +#: ../../Zotlabs/Module/Settings/Display.php:203 +msgid "Show emoticons (smilies) as images" +msgstr "Показывать эмотиконы (смайлики) как изображения" -#: ../../mod/admin.php:392 -msgid "No special theme for accessibility" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:204 +msgid "Provide channel menu in navigation bar" +msgstr "Показывать меню канала в панели навигации" -#: ../../mod/admin.php:421 -msgid "Yes - with approval" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:204 +msgid "Default: channel menu located in app menu" +msgstr "По умолчанию каналы расположены в меню приложения" -#: ../../mod/admin.php:427 -msgid "My site is not a public server" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:205 +msgid "Manual conversation updates" +msgstr "Обновление бесед вручную" -#: ../../mod/admin.php:428 -msgid "My site has paid access only" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:205 +msgid "Default is on, turning this off may increase screen jumping" +msgstr "Включено по умолчанию, выключение может привести к рывкам в отображении" -#: ../../mod/admin.php:429 -msgid "My site has free access only" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:206 +msgid "Link post titles to source" +msgstr "Ссылки на источник заголовков публикаций" -#: ../../mod/admin.php:430 -msgid "My site offers free accounts with optional paid upgrades" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:207 +msgid "System Page Layout Editor - (advanced)" +msgstr "Системный редактор макета страницы - (продвинутый)" -#: ../../mod/admin.php:444 -msgid "File upload" -msgstr "Загрузка файла" +#: ../../Zotlabs/Module/Settings/Display.php:210 +msgid "Use blog/list mode on channel page" +msgstr "Использовать режим блога / списка на странице канала" -#: ../../mod/admin.php:445 -msgid "Policies" -msgstr "Правила" +#: ../../Zotlabs/Module/Settings/Display.php:210 +#: ../../Zotlabs/Module/Settings/Display.php:211 +msgid "(comments displayed separately)" +msgstr "(комментарии отображаются отдельно)" -#: ../../mod/admin.php:450 -msgid "Site name" -msgstr "Название сайта" +#: ../../Zotlabs/Module/Settings/Display.php:211 +msgid "Use blog/list mode on grid page" +msgstr "Использовать режим блога / списка на странице матрицы" -#: ../../mod/admin.php:451 -msgid "Banner/Logo" -msgstr "Баннер / логотип" +#: ../../Zotlabs/Module/Settings/Display.php:212 +msgid "Channel page max height of content (in pixels)" +msgstr "Максимальная высота содержания канала (в пикселях)" -#: ../../mod/admin.php:452 -msgid "Administrator Information" -msgstr "Информация об администраторе" +#: ../../Zotlabs/Module/Settings/Display.php:212 +#: ../../Zotlabs/Module/Settings/Display.php:213 +msgid "click to expand content exceeding this height" +msgstr "нажмите, чтобы увеличить содержимое, превышающее эту высоту" -#: ../../mod/admin.php:452 -msgid "" -"Contact information for site administrators. Displayed on siteinfo page. " -"BBCode can be used here" -msgstr "" +#: ../../Zotlabs/Module/Settings/Display.php:213 +msgid "Grid page max height of content (in pixels)" +msgstr "Максимальная высота содержания на страницах матрицы (в пикселях)" -#: ../../mod/admin.php:453 -msgid "System language" -msgstr "Язык системы" +#: ../../Zotlabs/Module/Settings/Permcats.php:23 +msgid "Permission Name is required." +msgstr "Требуется имя разрешения" -#: ../../mod/admin.php:454 -msgid "System theme" -msgstr "Тема системы" +#: ../../Zotlabs/Module/Settings/Permcats.php:42 +msgid "Permission category saved." +msgstr "Категория разрешения сохранена." -#: ../../mod/admin.php:454 +#: ../../Zotlabs/Module/Settings/Permcats.php:66 msgid "" -"Default system theme - may be over-ridden by user profiles - change theme settings" -msgstr "" +"Use this form to create permission rules for various classes of people or " +"connections." +msgstr "Используйте эту форму для создания правил разрешений для различных групп людей и контактов." -#: ../../mod/admin.php:455 -msgid "Mobile system theme" -msgstr "Мобильная тема системы" +#: ../../Zotlabs/Module/Settings/Permcats.php:107 +msgid "Permission Name" +msgstr "Имя разрешения" -#: ../../mod/admin.php:455 -msgid "Theme for mobile devices" -msgstr "Тема для мобильных устройств" - -#: ../../mod/admin.php:456 -msgid "Accessibility system theme" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth2.php:36 +msgid "Name and Secret are required" +msgstr "Требуются имя и код" -#: ../../mod/admin.php:456 -msgid "Accessibility theme" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth2.php:84 +msgid "Add OAuth2 application" +msgstr "Добавить приложение OAuth2" -#: ../../mod/admin.php:457 -msgid "Channel to use for this website's static pages" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth2.php:87 +#: ../../Zotlabs/Module/Settings/Oauth2.php:115 +#: ../../Zotlabs/Module/Settings/Oauth.php:90 +msgid "Name of application" +msgstr "Название приложения" -#: ../../mod/admin.php:457 -msgid "Site Channel" -msgstr "Канал сайта" +#: ../../Zotlabs/Module/Settings/Oauth2.php:88 +#: ../../Zotlabs/Module/Settings/Oauth2.php:116 +#: ../../Zotlabs/Module/Settings/Oauth.php:91 +#: ../../Zotlabs/Module/Settings/Oauth.php:92 +msgid "Automatically generated - change if desired. Max length 20" +msgstr "Сгенерирован автоматические - измените если требуется. Макс. длина 20" -#: ../../mod/admin.php:459 -msgid "Maximum image size" -msgstr "Максимальный размер" +#: ../../Zotlabs/Module/Settings/Oauth2.php:89 +#: ../../Zotlabs/Module/Settings/Oauth2.php:117 +#: ../../Zotlabs/Module/Settings/Oauth.php:93 +#: ../../Zotlabs/Module/Settings/Oauth.php:119 +msgid "Redirect" +msgstr "Перенаправление" -#: ../../mod/admin.php:459 +#: ../../Zotlabs/Module/Settings/Oauth2.php:89 +#: ../../Zotlabs/Module/Settings/Oauth2.php:117 +#: ../../Zotlabs/Module/Settings/Oauth.php:93 msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." -msgstr "" +"Redirect URI - leave blank unless your application specifically requires this" +msgstr "URI перенаправления - оставьте пустыми до тех пока ваше приложение не требует этого" + +#: ../../Zotlabs/Module/Settings/Oauth2.php:90 +#: ../../Zotlabs/Module/Settings/Oauth2.php:118 +msgid "Grant Types" +msgstr "Разрешить типы" + +#: ../../Zotlabs/Module/Settings/Oauth2.php:90 +#: ../../Zotlabs/Module/Settings/Oauth2.php:91 +#: ../../Zotlabs/Module/Settings/Oauth2.php:118 +#: ../../Zotlabs/Module/Settings/Oauth2.php:119 +msgid "leave blank unless your application sepcifically requires this" +msgstr "оставьте пустыми до тех пока ваше приложение не требует этого" + +#: ../../Zotlabs/Module/Settings/Oauth2.php:91 +#: ../../Zotlabs/Module/Settings/Oauth2.php:119 +msgid "Authorization scope" +msgstr "Область полномочий" + +#: ../../Zotlabs/Module/Settings/Oauth2.php:103 +msgid "OAuth2 Application not found." +msgstr "Приложение OAuth2 не найдено." + +#: ../../Zotlabs/Module/Settings/Oauth2.php:112 +#: ../../Zotlabs/Module/Settings/Oauth2.php:149 +#: ../../Zotlabs/Module/Settings/Oauth.php:87 +#: ../../Zotlabs/Module/Settings/Oauth.php:113 +#: ../../Zotlabs/Module/Settings/Oauth.php:149 +msgid "Add application" +msgstr "Добавить приложение" -#: ../../mod/admin.php:460 -msgid "Does this site allow new member registration?" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth2.php:148 +msgid "Connected OAuth2 Apps" +msgstr "Подключённые приложения OAuth2" -#: ../../mod/admin.php:461 -msgid "Which best describes the types of account offered by this hub?" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth2.php:152 +#: ../../Zotlabs/Module/Settings/Oauth.php:152 +msgid "Client key starts with" +msgstr "Ключ клиента начинаетя с" -#: ../../mod/admin.php:462 -msgid "Register text" -msgstr "Текст регистрации" +#: ../../Zotlabs/Module/Settings/Oauth2.php:153 +#: ../../Zotlabs/Module/Settings/Oauth.php:153 +msgid "No name" +msgstr "Без названия" + +#: ../../Zotlabs/Module/Settings/Oauth2.php:154 +#: ../../Zotlabs/Module/Settings/Oauth.php:154 +msgid "Remove authorization" +msgstr "Удалить разрешение" -#: ../../mod/admin.php:462 -msgid "Will be displayed prominently on the registration page." -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth.php:35 +msgid "Name is required" +msgstr "Необходимо имя" -#: ../../mod/admin.php:463 -msgid "Accounts abandoned after x days" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth.php:39 +msgid "Key and Secret are required" +msgstr "Требуются ключ и код" -#: ../../mod/admin.php:463 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth.php:94 +#: ../../Zotlabs/Module/Settings/Oauth.php:120 +msgid "Icon url" +msgstr "URL значка" -#: ../../mod/admin.php:464 -msgid "Allowed friend domains" -msgstr "Разрешенные домены друзей" +#: ../../Zotlabs/Module/Settings/Oauth.php:105 +msgid "Application not found." +msgstr "Приложение не найдено." -#: ../../mod/admin.php:464 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "" +#: ../../Zotlabs/Module/Settings/Oauth.php:148 +msgid "Connected Apps" +msgstr "Подключенные приложения" -#: ../../mod/admin.php:465 -msgid "Allowed email domains" -msgstr "Разрешенные домены электронной почты" +#: ../../Zotlabs/Module/Settings/Tokens.php:31 +#, php-format +msgid "This channel is limited to %d tokens" +msgstr "Этот канал ограничен %d токенами" -#: ../../mod/admin.php:465 -msgid "" -"Comma separated list of domains which are allowed in email addresses for " -"registrations to this site. Wildcards are accepted. Empty to allow any " -"domains" -msgstr "" +#: ../../Zotlabs/Module/Settings/Tokens.php:37 +msgid "Name and Password are required." +msgstr "Требуются имя и пароль." -#: ../../mod/admin.php:466 -msgid "Block public" -msgstr "Блокировать публичный доступ" +#: ../../Zotlabs/Module/Settings/Tokens.php:77 +msgid "Token saved." +msgstr "Токен сохранён." -#: ../../mod/admin.php:466 +#: ../../Zotlabs/Module/Settings/Tokens.php:113 msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently logged in." -msgstr "" - -#: ../../mod/admin.php:467 -msgid "Force publish" -msgstr "Заставить публиковать" +"Use this form to create temporary access identifiers to share things with " +"non-members. These identities may be used in Access Control Lists and " +"visitors may login using these credentials to access private content." +msgstr "Используйте эту форму для создания идентификаторов временного доступа для сторонних пользователей. Эти идентификаторы могут использоваться в списках контроля доступа, и посетители могут использовать эти учетные данные для доступа к частному контенту." -#: ../../mod/admin.php:467 +#: ../../Zotlabs/Module/Settings/Tokens.php:115 msgid "" -"Check to force all profiles on this site to be listed in the site directory." -msgstr "" +"You may also provide dropbox style access links to friends and " +"associates by adding the Login Password to any specific site URL as shown. " +"Examples:" +msgstr "Вы также можете предоставить доступ в стиле dropbox для друзей и коллег, добавив имя и пароль для входа на любой URL-адрес сайта. Например:" -#: ../../mod/admin.php:468 -msgid "Disable discovery tab" -msgstr "Отключить вкладку \"обнаруженные\"" +#: ../../Zotlabs/Module/Settings/Tokens.php:157 +msgid "Login Name" +msgstr "Имя" -#: ../../mod/admin.php:468 -msgid "" -"Remove the tab in the network view with public content pulled from sources " -"chosen for this site." -msgstr "" +#: ../../Zotlabs/Module/Settings/Tokens.php:158 +msgid "Login Password" +msgstr "Пароль" -#: ../../mod/admin.php:469 -msgid "No login on Homepage" -msgstr "" +#: ../../Zotlabs/Module/Settings/Tokens.php:159 +msgid "Expires (yyyy-mm-dd)" +msgstr "Срок действия (yyyy-mm-dd)" -#: ../../mod/admin.php:469 -msgid "" -"Check to hide the login form from your sites homepage when visitors arrive " -"who are not logged in (e.g. when you put the content of the homepage in via " -"the site channel)." -msgstr "" +#: ../../Zotlabs/Module/Chat.php:181 +msgid "Room not found" +msgstr "Комната не найдена" -#: ../../mod/admin.php:471 -msgid "Proxy user" -msgstr "Proxy пользователь" +#: ../../Zotlabs/Module/Chat.php:197 +msgid "Leave Room" +msgstr "Покинуть комнату" -#: ../../mod/admin.php:472 -msgid "Proxy URL" -msgstr "Proxy URL" +#: ../../Zotlabs/Module/Chat.php:198 +msgid "Delete Room" +msgstr "Удалить комнату" -#: ../../mod/admin.php:473 -msgid "Network timeout" -msgstr "Время ожидания сети" +#: ../../Zotlabs/Module/Chat.php:199 +msgid "I am away right now" +msgstr "Я сейчас отошёл" -#: ../../mod/admin.php:473 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "" +#: ../../Zotlabs/Module/Chat.php:200 +msgid "I am online" +msgstr "Я на связи" -#: ../../mod/admin.php:474 -msgid "Delivery interval" -msgstr "Интервал доставки" +#: ../../Zotlabs/Module/Chat.php:202 +msgid "Bookmark this room" +msgstr "Запомнить эту комнату" -#: ../../mod/admin.php:474 -msgid "" -"Delay background delivery processes by this many seconds to reduce system " -"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " -"for large dedicated servers." -msgstr "" +#: ../../Zotlabs/Module/Chat.php:232 +msgid "New Chatroom" +msgstr "Новый чат" -#: ../../mod/admin.php:475 -msgid "Poll interval" -msgstr "Интервал опроса" +#: ../../Zotlabs/Module/Chat.php:233 +msgid "Chatroom name" +msgstr "Название чата" -#: ../../mod/admin.php:475 -msgid "" -"Delay background polling processes by this many seconds to reduce system " -"load. If 0, use delivery interval." -msgstr "" +#: ../../Zotlabs/Module/Chat.php:234 +msgid "Expiration of chats (minutes)" +msgstr "Завершение чатов (минут)" -#: ../../mod/admin.php:476 -msgid "Maximum Load Average" -msgstr "" +#: ../../Zotlabs/Module/Chat.php:250 +#, php-format +msgid "%1$s's Chatrooms" +msgstr "Чаты пользователя %1$s" -#: ../../mod/admin.php:476 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." -msgstr "" +#: ../../Zotlabs/Module/Chat.php:255 +msgid "No chatrooms available" +msgstr "Нет доступных чатов" -#: ../../mod/admin.php:532 -msgid "No server found" -msgstr "Сервер не найден" +#: ../../Zotlabs/Module/Chat.php:259 +msgid "Expiration" +msgstr "Срок действия" -#: ../../mod/admin.php:539 ../../mod/admin.php:763 -msgid "ID" -msgstr "ID" +#: ../../Zotlabs/Module/Chat.php:260 +msgid "min" +msgstr "мин." -#: ../../mod/admin.php:539 -msgid "for channel" -msgstr "для канала" +#: ../../Zotlabs/Module/Rate.php:156 +msgid "Website:" +msgstr "Веб-сайт:" -#: ../../mod/admin.php:539 -msgid "on server" -msgstr "на сервере" +#: ../../Zotlabs/Module/Rate.php:159 +#, php-format +msgid "Remote Channel [%s] (not yet known on this site)" +msgstr "Удалённый канал [%s] (пока неизвестен на этом сайте)" -#: ../../mod/admin.php:539 -msgid "Status" -msgstr "Статус" +#: ../../Zotlabs/Module/Rate.php:160 +msgid "Rating (this information is public)" +msgstr "Оценка (эта информация общедоступна)" -#: ../../mod/admin.php:560 -msgid "Update has been marked successful" -msgstr "" +#: ../../Zotlabs/Module/Rate.php:161 +msgid "Optionally explain your rating (this information is public)" +msgstr "Объясните свою оценку (необязательно; эта информация общедоступна)" -#: ../../mod/admin.php:570 +#: ../../Zotlabs/Module/Probe.php:30 ../../Zotlabs/Module/Probe.php:34 #, php-format -msgid "Executing %s failed. Check system logs." -msgstr "" +msgid "Fetching URL returns error: %1$s" +msgstr "Загрузка URL возвращает ошибку: %1$s" -#: ../../mod/admin.php:573 -#, php-format -msgid "Update %s was successfully applied." -msgstr "" +#: ../../Zotlabs/Module/Locs.php:25 ../../Zotlabs/Module/Locs.php:54 +msgid "Location not found." +msgstr "Местоположение не найдено" -#: ../../mod/admin.php:577 -#, php-format -msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "" +#: ../../Zotlabs/Module/Locs.php:62 +msgid "Location lookup failed." +msgstr "Поиск местоположения не удался" -#: ../../mod/admin.php:580 -#, php-format -msgid "Update function %s could not be found." -msgstr "" +#: ../../Zotlabs/Module/Locs.php:66 +msgid "" +"Please select another location to become primary before removing the primary " +"location." +msgstr "Пожалуйста, выберите другое местоположение в качестве основного прежде чем удалить предыдущее" -#: ../../mod/admin.php:595 -msgid "No failed updates." -msgstr "Ошибок обновлений нет." +#: ../../Zotlabs/Module/Locs.php:95 +msgid "Syncing locations" +msgstr "Синхронизировать местоположение" -#: ../../mod/admin.php:599 -msgid "Failed Updates" -msgstr "Обновления с ошибками" +#: ../../Zotlabs/Module/Locs.php:105 +msgid "No locations found." +msgstr "Местоположений не найдено" -#: ../../mod/admin.php:601 -msgid "Mark success (if update was manually applied)" -msgstr "" +#: ../../Zotlabs/Module/Locs.php:116 +msgid "Manage Channel Locations" +msgstr "Управление местоположением канала" -#: ../../mod/admin.php:602 -msgid "Attempt to execute this update step automatically" -msgstr "" +#: ../../Zotlabs/Module/Locs.php:122 +msgid "Sync Now" +msgstr "Синхронизировать" -#: ../../mod/admin.php:628 -#, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: ../../Zotlabs/Module/Locs.php:123 +msgid "Please wait several minutes between consecutive operations." +msgstr "Пожалуйста, подождите несколько минут между последовательными операциями." -#: ../../mod/admin.php:635 -#, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" -msgstr[0] "%s канал удален" -msgstr[1] "%s канала удалены" -msgstr[2] "%s каналов удалено" +#: ../../Zotlabs/Module/Locs.php:124 +msgid "" +"When possible, drop a location by logging into that website/hub and removing " +"your channel." +msgstr "По возможности, очистите местоположение, войдя на этот веб-сайт / хаб и удалив свой канал." -#: ../../mod/admin.php:666 -msgid "Account not found" -msgstr "Аккаунт не найден" +#: ../../Zotlabs/Module/Locs.php:125 +msgid "Use this form to drop the location if the hub is no longer operating." +msgstr "Используйте эту форму, чтобы удалить местоположение, если хаб больше не функционирует." -#: ../../mod/admin.php:677 -#, php-format -msgid "User '%s' deleted" -msgstr "Пользователь '%s' удален" +#: ../../Zotlabs/Module/Import.php:66 ../../Zotlabs/Module/Import_items.php:48 +msgid "Nothing to import." +msgstr "Ничего импортировать." -#: ../../mod/admin.php:686 -#, php-format -msgid "User '%s' unblocked" -msgstr "Пользователь '%s' разрешен" +#: ../../Zotlabs/Module/Import.php:81 ../../Zotlabs/Module/Import.php:97 +#: ../../Zotlabs/Module/Import_items.php:72 +msgid "Unable to download data from old server" +msgstr "Невозможно загрузить данные со старого сервера" + +#: ../../Zotlabs/Module/Import.php:104 ../../Zotlabs/Module/Import_items.php:77 +msgid "Imported file is empty." +msgstr "Импортированный файл пуст." -#: ../../mod/admin.php:686 +#: ../../Zotlabs/Module/Import.php:146 #, php-format -msgid "User '%s' blocked" -msgstr "Пользователь '%s' заблокирован" +msgid "Your service plan only allows %d channels." +msgstr "Ваш класс обслуживания разрешает только %d каналов." -#: ../../mod/admin.php:750 ../../mod/admin.php:762 -msgid "Users" -msgstr "Пользователи" +#: ../../Zotlabs/Module/Import.php:173 +msgid "No channel. Import failed." +msgstr "Канала нет. Импорт невозможен." -#: ../../mod/admin.php:752 ../../mod/admin.php:887 -msgid "select all" -msgstr "выбрать все" +#: ../../Zotlabs/Module/Import.php:541 +msgid "You must be logged in to use this feature." +msgstr "Вы должны войти в систему, чтобы использовать эту функцию." -#: ../../mod/admin.php:753 -msgid "User registrations waiting for confirm" -msgstr "Регистрации пользователей ждут подтверждения" +#: ../../Zotlabs/Module/Import.php:546 +msgid "Import Channel" +msgstr "Импортировать канал" -#: ../../mod/admin.php:754 -msgid "Request date" -msgstr "Дата запроса" +#: ../../Zotlabs/Module/Import.php:547 +msgid "" +"Use this form to import an existing channel from a different server/hub. You " +"may retrieve the channel identity from the old server/hub via the network or " +"provide an export file." +msgstr "Используйте эту форм для импорта существующего канала с другого сервера / хаба. Вы можете получить идентификационные данные канала со старого сервера / хаба через сеть или предоставить файл экспорта." -#: ../../mod/admin.php:755 -msgid "No registrations." -msgstr "Новых регистраций пока нет." +#: ../../Zotlabs/Module/Import.php:548 +#: ../../Zotlabs/Module/Import_items.php:127 +msgid "File to Upload" +msgstr "Файл для загрузки" -#: ../../mod/admin.php:756 -msgid "Approve" -msgstr "Утвердить" +#: ../../Zotlabs/Module/Import.php:549 +msgid "Or provide the old server/hub details" +msgstr "или предоставьте данные старого сервера" -#: ../../mod/admin.php:757 -msgid "Deny" -msgstr "Запретить" +#: ../../Zotlabs/Module/Import.php:551 +msgid "Your old identity address (xyz@example.com)" +msgstr "Ваш старый адрес идентичности (xyz@example.com)" -#: ../../mod/admin.php:763 -msgid "Register date" -msgstr "Дата регистрации" +#: ../../Zotlabs/Module/Import.php:552 +msgid "Your old login email address" +msgstr "Ваш старый адрес электронной почты" -#: ../../mod/admin.php:763 -msgid "Last login" -msgstr "Последний вход" +#: ../../Zotlabs/Module/Import.php:553 +msgid "Your old login password" +msgstr "Ваш старый пароль" -#: ../../mod/admin.php:763 -msgid "Expires" -msgstr "" +#: ../../Zotlabs/Module/Import.php:554 +msgid "Import a few months of posts if possible (limited by available memory" +msgstr "Импортировать несколько месяцев публикаций если возможно (ограничено доступной памятью)" -#: ../../mod/admin.php:763 -msgid "Service Class" -msgstr "Класс службы" +#: ../../Zotlabs/Module/Import.php:556 +msgid "" +"For either option, please choose whether to make this hub your new primary " +"address, or whether your old location should continue this role. You will be " +"able to post from either location, but only one can be marked as the primary " +"location for files, photos, and media." +msgstr "Для любого варианта, пожалуйста, выберите, следует ли сделать этот хаб вашим новым основным адресом, или ваше прежнее местоположение должно продолжить выполнять эту роль. Вы сможете отправлять сообщения из любого местоположения, но только одно может быть помечено как основное место для файлов, фотографий и мультимедиа." -#: ../../mod/admin.php:765 +#: ../../Zotlabs/Module/Import.php:558 +msgid "Make this hub my primary location" +msgstr "Сделать этот хаб главным" + +#: ../../Zotlabs/Module/Import.php:559 +msgid "Move this channel (disable all previous locations)" +msgstr "Переместить это канал (отключить все предыдущие месторасположения)" + +#: ../../Zotlabs/Module/Import.php:560 +msgid "Use this channel nickname instead of the one provided" +msgstr "Использовать псевдоним этого канала вместо предоставленного" + +#: ../../Zotlabs/Module/Import.php:560 msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" +"Leave blank to keep your existing channel nickname. You will be randomly " +"assigned a similar nickname if either name is already allocated on this site." msgstr "" +"Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным " +"образом назначен похожий псевдоним если такое имя уже выделено на этом сайте." -#: ../../mod/admin.php:766 +#: ../../Zotlabs/Module/Import.php:562 msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" +"This process may take several minutes to complete. Please submit the form " +"only once and leave this page open until finished." +msgstr "Процесс может занять несколько минут. Пожалуйста, отправьте форму только один раз и оставьте эту страницу открытой до завершения." -#: ../../mod/admin.php:799 -#, php-format -msgid "%s channel censored/uncensored" -msgid_plural "%s channelss censored/uncensored" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: ../../Zotlabs/Module/Viewconnections.php:65 +msgid "No connections." +msgstr "Контактов нет." -#: ../../mod/admin.php:806 +#: ../../Zotlabs/Module/Viewconnections.php:83 #, php-format -msgid "%s channel deleted" -msgid_plural "%s channels deleted" -msgstr[0] "%s канал удален" -msgstr[1] "%s канала удалены" -msgstr[2] "%s каналы удалены" +msgid "Visit %s's profile [%s]" +msgstr "Посетить %s ​​профиль [%s]" -#: ../../mod/admin.php:825 -msgid "Channel not found" -msgstr "Канал не найден" +#: ../../Zotlabs/Module/Viewconnections.php:113 +msgid "View Connections" +msgstr "Просмотр контактов" -#: ../../mod/admin.php:836 -#, php-format -msgid "Channel '%s' deleted" -msgstr "Канал '%s' удален" +#: ../../Zotlabs/Module/Rmagic.php:35 +msgid "Authentication failed." +msgstr "Ошибка аутентификации." -#: ../../mod/admin.php:846 -#, php-format -msgid "Channel '%s' uncensored" -msgstr "" +#: ../../Zotlabs/Module/New_channel.php:156 +msgid "Your real name is recommended." +msgstr "Рекомендуется использовать ваше настоящее имя." -#: ../../mod/admin.php:846 -#, php-format -msgid "Channel '%s' censored" +#: ../../Zotlabs/Module/New_channel.php:157 +msgid "" +"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " +"Group\"" msgstr "" +"Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " +"Group\"" -#: ../../mod/admin.php:889 -msgid "Censor" +#: ../../Zotlabs/Module/New_channel.php:162 +msgid "" +"This will be used to create a unique network address (like an email address)." msgstr "" +"Это будет использовано для создания уникального сетевого адреса (наподобие email)." -#: ../../mod/admin.php:890 -msgid "Uncensor" -msgstr "" +#: ../../Zotlabs/Module/New_channel.php:164 +msgid "Allowed characters are a-z 0-9, - and _" +msgstr "Разрешённые символы a-z 0-9, - и _" -#: ../../mod/admin.php:893 -msgid "UID" -msgstr "UID" +#: ../../Zotlabs/Module/New_channel.php:174 +msgid "Channel name" +msgstr "Название канала" -#: ../../mod/admin.php:895 -msgid "" -"Selected channels will be deleted!\\n\\nEverything that was posted in these " -"channels on this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" +#: ../../Zotlabs/Module/New_channel.php:176 +#: ../../Zotlabs/Module/Register.php:265 +msgid "Choose a short nickname" +msgstr "Выберите короткий псевдоним" -#: ../../mod/admin.php:896 +#: ../../Zotlabs/Module/New_channel.php:177 msgid "" -"The channel {0} will be deleted!\\n\\nEverything that was posted in this " -"channel on this site will be permanently deleted!\\n\\nAre you sure?" +"Select a channel permission role compatible with your usage needs and " +"privacy requirements." msgstr "" +"Выберите разрешения для канала в соответствии с вашими потребностями и " +"требованиями безопасности." -#: ../../mod/admin.php:935 -#, php-format -msgid "Plugin %s disabled." -msgstr "Плагин %s отключен." - -#: ../../mod/admin.php:939 -#, php-format -msgid "Plugin %s enabled." -msgstr "Плагин %s включен." +#: ../../Zotlabs/Module/New_channel.php:177 +#: ../../Zotlabs/Module/Register.php:266 +msgid "Read more about channel permission roles" +msgstr "Прочитать больше о разрешениях для каналов" -#: ../../mod/admin.php:949 ../../mod/admin.php:1151 -msgid "Disable" -msgstr "Запретить" +#: ../../Zotlabs/Module/New_channel.php:180 +msgid "Create a Channel" +msgstr "Создать канал" -#: ../../mod/admin.php:951 ../../mod/admin.php:1153 -msgid "Enable" -msgstr "Разрешить" +#: ../../Zotlabs/Module/New_channel.php:181 +msgid "" +"A channel is a unique network identity. It can represent a person (social " +"network profile), a forum (group), a business or celebrity page, a newsfeed, " +"and many other things." +msgstr "" +"Канал это уникальная сетевая идентичность. Он может представлять человека (профиль " +"в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту " +"и многие другие вещи." -#: ../../mod/admin.php:977 ../../mod/admin.php:1182 -msgid "Toggle" -msgstr "Переключить" +#: ../../Zotlabs/Module/New_channel.php:182 +msgid "" +"or import an existing channel from another location." +msgstr "или импортировать существующий канал из другого места." -#: ../../mod/admin.php:985 ../../mod/admin.php:1192 -msgid "Author: " -msgstr "Автор: " +#: ../../Zotlabs/Module/New_channel.php:187 +msgid "Validate" +msgstr "Проверить" -#: ../../mod/admin.php:986 ../../mod/admin.php:1193 -msgid "Maintainer: " -msgstr "Обслуживающий: " +#: ../../Zotlabs/Module/Apps.php:53 +msgid "Manage apps" +msgstr "Управление приложениями" -#: ../../mod/admin.php:1115 -msgid "No themes found." -msgstr "Темы не найдены." +#: ../../Zotlabs/Module/Apps.php:54 +msgid "Create new app" +msgstr "Создать новое приложение" -#: ../../mod/admin.php:1174 -msgid "Screenshot" -msgstr "Скриншот" +#: ../../Zotlabs/Module/Directory.php:106 +msgid "No default suggestions were found." +msgstr "Предложений по умолчанию не найдено." -#: ../../mod/admin.php:1222 -msgid "[Experimental]" -msgstr "[экспериментальный]" +#: ../../Zotlabs/Module/Directory.php:255 +#, php-format +msgid "%d rating" +msgid_plural "%d ratings" +msgstr[0] "%d оценка" +msgstr[1] "%d оценки" +msgstr[2] "%d оценок" -#: ../../mod/admin.php:1223 -msgid "[Unsupported]" -msgstr "[неподдерживаемый]" +#: ../../Zotlabs/Module/Directory.php:266 +msgid "Gender: " +msgstr "Пол:" -#: ../../mod/admin.php:1250 -msgid "Log settings updated." -msgstr "Настройки журнала обновленны." +#: ../../Zotlabs/Module/Directory.php:268 +msgid "Status: " +msgstr "Статус:" -#: ../../mod/admin.php:1306 -msgid "Clear" -msgstr "Очистить" +#: ../../Zotlabs/Module/Directory.php:270 +msgid "Homepage: " +msgstr "Домашняя страница:" -#: ../../mod/admin.php:1312 -msgid "Debugging" -msgstr "Включить/Выключить" +#: ../../Zotlabs/Module/Directory.php:330 +msgid "Description:" +msgstr "Описание:" -#: ../../mod/admin.php:1313 -msgid "Log file" -msgstr "Файл журнала" +#: ../../Zotlabs/Module/Directory.php:339 +msgid "Public Forum:" +msgstr "Публичный форум:" -#: ../../mod/admin.php:1313 -msgid "" -"Must be writable by web server. Relative to your Red top-level directory." -msgstr "Должна быть доступна для записи веб-сервером. Относительно верхнего уровня веб-сайта." +#: ../../Zotlabs/Module/Directory.php:342 +msgid "Keywords: " +msgstr "Ключевые слова:" -#: ../../mod/admin.php:1314 -msgid "Log level" -msgstr "Уровень журнала" +#: ../../Zotlabs/Module/Directory.php:345 +msgid "Don't suggest" +msgstr "Не предлагать" -#: ../../mod/thing.php:98 -msgid "Thing updated" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:347 +msgid "Common connections (estimated):" +msgstr "Общие контакты (оценочно):" -#: ../../mod/thing.php:158 -msgid "Object store: failed" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:396 +msgid "Global Directory" +msgstr "Глобальный каталог" -#: ../../mod/thing.php:162 -msgid "Thing added" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:396 +msgid "Local Directory" +msgstr "Локальный каталог" -#: ../../mod/thing.php:182 -#, php-format -msgid "OBJ: %1$s %2$s %3$s" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:402 +msgid "Finding:" +msgstr "Поиск:" -#: ../../mod/thing.php:234 -msgid "Show Thing" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:407 +msgid "next page" +msgstr "следующая страница" -#: ../../mod/thing.php:241 -msgid "item not found." -msgstr "Элемент не найден." +#: ../../Zotlabs/Module/Directory.php:407 +msgid "previous page" +msgstr "предыдущая страница" -#: ../../mod/thing.php:272 -msgid "Edit Thing" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:408 +msgid "Sort options" +msgstr "Параметры сортировки" -#: ../../mod/thing.php:274 ../../mod/thing.php:321 -msgid "Select a profile" -msgstr "Выберите профиль" +#: ../../Zotlabs/Module/Directory.php:409 +msgid "Alphabetic" +msgstr "По алфавиту" -#: ../../mod/thing.php:278 ../../mod/thing.php:324 -msgid "Post an activity" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:410 +msgid "Reverse Alphabetic" +msgstr "Против алфавита" -#: ../../mod/thing.php:278 ../../mod/thing.php:324 -msgid "Only sends to viewers of the applicable profile" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:411 +msgid "Newest to Oldest" +msgstr "От новых к старым" -#: ../../mod/thing.php:280 ../../mod/thing.php:326 -msgid "Name of thing e.g. something" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:412 +msgid "Oldest to Newest" +msgstr "От старых к новым" -#: ../../mod/thing.php:282 ../../mod/thing.php:327 -msgid "URL of thing (optional)" -msgstr "" +#: ../../Zotlabs/Module/Directory.php:429 +msgid "No entries (some entries may be hidden)." +msgstr "Нет записей (некоторые записи могут быть скрыты)." -#: ../../mod/thing.php:284 ../../mod/thing.php:328 -msgid "URL for photo of thing (optional)" -msgstr "" +#: ../../Zotlabs/Module/Filer.php:52 +msgid "Enter a folder name" +msgstr "Введите название каталога" -#: ../../mod/thing.php:319 -msgid "Add Thing to your Profile" -msgstr "" +#: ../../Zotlabs/Module/Filer.php:52 +msgid "or select an existing folder (doubleclick)" +msgstr "или выберите существующий каталог (двойной щелчок)" -#: ../../mod/import.php:36 -msgid "Nothing to import." -msgstr "Ничего импортировать." +#: ../../Zotlabs/Module/Dreport.php:45 +msgid "Invalid message" +msgstr "Неверное сообщение" -#: ../../mod/import.php:58 -msgid "Unable to download data from old server" -msgstr "Невозможно загрузить данные из старого сервера" +#: ../../Zotlabs/Module/Dreport.php:78 +msgid "no results" +msgstr "Ничего не найдено." -#: ../../mod/import.php:64 -msgid "Imported file is empty." -msgstr "Импортированный файл пуст." +#: ../../Zotlabs/Module/Dreport.php:93 +msgid "channel sync processed" +msgstr "синхронизация канала завершена" -#: ../../mod/import.php:88 -msgid "" -"Cannot create a duplicate channel identifier on this system. Import failed." -msgstr "" +#: ../../Zotlabs/Module/Dreport.php:97 +msgid "queued" +msgstr "в очереди" -#: ../../mod/import.php:106 -msgid "Channel clone failed. Import failed." -msgstr "" +#: ../../Zotlabs/Module/Dreport.php:101 +msgid "posted" +msgstr "опубликовано" -#: ../../mod/import.php:116 -msgid "Cloned channel not found. Import failed." -msgstr "" +#: ../../Zotlabs/Module/Dreport.php:105 +msgid "accepted for delivery" +msgstr "принято к доставке" -#: ../../mod/import.php:364 -msgid "Import completed." -msgstr "Импорт завершен." +#: ../../Zotlabs/Module/Dreport.php:109 +msgid "updated" +msgstr "обновлено" -#: ../../mod/import.php:377 -msgid "You must be logged in to use this feature." -msgstr "Вы должны войти в систему, чтобы использовать эту функцию." +#: ../../Zotlabs/Module/Dreport.php:112 +msgid "update ignored" +msgstr "обновление игнорируется" -#: ../../mod/import.php:382 -msgid "Import Channel" -msgstr "Импорт канала" +#: ../../Zotlabs/Module/Dreport.php:115 +msgid "permission denied" +msgstr "доступ запрещен" -#: ../../mod/import.php:383 -msgid "" -"Use this form to import an existing channel from a different server/hub. You" -" may retrieve the channel identity from the old server/hub via the network " -"or provide an export file. Only identity and connections/relationships will " -"be imported. Importation of content is not yet available." -msgstr "" +#: ../../Zotlabs/Module/Dreport.php:119 +msgid "recipient not found" +msgstr "получатель не найден" -#: ../../mod/import.php:384 -msgid "File to Upload" -msgstr "Файл для загрузки" +#: ../../Zotlabs/Module/Dreport.php:122 +msgid "mail recalled" +msgstr "почта отозвана" -#: ../../mod/import.php:385 -msgid "Or provide the old server/hub details" -msgstr "" +#: ../../Zotlabs/Module/Dreport.php:125 +msgid "duplicate mail received" +msgstr "получено дублирующее сообщение" -#: ../../mod/import.php:386 -msgid "Your old identity address (xyz@example.com)" -msgstr "Ваш старый адрес идентичности (xyz@example.com)" +#: ../../Zotlabs/Module/Dreport.php:128 +msgid "mail delivered" +msgstr "почта доставлен" -#: ../../mod/import.php:387 -msgid "Your old login email address" -msgstr "Ваш старый адрес электронной почты" +#: ../../Zotlabs/Module/Dreport.php:148 +#, php-format +msgid "Delivery report for %1$s" +msgstr "Отчёт о доставке для %1$s" -#: ../../mod/import.php:388 -msgid "Your old login password" -msgstr "Ваш старый пароль" +#: ../../Zotlabs/Module/Dreport.php:152 +msgid "Redeliver" +msgstr "Доставить повторно" -#: ../../mod/import.php:389 -msgid "" -"For either option, please choose whether to make this hub your new primary " -"address, or whether your old location should continue this role. You will be" -" able to post from either location, but only one can be marked as the " -"primary location for files, photos, and media." -msgstr "" +#: ../../Zotlabs/Module/Network.php:116 +msgid "No such group" +msgstr "Нет такой группы" -#: ../../mod/import.php:390 -msgid "Make this hub my primary location" -msgstr "" +#: ../../Zotlabs/Module/Network.php:157 +msgid "No such channel" +msgstr "Нет такого канала" -#: ../../mod/invite.php:25 -msgid "Total invitation limit exceeded." -msgstr "" +#: ../../Zotlabs/Module/Network.php:242 +msgid "Privacy group is empty" +msgstr "Группа безопасности пуста" -#: ../../mod/invite.php:49 -#, php-format -msgid "%s : Not a valid email address." -msgstr "%s : Не действительный адрес электронной почты." +#: ../../Zotlabs/Module/Network.php:253 +msgid "Privacy group: " +msgstr "Группа безопасности:" -#: ../../mod/invite.php:76 -msgid "Please join us on Red" -msgstr "Пожалуйста, присоединяйтесь к нам в Red" +#: ../../Zotlabs/Module/Regmod.php:15 +msgid "Please login." +msgstr "Пожалуйста, войдите." -#: ../../mod/invite.php:87 -msgid "Invitation limit exceeded. Please contact your site administrator." -msgstr "" +#: ../../Zotlabs/Module/Service_limits.php:23 +msgid "No service class restrictions found." +msgstr "Ограничений класса обслуживание не найдено." -#: ../../mod/invite.php:92 -#, php-format -msgid "%s : Message delivery failed." -msgstr "%s : Доставка сообщения не удалась." +#: ../../Zotlabs/Module/Cards.php:99 +msgid "Add Card" +msgstr "Добавить карточку" -#: ../../mod/invite.php:96 -#, php-format -msgid "%d message sent." -msgid_plural "%d messages sent." -msgstr[0] "%d сообщение отправленно." -msgstr[1] "%d сообщения отправленно." -msgstr[2] "%d сообщений отправленно." +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of Pinned Navbar Apps" +msgstr "Изменить порядок приложений на панели навигации" -#: ../../mod/invite.php:115 -msgid "You have no more invitations available" -msgstr "У вас больше нет приглашений" +#: ../../Zotlabs/Module/Apporder.php:44 +msgid "Change Order of App Tray Apps" +msgstr "Изменить порядок приложений в лотке" -#: ../../mod/invite.php:141 -msgid "Send invitations" -msgstr "Послать приглашения" +#: ../../Zotlabs/Module/Apporder.php:45 +msgid "" +"Use arrows to move the corresponding app left (top) or right (bottom) in the " +"navbar" +msgstr "Используйте стрелки для перемещения приложения влево (вверх) или вправо (вниз) в панели навигации" -#: ../../mod/invite.php:142 -msgid "Enter email addresses, one per line:" -msgstr "Введите адреса электронной почты, по одному на строку:" +#: ../../Zotlabs/Module/Apporder.php:45 +msgid "Use arrows to move the corresponding app up or down in the app tray" +msgstr "Используйте стрелки для перемещения приложения вверх или вниз в лотке" -#: ../../mod/invite.php:143 ../../mod/mail.php:216 ../../mod/mail.php:328 -msgid "Your message:" -msgstr "Сообщение:" +#: ../../Zotlabs/Module/Register.php:49 +msgid "Maximum daily site registrations exceeded. Please try again tomorrow." +msgstr "Превышено максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра." -#: ../../mod/invite.php:144 +#: ../../Zotlabs/Module/Register.php:55 msgid "" -"You are cordially invited to join me and some other close friends on the Red" -" Matrix - a revolutionary new decentralised communication and information " -"tool." -msgstr "" +"Please indicate acceptance of the Terms of Service. Registration failed." +msgstr "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась." -#: ../../mod/invite.php:146 -msgid "You will need to supply this invitation code: $invite_code" -msgstr "" +#: ../../Zotlabs/Module/Register.php:89 +msgid "Passwords do not match." +msgstr "Пароли не совпадают." -#: ../../mod/invite.php:147 -msgid "Please visit my channel at" -msgstr "Пожалуйста, посетите мой канал на" +#: ../../Zotlabs/Module/Register.php:132 +msgid "Registration successful. Continue to create your first channel..." +msgstr "Регистрация завершена успешно. Для продолжения создайте свой первый канал..." -#: ../../mod/invite.php:151 +#: ../../Zotlabs/Module/Register.php:135 msgid "" -"Once you have registered (on ANY Hubzilla site - they are all inter-" -"connected), please connect with my Hubzilla channel address:" -msgstr "" +"Registration successful. Please check your email for validation instructions." +msgstr "Регистрация завершена успешно. Пожалуйста проверьте вашу электронную почту для подтверждения." -#: ../../mod/invite.php:153 -msgid "Click the [Register] link on the following page to join." -msgstr "" +#: ../../Zotlabs/Module/Register.php:142 +msgid "Your registration is pending approval by the site owner." +msgstr "Ваша регистрация ожидает одобрения администрации сайта." -#: ../../mod/invite.php:155 -msgid "" -"For more information about the Hubzilla Project and why it has the " -"potential to change the internet as we know it, please visit " -"http://getzot.com" -msgstr "Чтобы узнать больше о проекте Hubzilla, и чтобы узнать почему он имеет потенциал для изменения привычного нам Интернета, пожалуйста, посетите http://getzot.com" +#: ../../Zotlabs/Module/Register.php:145 +msgid "Your registration can not be processed." +msgstr "Ваша регистрация не может быть обработана." -#: ../../mod/item.php:147 -msgid "Unable to locate original post." -msgstr "Не удалось найти оригинал." +#: ../../Zotlabs/Module/Register.php:192 +msgid "Registration on this hub is disabled." +msgstr "Регистрация на этом хабе отключена." -#: ../../mod/item.php:372 -msgid "Empty post discarded." -msgstr "Отказаться от пустой почты." +#: ../../Zotlabs/Module/Register.php:201 +msgid "Registration on this hub is by approval only." +msgstr "Регистрация на этом хабе только по утверждению." -#: ../../mod/item.php:414 -msgid "Executable content type not permitted to this channel." -msgstr "" +#: ../../Zotlabs/Module/Register.php:202 ../../Zotlabs/Module/Register.php:211 +msgid "Register at another affiliated hub." +msgstr "Зарегистрироваться на другом хабе." -#: ../../mod/item.php:832 -msgid "System error. Post not saved." -msgstr "Системная ошибка. Сообщение не сохранено." +#: ../../Zotlabs/Module/Register.php:210 +msgid "Registration on this hub is by invitation only." +msgstr "Регистрация на этом хабе доступна только по приглашениям." -#: ../../mod/item.php:1275 -#, php-format -msgid "You have reached your limit of %1$.0f top level posts." -msgstr "" +#: ../../Zotlabs/Module/Register.php:221 +msgid "" +"This site has exceeded the number of allowed daily account registrations. " +"Please try again tomorrow." +msgstr "Этот сайт превысил максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра. " -#: ../../mod/item.php:1281 +#: ../../Zotlabs/Module/Register.php:247 #, php-format -msgid "You have reached your limit of %1$.0f webpages." -msgstr "" +msgid "I accept the %s for this website" +msgstr "Я принимаю %s для этого веб-сайта." -#: ../../mod/update_channel.php:43 ../../mod/update_display.php:25 -#: ../../mod/update_network.php:23 ../../mod/update_search.php:46 -msgid "[Embedded content - reload page to view]" -msgstr "" +#: ../../Zotlabs/Module/Register.php:254 +#, php-format +msgid "I am over %s years of age and accept the %s for this website" +msgstr "Мой возраст превышает %s лет и я принимаю %s для этого веб-сайта." -#: ../../mod/layouts.php:62 -msgid "Help with this feature" -msgstr "" +#: ../../Zotlabs/Module/Register.php:259 +msgid "Your email address" +msgstr "Ваш адрес электронной почты" -#: ../../mod/layouts.php:84 -msgid "Layout Name" -msgstr "Название шаблона" +#: ../../Zotlabs/Module/Register.php:260 +msgid "Choose a password" +msgstr "Выберите пароль" -#: ../../mod/like.php:97 -msgid "thing" -msgstr "" +#: ../../Zotlabs/Module/Register.php:261 +msgid "Please re-enter your password" +msgstr "Пожалуйста, введите пароль еще раз" -#: ../../mod/lockview.php:30 ../../mod/lockview.php:36 -msgid "Remote privacy information not available." -msgstr "" +#: ../../Zotlabs/Module/Register.php:262 +msgid "Please enter your invitation code" +msgstr "Пожалуйста, введите Ваш код приглашения" -#: ../../mod/lockview.php:45 -msgid "Visible to:" -msgstr "Кому видно:" +#: ../../Zotlabs/Module/Register.php:263 +msgid "Your Name" +msgstr "Ваше имя" -#: ../../mod/viewconnections.php:58 -msgid "No connections." -msgstr "Никаких связей." +#: ../../Zotlabs/Module/Register.php:263 +msgid "Real names are preferred." +msgstr "Предпочтительны реальные имена." -#: ../../mod/viewconnections.php:70 +#: ../../Zotlabs/Module/Register.php:265 #, php-format -msgid "Visit %s's profile [%s]" -msgstr "Посетить %s's ​​профиль [%s]" - -#: ../../mod/viewconnections.php:85 -msgid "View Connnections" -msgstr "Просмотр контактов" - -#: ../../mod/lostpass.php:15 -msgid "No valid account found." -msgstr "Действительный аккаунт не найден." +msgid "" +"Your nickname will be used to create an easy to remember channel address e." +"g. nickname%s" +msgstr "Ваш псевдоним будет использован для создания легко запоминаемого адреса канала, напр. nickname %s" -#: ../../mod/lostpass.php:29 -msgid "Password reset request issued. Check your email." +#: ../../Zotlabs/Module/Register.php:266 +msgid "" +"Select a channel permission role for your usage needs and privacy " +"requirements." msgstr "" +"Выберите разрешения для канала в зависимости от ваших потребностей и требований " +"приватности." -#: ../../mod/lostpass.php:35 ../../mod/lostpass.php:102 -#, php-format -msgid "Site Member (%s)" -msgstr "Участник сайта (%s)" +#: ../../Zotlabs/Module/Register.php:267 +msgid "no" +msgstr "нет" -#: ../../mod/lostpass.php:40 -#, php-format -msgid "Password reset requested at %s" -msgstr "Требуется сброс пароля на %s" +#: ../../Zotlabs/Module/Register.php:267 +msgid "yes" +msgstr "да" -#: ../../mod/lostpass.php:63 +#: ../../Zotlabs/Module/Register.php:295 msgid "" -"Request could not be verified. (You may have previously submitted it.) " -"Password reset failed." -msgstr "" +"This site requires email verification. After completing this form, please " +"check your email for further instructions." +msgstr "Этот сайт требует проверку адреса электронной почты. После заполнения этой формы, пожалуйста, проверьте ваш почтовый ящик для дальнейших инструкций." -#: ../../mod/lostpass.php:85 ../../boot.php:1475 -msgid "Password Reset" -msgstr "Сбросить пароль" +#: ../../Zotlabs/Module/Pconfig.php:26 ../../Zotlabs/Module/Pconfig.php:59 +msgid "This setting requires special processing and editing has been blocked." +msgstr "Этот параметр требует специальной обработки и редактирования и был заблокирован." -#: ../../mod/lostpass.php:86 -msgid "Your password has been reset as requested." -msgstr "Ваш пароль в соответствии с просьбой сброшен." +#: ../../Zotlabs/Module/Pconfig.php:48 +msgid "Configuration Editor" +msgstr "Редактор конфигурации" -#: ../../mod/lostpass.php:87 -msgid "Your new password is" -msgstr "Ваш новый пароль" +#: ../../Zotlabs/Module/Pconfig.php:49 +msgid "" +"Warning: Changing some settings could render your channel inoperable. Please " +"leave this page unless you are comfortable with and knowledgeable about how " +"to correctly use this feature." +msgstr "Предупреждение. Изменение некоторых настроек может привести к неработоспособности вашего канала. Пожалуйста, покиньте эту страницу, если вы точно не значете, как правильно использовать эту функцию." -#: ../../mod/lostpass.php:88 -msgid "Save or copy your new password - and then" -msgstr "" +#: ../../Zotlabs/Module/Article_edit.php:128 +msgid "Edit Article" +msgstr "Редактировать статью" -#: ../../mod/lostpass.php:89 -msgid "click here to login" -msgstr "нажмите здесь чтобы выйти" +#: ../../Zotlabs/Module/Wiki.php:44 ../../Zotlabs/Module/Cloud.php:123 +msgid "Not found" +msgstr "Не найдено." -#: ../../mod/lostpass.php:90 -msgid "" -"Your password may be changed from the Settings page after " -"successful login." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:124 +msgid "Error retrieving wiki" +msgstr "Ошибка при получении Wiki" -#: ../../mod/lostpass.php:107 -#, php-format -msgid "Your password has changed at %s" -msgstr "Пароль изменен на %s" +#: ../../Zotlabs/Module/Wiki.php:131 +msgid "Error creating zip file export folder" +msgstr "Ошибка при создании zip-файла при экспорте каталога" -#: ../../mod/lostpass.php:122 -msgid "Forgot your Password?" -msgstr "Забыли пароль или логин?" +#: ../../Zotlabs/Module/Wiki.php:182 +msgid "Error downloading wiki: " +msgstr "Ошибка загрузки Wiki:" -#: ../../mod/lostpass.php:123 -msgid "" -"Enter your email address and submit to have your password reset. Then check " -"your email for further instructions." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:203 +msgid "Download" +msgstr "Загрузить" -#: ../../mod/lostpass.php:124 -msgid "Email Address" -msgstr "Адрес электронной почты" +#: ../../Zotlabs/Module/Wiki.php:207 +msgid "Wiki name" +msgstr "Название Wiki" -#: ../../mod/lostpass.php:125 -msgid "Reset" -msgstr "Сброс" +#: ../../Zotlabs/Module/Wiki.php:208 +msgid "Content type" +msgstr "Тип содержимого" -#: ../../mod/magic.php:70 -msgid "Hub not found." -msgstr "Hub не найден." +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:286 +msgid "Type" +msgstr "Тип" -#: ../../mod/vote.php:97 -msgid "Total votes" -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:211 +msgid "Any type" +msgstr "Любой тип" -#: ../../mod/vote.php:98 -msgid "Average Rating" -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:218 +msgid "Lock content type" +msgstr "Зафиксировать тип содержимого" -#: ../../mod/mail.php:33 -msgid "Unable to lookup recipient." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:219 +msgid "Create a status post for this wiki" +msgstr "Создать публикацию о статусе этой Wiki" -#: ../../mod/mail.php:41 -msgid "Unable to communicate with requested channel." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:220 +msgid "Edit Wiki Name" +msgstr "Редактировать наименование Wiki" -#: ../../mod/mail.php:48 -msgid "Cannot verify requested channel." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:262 +msgid "Wiki not found" +msgstr "Wiki не найдена" -#: ../../mod/mail.php:74 -msgid "Selected channel has private message restrictions. Send failed." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:286 +msgid "Rename page" +msgstr "Переименовать страницу" -#: ../../mod/mail.php:121 ../../mod/message.php:31 -msgid "Messages" -msgstr "Переписка" +#: ../../Zotlabs/Module/Wiki.php:307 +msgid "Error retrieving page content" +msgstr "Ошибка при получении содержимого страницы" -#: ../../mod/mail.php:132 -msgid "Message deleted." -msgstr "Сообщение удалено." +#: ../../Zotlabs/Module/Wiki.php:315 ../../Zotlabs/Module/Wiki.php:317 +msgid "New page" +msgstr "Новая страница" -#: ../../mod/mail.php:149 -msgid "Message recalled." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:345 +msgid "Revision Comparison" +msgstr "Сравнение ревизий" -#: ../../mod/mail.php:206 -msgid "Send Private Message" -msgstr "Отправить личное сообщение" +#: ../../Zotlabs/Module/Wiki.php:346 +msgid "Revert" +msgstr "Вернуть" -#: ../../mod/mail.php:207 ../../mod/mail.php:323 -msgid "To:" -msgstr "Кому:" +#: ../../Zotlabs/Module/Wiki.php:353 +msgid "Short description of your changes (optional)" +msgstr "Краткое описание ваших изменений (необязательно)" -#: ../../mod/mail.php:212 ../../mod/mail.php:325 -msgid "Subject:" -msgstr "Тема:" +#: ../../Zotlabs/Module/Wiki.php:362 +msgid "Source" +msgstr "Источник" -#: ../../mod/mail.php:249 -msgid "Message not found." -msgstr "Сообщение не найдено." +#: ../../Zotlabs/Module/Wiki.php:372 +msgid "New page name" +msgstr "Новое имя страницы" -#: ../../mod/mail.php:292 ../../mod/message.php:72 -msgid "Delete message" -msgstr "Удалить сообщение" +#: ../../Zotlabs/Module/Wiki.php:377 +msgid "Embed image from photo albums" +msgstr "Встроить изображение из фотоальбома" -#: ../../mod/mail.php:293 -msgid "Recall message" -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:462 +msgid "Error creating wiki. Invalid name." +msgstr "Ошибка создания Wiki. Неверное имя." -#: ../../mod/mail.php:295 -msgid "Message has been recalled." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:469 +msgid "A wiki with this name already exists." +msgstr "Wiki с таким именем уже существует." -#: ../../mod/mail.php:312 -msgid "Private Conversation" -msgstr "Личный разговор" +#: ../../Zotlabs/Module/Wiki.php:482 +msgid "Wiki created, but error creating Home page." +msgstr "Wiki создана, но возникла ошибка при создании домашней страницы" -#: ../../mod/mail.php:316 -msgid "Delete conversation" -msgstr "Удалить разговор" +#: ../../Zotlabs/Module/Wiki.php:489 +msgid "Error creating wiki" +msgstr "Ошибка при создании Wiki" -#: ../../mod/mail.php:318 -msgid "" -"No secure communications available. You may be able to " -"respond from the sender's profile page." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:512 +msgid "Error updating wiki. Invalid name." +msgstr "Ошибка при обновлении Wiki. Неверное имя." -#: ../../mod/mail.php:322 -msgid "Send Reply" -msgstr "Отправить снова" +#: ../../Zotlabs/Module/Wiki.php:532 +msgid "Error updating wiki" +msgstr "Ошибка при обновлении Wiki" -#: ../../mod/manage.php:64 -#, php-format -msgid "You have created %1$.0f of %2$.0f allowed channels." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:547 +msgid "Wiki delete permission denied." +msgstr "Нет прав на удаление Wiki." -#: ../../mod/manage.php:72 -msgid "Create a new channel" -msgstr "Создать новый канал" +#: ../../Zotlabs/Module/Wiki.php:557 +msgid "Error deleting wiki" +msgstr "Ошибка удаления Wiki" -#: ../../mod/manage.php:77 -msgid "Channel Manager" -msgstr "Настройки канала" +#: ../../Zotlabs/Module/Wiki.php:590 +msgid "New page created" +msgstr "Создана новая страница" -#: ../../mod/manage.php:78 -msgid "Current Channel" -msgstr "Текущий канал" +#: ../../Zotlabs/Module/Wiki.php:711 +msgid "Cannot delete Home" +msgstr "Невозможно удалить домашнюю страницу" -#: ../../mod/manage.php:80 -msgid "Attach to one of your channels by selecting it." -msgstr "" +#: ../../Zotlabs/Module/Wiki.php:775 +msgid "Current Revision" +msgstr "Текущая ревизия" -#: ../../mod/manage.php:81 -msgid "Default Channel" -msgstr "Канал по умолчанию" +#: ../../Zotlabs/Module/Wiki.php:775 +msgid "Selected Revision" +msgstr "Выбранная ревизия" -#: ../../mod/manage.php:82 -msgid "Make Default" -msgstr "Сделать стандартным" +#: ../../Zotlabs/Module/Wiki.php:825 +msgid "You must be authenticated." +msgstr "Вы должны быть аутентифицированы." -#: ../../mod/wall_upload.php:34 -msgid "Wall Photos" -msgstr "Стена фотографий" +#: ../../Zotlabs/Module/Magic.php:76 +msgid "Hub not found." +msgstr "Узел не найден." -#: ../../mod/match.php:16 -msgid "Profile Match" -msgstr "Профиль Совпадение" +#: ../../Zotlabs/Module/Attach.php:13 +msgid "Item not available." +msgstr "Элемент недоступен." -#: ../../mod/match.php:24 -msgid "No keywords to match. Please add keywords to your default profile." -msgstr "" +#: ../../Zotlabs/Module/Group.php:35 +msgid "Privacy group created." +msgstr "Группа безопасности создана." -#: ../../mod/match.php:61 -msgid "is interested in:" -msgstr "заинтересован в:" +#: ../../Zotlabs/Module/Group.php:38 +msgid "Could not create privacy group." +msgstr "Не удалось создать группу безопасности." -#: ../../mod/match.php:69 -msgid "No matches" -msgstr "Нет соответствий" +#: ../../Zotlabs/Module/Group.php:67 +msgid "Privacy group updated." +msgstr "Группа безопасности обновлена." -#: ../../mod/menu.php:21 -msgid "Menu updated." -msgstr "Меню обновлено." +#: ../../Zotlabs/Module/Group.php:114 +msgid "Add Group" +msgstr "Добавить группу" -#: ../../mod/menu.php:25 -msgid "Unable to update menu." -msgstr "Невозможно обновление меню." +#: ../../Zotlabs/Module/Group.php:118 +msgid "Privacy group name" +msgstr "Имя группы безопасности" -#: ../../mod/menu.php:30 -msgid "Menu created." -msgstr "Меню создано." +#: ../../Zotlabs/Module/Group.php:119 ../../Zotlabs/Module/Group.php:220 +msgid "Members are visible to other channels" +msgstr "Участники канала видимые для остальных" -#: ../../mod/menu.php:34 -msgid "Unable to create menu." -msgstr "Невозможно создать меню." +#: ../../Zotlabs/Module/Group.php:151 +msgid "Privacy group removed." +msgstr "Группа безопасности удалена." -#: ../../mod/menu.php:57 -msgid "Manage Menus" -msgstr "Управление меню" +#: ../../Zotlabs/Module/Group.php:153 +msgid "Unable to remove privacy group." +msgstr "Ну удалось удалить группу безопасности." -#: ../../mod/menu.php:60 -msgid "Drop" -msgstr "Удалить" +#: ../../Zotlabs/Module/Group.php:215 +#, php-format +msgid "Privacy Group: %s" +msgstr "Группа безопасности: %s" -#: ../../mod/menu.php:62 -msgid "Create a new menu" -msgstr "Создать новое меню" +#: ../../Zotlabs/Module/Group.php:217 +msgid "Privacy group name: " +msgstr "Название группы безопасности:" -#: ../../mod/menu.php:63 -msgid "Delete this menu" -msgstr "Удалить это меню" +#: ../../Zotlabs/Module/Group.php:222 +msgid "Delete Group" +msgstr "Удалить группу" -#: ../../mod/menu.php:64 ../../mod/menu.php:109 -msgid "Edit menu contents" -msgstr "Редактировать содержание меню" +#: ../../Zotlabs/Module/Group.php:232 +msgid "Group members" +msgstr "Члены группы" -#: ../../mod/menu.php:65 -msgid "Edit this menu" -msgstr "Редактировать это меню" +#: ../../Zotlabs/Module/Group.php:234 +msgid "Not in this group" +msgstr "Не в этой группе" -#: ../../mod/menu.php:80 -msgid "New Menu" -msgstr "Новое меню" +#: ../../Zotlabs/Module/Group.php:266 +msgid "Click a channel to toggle membership" +msgstr "Нажмите на канал для просмотра членства" -#: ../../mod/menu.php:81 ../../mod/menu.php:110 -msgid "Menu name" -msgstr "Название меню" +#: ../../Zotlabs/Module/Profiles.php:24 ../../Zotlabs/Module/Profiles.php:184 +#: ../../Zotlabs/Module/Profiles.php:241 ../../Zotlabs/Module/Profiles.php:659 +msgid "Profile not found." +msgstr "Профиль не найден." -#: ../../mod/menu.php:81 ../../mod/menu.php:110 -msgid "Must be unique, only seen by you" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:44 +msgid "Profile deleted." +msgstr "Профиль удален." -#: ../../mod/menu.php:82 ../../mod/menu.php:111 -msgid "Menu title" -msgstr "Название меню" +#: ../../Zotlabs/Module/Profiles.php:68 ../../Zotlabs/Module/Profiles.php:105 +msgid "Profile-" +msgstr "Профиль -" -#: ../../mod/menu.php:82 ../../mod/menu.php:111 -msgid "Menu title as seen by others" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:90 ../../Zotlabs/Module/Profiles.php:127 +msgid "New profile created." +msgstr "Новый профиль создан." -#: ../../mod/menu.php:83 ../../mod/menu.php:112 -msgid "Allow bookmarks" -msgstr "Разрешить закладки" +#: ../../Zotlabs/Module/Profiles.php:111 +msgid "Profile unavailable to clone." +msgstr "Профиль недоступен для клонирования." -#: ../../mod/menu.php:83 ../../mod/menu.php:112 -msgid "Menu may be used to store saved bookmarks" -msgstr "Меню может использоваться, чтобы сохранить закладки" +#: ../../Zotlabs/Module/Profiles.php:146 +msgid "Profile unavailable to export." +msgstr "Профиль недоступен для экспорта." -#: ../../mod/menu.php:98 -msgid "Menu deleted." -msgstr "Меню удалено." +#: ../../Zotlabs/Module/Profiles.php:252 +msgid "Profile Name is required." +msgstr "Требуется имя профиля." -#: ../../mod/menu.php:100 -msgid "Menu could not be deleted." -msgstr "Меню не может быть удален." +#: ../../Zotlabs/Module/Profiles.php:459 +msgid "Marital Status" +msgstr "Семейное положение" -#: ../../mod/menu.php:106 -msgid "Edit Menu" -msgstr "Редактировать меню" +#: ../../Zotlabs/Module/Profiles.php:463 +msgid "Romantic Partner" +msgstr "Романтический партнер" -#: ../../mod/menu.php:108 -msgid "Add or remove entries to this menu" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:467 ../../Zotlabs/Module/Profiles.php:772 +msgid "Likes" +msgstr "Нравится" -#: ../../mod/message.php:41 -msgid "Conversation removed." -msgstr "Разговор удален." +#: ../../Zotlabs/Module/Profiles.php:471 ../../Zotlabs/Module/Profiles.php:773 +msgid "Dislikes" +msgstr "Не нравится" -#: ../../mod/message.php:56 -msgid "No messages." -msgstr "Нет сообщений." +#: ../../Zotlabs/Module/Profiles.php:475 ../../Zotlabs/Module/Profiles.php:780 +msgid "Work/Employment" +msgstr "Работа / Занятость" -#: ../../mod/message.php:74 -msgid "D, d M Y - g:i A" -msgstr "D, d M Y - g:i A" +#: ../../Zotlabs/Module/Profiles.php:478 +msgid "Religion" +msgstr "Религия" -#: ../../mod/new_channel.php:107 -msgid "Add a Channel" -msgstr "Добавить контакт" +#: ../../Zotlabs/Module/Profiles.php:482 +msgid "Political Views" +msgstr "Политические взгляды" -#: ../../mod/new_channel.php:108 -msgid "" -"A channel is your own collection of related web pages. A channel can be used" -" to hold social network profiles, blogs, conversation groups and forums, " -"celebrity pages, and much more. You may create as many channels as your " -"service provider allows." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:490 +msgid "Sexual Preference" +msgstr "Сексуальная ориентация" -#: ../../mod/new_channel.php:111 -msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\" " -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:494 +msgid "Homepage" +msgstr "Домашняя страница" -#: ../../mod/new_channel.php:112 -msgid "Choose a short nickname" -msgstr "Выберите короткий псевдоним" +#: ../../Zotlabs/Module/Profiles.php:498 +msgid "Interests" +msgstr "Интересы" -#: ../../mod/new_channel.php:113 -msgid "" -"Your nickname will be used to create an easily remembered channel address " -"(like an email address) which you can share with others." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:594 +msgid "Profile updated." +msgstr "Профиль обновлен." -#: ../../mod/new_channel.php:114 -msgid "Or import an existing channel from another location" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:678 +msgid "Hide your connections list from viewers of this profile" +msgstr "Скрывать от просмотра ваш список контактов в этом профиле" -#: ../../mod/notifications.php:26 -msgid "Invalid request identifier." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:722 +msgid "Edit Profile Details" +msgstr "Редактирование профиля" -#: ../../mod/notifications.php:35 -msgid "Discard" -msgstr "Отменить" +#: ../../Zotlabs/Module/Profiles.php:724 +msgid "View this profile" +msgstr "Посмотреть этот профиль" -#: ../../mod/notifications.php:94 ../../mod/notify.php:53 -msgid "No more system notifications." -msgstr "Новых оповещений системы пока нет." +#: ../../Zotlabs/Module/Profiles.php:726 +msgid "Profile Tools" +msgstr "Инструменты профиля" -#: ../../mod/notifications.php:98 ../../mod/notify.php:57 -msgid "System Notifications" -msgstr "Системные оповещения " +#: ../../Zotlabs/Module/Profiles.php:727 +msgid "Change cover photo" +msgstr "Изменить фотографию обложки" -#: ../../mod/oexchange.php:23 -msgid "Unable to find your hub." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:729 +msgid "Create a new profile using these settings" +msgstr "Создать новый профиль со следующими настройками" -#: ../../mod/oexchange.php:37 -msgid "Post successful." -msgstr "Публикация прошла успешно." +#: ../../Zotlabs/Module/Profiles.php:730 +msgid "Clone this profile" +msgstr "Клонировать этот профиль" -#: ../../mod/zfinger.php:23 -msgid "invalid target signature" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:731 +msgid "Delete this profile" +msgstr "Удалить этот профиль" -#: ../../mod/openid.php:26 -msgid "OpenID protocol error. No ID returned." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:732 +msgid "Add profile things" +msgstr "Добавить в профиль" -#: ../../mod/appman.php:28 ../../mod/appman.php:44 -msgid "App installed." -msgstr "Приложение установлено ." +#: ../../Zotlabs/Module/Profiles.php:735 +msgid "Relationship" +msgstr "Отношения" -#: ../../mod/appman.php:37 -msgid "Malformed app." -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:738 +msgid "Import profile from file" +msgstr "Импортировать профиль из файла" -#: ../../mod/appman.php:80 -msgid "Embed code" -msgstr "Код для вставки" +#: ../../Zotlabs/Module/Profiles.php:739 +msgid "Export profile to file" +msgstr "Экспортировать профиль в файл" -#: ../../mod/appman.php:86 -msgid "Edit App" -msgstr "Редактировать приложение" +#: ../../Zotlabs/Module/Profiles.php:740 +msgid "Your gender" +msgstr "Ваш пол" -#: ../../mod/appman.php:86 -msgid "Create App" -msgstr "Создать приложение" +#: ../../Zotlabs/Module/Profiles.php:741 +msgid "Marital status" +msgstr "Семейное положение" -#: ../../mod/appman.php:91 -msgid "Name of app" -msgstr "Название приложения" +#: ../../Zotlabs/Module/Profiles.php:742 +msgid "Sexual preference" +msgstr "Сексуальная ориентация" -#: ../../mod/appman.php:92 -msgid "Location (URL) of app" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:745 +msgid "Profile name" +msgstr "Имя профиля" -#: ../../mod/appman.php:94 -msgid "Photo icon URL" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:747 +msgid "This is your default profile." +msgstr "Это ваш профиль по умолчанию." -#: ../../mod/appman.php:94 -msgid "80 x 80 pixels - optional" -msgstr "80 x 80 pixels - необязательно" +#: ../../Zotlabs/Module/Profiles.php:749 +msgid "Your full name" +msgstr "Ваше полное имя" -#: ../../mod/appman.php:95 -msgid "Version ID" -msgstr "Версия ID" +#: ../../Zotlabs/Module/Profiles.php:750 +msgid "Title/Description" +msgstr "Заголовок / описание" -#: ../../mod/appman.php:96 -msgid "Price of app" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:753 +msgid "Street address" +msgstr "Улица, дом, квартира" -#: ../../mod/appman.php:97 -msgid "Location (URL) to purchase app" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:754 +msgid "Locality/City" +msgstr "Населенный пункт / город" -#: ../../view/theme/apw/php/config.php:202 -#: ../../view/theme/apw/php/config.php:236 -msgid "Schema Default" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:755 +msgid "Region/State" +msgstr "Регион / Область" -#: ../../view/theme/apw/php/config.php:203 -msgid "Sans-Serif" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:756 +msgid "Postal/Zip code" +msgstr "Почтовый индекс" -#: ../../view/theme/apw/php/config.php:204 -msgid "Monospace" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:762 +msgid "Who (if applicable)" +msgstr "Кто (если применимо)" -#: ../../view/theme/apw/php/config.php:259 -#: ../../view/theme/blogga/php/config.php:69 -#: ../../view/theme/blogga/view/theme/blog/config.php:69 -#: ../../view/theme/redbasic/php/config.php:102 -msgid "Theme settings" -msgstr "Настройки темы" +#: ../../Zotlabs/Module/Profiles.php:762 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +msgstr "Примеры: ivan1990, Ivan Petrov, ivan@example.com" -#: ../../view/theme/apw/php/config.php:260 -#: ../../view/theme/redbasic/php/config.php:103 -msgid "Set scheme" -msgstr "Установить схему" +#: ../../Zotlabs/Module/Profiles.php:763 +msgid "Since (date)" +msgstr "С (дата)" -#: ../../view/theme/apw/php/config.php:261 -#: ../../view/theme/redbasic/php/config.php:124 -msgid "Set font-size for posts and comments" -msgstr "Установить размер шрифта для сообщений и комментариев" +#: ../../Zotlabs/Module/Profiles.php:766 +msgid "Tell us about yourself" +msgstr "Расскажите нам о себе" -#: ../../view/theme/apw/php/config.php:262 -msgid "Set font face" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:768 +msgid "Hometown" +msgstr "Родной город" -#: ../../view/theme/apw/php/config.php:263 -msgid "Set iconset" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:769 +msgid "Political views" +msgstr "Политические взгляды" -#: ../../view/theme/apw/php/config.php:264 -msgid "Set big shadow size, default 15px 15px 15px" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:770 +msgid "Religious views" +msgstr "Религиозные взгляды" -#: ../../view/theme/apw/php/config.php:265 -msgid "Set small shadow size, default 5px 5px 5px" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:771 +msgid "Keywords used in directory listings" +msgstr "Ключевые слова для участия в каталоге" -#: ../../view/theme/apw/php/config.php:266 -msgid "Set shadow colour, default #000" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:771 +msgid "Example: fishing photography software" +msgstr "Например: fishing photography software" -#: ../../view/theme/apw/php/config.php:267 -msgid "Set radius size, default 5px" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:774 +msgid "Musical interests" +msgstr "Музыкальные интересы" -#: ../../view/theme/apw/php/config.php:268 -msgid "Set line-height for posts and comments" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:775 +msgid "Books, literature" +msgstr "Книги, литература" -#: ../../view/theme/apw/php/config.php:269 -msgid "Set background image" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:776 +msgid "Television" +msgstr "Телевидение" -#: ../../view/theme/apw/php/config.php:270 -msgid "Set background attachment" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:777 +msgid "Film/Dance/Culture/Entertainment" +msgstr "Кино / танцы / культура / развлечения" -#: ../../view/theme/apw/php/config.php:271 -msgid "Set background colour" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:778 +msgid "Hobbies/Interests" +msgstr "Хобби / интересы" -#: ../../view/theme/apw/php/config.php:272 -msgid "Set section background image" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:779 +msgid "Love/Romance" +msgstr "Любовь / романтические отношения" -#: ../../view/theme/apw/php/config.php:273 -msgid "Set section background colour" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:781 +msgid "School/Education" +msgstr "Школа / образование" -#: ../../view/theme/apw/php/config.php:274 -msgid "Set colour of items - use hex" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:782 +msgid "Contact information and social networks" +msgstr "Информация и социальные сети для связи" -#: ../../view/theme/apw/php/config.php:275 -msgid "Set colour of links - use hex" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:783 +msgid "My other channels" +msgstr "Мои другие контакты" -#: ../../view/theme/apw/php/config.php:276 -msgid "Set max-width for items. Default 400px" -msgstr "" +#: ../../Zotlabs/Module/Profiles.php:785 +msgid "Communications" +msgstr "Связи" -#: ../../view/theme/apw/php/config.php:277 -msgid "Set min-width for items. Default 240px" -msgstr "" +#: ../../Zotlabs/Module/Email_resend.php:30 +msgid "Email verification resent" +msgstr "Сообщение для проверки email отправлено повторно" -#: ../../view/theme/apw/php/config.php:278 -msgid "Set the generic content wrapper width. Default 48%" -msgstr "" +#: ../../Zotlabs/Module/Email_resend.php:33 +msgid "Unable to resend email verification message." +msgstr "Невозможно повторно отправить сообщение для проверки email" -#: ../../view/theme/apw/php/config.php:279 -msgid "Set colour of fonts - use hex" -msgstr "" +#: ../../Zotlabs/Module/Profile.php:93 +msgid "vcard" +msgstr "vCard" -#: ../../view/theme/apw/php/config.php:280 -msgid "Set background-size element" -msgstr "" +#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63 +msgid "Invalid profile identifier." +msgstr "Неверный идентификатор профиля" -#: ../../view/theme/apw/php/config.php:281 -msgid "Item opacity" -msgstr "" +#: ../../Zotlabs/Module/Profperm.php:111 +msgid "Profile Visibility Editor" +msgstr "Редактор видимости профиля" -#: ../../view/theme/apw/php/config.php:282 -msgid "Display post previews only" -msgstr "" +#: ../../Zotlabs/Module/Profperm.php:115 +msgid "Click on a contact to add or remove." +msgstr "Нажмите на контакт, чтобы добавить или удалить." -#: ../../view/theme/apw/php/config.php:283 -msgid "Display side bar on channel page" -msgstr "" +#: ../../Zotlabs/Module/Profperm.php:124 +msgid "Visible To" +msgstr "Видно" -#: ../../view/theme/apw/php/config.php:284 -msgid "Colour of the navigation bar" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:120 +msgid "Thing updated" +msgstr "Обновлено" -#: ../../view/theme/apw/php/config.php:285 -msgid "Item float" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:172 +msgid "Object store: failed" +msgstr "Хранлищие объектов: неудача" -#: ../../view/theme/apw/php/config.php:286 -msgid "Left offset of the section element" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:176 +msgid "Thing added" +msgstr "Добавлено" -#: ../../view/theme/apw/php/config.php:287 -msgid "Right offset of the section element" +#: ../../Zotlabs/Module/Thing.php:202 +#, php-format +msgid "OBJ: %1$s %2$s %3$s" msgstr "" -#: ../../view/theme/apw/php/config.php:288 -msgid "Section width" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:265 +msgid "Show Thing" +msgstr "Показать" -#: ../../view/theme/apw/php/config.php:289 -msgid "Left offset of the aside" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:272 +msgid "item not found." +msgstr "Элемент не найден." -#: ../../view/theme/apw/php/config.php:290 -msgid "Right offset of the aside element" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:305 +msgid "Edit Thing" +msgstr "Редактировать" -#: ../../view/theme/blogga/php/config.php:47 -#: ../../view/theme/blogga/view/theme/blog/config.php:47 -msgid "None" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:307 ../../Zotlabs/Module/Thing.php:364 +msgid "Select a profile" +msgstr "Выбрать профиль" -#: ../../view/theme/blogga/php/config.php:70 -#: ../../view/theme/blogga/view/theme/blog/config.php:70 -msgid "Header image" -msgstr "Графика заголовока" +#: ../../Zotlabs/Module/Thing.php:311 ../../Zotlabs/Module/Thing.php:367 +msgid "Post an activity" +msgstr "Опубликовать мероприятие" -#: ../../view/theme/blogga/php/config.php:71 -#: ../../view/theme/blogga/view/theme/blog/config.php:71 -msgid "Header image only on profile pages" -msgstr "" +#: ../../Zotlabs/Module/Thing.php:311 ../../Zotlabs/Module/Thing.php:367 +msgid "Only sends to viewers of the applicable profile" +msgstr "Отправлять только подходящий профиль" -#: ../../view/theme/redbasic/php/config.php:104 -msgid "Narrow navbar" -msgstr "Узкая панель навигации" +#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369 +msgid "Name of thing e.g. something" +msgstr "Наименование, например \"нечто\"" -#: ../../view/theme/redbasic/php/config.php:105 -msgid "Navigation bar background colour" -msgstr "Панель навигации, цвет фона" +#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:370 +msgid "URL of thing (optional)" +msgstr "URL (необязательно)" -#: ../../view/theme/redbasic/php/config.php:106 -msgid "Navigation bar gradient top colour" -msgstr "Панель навигации, цвет градиента вверху" +#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:371 +msgid "URL for photo of thing (optional)" +msgstr "URL для фотографии (необязательно)" -#: ../../view/theme/redbasic/php/config.php:107 -msgid "Navigation bar gradient bottom colour" -msgstr "Панель навигации, цвет градиента внизу" +#: ../../Zotlabs/Module/Thing.php:362 +msgid "Add Thing to your Profile" +msgstr "Добавить к вашему профилю" -#: ../../view/theme/redbasic/php/config.php:108 -msgid "Navigation active button gradient top colour" -msgstr "Панель навигации, цвет градиента вверху активной кнопки" +#: ../../Zotlabs/Module/Display.php:394 +msgid "Article" +msgstr "Статья" -#: ../../view/theme/redbasic/php/config.php:109 -msgid "Navigation active button gradient bottom colour" -msgstr "Панель навигации, цвет градиента внизу активной кнопки" +#: ../../Zotlabs/Module/Display.php:446 +msgid "Item has been removed." +msgstr "Элемент был удалён." -#: ../../view/theme/redbasic/php/config.php:110 -msgid "Navigation bar border colour " -msgstr "Панель навигации, цвет границы" +#: ../../Zotlabs/Module/Home.php:92 +#, php-format +msgid "Welcome to %s" +msgstr "Добро пожаловать в %s" -#: ../../view/theme/redbasic/php/config.php:111 -msgid "Navigation bar icon colour " -msgstr "Панель навигации, цвет значков" +#: ../../Zotlabs/Module/Cloud.php:129 +msgid "Please refresh page" +msgstr "Пожалуйста обновите страницу" -#: ../../view/theme/redbasic/php/config.php:112 -msgid "Navigation bar active icon colour " -msgstr "Панель навигации, цвет активного значка" +#: ../../Zotlabs/Module/Cloud.php:132 +msgid "Unknown error" +msgstr "Неизвестная ошибка" -#: ../../view/theme/redbasic/php/config.php:113 -msgid "link colour" -msgstr "Цвет ссылок" +#: ../../Zotlabs/Module/Lostpass.php:19 +msgid "No valid account found." +msgstr "Действительный аккаунт не найден." -#: ../../view/theme/redbasic/php/config.php:114 -msgid "Set font-colour for banner" -msgstr "Цвет текста в шапке" +#: ../../Zotlabs/Module/Lostpass.php:33 +msgid "Password reset request issued. Check your email." +msgstr "Запрос на сброс пароля отправлен. Проверьте вашу электронную почту." -#: ../../view/theme/redbasic/php/config.php:115 -msgid "Set the background colour" -msgstr "Цвет фона на странице канала" +#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108 +#, php-format +msgid "Site Member (%s)" +msgstr "Участник сайта (%s)" -#: ../../view/theme/redbasic/php/config.php:116 -msgid "Set the background image" -msgstr "Фоновое изображение" +#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49 +#, php-format +msgid "Password reset requested at %s" +msgstr "Запроше сброс пароля на %s" -#: ../../view/theme/redbasic/php/config.php:117 -msgid "Set the background colour of items" -msgstr "Цвет фона для постов и других элементов" +#: ../../Zotlabs/Module/Lostpass.php:68 +msgid "" +"Request could not be verified. (You may have previously submitted it.) " +"Password reset failed." +msgstr "Запрос не может быть проверен. (Вы могли отправить его раньше). Сброс пароля не возможен." -#: ../../view/theme/redbasic/php/config.php:118 -msgid "Set the background colour of comments" -msgstr "Цвет фона для комментариев" +#: ../../Zotlabs/Module/Lostpass.php:92 +msgid "Your password has been reset as requested." +msgstr "Ваш пароль в соответствии с просьбой сброшен." -#: ../../view/theme/redbasic/php/config.php:119 -msgid "Set the border colour of comments" -msgstr "Цвет границы для области комментариев" +#: ../../Zotlabs/Module/Lostpass.php:93 +msgid "Your new password is" +msgstr "Ваш новый пароль" -#: ../../view/theme/redbasic/php/config.php:120 -msgid "Set the indent for comments" -msgstr "" +#: ../../Zotlabs/Module/Lostpass.php:94 +msgid "Save or copy your new password - and then" +msgstr "Сохраните ваш новый пароль и затем" -#: ../../view/theme/redbasic/php/config.php:121 -msgid "Set the basic colour for item icons" -msgstr "Основной цвет в иконках редактирования" +#: ../../Zotlabs/Module/Lostpass.php:95 +msgid "click here to login" +msgstr "нажмите здесь чтобы войти" -#: ../../view/theme/redbasic/php/config.php:122 -msgid "Set the hover colour for item icons" -msgstr "Цвет в иконках редактирования при наведении мыши" +#: ../../Zotlabs/Module/Lostpass.php:96 +msgid "" +"Your password may be changed from the Settings page after " +"successful login." +msgstr "Ваш пароль может быть изменён на странице Настройкипосле успешного входа." -#: ../../view/theme/redbasic/php/config.php:123 -msgid "Set font-size for the entire application" -msgstr "Установить размер шрифта для системы в целом" +#: ../../Zotlabs/Module/Lostpass.php:117 +#, php-format +msgid "Your password has changed at %s" +msgstr "Пароль был изменен на %s" -#: ../../view/theme/redbasic/php/config.php:125 -msgid "Set font-colour for posts and comments" -msgstr "Цвет шрифта для постов и комментариев" +#: ../../Zotlabs/Module/Lostpass.php:130 +msgid "Forgot your Password?" +msgstr "Забыли ваш пароль?" -#: ../../view/theme/redbasic/php/config.php:126 -msgid "Set radius of corners" -msgstr "Радиус скруглений" +#: ../../Zotlabs/Module/Lostpass.php:131 +msgid "" +"Enter your email address and submit to have your password reset. Then check " +"your email for further instructions." +msgstr "Введите ваш адрес электронной почты и нажмите отправить чтобы сбросить пароль. Затем проверьте ваш почтовый ящик для дальнейших инструкций. " -#: ../../view/theme/redbasic/php/config.php:127 -msgid "Set shadow depth of photos" -msgstr "" +#: ../../Zotlabs/Module/Lostpass.php:132 +msgid "Email Address" +msgstr "Адрес электронной почты" -#: ../../view/theme/redbasic/php/config.php:128 -msgid "Set maximum width of conversation regions" -msgstr "" +#: ../../Zotlabs/Module/Mood.php:136 +msgid "Set your current mood and tell your friends" +msgstr "Установить текущее настроение и рассказать друзьям" -#: ../../view/theme/redbasic/php/config.php:129 -msgid "Center conversation regions" -msgstr "" +#: ../../Zotlabs/Module/Import_items.php:93 +#, php-format +msgid "Warning: Database versions differ by %1$d updates." +msgstr "Предупреждение: Версия базы данных отличается от %1$d обновления." -#: ../../view/theme/redbasic/php/config.php:130 -msgid "Set minimum opacity of nav bar - to hide it" -msgstr "Панель навигации, прозрачность" +#: ../../Zotlabs/Module/Import_items.php:108 +msgid "Import completed" +msgstr "Импорт завершён." -#: ../../view/theme/redbasic/php/config.php:131 -msgid "Set size of conversation author photo" -msgstr "" +#: ../../Zotlabs/Module/Import_items.php:125 +msgid "Import Items" +msgstr "Импортировать объекты" -#: ../../view/theme/redbasic/php/config.php:132 -msgid "Set size of followup author photos" -msgstr "" +#: ../../Zotlabs/Module/Import_items.php:126 +msgid "Use this form to import existing posts and content from an export file." +msgstr "Используйте эту форму для импорта существующих публикаций и содержимого из файла." -#: ../../view/theme/redbasic/php/config.php:133 -msgid "Sloppy photo albums" -msgstr "" +#: ../../Zotlabs/Module/Chanview.php:139 +msgid "toggle full screen mode" +msgstr "переключение полноэкранного режима" -#: ../../view/theme/redbasic/php/config.php:133 -msgid "Are you a clean desk or a messy desk person?" -msgstr "" +#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:289 +msgid "parent" +msgstr "источник" -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:38 -msgid "Type" -msgstr "Тип" +#: ../../Zotlabs/Storage/Browser.php:134 +msgid "Principal" +msgstr "Субъект" -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:40 -msgid "Size" -msgstr "Размер" +#: ../../Zotlabs/Storage/Browser.php:137 +msgid "Addressbook" +msgstr "Адресная книга" -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:42 -msgid "Last modified" -msgstr "Последнее изменение" +#: ../../Zotlabs/Storage/Browser.php:143 +msgid "Schedule Inbox" +msgstr "План занятий входящий" -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:85 -msgid "Are you sure you want to delete this item?" -msgstr "Вы уверены, что хотите удалить этот элемент?" +#: ../../Zotlabs/Storage/Browser.php:146 +msgid "Schedule Outbox" +msgstr "План занятий исходящий" -#: ../../view/tpl/smarty3/compiled/de0b699d2fc212753c3f166003476a343ca00174.file.cloud_directory.tpl.php:103 +#: ../../Zotlabs/Storage/Browser.php:273 msgid "Total" msgstr "Всего" -#: ../../boot.php:1273 -#, php-format -msgid "Update %s failed. See error logs." -msgstr "" +#: ../../Zotlabs/Storage/Browser.php:275 +msgid "Shared" +msgstr "Общие" -#: ../../boot.php:1276 -#, php-format -msgid "Update Error at %s" -msgstr "Ошибка обновления на %s" +#: ../../Zotlabs/Storage/Browser.php:277 +msgid "Add Files" +msgstr "Добавить файлы" -#: ../../boot.php:1440 -msgid "" -"Create an account to access services and applications within the Hubzilla" -msgstr "" +#: ../../Zotlabs/Storage/Browser.php:361 +#, php-format +msgid "You are using %1$s of your available file storage." +msgstr "Вы используете %1$s из доступного вам хранилища файлов." -#: ../../boot.php:1468 -msgid "Password" -msgstr "Пароль" +#: ../../Zotlabs/Storage/Browser.php:366 +#, php-format +msgid "You are using %1$s of %2$s available file storage. (%3$s%)" +msgstr "Вы используете %1$s из %2$s доступного хранилища файлов (%3$s%)." -#: ../../boot.php:1469 -msgid "Remember me" -msgstr "Запомнить" +#: ../../Zotlabs/Storage/Browser.php:377 +msgid "WARNING:" +msgstr "Предупреждение:" -#: ../../boot.php:1474 -msgid "Forgot your password?" -msgstr "Забыли пароль или логин?" +#: ../../Zotlabs/Storage/Browser.php:389 +msgid "Create new folder" +msgstr "Создать новую папку" -#: ../../boot.php:1539 -msgid "permission denied" -msgstr "доступ запрещен" +#: ../../Zotlabs/Storage/Browser.php:391 +msgid "Upload file" +msgstr "Загрузить файл" -#: ../../boot.php:1540 -msgid "Got Zot?" -msgstr "Got Zot?" +#: ../../Zotlabs/Storage/Browser.php:404 +msgid "Drop files here to immediately upload" +msgstr "Поместите файлы сюда для немедленной загрузки" -#: ../../boot.php:1970 -msgid "toggle mobile" -msgstr "мобильное подключение" -- cgit v1.2.3 From 790a9155d416d52387a1891417d8558ed490ea5d Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 10:25:03 +0200 Subject: Update hstrings.php --- view/ru/hstrings.php | 4779 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 3138 insertions(+), 1641 deletions(-) diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index 4e42df2fc..d97aa2c7f 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -2,568 +2,1129 @@ if(! function_exists("string_plural_select_ru")) { function string_plural_select_ru($n){ - return ($n%10==1 && $n%100!=11 ? 0 : $n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2);; + return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14) ? 1 : 2)); }} -; -App::$strings["Cannot locate DNS info for database server '%s'"] = ""; -App::$strings["Profile Photos"] = "Фотографии профиля"; -App::$strings["Image/photo"] = "Изображение / фото"; +App::$rtl = 0; +App::$strings["Source channel not found."] = "Канал-источник не найден."; +App::$strings["lonely"] = "одинокий"; +App::$strings["drunk"] = "пьяный"; +App::$strings["horny"] = "возбуждённый"; +App::$strings["stoned"] = "под кайфом"; +App::$strings["fucked up"] = "облажался"; +App::$strings["clusterfucked"] = "в полной заднице"; +App::$strings["crazy"] = "сумасшедший"; +App::$strings["hurt"] = "обиженный"; +App::$strings["sleepy"] = "сонный"; +App::$strings["grumpy"] = "сердитый"; +App::$strings["high"] = "кайфует"; +App::$strings["semi-conscious"] = "в полубезсознании"; +App::$strings["in love"] = "влюблённый"; +App::$strings["in lust"] = "похотливый"; +App::$strings["naked"] = "обнажённый"; +App::$strings["stinky"] = "вонючий"; +App::$strings["sweaty"] = "потный"; +App::$strings["bleeding out"] = "истекающий кровью"; +App::$strings["victorious"] = "победивший"; +App::$strings["defeated"] = "проигравший"; +App::$strings["envious"] = "завидует"; +App::$strings["jealous"] = "ревнует"; +App::$strings["Post to Dreamwidth"] = "Публиковать в Dreamwidth"; +App::$strings["Enable Dreamwidth Post Plugin"] = "Включить плагин публикаций Dreamwidth"; +App::$strings["No"] = "Нет"; +App::$strings["Yes"] = "Да"; +App::$strings["Dreamwidth username"] = "Имя пользователя Dreamwidth"; +App::$strings["Dreamwidth password"] = "Пароль Dreamwidth"; +App::$strings["Post to Dreamwidth by default"] = "Публиковать в Dreamwidth по умолчанию"; +App::$strings["Dreamwidth Post Settings"] = "Настройки публикаций в Dreamwidth"; +App::$strings["Submit"] = "Отправить"; +App::$strings["Markdown"] = "Разметка"; +App::$strings["Use markdown for editing posts"] = "Использовать язык разметки для редактирования публикаций"; +App::$strings["You're welcome."] = "Пожалуйста."; +App::$strings["Ah shucks..."] = "О, чёрт..."; +App::$strings["Don't mention it."] = "Не стоит благодарности."; +App::$strings["<blush>"] = "<краснею>"; +App::$strings["Send test email"] = "Отправить тестовый email"; +App::$strings["No recipients found."] = "Получателей не найдено."; +App::$strings["Mail sent."] = "Сообщение отправлено"; +App::$strings["Sending of mail failed."] = "Не удалось отправить сообщение."; +App::$strings["Mail Test"] = "Тестовое сообщение"; +App::$strings["Message subject"] = "Тема сообщения"; +App::$strings["Project Servers and Resources"] = "Серверы и ресурсы проекта"; +App::$strings["Project Creator and Tech Lead"] = "Создатель проекта и технический руководитель"; +App::$strings["Admin, developer, directorymin, support bloke"] = "Администратор, разработчик, администратор каталога, поддержка"; +App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "И сотни других людей и организаций которые помогали в создании Hubzilla."; +App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "Проекты Redmatrix / Hubzilla предоставляются, в основном, добровольцами, которые предоставляют свое время и опыт и, часто, оплачивают из своего кармана услуги, которыми они делятся с другими."; +App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - you do.)"] = "Здесь нет корпоративного финансирования и рекламы, мы не собираем и не продаем вашу личную информацию. (Мы не контролируем вашу личную информацию - это делаете вы.)"; +App::$strings["Help support our ground-breaking work in decentralisation, web identity, and privacy."] = "Помогите поддержать нашу новаторскую работу в областях децентрализации, веб-идентификации и конфиденциальности."; +App::$strings["Your donations keep servers and services running and also helps us to provide innovative new features and continued development."] = "В ваших пожертвованиях поддерживают серверы и службы, а также помогают нам предоставлять новые возможности и продолжать развитие."; +App::$strings["Donate"] = "Пожертвовать"; +App::$strings["Choose a project, developer, or public hub to support with a one-time donation"] = "Выберите проект, разработчика или общедоступный узел для поддержки в форме единоразового пожертвования"; +App::$strings["Donate Now"] = "Пожертвовать сейчас"; +App::$strings["Or become a project sponsor (Hubzilla Project only)"] = "или станьте спонсором проекта (только для Hubzilla)"; +App::$strings["Please indicate if you would like your first name or full name (or nothing) to appear in our sponsor listing"] = "Пожалуйста, если желаете, укажите ваше имя для отображения в списке спонсоров."; +App::$strings["Sponsor"] = "Спонсор"; +App::$strings["Special thanks to: "] = "Особые благодарности:"; +App::$strings["Currently blocked"] = "В настоящее время заблокирован"; +App::$strings["No channels currently blocked"] = "В настоящее время никакие каналы не блокируются"; +App::$strings["Remove"] = "Удалить"; +App::$strings["Superblock Settings"] = "Настройки Superblock"; +App::$strings["Block Completely"] = "Заблокировать полностью"; +App::$strings["superblock settings updated"] = "Настройки Superblock обновлены."; +App::$strings["XMPP settings updated."] = "Настройки XMPP обновлены."; +App::$strings["Enable Chat"] = "Включить чат"; +App::$strings["Individual credentials"] = "Индивидуальные разрешения"; +App::$strings["Jabber BOSH server"] = "Сервер Jabber BOSH"; +App::$strings["XMPP Settings"] = "Настройки XMPP"; +App::$strings["Save Settings"] = "Сохранить настройки"; +App::$strings["Jabber BOSH host"] = "Узел Jabber BOSH"; +App::$strings["Use central userbase"] = "Использовать центральную базу данных"; +App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт\"auth_ejabberd.php\"."; +App::$strings["Settings updated."] = "Настройки обновлены."; +App::$strings["Send email to all members"] = "Отправить email всем участникам"; +App::$strings["%s Administrator"] = "администратор %s"; +App::$strings["%1\$d of %2\$d messages sent."] = "%1\$dиз %2\$d сообщений отправлено."; +App::$strings["Send email to all hub members."] = "Отправить email всем участникам узла."; +App::$strings["Sender Email address"] = "Адрес электронной почты отправителя"; +App::$strings["Test mode (only send to hub administrator)"] = "Тестовый режим (отправка только администратору узла)"; +App::$strings["Report Bug"] = "Сообщить об ошибке"; +App::$strings["Post to Insanejournal"] = "Опубликовать в InsaneJournal"; +App::$strings["Enable InsaneJournal Post Plugin"] = "Включить плагин публикаций InsaneJournal"; +App::$strings["InsaneJournal username"] = "Имя пользователя InsaneJournal"; +App::$strings["InsaneJournal password"] = "Пароль InsaneJournal"; +App::$strings["Post to InsaneJournal by default"] = "Публиковать в InsaneJournal по умолчанию"; +App::$strings["InsaneJournal Post Settings"] = "Настройки публикаций в InsaneJournal"; +App::$strings["Insane Journal Settings saved."] = "Настройки InsaneJournal сохранены."; +App::$strings["Hubzilla Directory Stats"] = "Каталог статистики Hubzilla"; +App::$strings["Total Hubs"] = "Всего хабов"; +App::$strings["Hubzilla Hubs"] = "Хабы Hubzilla"; +App::$strings["Friendica Hubs"] = "Хабы Friendica"; +App::$strings["Diaspora Pods"] = "Стручки Diaspora"; +App::$strings["Hubzilla Channels"] = "Каналы Hubzilla"; +App::$strings["Friendica Channels"] = "Каналы Friendica"; +App::$strings["Diaspora Channels"] = "Каналы Diaspora"; +App::$strings["Aged 35 and above"] = "Возраст 35 и выше"; +App::$strings["Aged 34 and under"] = "Возраст 34 и ниже"; +App::$strings["Average Age"] = "Средний возраст"; +App::$strings["Known Chatrooms"] = "Известные чаты"; +App::$strings["Known Tags"] = "Известные теги"; +App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "166/500Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам."; +App::$strings["Invalid game."] = "Недействительная игра"; +App::$strings["You are not a player in this game."] = "Вы не играете в эту игру."; +App::$strings["You must be a local channel to create a game."] = "Ваш канал должен быть локальным чтобы создать игру."; +App::$strings["You must select one opponent that is not yourself."] = "Вы должны выбрать противника который не является вами."; +App::$strings["Random color chosen."] = "Выбран случайный цвет."; +App::$strings["Error creating new game."] = "Ошибка создания новой игры."; +App::$strings["Requested channel is not available."] = "Запрошенный канал не доступен."; +App::$strings["You must select a local channel /chess/channelname"] = "Вы должны выбрать локальный канал /chess/channelname"; +App::$strings["You must be logged in to see this page."] = "Вы должны авторизоваться, чтобы увидеть эту страницу."; +App::$strings["Enable notifications"] = "Включить оповещения"; +App::$strings["Planets Settings updated."] = "Настройки Planets обновлены."; +App::$strings["Enable Planets Plugin"] = "Включить плагин Planets"; +App::$strings["Planets Settings"] = "Настройки Planets"; +App::$strings["Post to Libertree"] = "Опубликовать в Libertree"; +App::$strings["Enable Libertree Post Plugin"] = "Включить плагин публикаций Libertree"; +App::$strings["Libertree API token"] = "Токен Libertree API"; +App::$strings["Libertree site URL"] = "URL сайта Libertree"; +App::$strings["Post to Libertree by default"] = "Публиковать в Libertree по умолчанию"; +App::$strings["Libertree Post Settings"] = "Настройки публикаций в Libertree"; +App::$strings["Libertree Settings saved."] = "Настройки Libertree сохранены."; +App::$strings["Only authenticate automatically to sites of your friends"] = "Автоматически аутентифицироватся только на сайтах ваших друзей"; +App::$strings["By default you are automatically authenticated anywhere in the network"] = "По умолчанию вы автоматически аутентифицируетесь во всей сети"; +App::$strings["Authchoose Settings"] = "Настройки выбора аутентификации"; +App::$strings["Atuhchoose Settings updated."] = "Настройки выбора аутентификации обновлены."; +App::$strings["Logfile archive directory"] = "Каталог архивирования журнала"; +App::$strings["Directory to store rotated logs"] = "Каталог для хранения заархивированных журналов"; +App::$strings["Logfile size in bytes before rotating"] = "Размер файла журнала в байтах для архивирования"; +App::$strings["Number of logfiles to retain"] = "Количество сохраняемых файлов журналов"; +App::$strings["QR code"] = "QR-код"; +App::$strings["QR Generator"] = "Генератор QR-кодов"; +App::$strings["Enter some text"] = "Введите любой текст"; +App::$strings["text to include in all outgoing posts from this site"] = "текст, который будет добавлен во все исходящие публикации с этого сайта"; +App::$strings["file"] = "файл"; +App::$strings["Permission denied"] = "Доступ запрещен"; +App::$strings["Redmatrix File Storage Import"] = "Импорт файлового хранилища Redmatrix"; +App::$strings["This will import all your Redmatrix cloud files to this channel."] = "Это позволит импортировать все ваши файлы в Redmatrix в этот канал."; +App::$strings["Redmatrix Server base URL"] = "Базовый URL сервера Redmatrix"; +App::$strings["Redmatrix Login Username"] = "Имя пользователя Redmatrix"; +App::$strings["Redmatrix Login Password"] = "Пароль Redmatrix"; +App::$strings["Deactivate the feature"] = "Деактивировать функцию"; +App::$strings["Hide the button and show the smilies directly."] = "Скрыть кнопку и сразу показывать смайлики."; +App::$strings["Smileybutton Settings"] = "Настройки кнопки смайликов"; +App::$strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Этот плагин просматривает публикации для слов / текста, которые вы указываете ниже, и сворачивает любой контент, содержащий эти ключевые слова, поэтому он не отображается в неподходящее время, например, сексуальные инсинуации, которые могут быть неправильными в настройке работы. Например, мы рекомендуем отмечать любой контент, содержащий наготу, тегом #NSFW. Этот фильтр также способен реагировать на любое другое указанное вами слово / текст и может использоваться в качестве фильтра содержимого общего назначения."; +App::$strings["Enable Content filter"] = "Включить фильтрацию содержимого"; +App::$strings["Comma separated list of keywords to hide"] = "Список ключевых слов для скрытия, через запятую"; +App::$strings["Word, /regular-expression/, lang=xx, lang!=xx"] = "слово, /регулярное_выражение/, lang=xx, lang!=xx"; +App::$strings["Not Safe For Work Settings"] = "Настройка \"Not Safe For Work\""; +App::$strings["General Purpose Content Filter"] = "Фильтр содержимого общего назначения"; +App::$strings["NSFW Settings saved."] = "Настройки NSFW сохранены."; +App::$strings["Possible adult content"] = "Возможно содержимое для взрослых"; +App::$strings["%s - view"] = "%s - просмотр"; +App::$strings["Flattr this!"] = ""; +App::$strings["Flattr widget settings updated."] = "Настройки виджета Flattr обновлены."; +App::$strings["Flattr user"] = "Пользователь Flattr"; +App::$strings["URL of the Thing to flattr"] = "URL ccылки на Flattr"; +App::$strings["If empty channel URL is used"] = "Если пусто, то используется URL канала"; +App::$strings["Title of the Thing to flattr"] = "Заголовок вещи на Flattr"; +App::$strings["If empty \"channel name on The Hubzilla\" will be used"] = "Если пусто, то будет использовано \"Название канала Hubzilla\""; +App::$strings["Static or dynamic flattr button"] = "Статическая или динамическая кнопка Flattr"; +App::$strings["static"] = "статическая"; +App::$strings["dynamic"] = "динамическая"; +App::$strings["Alignment of the widget"] = "Выравнивание виджета"; +App::$strings["left"] = "слева"; +App::$strings["right"] = "справа"; +App::$strings["Enable Flattr widget"] = "Включить виджет Flattr"; +App::$strings["Flattr Widget Settings"] = "Настройки виджета Flattr"; +App::$strings["Permission denied."] = "Доступ запрещен."; +App::$strings["You are now authenticated to pumpio."] = "Вы аутентифицированы в Pump.io"; +App::$strings["return to the featured settings page"] = "Вернутся к странице настроек"; +App::$strings["Post to Pump.io"] = "Опубликовать в Pump.io"; +App::$strings["Pump.io servername"] = "Имя сервера Pump.io"; +App::$strings["Without \"http://\" or \"https://\""] = "Без \"http://\" или \"https://\""; +App::$strings["Pump.io username"] = "Имя пользователя Pump.io"; +App::$strings["Without the servername"] = "без имени сервера"; +App::$strings["You are not authenticated to pumpio"] = "Вы не аутентифицированы на Pump.io"; +App::$strings["(Re-)Authenticate your pump.io connection"] = "Аутентифицировать (повторно) ваше соединение с Pump.io"; +App::$strings["Enable pump.io Post Plugin"] = "Включить плагин публикаций Pump.io"; +App::$strings["Post to pump.io by default"] = "Публиковать в Pump.io по умолчанию"; +App::$strings["Should posts be public"] = "Публикации должны быть общедоступными"; +App::$strings["Mirror all public posts"] = "Отображать все общедоступные публикации"; +App::$strings["Pump.io Post Settings"] = "Настройки публикаций в Pump.io"; +App::$strings["PumpIO Settings saved."] = "Настройки публикаций в Pump.io сохранены."; +App::$strings["Save Bookmarks"] = "Сохранить закладки"; +App::$strings["Status:"] = "Статус:"; +App::$strings["Activate addon"] = "Активировать расширение"; +App::$strings["Hide Jappixmini Chat-Widget from the webinterface"] = "Скрыть виджет чата Jappixmini из веб-интерфейса"; +App::$strings["Jabber username"] = "Имя пользователя Jabber"; +App::$strings["Jabber server"] = "Сервер Jabber"; +App::$strings["Jabber BOSH host URL"] = "URL узла Jabber BOSH"; +App::$strings["Jabber password"] = "Пароль Jabber"; +App::$strings["Encrypt Jabber password with Hubzilla password"] = "Зашифровать пароль Jabber с помощью пароля Hubzilla"; +App::$strings["Recommended"] = "рекомендовано"; +App::$strings["Hubzilla password"] = "Пароль Hubzilla"; +App::$strings["Approve subscription requests from Hubzilla contacts automatically"] = "Утверждать запросы на подписку от контактов Hubzilla автоматически"; +App::$strings["Purge internal list of jabber addresses of contacts"] = "Очистить внутренний список адресов контактов Jabber"; +App::$strings["Configuration Help"] = "Помощь по конфигурации"; +App::$strings["Add Contact"] = "Добавить контакт"; +App::$strings["Jappix Mini Settings"] = "Настройки Jappix Mini"; +App::$strings["Post to LiveJournal"] = "Опубликовать в LiveJournal"; +App::$strings["Enable LiveJournal Post Plugin"] = "Включить плагин публикаций LiveJournal"; +App::$strings["LiveJournal username"] = "Имя пользователя LiveJournal"; +App::$strings["LiveJournal password"] = "Пароль LiveJournal"; +App::$strings["Post to LiveJournal by default"] = "Публиковать в LiveJournal по умолчанию"; +App::$strings["LiveJournal Post Settings"] = "Настройки публикаций в LiveJournal"; +App::$strings["LiveJournal Settings saved."] = "Настройки LiveJournal сохранены."; +App::$strings["Errors encountered deleting database table "] = "Возникшие при удалении таблицы базы данных ошибки"; +App::$strings["Submit Settings"] = "Отправить настройки"; +App::$strings["Drop tables when uninstalling?"] = "Удалить таблицы при деинсталляции?"; +App::$strings["If checked, the Rendezvous database tables will be deleted when the plugin is uninstalled."] = "Если включено, то таблицы базы данных Rendezvous будут удалены при удалении плагина."; +App::$strings["Mapbox Access Token"] = "Токен доступа к Mapbox"; +App::$strings["If you enter a Mapbox access token, it will be used to retrieve map tiles from Mapbox instead of the default OpenStreetMap tile server."] = "Если вы введете токен доступа к Mapbox, он будет использоваться для извлечения фрагментов карты из Mapbox вместо стандартного сервера OpenStreetMap."; +App::$strings["Rendezvous"] = ""; +App::$strings["This identity has been deleted by another member due to inactivity. Please press the \"New identity\" button or refresh the page to register a new identity. You may use the same name."] = "Этот идентификатор был удалён другим участником из-за неактивности. Пожалуйста нажмите кнопку \"Новый идентификатор\" для обновления страницы и получения нового идентификатора. Вы можете использовать то же имя."; +App::$strings["Welcome to Rendezvous!"] = "Добро пожаловать в Rendezvous!"; +App::$strings["Enter your name to join this rendezvous. To begin sharing your location with the other members, tap the GPS control. When your location is discovered, a red dot will appear and others will be able to see you on the map."] = "Введите ваше имя для вступления в это Rendezvous. Для того, чтобы делиться вашим положением с другими участниками, нажмите \"GPS control\". Когда ваше местоположение определно, красная точка появится и остальные смогут увидеть вас на карте."; +App::$strings["Let's meet here"] = "Давайте встретимся здесь"; +App::$strings["Name"] = "Имя"; +App::$strings["Description"] = "Описание"; +App::$strings["New marker"] = "Новый маркер"; +App::$strings["Edit marker"] = "Редактировать маркер"; +App::$strings["New identity"] = "Новый идентификатор"; +App::$strings["Delete marker"] = "Удалить маркер"; +App::$strings["Delete member"] = "Удалить участника"; +App::$strings["Edit proximity alert"] = "Изменить оповещение о близости"; +App::$strings["A proximity alert will be issued when this member is within a certain radius of you.

Enter a radius in meters (0 to disable):"] = "Оповещение о близости будет произведено, если этот участник находится на определённом расстоянии от вас.

Введите радиус в метрах (0 для отключения):"; +App::$strings["distance"] = "расстояние"; +App::$strings["Proximity alert distance (meters)"] = "Расстояние для уведомления о близости (метров)"; +App::$strings["A proximity alert will be issued when you are within a certain radius of the marker location.

Enter a radius in meters (0 to disable):"] = "Оповещение о близости будет произведено, если вы находитесь на определённом расстоянии местоположения маркера.

Введите радиус в метрах (0 для отключения):"; +App::$strings["Marker proximity alert"] = "Маркер уведомления о близости"; +App::$strings["Reminder note"] = "Напоминание"; +App::$strings["Enter a note to be displayed when you are within the specified proximity..."] = "Введите сообщение для отображения когда вы находитесь рядом"; +App::$strings["Add new rendezvous"] = "Добавить новое Rendezvous."; +App::$strings["Create a new rendezvous and share the access link with those you wish to invite to the group. Those who open the link become members of the rendezvous. They can view other member locations, add markers to the map, or share their own locations with the group."] = "Создайте новое Rendezvous и поделитесь ссылкой доступа с теми, кого вы хотите пригласить в группу. Тот, кто откроет эту ссылку, станет её участником. Участники могут видеть местоположение, добавлять маркеры на карту или делится своим собственным местоположением с группой."; +App::$strings["You have no rendezvous. Press the button above to create a rendezvous!"] = "У вас нет Rendezvous. Нажмите на кнопку ниже чтобы создать его!"; +App::$strings["Errors encountered creating database tables."] = "При создании базы данных возникли ошибки."; +App::$strings["View Larger"] = "Увеличить"; +App::$strings["Tile Server URL"] = "URL сервера Tile"; +App::$strings["A list of public tile servers"] = "Список общедоступных серверов"; +App::$strings["Nominatim (reverse geocoding) Server URL"] = "URL сервера Nominatim (обратное геокодирование)"; +App::$strings["A list of Nominatim servers"] = "Список серверов Nominatim"; +App::$strings["Default zoom"] = "Масштаб по умолчанию"; +App::$strings["The default zoom level. (1:world, 18:highest, also depends on tile server)"] = "Уровень размера по умолчанию (1 - весь мир, 18 - максимальный; зависит от сервера)."; +App::$strings["Include marker on map"] = "Включите маркер на карте"; +App::$strings["Include a marker on the map."] = "Включить маркер на карте"; +App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Мы столкнулись с проблемой входа с предоставленным вами OpenID. Пожалуйста, проверьте корректность его написания."; +App::$strings["The error message was:"] = "Сообщение об ошибке было:"; +App::$strings["OpenID protocol error. No ID returned."] = "Ошибка протокола OpenID. Идентификатор не возвращён."; +App::$strings["Welcome %s. Remote authentication successful."] = "Добро пожаловать %s. Удаленная аутентификация успешно завершена."; +App::$strings["Login failed."] = "Не удалось войти."; +App::$strings["First Name"] = "Имя"; +App::$strings["Last Name"] = "Фамилия"; +App::$strings["Nickname"] = "Псевдоним"; +App::$strings["Full Name"] = "Полное имя"; +App::$strings["Email"] = "Электронная почта"; +App::$strings["Profile Photo"] = "Фотография профиля"; +App::$strings["Profile Photo 16px"] = "Фотография профиля 16px"; +App::$strings["Profile Photo 32px"] = "Фотография профиля 32px"; +App::$strings["Profile Photo 48px"] = "Фотография профиля 48px"; +App::$strings["Profile Photo 64px"] = "Фотография профиля 64px"; +App::$strings["Profile Photo 80px"] = "Фотография профиля 80px"; +App::$strings["Profile Photo 128px"] = "Фотография профиля 128px"; +App::$strings["Timezone"] = "Часовой пояс"; +App::$strings["Homepage URL"] = "URL домашней страницы"; +App::$strings["Language"] = "Язык"; +App::$strings["Birth Year"] = "Год рождения"; +App::$strings["Birth Month"] = "Месяц рождения"; +App::$strings["Birth Day"] = "День рождения"; +App::$strings["Birthdate"] = "Дата рождения"; +App::$strings["Gender"] = "Гендер"; +App::$strings["Male"] = "Мужчина"; +App::$strings["Female"] = "Женщина"; +App::$strings["Your Webbie:"] = "Ваш Webbie:"; +App::$strings["Fontsize (px):"] = "Размер шрифта (px):"; +App::$strings["Link:"] = "Ссылка:"; +App::$strings["Like us on Hubzilla"] = "Нравится на Hubzilla"; +App::$strings["Embed:"] = "Встроить:"; +App::$strings["Extended Identity Sharing"] = "Расширенный обмен идентификацией"; +App::$strings["Share your identity with all websites on the internet. When disabled, identity is only shared with \$Projectname sites."] = "Поделиться вашим идентификатором на всех веб-сайтах в Интернет. Если выключено, то идентификатор доступен только для сайтов \$Projectname."; +App::$strings["An account has been created for you."] = "Учётная запись, которая была для вас создана."; +App::$strings["Authentication successful but rejected: account creation is disabled."] = "Аутентификация выполнена успешно, но отклонена: создание учетной записи отключено."; +App::$strings["Post to Twitter"] = "Опубликовать в Twitter"; +App::$strings["Twitter settings updated."] = "Настройки Twitter обновлены"; +App::$strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Не найдено пары ключей для Twitter. Пожалуйста, свяжитесь с администратором сайта."; +App::$strings["At this Hubzilla instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "В этой установке Hubzilla плагин Twitter был включён, однако пока он не подключён к вашему аккаунту в Twitter. Для этого нажмите на кнопку ниже для получения PIN-кода от Twitter который нужно скопировать в поле ввода и отправить форму. Только ваши общедоступные публикации будут опубликованы в Twitter."; +App::$strings["Log in with Twitter"] = "Войти в Twitter"; +App::$strings["Copy the PIN from Twitter here"] = "Скопируйте PIN-код из Twitter здесь"; +App::$strings["Currently connected to: "] = "В настоящее время подключён к:"; +App::$strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Замечание: Из-за настроек конфиденциальности (скрыть данные своего профиля от неизвестных зрителей?) cсылка, потенциально включенная в общедоступные публикации, переданные в Twitter, приведет посетителя к пустой странице, информирующей его о том, что доступ к вашему профилю был ограничен."; +App::$strings["Allow posting to Twitter"] = "Разрешить публиковать в Twitter"; +App::$strings["If enabled your public postings can be posted to the associated Twitter account"] = "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи Twitter"; +App::$strings["Twitter post length"] = "Длина публикации Twitter"; +App::$strings["Maximum tweet length"] = "Максимальная длина твита"; +App::$strings["Send public postings to Twitter by default"] = "Отправлять общедоступные публикации в Twitter по умолчанию"; +App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи Twitter по умолчанию"; +App::$strings["Clear OAuth configuration"] = "Очистить конфигурацию OAuth"; +App::$strings["Twitter Post Settings"] = "Настройки публикаций в Twitter"; +App::$strings["Consumer Key"] = "Ключ клиента"; +App::$strings["Consumer Secret"] = "Код клиента"; +App::$strings["Flag Adult Photos"] = "Пометка фотографий для взрослых"; +App::$strings["Provide photo edit option to hide inappropriate photos from default album view"] = "Предоставьте возможность редактирования фотографий, чтобы скрыть неприемлемые фотографии из альбома по умолчанию"; +App::$strings["Unknown"] = "Неизвестный"; +App::$strings["ActivityPub"] = ""; +App::$strings["photo"] = "фото"; +App::$strings["status"] = "статус"; +App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %2\$s %3\$s"; +App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %2\$s %3\$s"; +App::$strings["ActivityPub Protocol Settings updated."] = "Настройки протокола ActivityPub обновлены."; +App::$strings["The ActivityPub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "Протокол ActivityPub не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала. "; +App::$strings["Enable the ActivityPub protocol for this channel"] = "Включить протокол ActivityPub для этого канала"; +App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "Доставить получателям ActivityPub в группах безопасности"; +App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "Может привести к большому количеству упоминаний и раскрытию участников группы безопасности"; +App::$strings["Send multi-media HTML articles"] = "Отправить HTML статьи с мультимедиа"; +App::$strings["Not supported by some microblog services such as Mastodon"] = "Не поддерживается некоторыми микроблогами, например Mastodon"; +App::$strings["ActivityPub Protocol Settings"] = "Настройки протокола ActivityPub"; +App::$strings["No username found in import file."] = "Имя пользователя не найдено в файле для импорта."; +App::$strings["Unable to create a unique channel address. Import failed."] = "Не удалось создать уникальный адрес канала. Импорт не завершен."; +App::$strings["Import completed."] = "Импорт завершен."; +App::$strings["\$projectname"] = ""; +App::$strings["Diaspora Protocol Settings updated."] = "Настройки протокола Diaspora обновлены."; +App::$strings["The Diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "Прокол Diaspora не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала."; +App::$strings["Enable the Diaspora protocol for this channel"] = "Включить протокол Diaspora для этого канала"; +App::$strings["Allow any Diaspora member to comment on your public posts"] = "Разрешить любому участнику Diaspora комментировать ваши общедоступные публикации"; +App::$strings["Prevent your hashtags from being redirected to other sites"] = "Предотвратить перенаправление тегов на другие сайты"; +App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "Подписывать и отправлять публикации и комментарии с несуществующей подписью Diaspora"; +App::$strings["Followed hashtags (comma separated, do not include the #)"] = "Отслеживаемые теги (через запятую, исключая #)"; +App::$strings["Diaspora Protocol Settings"] = "Настройки протокола Diaspora"; +App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s посещает %2\$s%3\$s"; +App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s не посещает %2\$s%3\$s"; +App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s может посетить %2\$s%3\$s"; +App::$strings["System defaults:"] = "Системные по умолчанию:"; +App::$strings["Preferred Clipart IDs"] = "Предпочитаемый Clipart ID"; +App::$strings["List of preferred clipart ids. These will be shown first."] = "Список предпочитаемых Clipart ID. Эти будут показаны первыми."; +App::$strings["Default Search Term"] = "Условие поиска по умолчанию"; +App::$strings["The default search term. These will be shown second."] = "Условие поиска по умолчанию. Показываются во вторую очередь."; +App::$strings["Return After"] = "Вернуться после"; +App::$strings["Page to load after image selection."] = "Страница для загрузки после выбора изображения."; +App::$strings["View Profile"] = "Просмотреть профиль"; +App::$strings["Edit Profile"] = "Редактировать профиль"; +App::$strings["Profile List"] = "Список профилей"; +App::$strings["Order of Preferred"] = "Порядок предпочтения"; +App::$strings["Sort order of preferred clipart ids."] = "Порядок сортировки предпочитаемых Clipart ID. "; +App::$strings["Newest first"] = "Новое первым"; +App::$strings["As entered"] = "По мере ввода"; +App::$strings["Order of other"] = "Порядок других"; +App::$strings["Sort order of other clipart ids."] = "Порядок сортировки остальных Clipart ID."; +App::$strings["Most downloaded first"] = "Самое загружаемое первым"; +App::$strings["Most liked first"] = "Самое нравящееся первым"; +App::$strings["Preferred IDs Message"] = "Сообщение от предпочитаемых ID"; +App::$strings["Message to display above preferred results."] = "Отображаемое сообщение над предпочитаемыми результатами."; +App::$strings["Uploaded by: "] = "Загружено:"; +App::$strings["Drawn by: "] = "Нарисовано:"; +App::$strings["Use this image"] = "Использовать это изображение"; +App::$strings["Or select from a free OpenClipart.org image:"] = "Или выберите из бесплатных изображений на OpenClipart.org"; +App::$strings["Search Term"] = "Условие поиска"; +App::$strings["Unknown error. Please try again later."] = "Неизвестная ошибка. Пожалуйста, повторите попытку позже."; +App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера"; +App::$strings["Profile photo updated successfully."] = "Фотография профиля обновлена успешно."; +App::$strings["Edit your profile and change settings."] = "Отредактировать ваш профиль и изменить настройки."; +App::$strings["Click here to see activity from your connections."] = "Нажмите сюда для отображения активности ваши контактов."; +App::$strings["Click here to see your channel home."] = "Нажмите сюда чтобы увидеть главную страницу вашего канала."; +App::$strings["You can access your private messages from here."] = "Вы можете получить доступ с личной переписке здесь."; +App::$strings["Create new events here."] = "Создать новое событие здесь."; +App::$strings["You can accept new connections and change permissions for existing ones here. You can also e.g. create groups of contacts."] = "Вы можете подключать новые контакты и менять разрешения для существующих здесь. Также вы можете создавать их группы."; +App::$strings["System notifications will arrive here"] = "Системные оповещения будут показываться здесь"; +App::$strings["Search for content and users"] = "Поиск пользователей и содержимого"; +App::$strings["Browse for new contacts"] = "Поиск новых контактов"; +App::$strings["Launch installed apps"] = "Запустить установленные приложения"; +App::$strings["Looking for help? Click here."] = "Нужна помощь? Нажмите сюда."; +App::$strings["New events have occurred in your network. Click here to see what has happened!"] = "Новые события произошли в вашей сети. Нажмите здесь для того, чтобы знать что случилось!"; +App::$strings["You have received a new private message. Click here to see from who!"] = "Вы получили новое личное сообщение. Нажмите чтобы увидеть от кого!"; +App::$strings["There are events this week. Click here too see which!"] = "На этой неделе есть события. Нажмите здесь чтобы увидеть какие!"; +App::$strings["You have received a new introduction. Click here to see who!"] = "Вы были представлены. Нажмите чтобы увидеть кому!"; +App::$strings["There is a new system notification. Click here to see what has happened!"] = "Это новое системное уведомление. Нажмите чтобы посмотреть что случилось!"; +App::$strings["Click here to share text, images, videos and sound."] = "Нажмите сюда чтобы поделиться текстом, изображениями, видео или треком."; +App::$strings["You can write an optional title for your update (good for long posts)."] = "Вы можете написать необязательный заголовок для вашей публикации (желательно для больших постов)."; +App::$strings["Entering some categories here makes it easier to find your post later."] = "Введите категории здесь чтобы было проще найти вашу публикацию позднее."; +App::$strings["Share photos, links, location, etc."] = "Поделиться фотографией, ссылками, местоположение и т.п."; +App::$strings["Only want to share content for a while? Make it expire at a certain date."] = "Хотите только поделиться временным содержимым? Установите срок его действия."; +App::$strings["You can password protect content."] = "Вы можете защитить содержимое паролем."; +App::$strings["Choose who you share with."] = "Выбрать с кем поделиться."; +App::$strings["Click here when you are done."] = "Нажмите здесь когда закончите."; +App::$strings["Adjust from which channels posts should be displayed."] = "Настройте из каких каналов должны отображаться публикации."; +App::$strings["Only show posts from channels in the specified privacy group."] = "Показывать только публикации из определённой группы безопасности."; +App::$strings["Easily find posts containing tags (keywords preceded by the \"#\" symbol)."] = "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")."; +App::$strings["Easily find posts in given category."] = "Лёгкий поиск публикаций в данной категории."; +App::$strings["Easily find posts by date."] = "Лёгкий поиск публикаций по дате."; +App::$strings["Suggested users who have volounteered to be shown as suggestions, and who we think you might find interesting."] = "Рекомендуемые пользователи, которые были представлены в качестве предложений, и которые, по нашему мнению, могут оказаться интересными."; +App::$strings["Here you see channels you have connected to."] = "Здесь вы видите каналы, к которым вы подключились."; +App::$strings["Save your search so you can repeat it at a later date."] = "Сохраните ваш поиск с тем, чтобы повторить его позже."; +App::$strings["If you see this icon you can be sure that the sender is who it say it is. It is normal that it is not always possible to verify the sender, so the icon will be missing sometimes. There is usually no need to worry about that."] = "Если вы видите этот значок, вы можете быть уверены, что отправитель - это тот, кто это говорит. Это нормально, что не всегда можно проверить отправителя, поэтому значок иногда будет отсутствовать. Обычно об этом не нужно беспокоиться."; +App::$strings["Danger! It seems someone tried to forge a message! This message is not necessarily from who it says it is from!"] = "Опасность! Кажется, кто-то пытался подделать сообщение! Это сообщение не обязательно от того, от кого оно значится!"; +App::$strings["Welcome to Hubzilla! Would you like to see a tour of the UI?

You can pause it at any time and continue where you left off by reloading the page, or navigting to another page.

You can also advance by pressing the return key"] = "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\""; +App::$strings["Some setting"] = "Некоторые настройки"; +App::$strings["A setting"] = "Настройка"; +App::$strings["Skeleton Settings"] = "Настройки скелета"; +App::$strings["Show Upload Limits"] = "Показать ограничения на загрузку"; +App::$strings["Hubzilla configured maximum size: "] = "Максимальный размер настроенный в Hubzilla:"; +App::$strings["PHP upload_max_filesize: "] = ""; +App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = ""; +App::$strings["GNU-Social Protocol Settings updated."] = "Настройки протокола GNU Social обновлены."; +App::$strings["The GNU-Social protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "Прокол GNU Social не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала."; +App::$strings["Enable the GNU-Social protocol for this channel"] = "Включить протокол GNU Social для этого канала"; +App::$strings["GNU-Social Protocol Settings"] = "Настройки протокола GNU Social"; +App::$strings["Follow"] = "Отслеживать"; +App::$strings["%1\$s is now following %2\$s"] = "%1\$s сейчас отслеживает %2\$s"; +App::$strings["Gallery"] = "Галерея"; +App::$strings["Photo Gallery"] = "Фотогалерея"; +App::$strings["Page to load after login"] = "Страница для загрузки после входа"; +App::$strings["Examples: "apps", "network?f=&gid=37" (privacy collection), "channel" or "notifications/system" (leave blank for default network page (grid)."] = "Примеры: "apps", "network?f=&gid=37" (privacy collection), "channel" or "notifications/system" (оставьте пустым для для страницы сети по умолчанию)."; +App::$strings["Startpage Settings"] = "Настройки стартовой страницы"; +App::$strings["Message to display on every page on this server"] = "Отображаемое сообщение на каждой странице на этом сервере."; +App::$strings["Pageheader Settings"] = "Настройки шапки страницы"; +App::$strings["pageheader Settings saved."] = "Настройки шапки страницы сохранены."; +App::$strings["Three Dimensional Tic-Tac-Toe"] = "Tic-Tac-Toe в трёх измерениях"; +App::$strings["3D Tic-Tac-Toe"] = ""; +App::$strings["New game"] = "Новая игра"; +App::$strings["New game with handicap"] = "Новая игра с форой"; +App::$strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "Трехмерный Tic-Tac-Toe похож на традиционную игру, за исключением того, что игра идёт на нескольких уровнях одновременно."; +App::$strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "Имеется три уровня. Вы выигрываете, получая три подряд на любом уровне, а также вверх, вниз и по диагонали на разных уровнях."; +App::$strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "Игра с форой отключает центральную позицию на среднем уровне, потому что игрок, претендующий на этот квадрат, часто имеет несправедливое преимущество."; +App::$strings["You go first..."] = "Вы начинаете..."; +App::$strings["I'm going first this time..."] = "На этот раз начинаю я..."; +App::$strings["You won!"] = "Вы выиграли!"; +App::$strings["\"Cat\" game!"] = "Ничья!"; +App::$strings["I won!"] = "Я выиграл!"; +App::$strings["Fuzzloc Settings updated."] = "Настройки Fuzzloc обновлены."; +App::$strings["Fuzzloc allows you to blur your precise location if your channel uses browser location mapping."] = "Fuzzloc позволяет размыть ваше точное местоположение, если ваш канал использует сопоставление местоположений браузера."; +App::$strings["Enable Fuzzloc Plugin"] = "Включить плагин Fuzzloc"; +App::$strings["Minimum offset in meters"] = "Минимальное смещение в метрах"; +App::$strings["Maximum offset in meters"] = "Максимальное смещение в метрах"; +App::$strings["Fuzzloc Settings"] = "Настройки Fuzzloc"; +App::$strings["Post to Friendica"] = "Опубликовать в Friendica"; +App::$strings["rtof Settings saved."] = "Настройки rtof сохранены."; +App::$strings["Allow posting to Friendica"] = "Разрешить публиковать в Friendica"; +App::$strings["Send public postings to Friendica by default"] = "Отправлять общедоступные публикации во Friendica по умолчанию"; +App::$strings["Friendica API Path"] = "Путь к Friendica API"; +App::$strings["https://{sitename}/api"] = ""; +App::$strings["Friendica login name"] = "Имя входа Friendica"; +App::$strings["Friendica password"] = "Пароль Friendica"; +App::$strings["Hubzilla to Friendica Post Settings"] = "Настройки публикаций Hubzilla для Friendica"; +App::$strings["Post to GNU social"] = "Опубликовать в GNU Social"; +App::$strings["Please contact your site administrator.
The provided API URL is not valid."] = "Пожалуйста свяжитесь с администратором сайта.
Предоставленный URL API недействителен."; +App::$strings["We could not contact the GNU social API with the Path you entered."] = "Нам не удалось установить контакт с GNU Social API по введённому вами пути"; +App::$strings["GNU social settings updated."] = "Настройки GNU Social обновлены."; +App::$strings["Globally Available GNU social OAuthKeys"] = "Глобально доступные ключи OAuthKeys GNU Social"; +App::$strings["There are preconfigured OAuth key pairs for some GNU social servers available. If you are using one of them, please use these credentials.
If not feel free to connect to any other GNU social instance (see below)."] = "Существуют предварительно настроенные пары ключей OAuth для некоторых доступных серверов GNU social. Если вы используете один из них, используйте эти учетные данные.
Если вы не хотите подключаться к какому-либо другому серверу GNU social (см. ниже)."; +App::$strings["Provide your own OAuth Credentials"] = "Предоставьте ваши собственные регистрационные данные OAuth"; +App::$strings["No consumer key pair for GNU social found. Register your Hubzilla Account as an desktop client on your GNU social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Hubzilla installation at your favourite GNU social installation."] = "Не найдена пользовательская пара ключей для GNU social. Зарегистрируйте свою учетную запись Hubzilla в качестве настольного клиента в своей учетной записи GNU social, скопируйте cюда пару ключей пользователя и введите корневой каталог базы API.
Прежде чем регистрировать свою собственную пару ключей OAuth, спросите администратора, если ли уже пара ключей для этой установки Hubzilla в вашем GNU social."; +App::$strings["OAuth Consumer Key"] = "Ключ клиента OAuth"; +App::$strings["OAuth Consumer Secret"] = "Пароль клиента OAuth"; +App::$strings["Base API Path"] = "Основной путь к API"; +App::$strings["Remember the trailing /"] = "Запомнить закрывающий /"; +App::$strings["GNU social application name"] = "Имя приложения GNU social"; +App::$strings["To connect to your GNU social account click the button below to get a security code from GNU social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU social."] = "Чтобы подключиться к вашей учетной записи GNU social нажмите кнопку ниже для получения кода безопасности из GNU social, который вы должны скопировать в поле ввода ниже и отправить форму. Только ваши общедоступные сообщения будут опубликованы в GNU social."; +App::$strings["Log in with GNU social"] = "Войти с GNU social"; +App::$strings["Copy the security code from GNU social here"] = "Скопируйте код безопасности GNU social здесь"; +App::$strings["Cancel Connection Process"] = "Отменить процесс подключения"; +App::$strings["Current GNU social API is"] = "Текущий GNU social API"; +App::$strings["Cancel GNU social Connection"] = "Отменить подключение с GNU social"; +App::$strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Замечание: Из-за настроек конфиденциальности (скрыть данные своего профиля от неизвестных зрителей?) cсылка, потенциально включенная в общедоступные публикации, переданные в GNU social, приведет посетителя к пустой странице, информирующей его о том, что доступ к вашему профилю был ограничен."; +App::$strings["Allow posting to GNU social"] = "Разрешить публиковать в GNU social"; +App::$strings["If enabled your public postings can be posted to the associated GNU-social account"] = "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи GNU social"; +App::$strings["Post to GNU social by default"] = "Публиковать в GNU social по умолчанию"; +App::$strings["If enabled your public postings will be posted to the associated GNU-social account by default"] = "Если включено, ваши общедоступные публикации будут опубликованы в связанной учётной записи GNU social по умолчанию"; +App::$strings["GNU social Post Settings"] = "Настройки публикаций GNU social"; +App::$strings["Site name"] = "Название сайта"; +App::$strings["API URL"] = ""; +App::$strings["Application name"] = "Название приложения"; +App::$strings["Enable Rainbowtag"] = "Включить Rainbowtag"; +App::$strings["Rainbowtag Settings"] = "Настройки Rainbowtag"; +App::$strings["Rainbowtag Settings saved."] = "Настройки Rainbowtag сохранены."; +App::$strings["Friendica Photo Album Import"] = "Импортировать альбом фотографий Friendica"; +App::$strings["This will import all your Friendica photo albums to this Red channel."] = "Это позволит импортировать все ваши альбомы фотографий Friendica в этот канал."; +App::$strings["Friendica Server base URL"] = "Базовый URL сервера Friendica"; +App::$strings["Friendica Login Username"] = "Имя пользователя для входа Friendica"; +App::$strings["Friendica Login Password"] = "Пароль для входа Firendica"; +App::$strings["This website is tracked using the Piwik analytics tool."] = "Этот сайт отслеживается с помощью инструментов аналитики Piwik."; +App::$strings["If you do not want that your visits are logged this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."] = "Если вы не хотите, чтобы ваши визиты регистрировались таким образом, вы можете отключить cookie с тем, чтобы Piwik не отслеживал дальнейшие посещения сайта."; +App::$strings["Piwik Base URL"] = "Базовый URL Piwik"; +App::$strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "Абсолютный путь к вашей установке Piwik (без типа протокола, с начальным слэшем)"; +App::$strings["Site ID"] = "ID сайта"; +App::$strings["Show opt-out cookie link?"] = "Показывать ссылку на отказ от использования cookies?"; +App::$strings["Asynchronous tracking"] = "Асинхронное отслеживание"; +App::$strings["Enable frontend JavaScript error tracking"] = "Включить отслеживание ошибок JavaScript на фронтенде."; +App::$strings["This feature requires Piwik >= 2.2.0"] = "Эта функция требует версию Piwik >= 2.2.0"; +App::$strings["Photos imported"] = "Фотографии импортированы"; +App::$strings["Redmatrix Photo Album Import"] = "Импортировать альбом фотографий Redmatrix"; +App::$strings["This will import all your Redmatrix photo albums to this channel."] = "Это позволит импортировать все ваши альбомы фотографий Redmatrix в этот канал."; +App::$strings["Import just this album"] = "Импортировать только этот альбом"; +App::$strings["Leave blank to import all albums"] = "Оставьте пустым для импорта всех альбомов"; +App::$strings["Maximum count to import"] = "Максимальное количество для импорта"; +App::$strings["0 or blank to import all available"] = "0 или пусто для импорта всех доступных"; +App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Искать %1\$s (%2\$s)"; +App::$strings["__ctx:opensearch__ \$Projectname"] = ""; +App::$strings["\$Projectname"] = ""; +App::$strings["Search \$Projectname"] = "Поиск \$Projectname"; +App::$strings["Recent Channel/Profile Viewers"] = "Последние просмотры канала / профиля"; +App::$strings["This plugin/addon has not been configured."] = "Это расширение не было настроено."; +App::$strings["Please visit the Visage settings on %s"] = "Пожалуйста, посетите настройки Visage на %s"; +App::$strings["your feature settings page"] = "страница ваших установочных параметров"; +App::$strings["No entries."] = "Нет записей."; +App::$strings["Enable Visage Visitor Logging"] = "Включить журналирование посетителей Visage"; +App::$strings["Visage Settings"] = "Настройки Visage"; +App::$strings["Error: order mismatch. Please try again."] = "Ошибка: несоответствие заказа. Пожалуйста, попробуйте ещё раз"; +App::$strings["Manual payments are not enabled."] = "Ручные платежи не подключены."; +App::$strings["Order not found."] = "Заказ не найден."; +App::$strings["Finished"] = "Завершено"; +App::$strings["Invalid channel"] = "Недействительный канал"; +App::$strings["[cart] Item Added"] = "[cart] Элемент добавлен"; +App::$strings["Order already checked out."] = "Заказ уже проверен."; +App::$strings["Enable Shopping Cart"] = "Включить корзину"; +App::$strings["Enable Test Catalog"] = "Включить тестовый каталог"; +App::$strings["Enable Manual Payments"] = "Включить ручные платежи"; +App::$strings["Base Merchant Currency"] = "Основная торговая валюта"; +App::$strings["Cart - Base Settings"] = "Корзина - Основные настройки"; +App::$strings["Shop"] = "Магазин"; +App::$strings["Profile Unavailable."] = "Профиль недоступен."; +App::$strings["Order Not Found"] = "Заказ не найден"; +App::$strings["You must be logged into the Grid to shop."] = "Вы должны быть в сети для доступа к магазину"; +App::$strings["Cart Not Enabled (profile: "] = "Корзина не подключена (профиль:"; +App::$strings["Access denied."] = "Доступ запрещён."; +App::$strings["No Order Found"] = "Нет найденных заказов"; +App::$strings["An unknown error has occurred Please start again."] = "Произошла неизвестная ошибка. Пожалуйста, начните снова."; +App::$strings["Invalid Payment Type. Please start again."] = "Недействительный тип платежа. Пожалуйста, начните снова."; +App::$strings["Order not found"] = "Заказ не найден"; +App::$strings["Enable Paypal Button Module"] = "Включить модуль кнопки Paypal"; +App::$strings["Use Production Key"] = "Использовать ключ Production"; +App::$strings["Paypal Sandbox Client Key"] = "Ключ клиента Paypal Sandbox"; +App::$strings["Paypal Sandbox Secret Key"] = "Секретный ключ Paypal Sandbox"; +App::$strings["Paypal Production Client Key"] = "Ключ клиента Paypal Production"; +App::$strings["Paypal Production Secret Key"] = "Секретный ключ Paypal Production"; +App::$strings["Cart - Paypal Addon"] = "Корзина - Paypal плагин"; +App::$strings["Paypal button payments are not enabled."] = "Кнопка Paypal для платежей не включена."; +App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты."; +App::$strings["Enable Hubzilla Services Module"] = "Включить модуль сервиса Hubzilla"; +App::$strings["Cart - Hubzilla Services Addon"] = "Корзина - плагин сервиса Hubzilla"; +App::$strings["New SKU"] = "Новый код"; +App::$strings["Cannot save edits to locked item."] = "Невозможно сохранить изменения заблокированной позиции."; +App::$strings["SKU not found."] = "Код не найден."; +App::$strings["Invalid Activation Directive."] = "Недействительная директива активации."; +App::$strings["Invalid Deactivation Directive."] = "Недействительная директива деактивации"; +App::$strings["Add to this privacy group"] = "Добавить в эту группу безопасности"; +App::$strings["Set user service class"] = "Установить класс обслуживания пользователя"; +App::$strings["You must be using a local account to purchase this service."] = "Вы должны использовать локальную учётноую запись для покупки этого сервиса."; +App::$strings["Changes Locked"] = "Изменения заблокированы"; +App::$strings["Item available for purchase."] = "Позиция доступна для приобретения."; +App::$strings["Price"] = "Цена"; +App::$strings["Add buyer to privacy group"] = "Добавить покупателя в группу безопасности"; +App::$strings["Add buyer as connection"] = "Добавить покупателя как контакт"; +App::$strings["Set Service Class"] = "Установить класс обслуживания"; +App::$strings["Access Denied."] = "Доступ запрещён."; +App::$strings["Access Denied"] = "Доступ запрещён"; +App::$strings["Invalid Item"] = "Недействительный элемент"; +App::$strings["Nsabait Settings updated."] = "Настройки Nsabait обновлены"; +App::$strings["Enable NSAbait Plugin"] = "Включить плагин NSAbait"; +App::$strings["NSAbait Settings"] = "Настройки Nsabait"; +App::$strings["Hubzilla File Storage Import"] = "Импорт файлового хранилища Hubzilla"; +App::$strings["This will import all your cloud files from another server."] = "Это позволит импортировать все ваши файлы с другого сервера."; +App::$strings["Hubzilla Server base URL"] = "Базовый URL сервера Hubzilla"; +App::$strings["Since modified date yyyy-mm-dd"] = "Начиная с даты изменений yyyy-mm-dd"; +App::$strings["Until modified date yyyy-mm-dd"] = "Заканчивая датой изменений yyyy-mm-dd"; +App::$strings["Federate"] = ""; +App::$strings["nofed Settings saved."] = "Настройки nofed сохранены."; +App::$strings["Allow Federation Toggle"] = "Разрешить переключение федерации"; +App::$strings["Federate posts by default"] = "Разрешить федерацию публикаций по умолчанию"; +App::$strings["NoFed Settings"] = "Настройки NoFed"; +App::$strings["generic profile image"] = "Стандартное изображение профиля"; +App::$strings["random geometric pattern"] = "Случайный геометрический рисунок"; +App::$strings["monster face"] = "Лицо чудовища"; +App::$strings["computer generated face"] = "Сгенерированное компьютером лицо"; +App::$strings["retro arcade style face"] = "Лицо в стиле старой аркадной игры"; +App::$strings["Hub default profile photo"] = "Фотография профиля по умолчанию"; +App::$strings["Information"] = "Информация"; +App::$strings["Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar."] = "Плагин Libravatar также установлен. Пожалуйста, отключите плагин Libravatar или этот плагин Gravatar. Если Плагин Libravatar ничего не найдёт, он вернётся в Gravatar."; +App::$strings["Default avatar image"] = "Изображение аватара по умолчанию"; +App::$strings["Select default avatar image if none was found at Gravatar. See README"] = "Выберите изображения аватар по умолчанию если ничего не было найдено в Gravatar (см. README)."; +App::$strings["Rating of images"] = "Оценки изображений"; +App::$strings["Select the appropriate avatar rating for your site. See README"] = "Выберите подходящую оценку аватара для вашего сайта (см. README)."; +App::$strings["Gravatar settings updated."] = "Настройки Gravatar обновлены."; +App::$strings["Post to Red"] = "Опубликовать в Red"; +App::$strings["Channel is required."] = "Необходим канал."; +App::$strings["Invalid channel."] = "Недействительный канал."; +App::$strings["redred Settings saved."] = "Настройки RedRed сохранены."; +App::$strings["Allow posting to another Hubzilla Channel"] = "Разрешить публиковать в другой канал Hubzilla"; +App::$strings["Send public postings to Hubzilla channel by default"] = "Отправлять общедоступные публикации в канал Hubzilla по умолчанию"; +App::$strings["Hubzilla API Path"] = "Путь к Hubzilla API"; +App::$strings["Hubzilla login name"] = "Имя входа Hubzilla"; +App::$strings["Hubzilla channel name"] = "Название канала Hubzilla"; +App::$strings["Hubzilla Crosspost Settings"] = "Настройки перекрёстных публикаций Hubzilla"; +App::$strings["This is a fairly comprehensive and complete guitar chord dictionary which will list most of the available ways to play a certain chord, starting from the base of the fingerboard up to a few frets beyond the twelfth fret (beyond which everything repeats). A couple of non-standard tunings are provided for the benefit of slide players, etc."] = ""; +App::$strings["Chord names start with a root note (A-G) and may include sharps (#) and flats (b). This software will parse most of the standard naming conventions such as maj, min, dim, sus(2 or 4), aug, with optional repeating elements."] = ""; +App::$strings["Valid examples include A, A7, Am7, Amaj7, Amaj9, Ammaj7, Aadd4, Asus2Add4, E7b13b11 ..."] = "Примеры действительных включают A, A7, Am7, Amaj7, Amaj9, Ammaj7, Aadd4, Asus2Add4, E7b13b11 ..."; +App::$strings["Guitar Chords"] = "Гитарные аккорды"; +App::$strings["The complete online chord dictionary"] = "Полный онлайн словарь аккордов"; +App::$strings["Tuning"] = "Настройка"; +App::$strings["Chord name: example: Em7"] = "Наименование аккорда - example: Em7"; +App::$strings["Show for left handed stringing"] = "Показывать струны для левшей"; +App::$strings["Quick Reference"] = "Быстрая ссылка"; +App::$strings["New registration"] = "Новая регистрация"; +App::$strings["%s : Message delivery failed."] = "%s : Доставка сообщения не удалась."; +App::$strings["Message sent to %s. New account registration: %s"] = "Сообщение отправлено в %s. Регистрация нового аккаунта: %s"; +App::$strings["Channels to auto connect"] = "Каналы для автоматического подключения"; +App::$strings["Comma separated list"] = "Список, разделённый запятыми"; +App::$strings["Popular Channels"] = "Популярные каналы"; +App::$strings["IRC Settings"] = "Настройки IRC"; +App::$strings["IRC settings saved."] = "Настройки IRC сохранены"; +App::$strings["IRC Chatroom"] = "Чат IRC"; +App::$strings["bitchslap"] = "дать леща"; +App::$strings["bitchslapped"] = "получил леща"; +App::$strings["shag"] = "вздрючить"; +App::$strings["shagged"] = "вздрюченный"; +App::$strings["patent"] = ""; +App::$strings["patented"] = ""; +App::$strings["hug"] = "обнять"; +App::$strings["hugged"] = "обнятый"; +App::$strings["murder"] = "убить"; +App::$strings["murdered"] = "убитый"; +App::$strings["worship"] = "почитать"; +App::$strings["worshipped"] = "почитаемый"; +App::$strings["kiss"] = "целовать"; +App::$strings["kissed"] = "поцелованный"; +App::$strings["tempt"] = "искушать"; +App::$strings["tempted"] = "искушённый"; +App::$strings["raise eyebrows at"] = ""; +App::$strings["raised their eyebrows at"] = ""; +App::$strings["insult"] = "оскорбить"; +App::$strings["insulted"] = "оскорблённый"; +App::$strings["praise"] = "хвалить"; +App::$strings["praised"] = "похваленный"; +App::$strings["be dubious of"] = "усомниться"; +App::$strings["was dubious of"] = "усомнился"; +App::$strings["eat"] = "есть"; +App::$strings["ate"] = "съел"; +App::$strings["giggle and fawn at"] = ""; +App::$strings["giggled and fawned at"] = ""; +App::$strings["doubt"] = "сомневаться"; +App::$strings["doubted"] = "сомневался"; +App::$strings["glare"] = ""; +App::$strings["glared at"] = ""; +App::$strings["fuck"] = "трахнуть"; +App::$strings["fucked"] = "трахнул"; +App::$strings["bonk"] = ""; +App::$strings["bonked"] = ""; +App::$strings["declare undying love for"] = ""; +App::$strings["declared undying love for"] = ""; +App::$strings["Post to WordPress"] = "Опубликовать в WordPress"; +App::$strings["Enable WordPress Post Plugin"] = "Включить плагин публикаций WordPress"; +App::$strings["WordPress username"] = "Имя пользователя WordPress"; +App::$strings["WordPress password"] = "Пароль WordPress"; +App::$strings["WordPress API URL"] = "URL API WordPress"; +App::$strings["Typically https://your-blog.tld/xmlrpc.php"] = "Обычно https://your-blog.tld/xmlrpc.php"; +App::$strings["WordPress blogid"] = ""; +App::$strings["For multi-user sites such as wordpress.com, otherwise leave blank"] = "Для многопользовательских сайтов, таких, как wordpress.com. В противном случае оставьте пустым"; +App::$strings["Post to WordPress by default"] = "Публиковать в WordPress по умолчанию"; +App::$strings["Forward comments (requires hubzilla_wp plugin)"] = "Пересылать комментарии (требуется плагин hubzilla_wp)"; +App::$strings["WordPress Post Settings"] = "Настройки публикации в WordPress"; +App::$strings["Wordpress Settings saved."] = "Настройки WordPress сохранены."; +App::$strings["Who likes me?"] = "Кому я нравлюсь?"; +App::$strings["Your account on %s will expire in a few days."] = "Ваш аккаунт на %s перестанет работать через несколько дней."; +App::$strings["Your $Productname test account is about to expire."] = "Тестовый период вашей учётной записи в $Productname истёк."; +App::$strings["Create an account to access services and applications"] = "Создайте аккаунт для доступа к службам и приложениям"; +App::$strings["Register"] = "Регистрация"; +App::$strings["Logout"] = "Выход"; +App::$strings["Login"] = "Войти"; +App::$strings["Remote Authentication"] = "Удаленная аутентификация"; +App::$strings["Login/Email"] = "Пользователь / email"; +App::$strings["Password"] = "Пароль"; +App::$strings["Remember me"] = "Запомнить меня"; +App::$strings["Forgot your password?"] = "Забыли пароль или логин?"; +App::$strings["Password Reset"] = "Сбросить пароль"; +App::$strings["[\$Projectname] Website SSL error for %s"] = "[\$Projectname] Ошибка SSL/TLS веб-сайта для %s"; +App::$strings["Website SSL certificate is not valid. Please correct."] = "SSL/TLS сертификат веб-сайт недействителен. Исправьте это."; +App::$strings["[\$Projectname] Cron tasks not running on %s"] = "[\$Projectname] Задания Cron не запущены на %s"; +App::$strings["Cron/Scheduled tasks not running."] = "Задания Cron / планировщика не запущены."; +App::$strings["never"] = "никогд"; +App::$strings["Default"] = "По умолчанию"; +App::$strings["Focus (Hubzilla default)"] = "Фокус (по умолчанию Hubzilla)"; +App::$strings["Theme settings"] = "Настройки темы"; +App::$strings["Narrow navbar"] = "Узкая панель навигации"; +App::$strings["Navigation bar background color"] = "Панель навигации, цвет фона"; +App::$strings["Navigation bar icon color "] = "Панель навигации, цвет значков"; +App::$strings["Navigation bar active icon color "] = "Панель навигации, цвет активного значка"; +App::$strings["Link color"] = "цвет ссылок"; +App::$strings["Set font-color for banner"] = "Цвет текста в шапке"; +App::$strings["Set the background color"] = "Цвет фона"; +App::$strings["Set the background image"] = "Фоновое изображение"; +App::$strings["Set the background color of items"] = "Цвет фона элементов"; +App::$strings["Set the background color of comments"] = "Цвет фона комментариев"; +App::$strings["Set font-size for the entire application"] = "Установить системный размер шрифта"; +App::$strings["Examples: 1rem, 100%, 16px"] = "Например: 1rem, 100%, 16px"; +App::$strings["Set font-color for posts and comments"] = "Цвет шрифта для постов и комментариев"; +App::$strings["Set radius of corners"] = "Радиус скруглений"; +App::$strings["Example: 4px"] = "Например: 4px"; +App::$strings["Set shadow depth of photos"] = "Глубина теней фотографий"; +App::$strings["Set maximum width of content region in pixel"] = "Максимальная ширина содержания региона (в пикселях)"; +App::$strings["Leave empty for default width"] = "Оставьте пустым для ширины по умолчанию"; +App::$strings["Set size of conversation author photo"] = "Размер фотографии автора беседы"; +App::$strings["Set size of followup author photos"] = "Размер фотографий подписчиков"; +App::$strings["Image/photo"] = "Изображение / фотография"; App::$strings["Encrypted content"] = "Зашифрованное содержание"; -App::$strings["QR code"] = "QR код"; -App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s написал следующее %2\$s %3\$s"; -App::$strings["post"] = "сообщение"; +App::$strings["Install %1\$s element %2\$s"] = "Установить %1\$s элемент %2\$s"; +App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Эта публикация содержит устанавливаемый %s элемент, однако у вас нет разрешений для его установки на этом сайте."; +App::$strings["webpage"] = "веб-страница"; +App::$strings["layout"] = "шаблон"; +App::$strings["block"] = "заблокировать"; +App::$strings["menu"] = "меню"; +App::$strings["card"] = "карточка"; +App::$strings["article"] = "статья"; +App::$strings["post"] = "публикация"; +App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s была создана %2\$s %3\$s"; +App::$strings["Click to open/close"] = "Нажмите, чтобы открыть/закрыть"; +App::$strings["spoiler"] = "спойлер"; +App::$strings["View article"] = "Просмотр статей"; +App::$strings["View summary"] = "Просмотр резюме"; +App::$strings["Different viewers will see this text differently"] = "Различные зрители увидят этот текст по-разному"; App::$strings["$1 wrote:"] = "$1 писал:"; -App::$strings["Embedded content"] = "Внедренное содержание"; -App::$strings["Embedding disabled"] = "Внедрение отключенно"; -App::$strings["created a new post"] = "создал новое сообщение"; -App::$strings["commented on %s's post"] = "прокомментировал %s's сообщение"; -App::$strings["photo"] = "фото"; -App::$strings["event"] = "мероприятие"; +App::$strings["Not a valid email address"] = "Недействительный адрес электронной почты"; +App::$strings["Your email domain is not among those allowed on this site"] = "Домен электронной почты не входит в число тех, которые разрешены на этом сайте"; +App::$strings["Your email address is already registered at this site."] = "Ваш адрес электронной почты уже зарегистрирован на этом сайте."; +App::$strings["An invitation is required."] = "Требуется приглашение."; +App::$strings["Invitation could not be verified."] = "Не удалось проверить приглашение."; +App::$strings["Please enter the required information."] = "Пожалуйста, введите необходимую информацию."; +App::$strings["Failed to store account information."] = "Не удалось сохранить информацию аккаунта."; +App::$strings["Registration confirmation for %s"] = "Подтверждение регистрации для %s"; +App::$strings["Registration request at %s"] = "Запрос регистрации на %s"; +App::$strings["your registration password"] = "ваш пароль регистрации"; +App::$strings["Registration details for %s"] = "Регистрационные данные для %s"; +App::$strings["Account approved."] = "Аккаунт утвержден."; +App::$strings["Registration revoked for %s"] = "Регистрация отозвана для %s"; +App::$strings["Click here to upgrade."] = "Нажмите здесь для обновления."; +App::$strings["This action exceeds the limits set by your subscription plan."] = "Это действие превышает ограничения, установленные в вашем плане."; +App::$strings["This action is not available under your subscription plan."] = "Это действие невозможно из-за ограничений в вашем плане."; +App::$strings["Delegation session ended."] = "Делегированная сессия завершена."; +App::$strings["Logged out."] = "Вышел из системы."; +App::$strings["Email validation is incomplete. Please check your email."] = "Проверка email не завершена. Пожалуйста, проверьте вашу почту."; +App::$strings["Failed authentication"] = "Ошибка аутентификации"; +App::$strings["event"] = "событие"; App::$strings["channel"] = "канал"; -App::$strings["status"] = "статус"; App::$strings["comment"] = "комментарий"; -App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %2\$s's %3\$s"; -App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %2\$s's %3\$s"; -App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s теперь соединен с %2\$s"; -App::$strings["%1\$s poked %2\$s"] = "%1\$s подпихнул %2\$s"; -App::$strings["poked"] = "подпихнул"; -App::$strings["__ctx:mood__ %1\$s is %2\$s"] = ""; +App::$strings["likes %1\$s's %2\$s"] = "Нравится %1\$s %2\$s"; +App::$strings["doesn't like %1\$s's %2\$s"] = "Не нравится %1\$s %2\$s"; +App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s теперь в контакте с %2\$s"; +App::$strings["%1\$s poked %2\$s"] = "%1\$s ткнул %2\$s"; +App::$strings["poked"] = "ткнут"; +App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s в %2\$s"; +App::$strings["This is an unsaved preview"] = "Это несохранённый просмотр"; +App::$strings["__ctx:title__ Likes"] = "Нравится"; +App::$strings["__ctx:title__ Dislikes"] = "Не нравится"; +App::$strings["__ctx:title__ Agree"] = "За"; +App::$strings["__ctx:title__ Disagree"] = "Против"; +App::$strings["__ctx:title__ Abstain"] = "Воздерживается"; +App::$strings["__ctx:title__ Attending"] = "Посещает"; +App::$strings["__ctx:title__ Not attending"] = "Не посещает"; +App::$strings["__ctx:title__ Might attend"] = "Может присутствовать"; App::$strings["Select"] = "Выбрать"; App::$strings["Delete"] = "Удалить"; +App::$strings["Toggle Star Status"] = "Переключить статус пометки"; App::$strings["Private Message"] = "Личное сообщение"; -App::$strings["Message is verified"] = "Сообщение проверено"; -App::$strings["View %s's profile @ %s"] = "Просмотр %s's профиля @ %s"; +App::$strings["Message signature validated"] = "Подпись сообщения проверена"; +App::$strings["Message signature incorrect"] = "Подпись сообщения неверная"; +App::$strings["Approve"] = "Утвердить"; +App::$strings["View %s's profile @ %s"] = "Просмотреть профиль %s @ %s"; App::$strings["Categories:"] = "Категории:"; App::$strings["Filed under:"] = "Хранить под:"; -App::$strings[" from %s"] = " от %s"; -App::$strings["last edited: %s"] = ""; -App::$strings["Expires: %s"] = ""; +App::$strings["from %s"] = "от %s"; +App::$strings["last edited: %s"] = "последнее редактирование: %s"; +App::$strings["Expires: %s"] = "Срок действия: %s"; App::$strings["View in context"] = "Показать в контексте"; App::$strings["Please wait"] = "Подождите пожалуйста"; App::$strings["remove"] = "удалить"; App::$strings["Loading..."] = "Загрузка..."; App::$strings["Delete Selected Items"] = "Удалить выбранные элементы"; -App::$strings["View Source"] = "Просмотр источника"; -App::$strings["Follow Thread"] = "Следовать теме"; -App::$strings["View Status"] = "Просмотр состояния"; -App::$strings["View Profile"] = "Просмотр профиля"; -App::$strings["View Photos"] = "Просмотр фотографий"; -App::$strings["Matrix Activity"] = "Активность матрицы"; -App::$strings["Edit Contact"] = "Редактировать контакт"; -App::$strings["Send PM"] = "Отправить личное сообщение"; -App::$strings["Poke"] = "Подпихнуть"; +App::$strings["View Source"] = "Просмотреть источник"; +App::$strings["Follow Thread"] = "Следить за темой"; +App::$strings["Unfollow Thread"] = "Прекратить отслеживать тему"; +App::$strings["Recent Activity"] = "Последние действия"; +App::$strings["Connect"] = "Подключить"; +App::$strings["Edit Connection"] = "Редактировать контакт"; +App::$strings["Message"] = "Сообщение"; +App::$strings["Ratings"] = "Оценки"; +App::$strings["Poke"] = "Ткнуть"; App::$strings["%s likes this."] = "%s нравится это."; App::$strings["%s doesn't like this."] = "%s не нравится это."; App::$strings["%2\$d people like this."] = array( - 0 => "%2\$d чел. нравится это.", - 1 => "%2\$d чел. нравится это.", - 2 => "%2\$d чел. нравится это.", + 0 => "", + 1 => "", ); App::$strings["%2\$d people don't like this."] = array( 0 => "", 1 => "", - 2 => "%2\$d чел. не нравится это.", ); App::$strings["and"] = "и"; App::$strings[", and %d other people"] = array( 0 => "", 1 => "", - 2 => ", и %d другие люди", ); App::$strings["%s like this."] = "%s нравится это."; App::$strings["%s don't like this."] = "%s не нравится это."; -App::$strings["Visible to everybody"] = "Видно для всех"; -App::$strings["Please enter a link URL:"] = "Пожалуйста, введите URL ссылки:"; -App::$strings["Please enter a video link/URL:"] = "Пожалуйста, введите URL видео-ссылки:"; -App::$strings["Please enter an audio link/URL:"] = "Пожалуйста, введите URL аудио-ссылки:"; +App::$strings["Set your location"] = "Задать своё местоположение"; +App::$strings["Clear browser location"] = "Очистить местоположение из браузера"; +App::$strings["Insert web link"] = "Вставить веб-ссылку"; +App::$strings["Embed (existing) photo from your photo albums"] = "Встроить (существующее) фото из вашего фотоальбома"; +App::$strings["Please enter a link URL:"] = "Пожалуйста введите URL ссылки:"; App::$strings["Tag term:"] = "Теги:"; -App::$strings["Save to Folder:"] = "Сохранить в папку:"; App::$strings["Where are you right now?"] = "Где вы сейчас?"; -App::$strings["Expires YYYY-MM-DD HH:MM"] = ""; +App::$strings["Choose images to embed"] = "Выбрать изображения для встраивания"; +App::$strings["Choose an album"] = "Выбрать альбом"; +App::$strings["Choose a different album..."] = "Выбрать другой альбом..."; +App::$strings["Error getting album list"] = "Ошибка получения списка альбомов"; +App::$strings["Error getting photo link"] = "Ошибка получения ссылки на фотографию"; +App::$strings["Error getting album"] = "Ошибка получения альбома"; +App::$strings["Comments enabled"] = "Комментарии включены"; +App::$strings["Comments disabled"] = "Комментарии отключены"; App::$strings["Preview"] = "Предварительный просмотр"; App::$strings["Share"] = "Поделиться"; -App::$strings["Page link title"] = "Ссылка заголовока страницы"; -App::$strings["Post as"] = ""; -App::$strings["Upload photo"] = "Загрузить фотографию"; -App::$strings["upload photo"] = "загрузить фотографию"; -App::$strings["Attach file"] = "Прикрепить файл"; -App::$strings["attach file"] = "прикрепить файл"; -App::$strings["Insert web link"] = "Вставить веб-ссылку"; -App::$strings["web link"] = "веб-ссылка"; -App::$strings["Insert video link"] = "Вставить видео-ссылку"; -App::$strings["video link"] = "видео-ссылка"; -App::$strings["Insert audio link"] = "Вставить аудио-ссылку"; -App::$strings["audio link"] = "аудио-ссылка"; -App::$strings["Set your location"] = "Указание своего расположения"; -App::$strings["set location"] = "указание расположения"; -App::$strings["Clear browser location"] = "Стереть указание расположения"; -App::$strings["clear location"] = "стереть указание расположения"; -App::$strings["Set title"] = "Заголовок"; -App::$strings["Categories (comma-separated list)"] = "Категории (список через запятую)"; -App::$strings["Permission settings"] = "Настройки разрешений"; -App::$strings["permissions"] = "разрешения"; -App::$strings["Public post"] = "Публичное сообщение"; -App::$strings["Example: bob@example.com, mary@example.com"] = "Пример: bob@example.com, mary@example.com"; -App::$strings["Set expiration date"] = ""; -App::$strings["Encrypt text"] = ""; -App::$strings["OK"] = "OK"; +App::$strings["Page link name"] = "Название ссылки на страницу "; +App::$strings["Post as"] = "Опубликовать как"; +App::$strings["Bold"] = "Жирный"; +App::$strings["Italic"] = "Курсив"; +App::$strings["Underline"] = "Подчеркнутый"; +App::$strings["Quote"] = "Цитата"; +App::$strings["Code"] = "Код"; +App::$strings["Attach/Upload file"] = "Прикрепить/загрузить файл"; +App::$strings["Embed an image from your albums"] = "Встроить изображение из ваших альбомов"; App::$strings["Cancel"] = "Отменить"; -App::$strings["Discover"] = "Обнаруженные"; -App::$strings["Imported public streams"] = ""; +App::$strings["OK"] = ""; +App::$strings["Toggle voting"] = "Подключить голосование"; +App::$strings["Disable comments"] = "Отключить комментарии"; +App::$strings["Toggle comments"] = "Переключить комментарии"; +App::$strings["Title (optional)"] = "Заголовок (необязательно)"; +App::$strings["Categories (optional, comma-separated list)"] = "Категории (необязательно, список через запятую)"; +App::$strings["Permission settings"] = "Настройки разрешений"; +App::$strings["Other networks and post services"] = "Другие сети и службы публикаций"; +App::$strings["Set expiration date"] = "Установить срок действия"; +App::$strings["Set publish date"] = "Установить дату публикации"; +App::$strings["Encrypt text"] = "Зашифровать текст"; App::$strings["Commented Order"] = "По комментариям"; -App::$strings["Sort by Comment Date"] = "Сортировка по дате создания комментариев"; -App::$strings["Posted Order"] = "По добавлениям"; -App::$strings["Sort by Post Date"] = "Сортировка по дате создания сообщения"; -App::$strings["Personal"] = "Личные"; -App::$strings["Posts that mention or involve you"] = "Сообщения, в которых упоминули или вовлекли вас"; +App::$strings["Sort by Comment Date"] = "Сортировать по дате комментария"; +App::$strings["Posted Order"] = "По публикациям"; +App::$strings["Sort by Post Date"] = "Сортировать по дате публикации"; +App::$strings["Personal"] = "Личное"; +App::$strings["Posts that mention or involve you"] = "Публикации, где вы были упомянуты или участвовали"; App::$strings["New"] = "Новые"; -App::$strings["Activity Stream - by date"] = "Лента активности - по дате"; -App::$strings["Starred"] = "Помеченные"; -App::$strings["Favourite Posts"] = "Фаворит-сообщения"; +App::$strings["Activity Stream - by date"] = "Поток активности - по дате"; +App::$strings["Starred"] = "Отмеченые"; +App::$strings["Favourite Posts"] = "Любимые публикации"; App::$strings["Spam"] = "Спам"; -App::$strings["Posts flagged as SPAM"] = "Как СПАМ помеченные сообщения"; +App::$strings["Posts flagged as SPAM"] = "Публикация помечена как спам"; App::$strings["Channel"] = "Канал"; -App::$strings["Status Messages and Posts"] = ""; +App::$strings["Status Messages and Posts"] = "Статусы и публикации"; App::$strings["About"] = "О себе"; -App::$strings["Profile Details"] = "Сведения о профиле"; +App::$strings["Profile Details"] = "Информация о профиле"; App::$strings["Photos"] = "Фотографии"; App::$strings["Photo Albums"] = "Фотоальбомы"; App::$strings["Files"] = "Файлы"; -App::$strings["Files and Storage"] = ""; +App::$strings["Files and Storage"] = "Файлы и хранилище"; +App::$strings["Events"] = "События"; App::$strings["Chatrooms"] = "Чаты"; App::$strings["Bookmarks"] = "Закладки"; App::$strings["Saved Bookmarks"] = "Сохранённые закладки"; +App::$strings["Cards"] = "Карточки"; +App::$strings["View Cards"] = "Просмотреть карточки"; +App::$strings["articles"] = "статьи"; +App::$strings["View Articles"] = "Просмотр статей"; App::$strings["Webpages"] = "Веб-страницы"; -App::$strings["Manage Webpages"] = "Управление веб-страниц"; -App::$strings["New Page"] = "Новая страница"; -App::$strings["Edit"] = "Редактировать"; -App::$strings["View"] = "Просмотр"; -App::$strings["Actions"] = ""; -App::$strings["Page Link"] = "Ссылка страницы"; -App::$strings["Title"] = "Заголовок"; -App::$strings["Created"] = "Создано"; -App::$strings["Edited"] = "Отредактирован"; -App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = ""; -App::$strings["Not a valid email address"] = "Не действительный адрес электронной почты"; -App::$strings["Your email domain is not among those allowed on this site"] = "Домен электронной почты не входит в число тех, которые разрешены на этом сайте"; -App::$strings["Your email address is already registered at this site."] = "Ваш адрес электронной почты уже зарегистрирован на этом сайте."; -App::$strings["An invitation is required."] = "Требуется приглашение."; -App::$strings["Invitation could not be verified."] = "Не удалось проверить приглашение."; -App::$strings["Please enter the required information."] = "Пожалуйста, введите необходимую информацию."; -App::$strings["Failed to store account information."] = "Не удалось сохранить информацию аккаунта."; -App::$strings["Registration request at %s"] = "Требуется регистрация на %s"; -App::$strings["Administrator"] = "Администратор"; -App::$strings["your registration password"] = "Ваш пароль регистрации"; -App::$strings["Registration details for %s"] = "Регистрационные данные для %s"; -App::$strings["Account approved."] = "Аккаунт утвержден."; -App::$strings["Registration revoked for %s"] = "Регистрация отозвана для %s"; -App::$strings["Permission denied."] = "Доступ запрещен."; -App::$strings["Image exceeds website size limit of %lu bytes"] = ""; -App::$strings["Image file is empty."] = "файл пуст."; -App::$strings["Unable to process image"] = "Не удается обработать изображение"; -App::$strings["Photo storage failed."] = "Ошибка в банке фотографий"; -App::$strings["Upload New Photos"] = "Загрузить новые фотографии"; -App::$strings["Visible to everybody"] = "Видно всем"; -App::$strings["Show"] = "Показывать"; -App::$strings["Don't show"] = "Не показывать"; -App::$strings["Permissions"] = "Разрешения"; -App::$strings["Close"] = "Закрыть"; -App::$strings[" and "] = "и"; -App::$strings["public profile"] = "Публичный профиль"; -App::$strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s изменил %2\$s на “%3\$s”"; -App::$strings["Visit %1\$s's %2\$s"] = "Посетить %1\$s's %2\$s"; -App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = ""; -App::$strings["Public Timeline"] = "Публичная шкала времени"; +App::$strings["View Webpages"] = "Просмотр веб-страниц"; +App::$strings["Wikis"] = ""; +App::$strings["Wiki"] = ""; +App::$strings["__ctx:noun__ Like"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Dislike"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Attending"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Not Attending"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Undecided"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Agree"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Disagree"] = array( + 0 => "", + 1 => "", +); +App::$strings["__ctx:noun__ Abstain"] = array( + 0 => "", + 1 => "", +); +App::$strings["Invalid data packet"] = "Неверный пакет данных"; +App::$strings["Unable to verify channel signature"] = "Невозможно проверить подпись канала"; +App::$strings["Unable to verify site signature for %s"] = "Невозможно проверить подпись сайта %s"; +App::$strings["invalid target signature"] = "недопустимая целевая подпись"; +App::$strings["l F d, Y \\@ g:i A"] = ""; +App::$strings["Starts:"] = "Начало:"; +App::$strings["Finishes:"] = "Окончание:"; +App::$strings["Location:"] = "Откуда:"; +App::$strings["This event has been added to your calendar."] = "Это событие было добавлено в ваш календарь."; +App::$strings["Not specified"] = "Не указано"; +App::$strings["Needs Action"] = "Требует действия"; +App::$strings["Completed"] = "Завершено"; +App::$strings["In Process"] = "В процессе"; +App::$strings["Cancelled"] = "Отменено"; +App::$strings["Mobile"] = "Мобильный"; +App::$strings["Home"] = "Домашний"; +App::$strings["Home, Voice"] = "Дом, голос"; +App::$strings["Home, Fax"] = "Дом, факс"; +App::$strings["Work"] = "Рабочий"; +App::$strings["Work, Voice"] = "Работа, голос"; +App::$strings["Work, Fax"] = "Работа, факс"; +App::$strings["Other"] = "Другой"; App::$strings["Item was not found."] = "Элемент не найден."; +App::$strings["Unknown error."] = "Неизвестная ошибка."; App::$strings["No source file."] = "Нет исходного файла."; -App::$strings["Cannot locate file to replace"] = "Не удается найти файл, чтобы заменить"; +App::$strings["Cannot locate file to replace"] = "Не удается найти файл для замены"; App::$strings["Cannot locate file to revise/update"] = "Не удается найти файл для пересмотра / обновления"; App::$strings["File exceeds size limit of %d"] = "Файл превышает предельный размер %d"; -App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = ""; +App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Вы достигли предела %1$.0f Мбайт для хранения вложений."; App::$strings["File upload failed. Possible system limit or action terminated."] = "Загрузка файла не удалась. Возможно система перегружена или попытка прекращена."; -App::$strings["Stored file could not be verified. Upload failed."] = "Файл для сохранения не проверен. Загрузка не удалась."; +App::$strings["Stored file could not be verified. Upload failed."] = "Файл для сохранения не может быть проверен. Загрузка не удалась."; App::$strings["Path not available."] = "Путь недоступен."; -App::$strings["Empty pathname"] = ""; -App::$strings["duplicate filename or path"] = ""; +App::$strings["Empty pathname"] = "Пустое имя пути"; +App::$strings["duplicate filename or path"] = "дублирующееся имя файла или пути"; App::$strings["Path not found."] = "Путь не найден."; -App::$strings["mkdir failed."] = "mkdir безуспешно."; -App::$strings["database storage failed."] = ""; -App::$strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; -App::$strings["Starts:"] = "Начало:"; -App::$strings["Finishes:"] = "\t\nКонец:"; -App::$strings["Location:"] = "Откуда:"; -App::$strings["Logout"] = "Выход"; +App::$strings["mkdir failed."] = "mkdir не удался"; +App::$strings["database storage failed."] = "ошибка при записи базы данных."; +App::$strings["Empty path"] = "Пустое имя пути"; +App::$strings["unknown"] = "неизвестный"; +App::$strings["%1\$s's bookmarks"] = "Закладки пользователя %1\$s"; +App::$strings["Directory Options"] = "Параметры каталога"; +App::$strings["Safe Mode"] = "Безопасный режим"; +App::$strings["Public Forums Only"] = "Только публичные форумы"; +App::$strings["This Website Only"] = "Только этот веб-сайт"; +App::$strings["view full size"] = "посмотреть в полный размер"; +App::$strings["Friendica"] = ""; +App::$strings["OStatus"] = ""; +App::$strings["GNU-Social"] = "GNU social"; +App::$strings["RSS/Atom"] = ""; +App::$strings["Diaspora"] = ""; +App::$strings["Facebook"] = ""; +App::$strings["Zot"] = ""; +App::$strings["LinkedIn"] = ""; +App::$strings["XMPP/IM"] = ""; +App::$strings["MySpace"] = ""; +App::$strings[" and "] = " и "; +App::$strings["public profile"] = "общедоступный профиль"; +App::$strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s изменил %2\$s на “%3\$s”"; +App::$strings["Visit %1\$s's %2\$s"] = "Посетить %1\$s %2\$s"; +App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s обновлено %2\$s, изменено %3\$s."; +App::$strings["Remote authentication"] = "Удаленная аутентификация"; +App::$strings["Click to authenticate to your home hub"] = "Нажмите, чтобы аутентифицировать себя на домашнем узле"; +App::$strings["Channel Manager"] = "Менеджер каналов"; +App::$strings["Manage your channels"] = "Управление вашими каналами"; +App::$strings["Privacy Groups"] = "Группы безопасности"; +App::$strings["Manage your privacy groups"] = "Управление вашим группами безопасности"; +App::$strings["Settings"] = "Настройки"; +App::$strings["Account/Channel Settings"] = "Настройки аккаунта / канала"; App::$strings["End this session"] = "Закончить эту сессию"; -App::$strings["Home"] = "Мой канал"; -App::$strings["Your posts and conversations"] = "Ваши сообщения и разговоры"; App::$strings["Your profile page"] = "Страницa вашего профиля"; App::$strings["Edit Profiles"] = "Редактирование профилей"; -App::$strings["Manage/Edit profiles"] = "Управление / Редактирование профилей"; -App::$strings["Your photos"] = "Ваши фотографии"; -App::$strings["Your files"] = "Ваши файлы"; -App::$strings["Chat"] = "Чат"; -App::$strings["Your chatrooms"] = "Ваши чаты"; -App::$strings["Your bookmarks"] = "Ваши закладки"; -App::$strings["Your webpages"] = "Ваши веб-страницы"; -App::$strings["Login"] = "Войти"; +App::$strings["Manage/Edit profiles"] = "Управление / редактирование профилей"; +App::$strings["Edit your profile"] = "Редактировать профиль"; App::$strings["Sign in"] = "Войти"; -App::$strings["%s - click to logout"] = "%s - нажмите чтобы выйти"; -App::$strings["Click to authenticate to your home hub"] = ""; -App::$strings["Home Page"] = "Моя страница"; -App::$strings["Register"] = "Регистрация"; +App::$strings["Take me home"] = "Домой"; +App::$strings["Log me out of this site"] = "Выйти с этого сайта"; App::$strings["Create an account"] = "Создать аккаунт"; App::$strings["Help"] = "Помощь"; App::$strings["Help and documentation"] = "Справочная информация и документация"; -App::$strings["Apps"] = "Приложения"; -App::$strings["Applications, utilities, links, games"] = ""; App::$strings["Search"] = "Поиск"; -App::$strings["Search site content"] = "Поиск по содержанию сайту"; -App::$strings["Directory"] = "Каталог"; -App::$strings["Channel Locator"] = "Локатор каналов"; -App::$strings["Matrix"] = "Матрица"; -App::$strings["Your matrix"] = "Собственная матрица"; -App::$strings["Mark all matrix notifications seen"] = "Пометить все оповещения матрицы как прочитанное"; -App::$strings["Channel Home"] = "Главная канала"; -App::$strings["Channel home"] = "Главная канала"; -App::$strings["Mark all channel notifications seen"] = "Пометить все оповещения канала как прочитанное"; -App::$strings["Connections"] = "Контакты"; -App::$strings["Notices"] = "Оповещения"; -App::$strings["Notifications"] = "Оповещения"; -App::$strings["See all notifications"] = "Просмотреть все оповещения"; -App::$strings["Mark all system notifications seen"] = "Пометить все оповещения как прочитанное"; -App::$strings["Mail"] = "Переписка"; -App::$strings["Private mail"] = "Ваша личная переписка"; -App::$strings["See all private messages"] = "Просмотреть все личные сообщения"; -App::$strings["Mark all private messages seen"] = "Пометить все личные сообщения как прочитанное"; -App::$strings["Inbox"] = "Входящие"; -App::$strings["Outbox"] = "Исходящие"; -App::$strings["New Message"] = "Новое личное сообщение"; -App::$strings["Events"] = "Мероприятия"; -App::$strings["Event Calendar"] = "Календарь мероприятий"; -App::$strings["See all events"] = "Показать все мероприятия"; -App::$strings["Mark all events seen"] = "Пометить все мероприятия как прочитанное"; -App::$strings["Channel Select"] = "Выбор каналов"; -App::$strings["Manage Your Channels"] = "Управление каналов"; -App::$strings["Settings"] = "Настройки"; -App::$strings["Account/Channel Settings"] = "Настройки аккаунта/канала"; -App::$strings["Admin"] = "Администрация"; +App::$strings["Search site @name, !forum, #tag, ?docs, content"] = "Искать на сайте @name, !forum, #tag, ?docs, содержимое"; +App::$strings["Admin"] = "Администрирование"; App::$strings["Site Setup and Configuration"] = "Установка и конфигурация сайта"; -App::$strings["Nothing new here"] = "Ничего нового здесь"; +App::$strings["Loading"] = "Загрузка"; +App::$strings["@name, !forum, #tag, ?doc, content"] = "@name, !forum, #tag, ?docs, содержимое"; App::$strings["Please wait..."] = "Подождите пожалуйста ..."; -App::$strings["%1\$s's bookmarks"] = "Закладки пользователя %1\$s"; -App::$strings["Missing room name"] = ""; -App::$strings["Duplicate room name"] = ""; -App::$strings["Invalid room specifier."] = ""; -App::$strings["Room not found."] = ""; -App::$strings["Room is full"] = ""; -App::$strings["Tags"] = "Тэги"; +App::$strings["Add Apps"] = "Добавить приложения"; +App::$strings["Arrange Apps"] = "Управление приложениями"; +App::$strings["Toggle System Apps"] = "Переключить системные приложения"; +App::$strings["Calendar"] = "Календарь"; +App::$strings["Articles"] = "Статьи"; +App::$strings["Help:"] = "Помощь:"; +App::$strings["Not Found"] = "Не найдено"; +App::$strings["Page not found."] = "Страница не найдена."; +App::$strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Удаленная группа с этим названием была восстановлена. Существующие разрешения пункт могут применяться к этой группе и к её будущих участников. Если это не то, чего вы хотели, пожалуйста, создайте другую группу с другим именем."; +App::$strings["Add new connections to this privacy group"] = "Добавить новые контакты в группу безопасности"; +App::$strings["edit"] = "редактировать"; +App::$strings["Edit group"] = "Редактировать группу"; +App::$strings["Add privacy group"] = "Добавить группу безопасности"; +App::$strings["Channels not in any privacy group"] = "Каналы не включены ни в одну группу безопасности"; +App::$strings["add"] = "добавить"; +App::$strings["Unable to import a removed channel."] = "Невозможно импортировать удалённый канал."; +App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "Не удалось создать дублирующийся идентификатор канала. Импорт невозможен."; +App::$strings["Cloned channel not found. Import failed."] = "Клон канала не найден. Импорт невозможен."; +App::$strings["Profile Photos"] = "Фотографии профиля"; +App::$strings["Trending"] = "В тренде"; +App::$strings["Tags"] = "Теги"; +App::$strings["Categories"] = "Категории"; App::$strings["Keywords"] = "Ключевые слова"; App::$strings["have"] = "иметь"; App::$strings["has"] = "есть"; App::$strings["want"] = "хотеть"; -App::$strings["wants"] = "хочет"; +App::$strings["wants"] = "хотеть"; App::$strings["like"] = "нравится"; App::$strings["likes"] = "нравится"; -App::$strings["dislike"] = "не-нравится"; -App::$strings["dislikes"] = "не-нравится"; -App::$strings["__ctx:noun__ Like"] = array( - 0 => "нравится", - 1 => "нравится", - 2 => "нравится", -); -App::$strings["Default"] = "По умолчанию"; -App::$strings["Unknown | Not categorised"] = "Неизвестные | Без категории"; -App::$strings["Block immediately"] = "Немедленно заблокировать"; -App::$strings["Shady, spammer, self-marketer"] = ""; -App::$strings["Known to me, but no opinion"] = "Известныo мне, но нет своего мнения"; -App::$strings["OK, probably harmless"] = "OK, наверное безвредно"; -App::$strings["Reputable, has my trust"] = "Авторитетно, имеет мое доверие"; -App::$strings["Frequently"] = "Часто"; -App::$strings["Hourly"] = "Ежечасно"; -App::$strings["Twice daily"] = "Два раза в день"; -App::$strings["Daily"] = "Ежедневно"; -App::$strings["Weekly"] = "Еженедельно"; -App::$strings["Monthly"] = "Ежемесячно"; -App::$strings["Friendica"] = "Friendica"; -App::$strings["OStatus"] = "OStatus"; -App::$strings["RSS/Atom"] = "RSS/Atom"; -App::$strings["Email"] = "E-mail"; -App::$strings["Diaspora"] = "Diaspora"; -App::$strings["Facebook"] = "Facebook"; -App::$strings["Zot!"] = "Zot!"; -App::$strings["LinkedIn"] = "LinkedIn"; -App::$strings["XMPP/IM"] = "XMPP/IM"; -App::$strings["MySpace"] = "MySpace"; -App::$strings["%d invitation available"] = array( - 0 => "имеется %d приглашение", - 1 => "имеются %d приглашения", - 2 => "имеется %d приглашений", -); -App::$strings["Advanced"] = "Дополнительно"; -App::$strings["Find Channels"] = "Поиск контактов"; -App::$strings["Enter name or interest"] = "Впишите имя или интерес"; -App::$strings["Connect/Follow"] = "Подключить/следовать"; -App::$strings["Examples: Robert Morgenstein, Fishing"] = "Примеры: Владимир Ильич, Революционер"; -App::$strings["Find"] = "Поиск"; -App::$strings["Channel Suggestions"] = "Рекомендации каналов"; -App::$strings["Random Profile"] = "Случайные"; -App::$strings["Invite Friends"] = "Пригласить друзей"; -App::$strings["Exammple: name=fred and country=iceland"] = ""; -App::$strings["Advanced Find"] = "Расширенный поиск"; -App::$strings["Saved Folders"] = "Запомненные папки"; -App::$strings["Everything"] = "Все"; -App::$strings["Categories"] = "Категории"; -App::$strings["%d connection in common"] = array( - 0 => "%d совместный контакт", - 1 => "%d совместных контакта", - 2 => "%d совместных контактов", -); -App::$strings["show more"] = "показать все"; -App::$strings["This event has been added to your calendar."] = "Это событие было добавлено в календарь."; -App::$strings["Miscellaneous"] = "Прочее"; -App::$strings["year"] = "год"; -App::$strings["month"] = "месяц"; -App::$strings["day"] = "день"; -App::$strings["never"] = "никогда"; -App::$strings["less than a second ago"] = "менее чем одну секунду назад"; -App::$strings["years"] = "лет"; -App::$strings["months"] = "мес."; -App::$strings["week"] = "неделя"; -App::$strings["weeks"] = "недель"; -App::$strings["days"] = "дней"; -App::$strings["hour"] = "час"; -App::$strings["hours"] = "часов"; -App::$strings["minute"] = "минута"; -App::$strings["minutes"] = "мин."; -App::$strings["second"] = "секунда"; -App::$strings["seconds"] = "секунд"; -App::$strings["%1\$d %2\$s ago"] = "%1\$d %2\$s назад"; -App::$strings["%1\$s's birthday"] = "%1\$s's День Рождения"; -App::$strings["Happy Birthday %1\$s"] = "С Днем Рождения %1\$s"; -App::$strings["Sort Options"] = "Параметры сортировки"; -App::$strings["Alphabetic"] = "По алфавиту"; -App::$strings["Reverse Alphabetic"] = "По обратному алфавиту"; -App::$strings["Newest to Oldest"] = "От новых к старым"; -App::$strings["Enable Safe Search"] = ""; -App::$strings["Disable Safe Search"] = ""; -App::$strings["Safe Mode"] = "Безопасный режим"; -App::$strings["Hubzilla Notification"] = "Оповещения Red матрицы"; -App::$strings["hubzilla"] = "hubzilla"; -App::$strings["Thank You,"] = "Спасибо,"; -App::$strings["%s Administrator"] = "%s администратор"; -App::$strings["%s "] = "%s "; -App::$strings["[Red:Notify] New mail received at %s"] = "[Red:Уведомление] Получено новое сообщение в %s"; -App::$strings["%1\$s, %2\$s sent you a new private message at %3\$s."] = ""; -App::$strings["%1\$s sent you %2\$s."] = "%1\$s послал вам %2\$s."; -App::$strings["a private message"] = "личное сообщение"; -App::$strings["Please visit %s to view and/or reply to your private messages."] = "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения."; -App::$strings["%1\$s, %2\$s commented on [zrl=%3\$s]a %4\$s[/zrl]"] = ""; -App::$strings["%1\$s, %2\$s commented on [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = ""; -App::$strings["%1\$s, %2\$s commented on [zrl=%3\$s]your %4\$s[/zrl]"] = ""; -App::$strings["[Red:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Red:Уведомление] Комментарий к разговору #%1\$d по %2\$s"; -App::$strings["%1\$s, %2\$s commented on an item/conversation you have been following."] = ""; -App::$strings["Please visit %s to view and/or reply to the conversation."] = "Пожалуйста, посетите %s для просмотра и/или ответа разговора."; -App::$strings["[Red:Notify] %s posted to your profile wall"] = "[Red:Уведомление] %s добавил сообщениe на стену вашего профиля"; -App::$strings["%1\$s, %2\$s posted to your profile wall at %3\$s"] = ""; -App::$strings["%1\$s, %2\$s posted to [zrl=%3\$s]your wall[/zrl]"] = ""; -App::$strings["[Red:Notify] %s tagged you"] = "[Red:Уведомление] %s добавил у вас тег"; -App::$strings["%1\$s, %2\$s tagged you at %3\$s"] = ""; -App::$strings["%1\$s, %2\$s [zrl=%3\$s]tagged you[/zrl]."] = ""; -App::$strings["[Red:Notify] %1\$s poked you"] = "[Red:Уведомление] %1\$s подпихнул вас"; -App::$strings["%1\$s, %2\$s poked you at %3\$s"] = ""; -App::$strings["%1\$s, %2\$s [zrl=%2\$s]poked you[/zrl]."] = ""; -App::$strings["[Red:Notify] %s tagged your post"] = "[Red:Уведомление] %s добавил у вас в сообщении тег"; -App::$strings["%1\$s, %2\$s tagged your post at %3\$s"] = ""; -App::$strings["%1\$s, %2\$s tagged [zrl=%3\$s]your post[/zrl]"] = ""; -App::$strings["[Red:Notify] Introduction received"] = "[Red:Уведомление] введение получено"; -App::$strings["%1\$s, you've received an new connection request from '%2\$s' at %3\$s"] = ""; -App::$strings["%1\$s, you've received [zrl=%2\$s]a new connection request[/zrl] from %3\$s."] = ""; -App::$strings["You may visit their profile at %s"] = "Вы можете посетить ​​профиль в %s"; -App::$strings["Please visit %s to approve or reject the connection request."] = ""; -App::$strings["[Red:Notify] Friend suggestion received"] = "[Red:Уведомление] Получено предложение дружить"; -App::$strings["%1\$s, you've received a friend suggestion from '%2\$s' at %3\$s"] = ""; -App::$strings["%1\$s, you've received [zrl=%2\$s]a friend suggestion[/zrl] for %3\$s from %4\$s."] = ""; -App::$strings["Name:"] = "Имя:"; -App::$strings["Photo:"] = "Фото:"; -App::$strings["Please visit %s to approve or reject the suggestion."] = ""; -App::$strings["parent"] = ""; -App::$strings["Collection"] = "Коллекция"; -App::$strings["Principal"] = ""; -App::$strings["Addressbook"] = "Адресная книга"; -App::$strings["Calendar"] = "Календарь"; -App::$strings["Schedule Inbox"] = ""; -App::$strings["Schedule Outbox"] = ""; -App::$strings["%1\$s used"] = ""; -App::$strings["%1\$s used of %2\$s (%3\$s%)"] = ""; -App::$strings["Create new folder"] = "Создать новую папку"; -App::$strings["Create"] = "Создать"; -App::$strings["Upload file"] = "Загрузить файл"; -App::$strings["Upload"] = "Загрузка"; -App::$strings["General Features"] = "Главные функции"; -App::$strings["Content Expiration"] = ""; -App::$strings["Remove posts/comments and/or private messages at a future time"] = "Удалять посты/комментарии и/или личные сообщения"; -App::$strings["Multiple Profiles"] = "Несколько профилей"; -App::$strings["Ability to create multiple profiles"] = "Возможность создания нескольких профилей"; -App::$strings["Web Pages"] = "Веб-страницы"; -App::$strings["Provide managed web pages on your channel"] = ""; -App::$strings["Private Notes"] = "Личные заметки"; -App::$strings["Enables a tool to store notes and reminders"] = ""; -App::$strings["Extended Identity Sharing"] = "Расширенный обмен идентичности"; -App::$strings["Share your identity with all websites on the internet. When disabled, identity is only shared with sites in the matrix."] = ""; -App::$strings["Expert Mode"] = "Экспертный режим"; -App::$strings["Enable Expert Mode to provide advanced configuration options"] = ""; -App::$strings["Premium Channel"] = "Премиум канал"; -App::$strings["Allows you to set restrictions and terms on those that connect with your channel"] = ""; -App::$strings["Post Composition Features"] = ""; -App::$strings["Richtext Editor"] = "Редактор RichText"; -App::$strings["Enable richtext editor"] = "Включить редактор RichText"; -App::$strings["Post Preview"] = "Предварительный просмотр сообщения"; -App::$strings["Allow previewing posts and comments before publishing them"] = "Разрешить предварительный просмотр сообщений и комментариев перед их публикацией"; -App::$strings["Channel Sources"] = "Источники канала"; -App::$strings["Automatically import channel content from other channels or feeds"] = ""; -App::$strings["Even More Encryption"] = "Еще больше шифрования"; -App::$strings["Allow optional encryption of content end-to-end with a shared secret key"] = ""; -App::$strings["Network and Stream Filtering"] = "Фильтрация сети и потока"; -App::$strings["Search by Date"] = "Поиск по дате"; -App::$strings["Ability to select posts by date ranges"] = "Возможность выбора сообщений по датам"; -App::$strings["Collections Filter"] = "Фильтр коллекций"; -App::$strings["Enable widget to display Network posts only from selected collections"] = ""; -App::$strings["Saved Searches"] = "Запомненные поиски"; -App::$strings["Save search terms for re-use"] = "Сохранять результаты поиска для повторного использования"; -App::$strings["Network Personal Tab"] = "Сеть - Личная вкладка"; -App::$strings["Enable tab to display only Network posts that you've interacted on"] = ""; -App::$strings["Network New Tab"] = "Сеть - Новая вкладка"; -App::$strings["Enable tab to display all new Network activity"] = ""; -App::$strings["Affinity Tool"] = "Инструмент сходства или соответствия"; -App::$strings["Filter stream activity by depth of relationships"] = ""; -App::$strings["Suggest Channels"] = ""; -App::$strings["Show channel suggestions"] = ""; -App::$strings["Post/Comment Tools"] = "Инструменты сообщений/комментарий "; -App::$strings["Edit Sent Posts"] = "Редактировать отправленные сообщения"; -App::$strings["Edit and correct posts and comments after sending"] = "Редактировать и исправлять сообщения и комментарии после отправки"; -App::$strings["Tagging"] = "Пометка"; -App::$strings["Ability to tag existing posts"] = "Возможность использовать теги"; -App::$strings["Post Categories"] = "Категории сообщения"; -App::$strings["Add categories to your posts"] = "Добавить категории для ваших сообщений"; -App::$strings["Ability to file posts under folders"] = ""; -App::$strings["Dislike Posts"] = "Сообщение не нравится"; -App::$strings["Ability to dislike posts/comments"] = "Возможность выбора нравится/не-нравится"; -App::$strings["Star Posts"] = "Помечать сообщения"; -App::$strings["Ability to mark special posts with a star indicator"] = ""; -App::$strings["Tag Cloud"] = "Облако тегов"; -App::$strings["Provide a personal tag cloud on your channel page"] = ""; +App::$strings["dislike"] = "не нравится"; +App::$strings["dislikes"] = "не нравится"; +App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s приветствует %2\$s"; +App::$strings["default"] = "по умолчанию"; +App::$strings["Select an alternate language"] = "Выбор дополнительного языка"; App::$strings["Channel is blocked on this site."] = "Канал блокируется на этом сайте."; App::$strings["Channel location missing."] = "Местоположение канала отсутствует."; -App::$strings["Response from remote channel was incomplete."] = ""; -App::$strings["Channel was deleted and no longer exists."] = ""; +App::$strings["Response from remote channel was incomplete."] = "Ответ удаленного канала неполный."; +App::$strings["Premium channel - please visit:"] = "Премимум-канал - пожалуйста посетите:"; +App::$strings["Channel was deleted and no longer exists."] = "Канал удален и больше не существует."; +App::$strings["Remote channel or protocol unavailable."] = "Удалённый канал или протокол недоступен."; App::$strings["Channel discovery failed."] = "Не удалось обнаружить канал."; -App::$strings["local account not found."] = "локальный аккаунт не найден."; +App::$strings["Protocol disabled."] = "Протокол отключен."; App::$strings["Cannot connect to yourself."] = "Нельзя подключиться к самому себе."; -App::$strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = ""; -App::$strings["Default privacy group for new contacts"] = "Группа конфиденциальности по умолчанию для новых контактов"; -App::$strings["All Channels"] = "Все каналы"; -App::$strings["edit"] = "редактировать"; -App::$strings["Collections"] = "Коллекции"; -App::$strings["Edit collection"] = "Редактировать коллекцию"; -App::$strings["Create a new collection"] = "Создать новую коллекцию"; -App::$strings["Channels not in any collection"] = "Контакты не в какой коллекции"; -App::$strings["add"] = "добавить"; -App::$strings["Unable to obtain identity information from database"] = "Невозможно получить идентификационную информацию из базы данных"; -App::$strings["Empty name"] = "Пустое имя"; -App::$strings["Name too long"] = "Слишком длинное имя"; -App::$strings["No account identifier"] = "идентификатор аккаунта отсутствует"; -App::$strings["Nickname is required."] = "Требуется псевдоним."; -App::$strings["Reserved nickname. Please choose another."] = ""; -App::$strings["Nickname has unsupported characters or is already being used on this site."] = "Псевдоним имеет недопустимые символы или уже используется на этом сайте."; -App::$strings["Unable to retrieve created identity"] = ""; -App::$strings["Default Profile"] = "Профиль по умолчанию"; -App::$strings["Friends"] = "Друзья"; -App::$strings["Requested channel is not available."] = "Запрашиваемый канал не доступен."; -App::$strings["Requested profile is not available."] = "Запрашиваемый профиль не доступен."; -App::$strings["Connect"] = "Подключить"; -App::$strings["Change profile photo"] = "Изменить фотографию профиля"; -App::$strings["Profiles"] = "Профили"; -App::$strings["Manage/edit profiles"] = "Управление / Редактирование профилей"; -App::$strings["Create New Profile"] = "Создать новый профиль"; -App::$strings["Edit Profile"] = "Редактировать профиль"; -App::$strings["Profile Image"] = "Изображение профиля"; -App::$strings["visible to everybody"] = "видно всем"; -App::$strings["Edit visibility"] = "Редактировать видимость"; -App::$strings["Gender:"] = "Пол:"; -App::$strings["Status:"] = "Статус:"; -App::$strings["Homepage:"] = "Домашняя страница:"; -App::$strings["Online Now"] = "Сейчас в сети"; -App::$strings["g A l F d"] = "g A l F d"; -App::$strings["F d"] = "F d"; -App::$strings["[today]"] = "[сегодня]"; -App::$strings["Birthday Reminders"] = "Напоминания о Днях Рождения"; -App::$strings["Birthdays this week:"] = "Дни Рождения на этой неделе:"; -App::$strings["[No description]"] = "[без описания]"; -App::$strings["Event Reminders"] = "Напоминания мероприятий"; -App::$strings["Events this week:"] = "Мероприятия на этой неделе:"; -App::$strings["Profile"] = "Профиль"; -App::$strings["Full Name:"] = "Полное имя:"; -App::$strings["Like this channel"] = "нравиться этот канал"; -App::$strings["j F, Y"] = "j F, Y"; -App::$strings["j F"] = "j F"; -App::$strings["Birthday:"] = "День Рождения:"; -App::$strings["Age:"] = "Возраст:"; -App::$strings["for %1\$d %2\$s"] = "для %1\$d %2\$s"; -App::$strings["Sexual Preference:"] = "Сексуальная ориентация:"; -App::$strings["Hometown:"] = "Родной город:"; -App::$strings["Tags:"] = "Тэги:"; -App::$strings["Political Views:"] = "Политические взгляды:"; -App::$strings["Religion:"] = "Религия:"; -App::$strings["About:"] = "О себе:"; -App::$strings["Hobbies/Interests:"] = "Хобби / интересы:"; -App::$strings["Likes:"] = "Что вам нравится:"; -App::$strings["Dislikes:"] = "Что вам не нравится:"; -App::$strings["Contact information and Social Networks:"] = "Информация и социальные сети контакта:"; -App::$strings["My other channels:"] = "Мои другие каналы:"; -App::$strings["Musical interests:"] = "Музыкальные интересы:"; -App::$strings["Books, literature:"] = "Книги, литература:"; -App::$strings["Television:"] = "Телевидение:"; -App::$strings["Film/dance/culture/entertainment:"] = "Кино / танцы / культура / развлечения:"; -App::$strings["Love/Romance:"] = "Любовь / Романс:"; -App::$strings["Work/employment:"] = "Работа / Занятость:"; -App::$strings["School/education:"] = "Школа / образование:"; -App::$strings["Like this thing"] = "нравится этo"; -App::$strings["view full size"] = "посмотреть в полный размер"; +App::$strings["Visible to your default audience"] = "Видно вашей аудитории по умолчанию."; +App::$strings["__ctx:acl__ Profile"] = "Профиль"; +App::$strings["Only me"] = "Только мне"; +App::$strings["Who can see this?"] = "Кто может это видеть?"; +App::$strings["Custom selection"] = "Настраиваемый выбор"; +App::$strings["Select \"Show\" to allow viewing. \"Don't show\" lets you override and limit the scope of \"Show\"."] = "Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам переопределить и ограничить область показа."; +App::$strings["Show"] = "Показать"; +App::$strings["Don't show"] = "Не показывать"; +App::$strings["Permissions"] = "Разрешения"; +App::$strings["Close"] = "Закрыть"; +App::$strings["Post permissions %s cannot be changed %s after a post is shared.
These permissions set who is allowed to view the post."] = "Разрешения публикации %s не могут быть изменены %s после того, как ею поделились. Эти разрешения устанавливают кому разрешено просматривать эту публикацию."; +App::$strings["Miscellaneous"] = "Прочее"; +App::$strings["Birthday"] = "День рождения"; +App::$strings["Age: "] = "Возраст:"; +App::$strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD или MM-DD"; +App::$strings["Required"] = "Требуется"; +App::$strings["less than a second ago"] = "менее чем одну секунду"; +App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s тому назад"; +App::$strings["__ctx:relative_date__ year"] = array( + 0 => "год", + 1 => "года", + 2 => "лет", +); +App::$strings["__ctx:relative_date__ month"] = array( + 0 => "месяц", + 1 => "месяца", + 2 => "месяцев", +); +App::$strings["__ctx:relative_date__ week"] = array( + 0 => "неделю", + 1 => "недели", + 2 => "недель", +); +App::$strings["__ctx:relative_date__ day"] = array( + 0 => "день", + 1 => "дня", + 2 => "дней", +); +App::$strings["__ctx:relative_date__ hour"] = array( + 0 => "час", + 1 => "часа", + 2 => "часов", +); +App::$strings["__ctx:relative_date__ minute"] = array( + 0 => "минуту", + 1 => "минуты", + 2 => "минут", +); +App::$strings["__ctx:relative_date__ second"] = array( + 0 => "секунду", + 1 => "секунды", + 2 => "секунд", +); +App::$strings["%1\$s's birthday"] = "У %1\$s День рождения"; +App::$strings["Happy Birthday %1\$s"] = "С Днем рождения %1\$s !"; +App::$strings["Cannot locate DNS info for database server '%s'"] = "Не удается найти DNS информацию для сервера базы данных '%s'"; App::$strings["prev"] = "предыдущий"; App::$strings["first"] = "первый"; App::$strings["last"] = "последний"; App::$strings["next"] = "следующий"; -App::$strings["older"] = "старший"; +App::$strings["older"] = "старше"; App::$strings["newer"] = "новее"; App::$strings["No connections"] = "Нет контактов"; -App::$strings["%d Connection"] = array( - 0 => "%d контакт", - 1 => "%d контакта", - 2 => "%d контактов", -); -App::$strings["View Connections"] = "Просмотр контактов"; +App::$strings["Connections"] = "Контакты"; +App::$strings["View all %s connections"] = "Просмотреть все %s контактов"; +App::$strings["Network: %s"] = "Сеть: %s"; App::$strings["Save"] = "Запомнить"; -App::$strings["poke"] = "подпихнуть"; -App::$strings["ping"] = "пинг - проверка связи"; -App::$strings["pinged"] = ""; -App::$strings["prod"] = ""; -App::$strings["prodded"] = ""; -App::$strings["slap"] = ""; -App::$strings["slapped"] = ""; -App::$strings["finger"] = ""; -App::$strings["fingered"] = ""; -App::$strings["rebuff"] = ""; -App::$strings["rebuffed"] = ""; +App::$strings["poke"] = "Ткнуть"; +App::$strings["ping"] = "Пингануть"; +App::$strings["pinged"] = "Отпингован"; +App::$strings["prod"] = "Подтолкнуть"; +App::$strings["prodded"] = "Подтолкнут"; +App::$strings["slap"] = "Шлёпнуть"; +App::$strings["slapped"] = "Шлёпнут"; +App::$strings["finger"] = "Указать"; +App::$strings["fingered"] = "Указан"; +App::$strings["rebuff"] = "Дать отпор"; +App::$strings["rebuffed"] = "Дан отпор"; App::$strings["happy"] = "счастливый"; App::$strings["sad"] = "грустный"; App::$strings["mellow"] = "спокойный"; App::$strings["tired"] = "усталый"; App::$strings["perky"] = "весёлый"; App::$strings["angry"] = "сердитый"; -App::$strings["stupified"] = "отупевший"; -App::$strings["puzzled"] = "недоумённый"; +App::$strings["stupefied"] = "отупевший"; +App::$strings["puzzled"] = "недоумевающий"; App::$strings["interested"] = "заинтересованный"; -App::$strings["bitter"] = "озлобленный"; +App::$strings["bitter"] = "едкий"; App::$strings["cheerful"] = "бодрый"; App::$strings["alive"] = "энергичный"; App::$strings["annoyed"] = "раздражённый"; @@ -571,7 +1132,7 @@ App::$strings["anxious"] = "обеспокоенный"; App::$strings["cranky"] = "капризный"; App::$strings["disturbed"] = "встревоженный"; App::$strings["frustrated"] = "разочарованный"; -App::$strings["depressed"] = ""; +App::$strings["depressed"] = "подавленный"; App::$strings["motivated"] = "мотивированный"; App::$strings["relaxed"] = "расслабленный"; App::$strings["surprised"] = "удивленный"; @@ -594,1272 +1155,2208 @@ App::$strings["September"] = "Сентябрь"; App::$strings["October"] = "Октябрь"; App::$strings["November"] = "Ноябрь"; App::$strings["December"] = "Декабрь"; -App::$strings["unknown.???"] = "неизвестный.???"; -App::$strings["bytes"] = "байт"; -App::$strings["remove category"] = ""; -App::$strings["remove from file"] = ""; -App::$strings["Click to open/close"] = "Нажмите, чтобы открыть/закрыть"; +App::$strings["Unknown Attachment"] = "Неизвестное вложение"; +App::$strings["Size"] = "Размер"; +App::$strings["remove category"] = "удалить категорию"; +App::$strings["remove from file"] = "удалить из файла"; +App::$strings["Download binary/encrypted content"] = "Загрузить двоичное / зашифрованное содержимое"; App::$strings["Link to Source"] = "Ссылка на источник"; -App::$strings["Select a page layout: "] = ""; -App::$strings["default"] = "по умолчанию"; -App::$strings["Page content type: "] = ""; -App::$strings["Select an alternate language"] = "Выбор альтернативного языка"; +App::$strings["Page layout"] = "Шаблон страницы"; +App::$strings["You can create your own with the layouts tool"] = "Вы можете создать свой собственный с помощью инструмента шаблонов"; +App::$strings["BBcode"] = ""; +App::$strings["HTML"] = ""; +App::$strings["Text"] = "Текст"; +App::$strings["Comanche Layout"] = "Шаблон Comanche"; +App::$strings["PHP"] = ""; +App::$strings["Page content type"] = "Тип содержимого страницы"; App::$strings["activity"] = "активность"; -App::$strings["Design"] = "Дизайн"; -App::$strings["Blocks"] = "Блоки"; +App::$strings["a-z, 0-9, -, and _ only"] = "Только a-z, 0-9, -, и _"; +App::$strings["Design Tools"] = "Инструменты дизайна"; +App::$strings["Blocks"] = "Блокировки"; App::$strings["Menus"] = "Меню"; App::$strings["Layouts"] = "Шаблоны"; App::$strings["Pages"] = "Страницы"; -App::$strings["Site Admin"] = "Админ сайта"; -App::$strings["Address Book"] = "Адресная книга"; -App::$strings["Mood"] = "Настроение"; -App::$strings["Probe"] = ""; -App::$strings["Suggest"] = ""; -App::$strings["Update"] = "Обновление"; -App::$strings["Install"] = "Установка"; -App::$strings["Purchase"] = ""; -App::$strings["Unknown"] = "Неизвестный"; -App::$strings["Invalid data packet"] = "Неверный пакет данных"; -App::$strings["Unable to verify channel signature"] = "Невозможно проверить сигнатуру канала"; -App::$strings["Unable to verify site signature for %s"] = ""; -App::$strings["No recipient provided."] = ""; -App::$strings["[no subject]"] = "[без темы]"; -App::$strings["Unable to determine sender."] = "Невозможно определить отправителя."; -App::$strings["Stored post could not be verified."] = ""; -App::$strings["Click here to upgrade."] = "Нажмите здесь, чтобы обновить."; -App::$strings["This action exceeds the limits set by your subscription plan."] = ""; -App::$strings["This action is not available under your subscription plan."] = ""; -App::$strings["System"] = "Система"; -App::$strings["Create Personal App"] = "Создать собственное приложение"; -App::$strings["Edit Personal App"] = "Редактировать собственное приложение"; -App::$strings["Ignore/Hide"] = "Игнорировать / Скрыть"; -App::$strings["Suggestions"] = "Рекомендации"; -App::$strings["See more..."] = "Просмотреть больше..."; -App::$strings["You have %1$.0f of %2$.0f allowed connections."] = ""; -App::$strings["Add New Connection"] = "Добавить новый контакт"; -App::$strings["Enter the channel address"] = "Введите адрес канала"; -App::$strings["Example: bob@example.com, http://example.com/barbara"] = "Пример: bob@example.com, http://example.com/barbara"; -App::$strings["Notes"] = "Заметки"; -App::$strings["Remove term"] = "Удалить термин"; -App::$strings["Archives"] = "Архивы"; -App::$strings["Refresh"] = "Обновить"; -App::$strings["Me"] = "Я"; -App::$strings["Best Friends"] = "Лучшие друзья"; -App::$strings["Co-workers"] = "Сотрудники"; -App::$strings["Former Friends"] = "Приятели"; -App::$strings["Acquaintances"] = "Знакомые"; -App::$strings["Everybody"] = "Все"; -App::$strings["Account settings"] = "Настройки аккаунта"; -App::$strings["Channel settings"] = "Настройки канала"; -App::$strings["Additional features"] = "Дополнительные функции"; -App::$strings["Feature settings"] = "Настройки компонентов"; -App::$strings["Display settings"] = "Настройки отображения"; -App::$strings["Connected apps"] = "Подключенные приложения"; -App::$strings["Export channel"] = "Экспорт канала"; -App::$strings["Automatic Permissions (Advanced)"] = "Автоматические разрешения (дополнительно)"; -App::$strings["Premium Channel Settings"] = "Настройки премиум канала"; -App::$strings["Check Mail"] = "Проверить снова"; -App::$strings["Chat Rooms"] = "Чаты"; -App::$strings["Bookmarked Chatrooms"] = "Закладки чатов"; -App::$strings["Suggested Chatrooms"] = "Рекомендуемые чаты"; -App::$strings["Save to Folder"] = "Сохранить в папку"; -App::$strings["View all"] = "Просмотреть все"; -App::$strings["__ctx:noun__ Dislike"] = array( - 0 => "не-нравится", - 1 => "не-нравится", - 2 => "не-нравится", -); -App::$strings["Add Star"] = "Добавить маркировку"; -App::$strings["Remove Star"] = "Удалить маркировку"; -App::$strings["Toggle Star Status"] = "Переключить статус маркировки"; -App::$strings["starred"] = "помеченные"; -App::$strings["Add Tag"] = "Добавить тег"; -App::$strings["I like this (toggle)"] = "мне это нравится (переключение)"; -App::$strings["I don't like this (toggle)"] = "мне это не нравится (переключение)"; -App::$strings["Share This"] = "Поделиться этим"; -App::$strings["share"] = "поделиться"; -App::$strings["View %s's profile - %s"] = "Просмотр %s's профиля - %s"; -App::$strings["to"] = "к"; -App::$strings["via"] = "через"; -App::$strings["Wall-to-Wall"] = "Стена-к-Стене"; -App::$strings["via Wall-To-Wall:"] = "через Стена-к-Стене:"; -App::$strings["Save Bookmarks"] = "Сохранить закладки"; -App::$strings["Add to Calendar"] = "Добавить в календарь"; -App::$strings["__ctx:noun__ Likes"] = "нравится"; -App::$strings["__ctx:noun__ Dislikes"] = "не-нравится"; -App::$strings["%d comment"] = array( - 0 => "%d комментарий", - 1 => "%d комментария", - 2 => "%d комментариев", +App::$strings["Import"] = "Импортировать"; +App::$strings["Import website..."] = "Импорт веб-сайта..."; +App::$strings["Select folder to import"] = "Выбрать каталог для импорта"; +App::$strings["Import from a zipped folder:"] = "Импортировать из каталога в zip-архиве:"; +App::$strings["Import from cloud files:"] = "Импортировать из сетевых файлов:"; +App::$strings["/cloud/channel/path/to/folder"] = ""; +App::$strings["Enter path to website files"] = "Введите путь к файлам веб-сайта"; +App::$strings["Select folder"] = "Выбрать каталог"; +App::$strings["Export website..."] = "Экспорт веб-сайта..."; +App::$strings["Export to a zip file"] = "Экспортировать в ZIP файл."; +App::$strings["website.zip"] = ""; +App::$strings["Enter a name for the zip file."] = "Введите имя для ZIP файла."; +App::$strings["Export to cloud files"] = "Эскпортировать в сетевые файлы:"; +App::$strings["/path/to/export/folder"] = ""; +App::$strings["Enter a path to a cloud files destination."] = "Введите путь к расположению сетевых файлов."; +App::$strings["Specify folder"] = "Указать каталог"; +App::$strings["Collection"] = "Коллекция"; +App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Не верный токен безопасности для формы. Вероятно, это произошло потому, что форма была открыта слишком долго (> 3-х часов) перед его отправкой."; +App::$strings["Edit"] = "Изменить"; +App::$strings["(Unknown)"] = "(Неизвестный)"; +App::$strings["Visible to anybody on the internet."] = "Виден всем в интернете."; +App::$strings["Visible to you only."] = "Видно только вам."; +App::$strings["Visible to anybody in this network."] = "Видно всем в этой сети."; +App::$strings["Visible to anybody authenticated."] = "Видно всем аутентифицированным."; +App::$strings["Visible to anybody on %s."] = "Видно всем в %s."; +App::$strings["Visible to all connections."] = "Видно всем контактам."; +App::$strings["Visible to approved connections."] = "Видно только одобренным контактам."; +App::$strings["Visible to specific connections."] = "Видно указанным контактам."; +App::$strings["Item not found."] = "Элемент не найден."; +App::$strings["Privacy group not found."] = "Группа безопасности не найдена."; +App::$strings["Privacy group is empty."] = "Группа безопасности пуста"; +App::$strings["Privacy group: %s"] = "Группа безопасности: %s"; +App::$strings["Connection: %s"] = "Контакт: %s"; +App::$strings["Connection not found."] = "Контакт не найден."; +App::$strings["female"] = "женщина"; +App::$strings["%1\$s updated her %2\$s"] = "%1\$s обновила её %2\$s"; +App::$strings["male"] = "мужчина"; +App::$strings["%1\$s updated his %2\$s"] = "%1\$s обновил его %2\$s"; +App::$strings["%1\$s updated their %2\$s"] = "%1\$s обновили их %2\$s"; +App::$strings["profile photo"] = "Фотография профиля"; +App::$strings["[Edited %s]"] = "[Отредактировано %s]"; +App::$strings["__ctx:edit_activity__ Post"] = "Публикация"; +App::$strings["__ctx:edit_activity__ Comment"] = "Комментарий"; +App::$strings["%d invitation available"] = array( + 0 => "", + 1 => "", ); -App::$strings["[+] show all"] = "[+] показать все"; -App::$strings["This is you"] = "Это вы"; -App::$strings["Comment"] = "Комментарий"; -App::$strings["Submit"] = "Отправить"; -App::$strings["Bold"] = "Жирный"; -App::$strings["Italic"] = "Курсив"; -App::$strings["Underline"] = "Подчеркнутый"; -App::$strings["Quote"] = "Цитата"; -App::$strings["Code"] = "Код"; -App::$strings["Image"] = "Изображение"; -App::$strings["Link"] = "Ссылка"; -App::$strings["Video"] = "Видео"; -App::$strings["Delete this item?"] = "Удалить этот элемент?"; -App::$strings["[-] show less"] = "[-] показать меньше"; -App::$strings["[+] expand"] = "[+] развернуть"; -App::$strings["[-] collapse"] = "[-] свернуть"; -App::$strings["Password too short"] = "Пароль слишком короткий"; -App::$strings["Passwords do not match"] = "Пароли не совпадают"; -App::$strings["everybody"] = "все"; -App::$strings["Secret Passphrase"] = "Тайный пароль"; -App::$strings["Passphrase hint"] = ""; -App::$strings["Notice: Permissions have changed but have not yet been submitted."] = ""; -App::$strings["close all"] = "закрыть все"; -App::$strings["timeago.prefixAgo"] = "timeago.prefixAgo"; -App::$strings["timeago.prefixFromNow"] = "timeago.prefixFromNow"; -App::$strings["ago"] = "тому назад"; -App::$strings["from now"] = "с этого времени"; -App::$strings["less than a minute"] = "менее чем одну минуту назад"; -App::$strings["about a minute"] = "около минуты"; -App::$strings["%d minutes"] = "%d мин."; -App::$strings["about an hour"] = "около часа"; -App::$strings["about %d hours"] = "около %d час."; -App::$strings["a day"] = "день"; -App::$strings["%d days"] = "%d дн."; -App::$strings["about a month"] = "около месяца"; -App::$strings["%d months"] = "%d мес."; -App::$strings["about a year"] = "около года"; -App::$strings["%d years"] = "%d лет"; -App::$strings[" "] = " "; -App::$strings["timeago.numbers"] = "timeago.numbers"; -App::$strings["New window"] = "Новое окно"; -App::$strings["Open the selected location in a different window or browser tab"] = "Откройте выбранное местоположение в другом окне или вкладке браузера"; -App::$strings["Male"] = "Мужской"; -App::$strings["Female"] = "Женский"; +App::$strings["Advanced"] = "Дополнительно"; +App::$strings["Find Channels"] = "Поиск каналов"; +App::$strings["Enter name or interest"] = "Впишите имя или интерес"; +App::$strings["Connect/Follow"] = "Подключить / отслеживать"; +App::$strings["Examples: Robert Morgenstein, Fishing"] = "Примеры: Владимир Ильич, Революционер"; +App::$strings["Find"] = "Поиск"; +App::$strings["Channel Suggestions"] = "Рекомендации каналов"; +App::$strings["Random Profile"] = "Случайный профиль"; +App::$strings["Invite Friends"] = "Пригласить друзей"; +App::$strings["Advanced example: name=fred and country=iceland"] = "Расширенный пример: name=ivan and country=russia"; +App::$strings["Saved Folders"] = "Сохранённые каталоги"; +App::$strings["Everything"] = "Всё"; +App::$strings["Common Connections"] = "Общие контакты"; +App::$strings["View all %d common connections"] = "Просмотреть все %d общих контактов"; +App::$strings["Unable to obtain identity information from database"] = "Невозможно получить идентификационную информацию из базы данных"; +App::$strings["Empty name"] = "Пустое имя"; +App::$strings["Name too long"] = "Слишком длинное имя"; +App::$strings["No account identifier"] = "Идентификатор аккаунта отсутствует"; +App::$strings["Nickname is required."] = "Требуется псевдоним."; +App::$strings["Reserved nickname. Please choose another."] = "Зарезервированый псевдоним. Пожалуйста, выберите другой."; +App::$strings["Nickname has unsupported characters or is already being used on this site."] = "Псевдоним имеет недопустимые символы или уже используется на этом сайте."; +App::$strings["Unable to retrieve created identity"] = "Не удается получить созданный идентификатор"; +App::$strings["Default Profile"] = "Профиль по умолчанию"; +App::$strings["Friends"] = "Друзья"; +App::$strings["Unable to retrieve modified identity"] = "Не удается найти изменённый идентификатор"; +App::$strings["Requested profile is not available."] = "Запрашиваемый профиль не доступен."; +App::$strings["Change profile photo"] = "Изменить фотографию профиля"; +App::$strings["Create New Profile"] = "Создать новый профиль"; +App::$strings["Profile Image"] = "Изображение профиля"; +App::$strings["Visible to everybody"] = "Видно всем"; +App::$strings["Edit visibility"] = "Редактировать видимость"; +App::$strings["Gender:"] = "Пол:"; +App::$strings["Homepage:"] = "Домашняя страница:"; +App::$strings["Online Now"] = "Сейчас в сети"; +App::$strings["Change your profile photo"] = "Изменить фотографию вашего профиля"; +App::$strings["Trans"] = "Трансексуал"; +App::$strings["Neuter"] = "Среднего рода"; +App::$strings["Non-specific"] = "Неспецифический"; +App::$strings["Full Name:"] = "Полное имя:"; +App::$strings["Like this channel"] = "нравится этот канал"; +App::$strings["j F, Y"] = ""; +App::$strings["j F"] = ""; +App::$strings["Birthday:"] = "День рождения:"; +App::$strings["Age:"] = "Возраст:"; +App::$strings["for %1\$d %2\$s"] = "для %1\$d %2\$s"; +App::$strings["Tags:"] = "Теги:"; +App::$strings["Sexual Preference:"] = "Сексуальные предпочтения:"; +App::$strings["Hometown:"] = "Родной город:"; +App::$strings["Political Views:"] = "Политические взгляды:"; +App::$strings["Religion:"] = "Религия:"; +App::$strings["About:"] = "О себе:"; +App::$strings["Hobbies/Interests:"] = "Хобби / интересы:"; +App::$strings["Likes:"] = "Что вам нравится:"; +App::$strings["Dislikes:"] = "Что вам не нравится:"; +App::$strings["Contact information and Social Networks:"] = "Контактная информация и социальные сети:"; +App::$strings["My other channels:"] = "Мои другие каналы:"; +App::$strings["Musical interests:"] = "Музыкальные интересы:"; +App::$strings["Books, literature:"] = "Книги, литература:"; +App::$strings["Television:"] = "Телевидение:"; +App::$strings["Film/dance/culture/entertainment:"] = "Кино / танцы / культура / развлечения:"; +App::$strings["Love/Romance:"] = "Любовь / романтика:"; +App::$strings["Work/employment:"] = "Работа / занятость:"; +App::$strings["School/education:"] = "Школа / образование:"; +App::$strings["Profile"] = "Профиль"; +App::$strings["Like this thing"] = "нравится этo"; +App::$strings["Export"] = "Экспорт"; +App::$strings["cover photo"] = "фотография обложки"; +App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Введите адрес вашего канала (например: channel@example.com)"; +App::$strings["Authenticate"] = "Проверка подлинности"; +App::$strings["Account '%s' deleted"] = "Аккаунт '%s' удален"; +App::$strings["General Features"] = "Главные функции"; +App::$strings["New Member Links"] = "Ссылки для новичков"; +App::$strings["Display new member quick links menu"] = "Показать меню быстрых ссылок для новых участников"; +App::$strings["Advanced Profiles"] = "Расширенные профили"; +App::$strings["Additional profile sections and selections"] = "Дополнительные секции и выборы профиля"; +App::$strings["Profile Import/Export"] = "Импорт / экспорт профиля"; +App::$strings["Save and load profile details across sites/channels"] = "Сохранение и загрузка настроек профиля на всех сайтах / каналах"; +App::$strings["Web Pages"] = "Веб-страницы"; +App::$strings["Provide managed web pages on your channel"] = "Предоставлять управляемые веб-страницы на Вашем канале"; +App::$strings["Provide a wiki for your channel"] = "Предоставьте Wiki для вашего канала"; +App::$strings["Private Notes"] = "Личные заметки"; +App::$strings["Enables a tool to store notes and reminders (note: not encrypted)"] = "Включает инструмент для хранения заметок и напоминаний (прим.: не зашифровано)"; +App::$strings["Create personal planning cards"] = "Создать личные карточки планирования"; +App::$strings["Create interactive articles"] = "Создать интерактивные статьи"; +App::$strings["Navigation Channel Select"] = "Выбор канала навигации"; +App::$strings["Change channels directly from within the navigation dropdown menu"] = "Изменить канал напрямую из выпадающего меню"; +App::$strings["Photo Location"] = "Местоположение фотографии"; +App::$strings["If location data is available on uploaded photos, link this to a map."] = "Если данные о местоположении доступны на загруженных фотографий, связать их с картой."; +App::$strings["Access Controlled Chatrooms"] = "Получить доступ к контролируемым чатам"; +App::$strings["Provide chatrooms and chat services with access control."] = "Предоставлять чаты и их службы с контролем доступа."; +App::$strings["Smart Birthdays"] = "\"Умные\" Дни рождений"; +App::$strings["Make birthday events timezone aware in case your friends are scattered across the planet."] = "Сделать уведомления о днях рождения зависимыми от часового пояса в том случае, если ваши друзья разбросаны по планете."; +App::$strings["Event Timezone Selection"] = "Выбор часового пояса события"; +App::$strings["Allow event creation in timezones other than your own."] = "Разрешить создание события в часовой зоне отличной от вашей"; +App::$strings["Premium Channel"] = "Премиум-канал"; +App::$strings["Allows you to set restrictions and terms on those that connect with your channel"] = "Позволяет установить ограничения и условия для подключающихся к вашему каналу"; +App::$strings["Advanced Directory Search"] = "Расширенный поиск в каталоге"; +App::$strings["Allows creation of complex directory search queries"] = "Позволяет создание сложных поисковых запросов в каталоге"; +App::$strings["Advanced Theme and Layout Settings"] = "Расширенный настройки темы и отображения"; +App::$strings["Allows fine tuning of themes and page layouts"] = "Разрешает тонкую настройку тем и шаблонов страниц"; +App::$strings["Access Control and Permissions"] = "Управление доступом и разрешениями"; +App::$strings["Enable management and selection of privacy groups"] = "Включить управление и выбор групп безопасности"; +App::$strings["Multiple Profiles"] = "Несколько профилей"; +App::$strings["Ability to create multiple profiles"] = "Возможность создания нескольких профилей"; +App::$strings["Permission Categories"] = "Категории разрешений"; +App::$strings["Create custom connection permission limits"] = "Создать пользовательские ограничения на доступ к подключению"; +App::$strings["OAuth1 Clients"] = "Клиенты OAuth1"; +App::$strings["Manage OAuth1 authenticatication tokens for mobile and remote apps."] = "Управлять токенами аутентификации OAuth1 для мобильных и удалённых приложений."; +App::$strings["OAuth2 Clients"] = "Клиенты OAuth2"; +App::$strings["Manage OAuth2 authenticatication tokens for mobile and remote apps."] = "Управлять токенами аутентификации OAuth2 для мобильных и удалённых приложений."; +App::$strings["Access Tokens"] = "Токены доступа"; +App::$strings["Create access tokens so that non-members can access private content."] = "Создать токены доступа для доступа к приватному содержимому."; +App::$strings["Post Composition Features"] = "Функции создания публикаций"; +App::$strings["Large Photos"] = "Большие фотографии"; +App::$strings["Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails"] = "Включить большие (1024px) миниатюры изображений в публикациях. Если не включено, использовать маленькие (640px) миниатюры."; +App::$strings["Channel Sources"] = "Источники канала"; +App::$strings["Automatically import channel content from other channels or feeds"] = "Автоматический импорт контента из других каналов или лент"; +App::$strings["Even More Encryption"] = "Еще больше шифрования"; +App::$strings["Allow optional encryption of content end-to-end with a shared secret key"] = "Разрешить дополнительное end-to-end шифрование содержимого с общим секретным ключом"; +App::$strings["Enable Voting Tools"] = "Включить инструменты голосования"; +App::$strings["Provide a class of post which others can vote on"] = "Предоставь класс публикаций с возможностью голосования"; +App::$strings["Disable Comments"] = "Отключить комментарии"; +App::$strings["Provide the option to disable comments for a post"] = "Предоставить возможность отключать комментарии для публикаций"; +App::$strings["Delayed Posting"] = "Задержанная публикация"; +App::$strings["Allow posts to be published at a later date"] = "Разрешить размешать публикации следующими датами"; +App::$strings["Content Expiration"] = "Истечение срока действия содержимого"; +App::$strings["Remove posts/comments and/or private messages at a future time"] = "Удалять публикации / комментарии и / или личные сообщения"; +App::$strings["Suppress Duplicate Posts/Comments"] = "Подавлять дублирующие публикации / комментарии"; +App::$strings["Prevent posts with identical content to be published with less than two minutes in between submissions."] = "Предотвращает появление публикаций с одинаковым содержимым если интервал между ними менее 2 минут"; +App::$strings["Auto-save drafts of posts and comments"] = "Автоматически сохранять черновики публикаций и комментариев"; +App::$strings["Automatically saves post and comment drafts in local browser storage to help prevent accidental loss of compositions"] = "Автоматически сохраняет черновики публикаций и комментариев в локальном хранилище браузера для предотвращения их случайной утраты"; +App::$strings["Network and Stream Filtering"] = "Фильтрация сети и потока"; +App::$strings["Search by Date"] = "Поиск по дате"; +App::$strings["Ability to select posts by date ranges"] = "Возможность выбора сообщений по диапазонам дат"; +App::$strings["Saved Searches"] = "Сохранённые поиски"; +App::$strings["Save search terms for re-use"] = "Сохранять результаты поиска для повторного использования"; +App::$strings["Alternate Stream Order"] = "Отображение потока"; +App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Возможность показывать поток по дате последнего сообщения, последнего комментария или по дате публикации"; +App::$strings["Contact Filter"] = "Фильтр контактов"; +App::$strings["Ability to display only posts of a selected contact"] = "Возможность показа публикаций только от выбранных контактов"; +App::$strings["Forum Filter"] = "Фильтр по форумам"; +App::$strings["Ability to display only posts of a specific forum"] = "Возможность показа публикаций только определённого форума"; +App::$strings["Personal Posts Filter"] = "Персональный фильтр публикаций"; +App::$strings["Ability to display only posts that you've interacted on"] = "Возможность показа только тех публикаций с которыми вы взаимодействовали"; +App::$strings["Affinity Tool"] = "Инструмент сходства / соответствия"; +App::$strings["Filter stream activity by depth of relationships"] = "Фильтровать потоки активности по глубине отношений"; +App::$strings["Suggest Channels"] = "Предлагаемые каналы"; +App::$strings["Show friend and connection suggestions"] = "Показать предложения в друзья"; +App::$strings["Connection Filtering"] = "Фильтрация контактов"; +App::$strings["Filter incoming posts from connections based on keywords/content"] = "Фильтр входящих сообщений от контактов на основе ключевых слов / контента"; +App::$strings["Post/Comment Tools"] = "Инструменты публикаций / комментариев"; +App::$strings["Community Tagging"] = "Отметки сообщества"; +App::$strings["Ability to tag existing posts"] = "Возможность помечать тегами существующие публикации"; +App::$strings["Post Categories"] = "Категории публикаций"; +App::$strings["Add categories to your posts"] = "Добавить категории для ваших публикаций"; +App::$strings["Emoji Reactions"] = "Реакции Emoji"; +App::$strings["Add emoji reaction ability to posts"] = "Возможность добавлять реакции Emoji к публикациям"; +App::$strings["Ability to file posts under folders"] = "Возможность размещать публикации в каталогах"; +App::$strings["Dislike Posts"] = "Не нравящиеся публикации"; +App::$strings["Ability to dislike posts/comments"] = "Возможность отмечать не нравящиеся публикации / комментарии"; +App::$strings["Star Posts"] = "Помечать сообщения"; +App::$strings["Ability to mark special posts with a star indicator"] = "Возможность отметить специальные сообщения индикатором-звёздочкой"; +App::$strings["Tag Cloud"] = "Облако тегов"; +App::$strings["Provide a personal tag cloud on your channel page"] = "Показывает личное облако тегов на странице канала"; +App::$strings["Unable to determine sender."] = "Невозможно определить отправителя."; +App::$strings["No recipient provided."] = "Получатель не предоставлен."; +App::$strings["[no subject]"] = "[без темы]"; +App::$strings["Stored post could not be verified."] = "Сохранённая публикация не может быть проверена."; +App::$strings["Frequently"] = "Часто"; +App::$strings["Hourly"] = "Ежечасно"; +App::$strings["Twice daily"] = "Дважды в день"; +App::$strings["Daily"] = "Ежедневно"; +App::$strings["Weekly"] = "Еженедельно"; +App::$strings["Monthly"] = "Ежемесячно"; App::$strings["Currently Male"] = "В настоящее время мужской"; App::$strings["Currently Female"] = "В настоящее время женский"; App::$strings["Mostly Male"] = "В основном мужской"; App::$strings["Mostly Female"] = "В основном женский"; -App::$strings["Transgender"] = "Транссексуал"; -App::$strings["Intersex"] = "Intersex"; +App::$strings["Transgender"] = "Трансгендер"; +App::$strings["Intersex"] = "Интерсексуал"; App::$strings["Transsexual"] = "Транссексуал"; App::$strings["Hermaphrodite"] = "Гермафродит"; -App::$strings["Neuter"] = "Среднего рода"; -App::$strings["Non-specific"] = "Неспецифический"; -App::$strings["Other"] = "Другой"; -App::$strings["Undecided"] = "Нерешительный"; -App::$strings["Males"] = "Самец"; -App::$strings["Females"] = "Самка"; +App::$strings["Undecided"] = "Не решил"; +App::$strings["Males"] = "Мужчины"; +App::$strings["Females"] = "Женщины"; App::$strings["Gay"] = "Гей"; App::$strings["Lesbian"] = "Лесбиянка"; App::$strings["No Preference"] = "Без предпочтений"; -App::$strings["Bisexual"] = "Двуполый"; -App::$strings["Autosexual"] = "Autosexual"; -App::$strings["Abstinent"] = "Воздержанный"; -App::$strings["Virgin"] = "Девственница"; +App::$strings["Bisexual"] = "Бисексуал"; +App::$strings["Autosexual"] = "Автосексуал"; +App::$strings["Abstinent"] = "Воздержание"; +App::$strings["Virgin"] = "Девственник"; App::$strings["Deviant"] = "Отклоняющийся от нормы"; -App::$strings["Fetish"] = "Фетиш"; +App::$strings["Fetish"] = "Фетишист"; App::$strings["Oodles"] = "Множественный"; -App::$strings["Nonsexual"] = "Несексуальный"; -App::$strings["Single"] = "Одинок"; -App::$strings["Lonely"] = "Уединенный"; -App::$strings["Available"] = "Доступный"; -App::$strings["Unavailable"] = "Недоступный"; -App::$strings["Has crush"] = "Столкновение"; -App::$strings["Infatuated"] = "Влюбленный"; -App::$strings["Dating"] = "Датировка"; +App::$strings["Nonsexual"] = "Асексуал"; +App::$strings["Single"] = "Одиночка"; +App::$strings["Lonely"] = "Одинокий"; +App::$strings["Available"] = "Свободен"; +App::$strings["Unavailable"] = "Занят"; +App::$strings["Has crush"] = "Влюблён"; +App::$strings["Infatuated"] = "без ума"; +App::$strings["Dating"] = "Встречаюсь"; App::$strings["Unfaithful"] = "Неверный"; -App::$strings["Sex Addict"] = "Секс наркоман"; -App::$strings["Friends/Benefits"] = "Друзья / Преимущества"; -App::$strings["Casual"] = "Случайный"; -App::$strings["Engaged"] = "Помолвленный"; -App::$strings["Married"] = "Женат"; -App::$strings["Imaginarily married"] = "Мысленно женат"; -App::$strings["Partners"] = "Партнеры"; +App::$strings["Sex Addict"] = "Эротоман"; +App::$strings["Friends/Benefits"] = "Друзья / Выгоды"; +App::$strings["Casual"] = "Легкомысленный"; +App::$strings["Engaged"] = "Помолвлен"; +App::$strings["Married"] = "В браке"; +App::$strings["Imaginarily married"] = "В воображаемом браке"; +App::$strings["Partners"] = "Партнёрство"; App::$strings["Cohabiting"] = "Сожительствующие"; -App::$strings["Common law"] = ""; -App::$strings["Happy"] = "Счастливый"; +App::$strings["Common law"] = "Гражданский брак"; +App::$strings["Happy"] = "Счастлив"; App::$strings["Not looking"] = "Не нуждаюсь"; -App::$strings["Swinger"] = ""; -App::$strings["Betrayed"] = ""; -App::$strings["Separated"] = ""; -App::$strings["Unstable"] = "Колеблющийся"; -App::$strings["Divorced"] = "Разведенный"; -App::$strings["Imaginarily divorced"] = "Мысленно разведенный"; -App::$strings["Widowed"] = "Овдовевший"; +App::$strings["Swinger"] = "Свингер"; +App::$strings["Betrayed"] = "Предан"; +App::$strings["Separated"] = "Разделён"; +App::$strings["Unstable"] = "Нестабильно"; +App::$strings["Divorced"] = "В разводе"; +App::$strings["Imaginarily divorced"] = "В воображаемом разводе"; +App::$strings["Widowed"] = "Вдовец / вдова"; App::$strings["Uncertain"] = "Неопределенный"; App::$strings["It's complicated"] = "Это сложно"; -App::$strings["Don't care"] = "Не заботьтесь"; +App::$strings["Don't care"] = "Всё равно"; App::$strings["Ask me"] = "Спроси меня"; -App::$strings["Logged out."] = "Вышел из системы."; -App::$strings["Failed authentication"] = "Ошибка аутентификации"; -App::$strings["Login failed."] = "Не удалось войти."; -App::$strings["Permission denied"] = "Доступ запрещен"; -App::$strings["(Unknown)"] = "(Неизвестный)"; -App::$strings["Item not found."] = "Элемент не найден."; -App::$strings["Collection not found."] = "Коллекция не найдена."; -App::$strings["Collection is empty."] = "Коллекция пуста."; -App::$strings["Collection: %s"] = "Коллекции: %s"; -App::$strings["Connection: %s"] = "Контакты: %s"; -App::$strings["Connection not found."] = "Контакт не найден."; -App::$strings["Can view my \"public\" stream and posts"] = "Может просматривать мои \"публичные\" поток и сообщения"; -App::$strings["Can view my \"public\" channel profile"] = "Может просматривать мой \"публичный\" профиль канала"; -App::$strings["Can view my \"public\" photo albums"] = "Может просматривать мои \"публичные\" фотоальбомы"; -App::$strings["Can view my \"public\" address book"] = "Может просматривать мою \"публичную\" адресную книгу"; -App::$strings["Can view my \"public\" file storage"] = "Может просматривать мои \"публичные\" файлы"; -App::$strings["Can view my \"public\" pages"] = "Может просматривать мои \"публичные\" страницы"; -App::$strings["Can send me their channel stream and posts"] = "Может прислать мне свои потоки и сообщения"; -App::$strings["Can post on my channel page (\"wall\")"] = "Может публиковать на моей странице канала (\"стена\")"; -App::$strings["Can comment on my posts"] = "Может комментировать мои сообщения"; +App::$strings["Delete this item?"] = "Удалить этот элемент?"; +App::$strings["Comment"] = "Комментарий"; +App::$strings["%s show all"] = "%s показать всё"; +App::$strings["%s show less"] = "%s показать меньше"; +App::$strings["%s expand"] = "%s развернуть"; +App::$strings["%s collapse"] = "%s свернуть"; +App::$strings["Password too short"] = "Пароль слишком короткий"; +App::$strings["Passwords do not match"] = "Пароли не совпадают"; +App::$strings["everybody"] = "все"; +App::$strings["Secret Passphrase"] = "Тайный пароль"; +App::$strings["Passphrase hint"] = "Подсказка для пароля"; +App::$strings["Notice: Permissions have changed but have not yet been submitted."] = "Уведомление: Права доступа изменились, но до сих пор не сохранены."; +App::$strings["close all"] = "закрыть все"; +App::$strings["Nothing new here"] = "Здесь нет ничего нового"; +App::$strings["Rate This Channel (this is public)"] = "Оценкa этoго канала (общедоступно)"; +App::$strings["Rating"] = "Оценка"; +App::$strings["Describe (optional)"] = "Охарактеризовать (необязательно)"; +App::$strings["Please enter a link URL"] = "Пожалуйста, введите URL ссылки"; +App::$strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Есть несохраненные изменения. Вы уверены, что хотите покинуть эту страницу?"; +App::$strings["Location"] = "Место"; +App::$strings["lovely"] = "прекрасно"; +App::$strings["wonderful"] = "замечательно"; +App::$strings["fantastic"] = "фантастично"; +App::$strings["great"] = "отлично"; +App::$strings["Your chosen nickname was either already taken or not valid. Please use our suggestion ("] = "Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать наше предложение ("; +App::$strings[") or enter a new one."] = ") или введите новый."; +App::$strings["Thank you, this nickname is valid."] = "Спасибо, этот псевдоним может быть использован."; +App::$strings["A channel name is required."] = "Требуется название канала."; +App::$strings["This is a "] = "Это "; +App::$strings[" channel name"] = " название канала"; +App::$strings["timeago.prefixAgo"] = ""; +App::$strings["timeago.prefixFromNow"] = ""; +App::$strings["timeago.suffixAgo"] = "назад"; +App::$strings["timeago.suffixFromNow"] = ""; +App::$strings["less than a minute"] = "менее чем одну минуту"; +App::$strings["about a minute"] = "около минуты"; +App::$strings["%d minutes"] = "%d минут"; +App::$strings["about an hour"] = "около часа"; +App::$strings["about %d hours"] = "около %d часов"; +App::$strings["a day"] = "день"; +App::$strings["%d days"] = "%d дней"; +App::$strings["about a month"] = "около месяца"; +App::$strings["%d months"] = "%d месяцев"; +App::$strings["about a year"] = "около года"; +App::$strings["%d years"] = "%d лет"; +App::$strings[" "] = " "; +App::$strings["timeago.numbers"] = ""; +App::$strings["__ctx:long__ May"] = "Май"; +App::$strings["Jan"] = "Янв"; +App::$strings["Feb"] = "Фев"; +App::$strings["Mar"] = "Мар"; +App::$strings["Apr"] = "Апр"; +App::$strings["__ctx:short__ May"] = "Май"; +App::$strings["Jun"] = "Июн"; +App::$strings["Jul"] = "Июл"; +App::$strings["Aug"] = "Авг"; +App::$strings["Sep"] = "Сен"; +App::$strings["Oct"] = "Окт"; +App::$strings["Nov"] = "Ноя"; +App::$strings["Dec"] = "Дек"; +App::$strings["Sun"] = "Вск"; +App::$strings["Mon"] = "Пон"; +App::$strings["Tue"] = "Вт"; +App::$strings["Wed"] = "Ср"; +App::$strings["Thu"] = "Чет"; +App::$strings["Fri"] = "Пят"; +App::$strings["Sat"] = "Суб"; +App::$strings["__ctx:calendar__ today"] = "сегодня"; +App::$strings["__ctx:calendar__ month"] = "месяц"; +App::$strings["__ctx:calendar__ week"] = "неделя"; +App::$strings["__ctx:calendar__ day"] = "день"; +App::$strings["__ctx:calendar__ All day"] = "Весь день"; +App::$strings["View PDF"] = "Просмотреть PDF"; +App::$strings[" by "] = " по "; +App::$strings[" on "] = " на "; +App::$strings["Embedded content"] = "Встроенное содержимое"; +App::$strings["Embedding disabled"] = "Встраивание отключено"; +App::$strings["Image exceeds website size limit of %lu bytes"] = "Файл превышает предельный размер для сайта в %lu байт"; +App::$strings["Image file is empty."] = "Файл изображения пуст."; +App::$strings["Unable to process image"] = "Не удается обработать изображение"; +App::$strings["Photo storage failed."] = "Ошибка хранилища фотографий."; +App::$strings["a new photo"] = "новая фотография"; +App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s опубликовал %2\$s к %3\$s"; +App::$strings["Recent Photos"] = "Последние фотографии"; +App::$strings["Upload New Photos"] = "Загрузить новые фотографии"; +App::$strings["New window"] = "Новое окно"; +App::$strings["Open the selected location in a different window or browser tab"] = "Открыть выбранное местоположение в другом окне или вкладке браузера"; +App::$strings["Wiki updated successfully"] = "Wiki успешно обновлена"; +App::$strings["Wiki files deleted successfully"] = "Wiki успешно удалена"; +App::$strings["0. Beginner/Basic"] = "Начинающий / Базовый"; +App::$strings["1. Novice - not skilled but willing to learn"] = "1. Новичок - не опытный, но желающий учиться"; +App::$strings["2. Intermediate - somewhat comfortable"] = "2. Промежуточный - более удобный"; +App::$strings["3. Advanced - very comfortable"] = "3. Продвинутый - очень удобный"; +App::$strings["4. Expert - I can write computer code"] = "4. Эксперт - я умею программировать"; +App::$strings["5. Wizard - I probably know more than you do"] = "5. Волшебник - возможно я знаю больше чем ты"; +App::$strings["Public"] = "Общедоступно"; +App::$strings["Anybody in the \$Projectname network"] = "Любому в сети \$Projectname"; +App::$strings["Any account on %s"] = "Любой аккаунт в %s"; +App::$strings["Any of my connections"] = "Любой из моих контактов"; +App::$strings["Only connections I specifically allow"] = "Только те контакты, кому я дам разрешение"; +App::$strings["Anybody authenticated (could include visitors from other networks)"] = "Любой аутентифицированный (может включать посетителей их других сетей)"; +App::$strings["Any connections including those who haven't yet been approved"] = "Любые контакты включая те, которые вы ещё не одобрили"; +App::$strings["This is your default setting for the audience of your normal stream, and posts."] = "Это настройка по умолчанию для аудитории ваших обычных потоков и публикаций"; +App::$strings["This is your default setting for who can view your default channel profile"] = "Это настройка по умолчанию для тех, кто может просматривать профиль вашего основного канала"; +App::$strings["This is your default setting for who can view your connections"] = "Это настройка по умолчанию для тех, кто может просматривать ваши контакты"; +App::$strings["This is your default setting for who can view your file storage and photos"] = "Это настройка по умолчанию для тех, кто может просматривать ваше хранилище файлов и фотографий"; +App::$strings["This is your default setting for the audience of your webpages"] = "Это настройка по умолчанию для аудитории ваших веб-страниц"; +App::$strings["Admin Delete"] = "Удалено администратором"; +App::$strings["Save to Folder"] = "Сохранить в каталог"; +App::$strings["I will attend"] = "Я буду присутствовать"; +App::$strings["I will not attend"] = "Я не буду присутствовать"; +App::$strings["I might attend"] = "Я возможно буду присутствовать"; +App::$strings["I agree"] = "Я согласен"; +App::$strings["I disagree"] = "Я не согласен"; +App::$strings["I abstain"] = "Я воздержался"; +App::$strings["View all"] = "Просмотреть все"; +App::$strings["Add Tag"] = "Добавить тег"; +App::$strings["I like this (toggle)"] = "мне это нравится (переключение)"; +App::$strings["I don't like this (toggle)"] = "мне это не нравится (переключение)"; +App::$strings["Share This"] = "Поделиться этим"; +App::$strings["share"] = "поделиться"; +App::$strings["Delivery Report"] = "Отчёт о доставке"; +App::$strings["%d comment"] = array( + 0 => "", + 1 => "", +); +App::$strings["View %s's profile - %s"] = "Просмотр %s профиля - %s"; +App::$strings["to"] = "к"; +App::$strings["via"] = "через"; +App::$strings["Wall-to-Wall"] = "Стена-к-Стене"; +App::$strings["via Wall-To-Wall:"] = "через Стена-к-Стене:"; +App::$strings["Attend"] = "Посетить"; +App::$strings["Attendance Options"] = "Параметры посещаемости"; +App::$strings["Vote"] = "Голосовать"; +App::$strings["Voting Options"] = "Параметры голосования"; +App::$strings["Add to Calendar"] = "Добавить в календарь"; +App::$strings["Mark all seen"] = "Отметить как просмотренное"; +App::$strings["__ctx:noun__ Likes"] = "Нравится"; +App::$strings["__ctx:noun__ Dislikes"] = "Не нравится"; +App::$strings["This is you"] = "Это вы"; +App::$strings["Image"] = "Изображение"; +App::$strings["Insert Link"] = "Вставить ссылку"; +App::$strings["Video"] = "Видео"; +App::$strings["Your full name (required)"] = "Ваше полное имя (требуется)"; +App::$strings["Your email address (required)"] = "Ваш адрес электронной почты (требуется)"; +App::$strings["Your website URL (optional)"] = "URL вашего вебсайта (необязательно)"; +App::$strings["Apps"] = "Приложения"; +App::$strings["Site Admin"] = "Администратор сайта"; +App::$strings["View Bookmarks"] = "Просмотреть закадки"; +App::$strings["My Chatrooms"] = "Мои чаты"; +App::$strings["Remote Diagnostics"] = "Удалённая диагностика"; +App::$strings["Activity"] = "Активность"; +App::$strings["Channel Home"] = "Главная канала"; +App::$strings["Directory"] = "Каталог"; +App::$strings["Mail"] = "Переписка"; +App::$strings["Mood"] = "Настроение"; +App::$strings["Chat"] = "Чат"; +App::$strings["Probe"] = "Проба"; +App::$strings["Suggest"] = "Предложить"; +App::$strings["Random Channel"] = "Случайный канал"; +App::$strings["Invite"] = "Пригласить"; +App::$strings["Features"] = "Функции"; +App::$strings["Post"] = "Публикация"; +App::$strings["Update"] = "Обновить"; +App::$strings["Install"] = "Установить"; +App::$strings["Purchase"] = "Купить"; +App::$strings["Undelete"] = "Восстановить"; +App::$strings["Add to app-tray"] = "Добавить в app-tray"; +App::$strings["Remove from app-tray"] = "Удалить из app-tray"; +App::$strings["Pin to navbar"] = "Добавить на панель навигации"; +App::$strings["Unpin from navbar"] = "Удалить с панели навигации"; +App::$strings["\$Projectname Notification"] = "Оповещение \$Projectname "; +App::$strings["Thank You,"] = "Спасибо,"; +App::$strings["This email was sent by %1\$s at %2\$s."] = "Это письмо было отправлено %1\$s на %2\$s."; +App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "Чтобы прекратить получать эти сообщения, настройте параметры уведомлений в %s"; +App::$strings["To stop receiving these messages, please adjust your %s."] = "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s."; +App::$strings["Notification Settings"] = "Настройки уведомлений"; +App::$strings["%s "] = ""; +App::$strings["[\$Projectname:Notify] New mail received at %s"] = "[\$Projectname:Notify] Получено новое сообщение в %s"; +App::$strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s отправил вам новое личное сообщение в %2\$s."; +App::$strings["%1\$s sent you %2\$s."] = "%1\$s послал вам %2\$s."; +App::$strings["a private message"] = "личное сообщение"; +App::$strings["Please visit %s to view and/or reply to your private messages."] = "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения."; +App::$strings["commented on"] = " прокомментировал в"; +App::$strings["liked"] = "понравилось"; +App::$strings["disliked"] = "не понравилось"; +App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = ""; +App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = ""; +App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s%2\$s [zrl=%3\$s]ваш %4\$s[/zrl]"; +App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Notify] Отмодерирован комментарий к беседе #%1\$d по %2\$s"; +App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Notify] Комментарий к беседе #%1\$d по %2\$s"; +App::$strings["%1\$s commented on an item/conversation you have been following."] = "%1\$s прокомментировал тему / беседу за которым вы следите."; +App::$strings["Please visit %s to view and/or reply to the conversation."] = "Пожалуйста, посетите %s для просмотра и / или ответа в беседе."; +App::$strings["Please visit %s to approve or reject this comment."] = "Пожалуйста посетитет %s для одобрения и отклонения комментария."; +App::$strings["%1\$s liked [zrl=%2\$s]your %3\$s[/zrl]"] = "%1\$s понравился [zrl=%2\$s]ваш %3\$s[/zrl]"; +App::$strings["[\$Projectname:Notify] Like received to conversation #%1\$d by %2\$s"] = "[\$Projectname:Notify] Беседа получила отметку \"нравится\" #%1\$d от %2\$s"; +App::$strings["%1\$s liked an item/conversation you created."] = "%1\$s нравится тема / беседа которую вы создали."; +App::$strings["[\$Projectname:Notify] %s posted to your profile wall"] = "[\$Projectname:Notify] %s сделал публикацию на стене вашего профиля"; +App::$strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s сделал публикацию на стене вашего профиля в %2\$s"; +App::$strings["%1\$s posted to [zrl=%2\$s]your wall[/zrl]"] = "%1\$s опубликовал на [zrl=%2\$s]вашей стене[/zrl]"; +App::$strings["[\$Projectname:Notify] %s tagged you"] = "[\$Projectname:Notify] %s отметил вас"; +App::$strings["%1\$s tagged you at %2\$s"] = "%1\$s отметил вас в %2\$s"; +App::$strings["%1\$s [zrl=%2\$s]tagged you[/zrl]."] = "%1\$s [zrl=%2\$s]отметил вас[/zrl]."; +App::$strings["[\$Projectname:Notify] %1\$s poked you"] = "[\$Projectname:Notify] %1\$s ткнул вас"; +App::$strings["%1\$s poked you at %2\$s"] = "%1\$s ткнул вас в %2\$s"; +App::$strings["%1\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s [zrl=%2\$s]ткнул вас[/zrl]."; +App::$strings["[\$Projectname:Notify] %s tagged your post"] = "[\$Projectname:Notify] %s отметил вашу публикацию"; +App::$strings["%1\$s tagged your post at %2\$s"] = "%1\$s отметил вашу публикацию на %2\$s"; +App::$strings["%1\$s tagged [zrl=%2\$s]your post[/zrl]"] = "%1\$s отметил [zrl=%2\$s]вашу публикацию[/zrl]"; +App::$strings["[\$Projectname:Notify] Introduction received"] = "[\$Projectname:Notify] Получено приглашение"; +App::$strings["You've received an new connection request from '%1\$s' at %2\$s"] = "Вы получили новый запрос контакта от '%1\$s' в %2\$s"; +App::$strings["You've received [zrl=%1\$s]a new connection request[/zrl] from %2\$s."] = "Вы получили [zrl=%1\$s]новый запрос контакта[/zrl] от %2\$s."; +App::$strings["You may visit their profile at %s"] = "Вы можете увидеть его профиль по ссылке %s"; +App::$strings["Please visit %s to approve or reject the connection request."] = "Пожалуйста, посетите %s, чтобы одобрить или отклонить запрос контакта."; +App::$strings["[\$Projectname:Notify] Friend suggestion received"] = "[\$Projectname:Notify] Получено предложение дружить"; +App::$strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Вы получили предложение дружить от '%1\$s' в %2\$s"; +App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s from %3\$s."] = "Вы получили [zrl=%1\$s]предложение дружить[/zrl] для %2\$s от %3\$s."; +App::$strings["Name:"] = "Имя:"; +App::$strings["Photo:"] = "Фото:"; +App::$strings["Please visit %s to approve or reject the suggestion."] = "Пожалуйста, посетите %s, чтобы одобрить или отклонить предложение."; +App::$strings["[\$Projectname:Notify]"] = ""; +App::$strings["created a new post"] = "создал новую публикацию"; +App::$strings["commented on %s's post"] = "прокомментировал публикацию %s"; +App::$strings["edited a post dated %s"] = "отредактировал публикацию датированную %s"; +App::$strings["edited a comment dated %s"] = "отредактировал комментарий датированный %s"; +App::$strings["(No Title)"] = "(нет заголовка)"; +App::$strings["Wiki page create failed."] = "Не удалось создать страницу Wiki."; +App::$strings["Wiki not found."] = "Wiki не найдена."; +App::$strings["Destination name already exists"] = "Имя назначения уже существует"; +App::$strings["Page not found"] = "Страница не найдена."; +App::$strings["Error reading page content"] = "Ошибка чтения содержимого страницы"; +App::$strings["Error reading wiki"] = "Ошибка чтения Wiki"; +App::$strings["Page update failed."] = "Не удалось обновить страницу."; +App::$strings["Nothing deleted"] = "Ничего не удалено"; +App::$strings["Compare: object not found."] = "Сравнение: объект не найден."; +App::$strings["Page updated"] = "Страница обновлена"; +App::$strings["Untitled"] = "Не озаглавлено"; +App::$strings["Wiki resource_id required for git commit"] = "Требуется resource_id Wiki для отправки в Git"; +App::$strings["__ctx:wiki_history__ Message"] = "Сообщение"; +App::$strings["__ctx:permcat__ default"] = "по умолчанию"; +App::$strings["__ctx:permcat__ follower"] = "поклонник"; +App::$strings["__ctx:permcat__ contributor"] = "участник"; +App::$strings["__ctx:permcat__ publisher"] = "издатель"; +App::$strings["Update Error at %s"] = "Ошибка обновления на %s"; +App::$strings["Update %s failed. See error logs."] = "Выполнение %s неудачно. Проверьте системный журнал."; +App::$strings["Missing room name"] = "Отсутствует название комнаты"; +App::$strings["Duplicate room name"] = "Название комнаты дублируется"; +App::$strings["Invalid room specifier."] = "Неверный указатель комнаты."; +App::$strings["Room not found."] = "Комната не найдена."; +App::$strings["Room is full"] = "Комната переполнена"; +App::$strings["Commented Date"] = "По комментариям"; +App::$strings["Order by last commented date"] = "Сортировка по дате последнего комментария"; +App::$strings["Posted Date"] = "По публикациям"; +App::$strings["Order by last posted date"] = "Сортировка по дате последней публикации"; +App::$strings["Date Unthreaded"] = "По порядку"; +App::$strings["Order unthreaded by date"] = "Сортировка в порядке поступления"; +App::$strings["Activity Order"] = "Сортировка по активности"; +App::$strings["Site"] = "Сайт"; +App::$strings["Accounts"] = "Учётные записи"; +App::$strings["Member registrations waiting for confirmation"] = "Регистрации участников, ожидающие подверждения"; +App::$strings["Channels"] = "Каналы"; +App::$strings["Security"] = "Безопасность"; +App::$strings["Addons"] = "Расширения"; +App::$strings["Themes"] = "Темы"; +App::$strings["Inspect queue"] = "Просмотр очереди"; +App::$strings["Profile Fields"] = "Поля профиля"; +App::$strings["DB updates"] = "Обновление базы данных"; +App::$strings["Logs"] = "Журналы"; +App::$strings["Addon Features"] = "Настройки расширений"; +App::$strings["Tasks"] = "Задачи"; +App::$strings["Ignore/Hide"] = "Игнорировать / cкрыть"; +App::$strings["Suggestions"] = "Рекомендации"; +App::$strings["See more..."] = "Просмотреть больше..."; +App::$strings["Received Messages"] = "Полученные сообщения"; +App::$strings["Sent Messages"] = "Отправленные сообщения"; +App::$strings["Conversations"] = "Беседы"; +App::$strings["No messages."] = "Сообщений нет."; +App::$strings["Delete conversation"] = "Удалить беседу"; +App::$strings["Select Channel"] = "Выбрать канал"; +App::$strings["Read-write"] = "Чтение-запись"; +App::$strings["Read-only"] = "Только чтение"; +App::$strings["My Calendars"] = "Мои календари"; +App::$strings["Shared Calendars"] = "Общие календари"; +App::$strings["Share this calendar"] = "Поделиться этим календарём"; +App::$strings["Calendar name and color"] = "Имя и цвет календаря"; +App::$strings["Create new calendar"] = "Создать новый календарь"; +App::$strings["Create"] = "Создать"; +App::$strings["Calendar Name"] = "Имя календаря"; +App::$strings["Calendar Tools"] = "Инструменты календаря"; +App::$strings["Import calendar"] = "Импортировать календарь"; +App::$strings["Select a calendar to import to"] = "Выбрать календарь для импорта в"; +App::$strings["Upload"] = "Загрузка"; +App::$strings["Addressbooks"] = "Адресные книги"; +App::$strings["Addressbook name"] = "Имя адресной книги"; +App::$strings["Create new addressbook"] = "Создать новую адресную книгу"; +App::$strings["Addressbook Name"] = "Имя адресной книги"; +App::$strings["Addressbook Tools"] = "Инструменты адресной книги"; +App::$strings["Import addressbook"] = "Импортировать адресную книгу"; +App::$strings["Select an addressbook to import to"] = "Выбрать адресную книгу для импорта в"; +App::$strings["__ctx:widget__ Activity"] = "Активность"; +App::$strings["HQ Control Panel"] = "Панель управления HQ"; +App::$strings["Create a new post"] = "Создать новую публикацию"; +App::$strings["Add new page"] = "Добавить новую страницу"; +App::$strings["Options"] = "Параметры"; +App::$strings["Wiki Pages"] = "Wiki страницы"; +App::$strings["Page name"] = "Название страницы"; +App::$strings["Private Mail Menu"] = "Меню личной переписки"; +App::$strings["Combined View"] = "Комбинированный вид"; +App::$strings["Inbox"] = "Входящие"; +App::$strings["Outbox"] = "Исходящие"; +App::$strings["New Message"] = "Новое сообщение"; +App::$strings["photo/image"] = "фотография / изображение"; +App::$strings["Archives"] = "Архивы"; +App::$strings["Events Tools"] = "Инструменты для событий"; +App::$strings["Export Calendar"] = "Экспортировать календарь"; +App::$strings["Import Calendar"] = "Импортировать календарь"; +App::$strings["Wiki List"] = "Список Wiki"; +App::$strings["Account settings"] = "Настройки аккаунта"; +App::$strings["Channel settings"] = "Выбор канала"; +App::$strings["Additional features"] = "Дополнительные функции"; +App::$strings["Addon settings"] = "Настройки расширений"; +App::$strings["Display settings"] = "Настройки отображения"; +App::$strings["Manage locations"] = "Управление местоположением"; +App::$strings["Export channel"] = "Экспортировать канал"; +App::$strings["OAuth1 apps"] = "Приложения OAuth1"; +App::$strings["OAuth2 apps"] = "Приложения OAuth2"; +App::$strings["Guest Access Tokens"] = "Токен гостевого доступа"; +App::$strings["Connection Default Permissions"] = "Разрешения по умолчанию для контакта"; +App::$strings["Premium Channel Settings"] = "Настройки премиум-канала"; +App::$strings["View Photo"] = "Посмотреть фотографию"; +App::$strings["Edit Album"] = "Редактировать Фотоальбом"; +App::$strings["Public Hubs"] = "Публичные хабы"; +App::$strings["Notes"] = "Заметки"; +App::$strings["Overview"] = "Обзор"; +App::$strings["App Collections"] = "Коллекции приложений"; +App::$strings["Available Apps"] = "Доступные приложения"; +App::$strings["Installed apps"] = "Установленные приложения"; +App::$strings["Bookmarked Chatrooms"] = "Закладки чатов"; +App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "У вас есть %1$.0f из %2$.0f разрешенных контактов."; +App::$strings["Add New Connection"] = "Добавить новый контакт"; +App::$strings["Enter channel address"] = "Введите адрес канала"; +App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Пример: ivan@example.com, http://example.com/ivan"; +App::$strings["Chat Members"] = "Участники чата"; +App::$strings["Suggested Chatrooms"] = "Рекомендуемые чаты"; +App::$strings["Rating Tools"] = "Инструменты оценки"; +App::$strings["Rate Me"] = "Оценить меня"; +App::$strings["View Ratings"] = "Просмотр оценок"; +App::$strings["Remove term"] = "Удалить термин"; +App::$strings["Me"] = "Я"; +App::$strings["Family"] = "Семья"; +App::$strings["Acquaintances"] = "Знакомые"; +App::$strings["All"] = "Все"; +App::$strings["Refresh"] = "Обновить"; +App::$strings["Personal Posts"] = "Личные публикации"; +App::$strings["Show posts that mention or involve me"] = "Показывать публикации где вы были упомянуты или привлечены"; +App::$strings["Starred Posts"] = "Отмеченные публикации"; +App::$strings["Show posts that I have starred"] = "Показывать публикации которые я отметил"; +App::$strings["Show posts related to the %s privacy group"] = "Показывать публикации относящиеся к группе безопасности %s"; +App::$strings["Show my privacy groups"] = "Показывать мои группы безопасности"; +App::$strings["Show posts to this forum"] = "Показывать публикации этого форума"; +App::$strings["Forums"] = "Форумы"; +App::$strings["Show forums"] = "Показывать форумы"; +App::$strings["Show posts that I have filed to %s"] = "Показывать публикации которые я добавил в %s"; +App::$strings["Show filed post categories"] = "Показывать категории добавленных публикаций"; +App::$strings["Panel search"] = "Панель поиска"; +App::$strings["Filter by name"] = "Отфильтровать по имени"; +App::$strings["Remove active filter"] = "Удалить активный фильтр"; +App::$strings["Activity Filters"] = "Фильтры активности"; +App::$strings["Click to show more"] = "Нажмите чтобы показать больше"; +App::$strings["New Network Activity"] = "Новая сетевая активность"; +App::$strings["New Network Activity Notifications"] = "Новые уведомления о сетевой активности"; +App::$strings["View your network activity"] = "Просмотреть вашу сетевую активность"; +App::$strings["Mark all notifications read"] = "Пометить уведомления как прочитанные"; +App::$strings["Show new posts only"] = "Показывать только новые публикации"; +App::$strings["New Home Activity"] = "Новая локальная активность"; +App::$strings["New Home Activity Notifications"] = "Новые уведомления локальной активности"; +App::$strings["View your home activity"] = "Просмотреть локальную активность"; +App::$strings["Mark all notifications seen"] = "Пометить уведомления как просмотренные"; +App::$strings["New Mails"] = "Новая переписка"; +App::$strings["New Mails Notifications"] = "Уведомления о новой переписке"; +App::$strings["View your private mails"] = "Просмотреть вашу личную переписку"; +App::$strings["Mark all messages seen"] = "Пометить сообщения как просмотренные"; +App::$strings["New Events"] = "Новые события"; +App::$strings["New Events Notifications"] = "Уведомления о новых событиях"; +App::$strings["View events"] = "Просмотреть события"; +App::$strings["Mark all events seen"] = "Пометить все события как просмотренные"; +App::$strings["New Connections"] = "Новые контакты"; +App::$strings["New Connections Notifications"] = "Уведомления о новых контактах"; +App::$strings["View all connections"] = "Просмотр всех контактов"; +App::$strings["New Files"] = "Новые файлы"; +App::$strings["New Files Notifications"] = "Уведомления о новых файлах"; +App::$strings["Notices"] = "Оповещения"; +App::$strings["View all notices"] = "Просмотреть все оповещения"; +App::$strings["Mark all notices seen"] = "Пометить все оповещения как просмотренные"; +App::$strings["New Registrations"] = "Новые регистрации"; +App::$strings["New Registrations Notifications"] = "Уведомления о новых регистрациях"; +App::$strings["Public Stream"] = "Публичный поток"; +App::$strings["Public Stream Notifications"] = "Уведомления публичного потока"; +App::$strings["View the public stream"] = "Просмотреть публичный поток"; +App::$strings["Sorry, you have got no notifications at the moment"] = "Извините, но сейчас у вас нет уведомлений"; +App::$strings["Profile Creation"] = "Создание профиля"; +App::$strings["Upload profile photo"] = "Загрузить фотографию профиля"; +App::$strings["Upload cover photo"] = "Загрузить фотографию обложки"; +App::$strings["Find and Connect with others"] = "Найти и вступить в контакт"; +App::$strings["View the directory"] = "Просмотреть каталог"; +App::$strings["View friend suggestions"] = "Просмотр рекомендуемых друзей"; +App::$strings["Manage your connections"] = "Управлять вашими контактами"; +App::$strings["Communicate"] = "Связаться"; +App::$strings["View your channel homepage"] = "Домашняя страница канала"; +App::$strings["View your network stream"] = "Просмотреть ваш сетевой поток"; +App::$strings["Documentation"] = "Документация"; +App::$strings["View public stream"] = "Просмотреть публичный поток"; +App::$strings["Social Networking"] = "Социальная Сеть"; +App::$strings["Social - Federation"] = "Социальная - Федерация"; +App::$strings["Social - Mostly Public"] = "Социальная - В основном общественный"; +App::$strings["Social - Restricted"] = "Социальная - Ограниченный"; +App::$strings["Social - Private"] = "Социальная - Частный"; +App::$strings["Community Forum"] = "Форум сообщества"; +App::$strings["Forum - Mostly Public"] = "Форум - В основном общественный"; +App::$strings["Forum - Restricted"] = "Форум - Ограниченный"; +App::$strings["Forum - Private"] = "Форум - Частный"; +App::$strings["Feed Republish"] = "Публиковать ленты новостей"; +App::$strings["Feed - Mostly Public"] = "Ленты новостей - В основном общественный"; +App::$strings["Feed - Restricted"] = "Ленты новостей - Ограниченный"; +App::$strings["Special Purpose"] = "Спец. назначение"; +App::$strings["Special - Celebrity/Soapbox"] = "Спец. назначение - Знаменитость/Soapbox"; +App::$strings["Special - Group Repository"] = "Спец. назначение - Групповой репозиторий"; +App::$strings["Custom/Expert Mode"] = "Экспертный режим"; +App::$strings["Can view my channel stream and posts"] = "Может просматривать мою ленту и сообщения"; +App::$strings["Can send me their channel stream and posts"] = "Может присылать мне свои потоки и сообщения"; +App::$strings["Can view my default channel profile"] = "Может просматривать мой стандартный профиль канала"; +App::$strings["Can view my connections"] = "Может просматривать мои контакты"; +App::$strings["Can view my file storage and photos"] = "Может просматривать мое хранилище файлов"; +App::$strings["Can upload/modify my file storage and photos"] = "Может загружать/изменять мои файлы и фотографии в хранилище"; +App::$strings["Can view my channel webpages"] = "Может просматривать мои веб-страницы"; +App::$strings["Can view my wiki pages"] = "Может просматривать мои вики-страницы"; +App::$strings["Can create/edit my channel webpages"] = "Может редактировать мои веб-страницы"; +App::$strings["Can write to my wiki pages"] = "Может редактировать мои вики-страницы"; +App::$strings["Can post on my channel (wall) page"] = "Может публиковать на моей странице канала (\"стена\")"; +App::$strings["Can comment on or like my posts"] = "Может прокомментировать или отмечать как понравившиеся мои посты"; App::$strings["Can send me private mail messages"] = "Может отправлять мне личные сообщения по эл. почте"; -App::$strings["Can post photos to my photo albums"] = "Может публиковать фотографии в мои фотоальбомы"; -App::$strings["Can forward to all my channel contacts via post @mentions"] = ""; -App::$strings["Advanced - useful for creating group forum channels"] = ""; -App::$strings["Can chat with me (when available)"] = "Можете общаться со мной в чате (при наличии)"; -App::$strings["Can write to my \"public\" file storage"] = "Может писать в моё \"публичное\" хранилище файлов"; -App::$strings["Can edit my \"public\" pages"] = "Может редактировать мои \"публичные\" страницы"; -App::$strings["Can source my \"public\" posts in derived channels"] = ""; -App::$strings["Somewhat advanced - very useful in open communities"] = ""; -App::$strings["Can administer my channel resources"] = "Может администрировать мои ресурсы канала"; -App::$strings["Extremely advanced. Leave this alone unless you know what you are doing"] = ""; -App::$strings["Set your current mood and tell your friends"] = ""; -App::$strings["Menu not found."] = "Меню не найдено."; -App::$strings["Menu element updated."] = "Меню обновлено."; -App::$strings["Unable to update menu element."] = ""; -App::$strings["Menu element added."] = "Элемент меню добавлен."; -App::$strings["Unable to add menu element."] = "Невозможно добавить элемент меню."; -App::$strings["Not found."] = "Не найдено."; -App::$strings["Manage Menu Elements"] = "Управление элементов меню"; -App::$strings["Edit menu"] = "Редактировать меню"; -App::$strings["Edit element"] = "Редактировать элемент"; -App::$strings["Drop element"] = "Удалить элемент"; -App::$strings["New element"] = "Новый элемент"; -App::$strings["Edit this menu container"] = ""; -App::$strings["Add menu element"] = "Добавить элемент меню"; -App::$strings["Delete this menu item"] = "Удалить элемент меню"; -App::$strings["Edit this menu item"] = "Редактировать элемент меню"; -App::$strings["New Menu Element"] = "Новый элемент меню"; -App::$strings["Menu Item Permissions"] = ""; -App::$strings["(click to open/close)"] = "(нажмите, чтобы открыть / закрыть)"; -App::$strings["Link text"] = "Текст ссылки"; -App::$strings["URL of link"] = "URL ссылки"; -App::$strings["Use Red magic-auth if available"] = ""; -App::$strings["Open link in new window"] = "Открыть ссылку в новом окне"; -App::$strings["Order in list"] = ""; -App::$strings["Higher numbers will sink to bottom of listing"] = ""; -App::$strings["Menu item not found."] = "Элемент меню не найден."; -App::$strings["Menu item deleted."] = "Элемент меню удален."; -App::$strings["Menu item could not be deleted."] = ""; -App::$strings["Edit Menu Element"] = "Редактировать элемент меню"; -App::$strings["Modify"] = "Изменить"; -App::$strings["sent you a private message"] = "отправил вам личное сообщение"; -App::$strings["added your channel"] = "добавил ваш канал"; -App::$strings["posted an event"] = ""; +App::$strings["Can like/dislike profiles and profile things"] = "Может комментировать или отмечать как нравится/ненравится мой профиль"; +App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Может отправлять всем подписчикам моего канала через использование ! в публикациях"; +App::$strings["Can chat with me"] = "Может общаться со мной в чате"; +App::$strings["Can source my public posts in derived channels"] = "Может использовать мои публичные сообщения в клонированных лентах сообщений"; +App::$strings["Can administer my channel"] = "Может администрировать мой канал"; +App::$strings["Remote authentication blocked. You are logged into this site locally. Please logout and retry."] = "Удалённая аутентификация заблокирована. Вы вошли на этот сайт локально. Пожалуйста, выйдите и попробуйте ещё раз."; +App::$strings["App installed."] = "Приложение установлено."; +App::$strings["Malformed app."] = "Неработающее приложение."; +App::$strings["Embed code"] = "Встроить код"; +App::$strings["Edit App"] = "Редактировать приложение"; +App::$strings["Create App"] = "Создать приложение"; +App::$strings["Name of app"] = "Наименование приложения"; +App::$strings["Location (URL) of app"] = "Местоположение (URL) приложения"; +App::$strings["Photo icon URL"] = "URL пиктограммы"; +App::$strings["80 x 80 pixels - optional"] = "80 x 80 пикселей - необязательно"; +App::$strings["Categories (optional, comma separated list)"] = "Категории (необязательно, список через запятую)"; +App::$strings["Version ID"] = "ID версии"; +App::$strings["Price of app"] = "Цена приложения"; +App::$strings["Location (URL) to purchase app"] = "Ссылка (URL) для покупки приложения"; App::$strings["network"] = "сеть"; -App::$strings["Name is required"] = "Необходимо имя"; -App::$strings["Key and Secret are required"] = ""; -App::$strings["Passwords do not match. Password unchanged."] = "Пароли не совпадают. Пароль не изменён."; -App::$strings["Empty passwords are not allowed. Password unchanged."] = "Пустые пароли не допускаются. Пароль не изменён."; -App::$strings["Password changed."] = "Пароль изменен."; -App::$strings["Password update failed. Please try again."] = "Изменение пароля закончилось неуспешно. Пожалуйста, попробуйте еще раз."; -App::$strings["Not valid email."] = "Не действительный адрес электронной почты."; -App::$strings["Protected email address. Cannot change to that email."] = "Защищенный адрес электронной почты. Нельзя изменить."; -App::$strings["System failure storing new email. Please try again."] = ""; -App::$strings["Settings updated."] = "Настройки обновленны."; -App::$strings["Add application"] = "Добавить приложения"; -App::$strings["Name"] = "Имя"; -App::$strings["Name of application"] = "Название приложения"; -App::$strings["Consumer Key"] = "Ключ клиента"; -App::$strings["Automatically generated - change if desired. Max length 20"] = ""; -App::$strings["Consumer Secret"] = "Секрет клиента"; -App::$strings["Redirect"] = "Перенаправление"; -App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = ""; -App::$strings["Icon url"] = "URL-адрес значка"; -App::$strings["Optional"] = "Необязательно"; -App::$strings["You can't edit this application."] = "Вы не можете редактировать это приложение."; -App::$strings["Connected Apps"] = "Подключенные приложения"; -App::$strings["Client key starts with"] = ""; -App::$strings["No name"] = "Без названия"; -App::$strings["Remove authorization"] = "Удалить разрешение"; -App::$strings["No feature settings configured"] = "Параметры функций не настроены"; -App::$strings["Feature Settings"] = "Настройки функции"; -App::$strings["Account Settings"] = "Настройки аккаунта"; -App::$strings["Password Settings"] = "Настройки пароля"; -App::$strings["New Password:"] = "Новый пароль:"; -App::$strings["Confirm:"] = "Подтверждение:"; -App::$strings["Leave password fields blank unless changing"] = "Оставьте поля пустыми, если не меняется"; -App::$strings["Email Address:"] = "Адрес электронной почты:"; -App::$strings["Remove Account"] = "Удалить аккаунт"; -App::$strings["Warning: This action is permanent and cannot be reversed."] = ""; -App::$strings["Off"] = "Выкл."; -App::$strings["On"] = "Вкл."; -App::$strings["Additional Features"] = "Дополнительные функции"; -App::$strings["Connector Settings"] = "Настройки соединителя"; -App::$strings["No special theme for mobile devices"] = "Нет специальной темы для мобильных устройств"; -App::$strings["%s - (Experimental)"] = "%s - (экспериментальный)"; -App::$strings["Display Settings"] = "Настройки отображения"; -App::$strings["Display Theme:"] = "Тема отображения:"; -App::$strings["Mobile Theme:"] = "Мобильная тема отображения:"; -App::$strings["Update browser every xx seconds"] = "Обновление браузера каждые ХХ секунд"; -App::$strings["Minimum of 10 seconds, no maximum"] = "Минимум 10 секунд, без максимума"; -App::$strings["Maximum number of conversations to load at any time:"] = ""; -App::$strings["Maximum of 100 items"] = "Максимум 100 элементов"; -App::$strings["Don't show emoticons"] = "Не показывать emoticons"; -App::$strings["System Page Layout Editor - (advanced)"] = ""; -App::$strings["Nobody except yourself"] = "Никто, кроме вас"; -App::$strings["Only those you specifically allow"] = "Только комы вы разрешили"; -App::$strings["Approved connections"] = "Утвержденные контакты"; -App::$strings["Any connections"] = "Все контакты"; -App::$strings["Anybody on this website"] = "Любой на этом веб-сайте"; -App::$strings["Anybody in this network"] = "Любой в этой сети"; -App::$strings["Anybody authenticated"] = ""; -App::$strings["Anybody on the internet"] = "Любой в интернете"; -App::$strings["Publish your default profile in the network directory"] = "Публикация вашего профиля по умолчанию в каталоге сети"; -App::$strings["No"] = "Нет"; -App::$strings["Yes"] = "Да"; -App::$strings["Allow us to suggest you as a potential friend to new members?"] = ""; -App::$strings["or"] = "или"; -App::$strings["Your channel address is"] = "Адрес канала:"; -App::$strings["Channel Settings"] = "Настройки канала"; -App::$strings["Basic Settings"] = "Основные настройки"; -App::$strings["Your Timezone:"] = "Часовой пояс:"; -App::$strings["Default Post Location:"] = "Откуда по умолчанию:"; -App::$strings["Geographical location to display on your posts"] = ""; -App::$strings["Use Browser Location:"] = "Использовать указание браузерa:"; -App::$strings["Adult Content"] = "Содержимое для взрослых"; -App::$strings["This channel frequently or regularly publishes adult content. (Please tag any adult material and/or nudity with #NSFW)"] = ""; -App::$strings["Security and Privacy Settings"] = "Параметры безопасности и конфиденциальности"; -App::$strings["Hide my online presence"] = "Скрыть мое присутствие"; -App::$strings["Prevents displaying in your profile that you are online"] = "Предотвращает показ в вашем профиле, что вы онлайн"; -App::$strings["Simple Privacy Settings:"] = "Быстрые настройки:"; -App::$strings["Very Public - extremely permissive (should be used with caution)"] = ""; -App::$strings["Typical - default public, privacy when desired (similar to social network permissions but with improved privacy)"] = ""; -App::$strings["Private - default private, never open or public"] = ""; -App::$strings["Blocked - default blocked to/from everybody"] = ""; -App::$strings["Allow others to tag your posts"] = "Разрешить другим помечать сообщения"; -App::$strings["Often used by the community to retro-actively flag inappropriate content"] = ""; -App::$strings["Advanced Privacy Settings"] = "Дополнительные настройки"; -App::$strings["Expire other channel content after this many days"] = ""; -App::$strings["0 or blank prevents expiration"] = ""; -App::$strings["Maximum Friend Requests/Day:"] = ""; -App::$strings["May reduce spam activity"] = "Может уменьшить активность спам"; -App::$strings["Default Post Permissions"] = "Настройки по умолчанию"; -App::$strings["Maximum private messages per day from unknown people:"] = "Максимальное количество личных сообщений от незнакомых людей:"; -App::$strings["Useful to reduce spamming"] = "Полезно для уменьшения активности спам"; -App::$strings["Notification Settings"] = "Настройки уведомлений"; -App::$strings["By default post a status message when:"] = ""; -App::$strings["accepting a friend request"] = ""; -App::$strings["joining a forum/community"] = ""; -App::$strings["making an interesting profile change"] = ""; -App::$strings["Send a notification email when:"] = "Отправить уведомление по электронной почте, если:"; -App::$strings["You receive a connection request"] = ""; -App::$strings["Your connections are confirmed"] = ""; -App::$strings["Someone writes on your profile wall"] = ""; -App::$strings["Someone writes a followup comment"] = ""; -App::$strings["You receive a private message"] = "Вы получили личное сообщение"; -App::$strings["You receive a friend suggestion"] = "Вы получили предложение дружить"; -App::$strings["You are tagged in a post"] = ""; -App::$strings["You are poked/prodded/etc. in a post"] = ""; -App::$strings["Advanced Account/Page Type Settings"] = ""; -App::$strings["Change the behaviour of this account for special situations"] = ""; -App::$strings["Please enable expert mode (in Settings > Additional features) to adjust!"] = ""; -App::$strings["Miscellaneous Settings"] = "Дополнительные настройки"; -App::$strings["Personal menu to display in your channel pages"] = ""; -App::$strings["Poke/Prod"] = ""; -App::$strings["poke, prod or do other things to somebody"] = ""; -App::$strings["Recipient"] = "Получатель"; -App::$strings["Choose what you wish to do to recipient"] = ""; -App::$strings["Make this post private"] = "Сделать это сообщение личным"; -App::$strings["Authorize application connection"] = ""; -App::$strings["Return to your app and insert this Securty Code:"] = ""; -App::$strings["Please login to continue."] = "Пожалуйста, войдите, чтобы продолжить."; -App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = ""; -App::$strings["Remote authentication blocked. You are logged into this site locally. Please logout and retry."] = ""; -App::$strings["Welcome %s. Remote authentication successful."] = "Добро пожаловать %s. Удаленная аутентификация успешно завершена."; -App::$strings["Item not available."] = "Элемент недоступен."; -App::$strings["Fetching URL returns error: %1\$s"] = ""; -App::$strings["Invalid item."] = "Недействительный элемент."; -App::$strings["Channel not found."] = "Канал не найден."; -App::$strings["Page not found."] = "Страница не найдена."; -App::$strings["Image uploaded but image cropping failed."] = ""; -App::$strings["Image resize failed."] = "Изменение размера изображения не удалось."; -App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = ""; -App::$strings["Image exceeds size limit of %d"] = ""; -App::$strings["Unable to process image."] = "Невозможно обработать изображение."; -App::$strings["Photo not available."] = "Фотография не доступна."; -App::$strings["Upload File:"] = "Загрузить файл:"; -App::$strings["Select a profile:"] = "Выберите профиль:"; -App::$strings["Upload Profile Photo"] = "Загрузить фотографию профиля"; -App::$strings["skip this step"] = "пропустить этот шаг"; -App::$strings["select a photo from your photo albums"] = ""; -App::$strings["Crop Image"] = "Обрезать изображение"; -App::$strings["Please adjust the image cropping for optimum viewing."] = ""; -App::$strings["Done Editing"] = "Закончить редактирование"; -App::$strings["Image uploaded successfully."] = "Загрузка изображениея прошла успешно."; -App::$strings["Image upload failed."] = "Загрузка изображениея прошла безуспешно."; -App::$strings["Image size reduction [%s] failed."] = ""; -App::$strings["Block Name"] = "Название блока"; -App::$strings["Profile not found."] = "Профиль не найден."; -App::$strings["Profile deleted."] = "Профиль удален."; -App::$strings["Profile-"] = "Профиль-"; -App::$strings["New profile created."] = "Новый профиль создан."; -App::$strings["Profile unavailable to clone."] = "Профиль недоступен для клонирования."; -App::$strings["Profile Name is required."] = "Имя профиля требуется."; -App::$strings["Marital Status"] = "Семейное положение"; -App::$strings["Romantic Partner"] = "Романтический партнер"; -App::$strings["Likes"] = "нравится"; -App::$strings["Dislikes"] = "не-нравится"; -App::$strings["Work/Employment"] = "Работа / Занятость"; -App::$strings["Religion"] = "Религия"; -App::$strings["Political Views"] = "Политические взгляды"; -App::$strings["Gender"] = "Пол"; -App::$strings["Sexual Preference"] = "Сексуальная ориентация"; -App::$strings["Homepage"] = "Домашняя страница"; -App::$strings["Interests"] = "Интересы"; +App::$strings["INVALID EVENT DISMISSED!"] = "НЕДЕЙСТВИТЕЛЬНОЕ СОБЫТИЕ ОТКЛОНЕНО!"; +App::$strings["Summary: "] = "Резюме:"; +App::$strings["Date: "] = "Дата:"; +App::$strings["Reason: "] = "Причина:"; +App::$strings["INVALID CARD DISMISSED!"] = "НЕДЕЙСТВИТЕЛЬНАЯ КАРТОЧКА ОТКЛОНЕНА!"; +App::$strings["Name: "] = "Имя:"; +App::$strings["Event title"] = "Наименование события"; +App::$strings["Start date and time"] = "Дата и время начала"; +App::$strings["Example: YYYY-MM-DD HH:mm"] = "Пример: YYYY-MM-DD HH:mm"; +App::$strings["End date and time"] = "Дата и время окончания"; +App::$strings["Previous"] = "Предыдущая"; +App::$strings["Next"] = "Следующая"; +App::$strings["Today"] = "Сегодня"; +App::$strings["Month"] = "Месяц"; +App::$strings["Week"] = "Неделя"; +App::$strings["Day"] = "День"; +App::$strings["List month"] = "Просмотреть месяц"; +App::$strings["List week"] = "Просмотреть неделю"; +App::$strings["List day"] = "Просмотреть день"; +App::$strings["More"] = "Больше"; +App::$strings["Less"] = "Меньше"; +App::$strings["Select calendar"] = "Выбрать календарь"; +App::$strings["Delete all"] = "Удалить всё"; +App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "Простите, но редактирование повторяющихся событий пока не реализовано."; +App::$strings["Organisation"] = "Организация"; +App::$strings["Title"] = "Наименование"; +App::$strings["Phone"] = "Телефон"; +App::$strings["Instant messenger"] = "Мессенджер"; +App::$strings["Website"] = "Веб-сайт"; App::$strings["Address"] = "Адрес"; -App::$strings["Location"] = "Место"; -App::$strings["Profile updated."] = "Профиль обновлен."; -App::$strings["Hide your contact/friend list from viewers of this profile?"] = "Скрывать от просмотра ваш список контактов/друзей в этом профиле?"; -App::$strings["Edit Profile Details"] = "Редактирование профиля"; -App::$strings["View this profile"] = "Посмотреть этот профиль"; -App::$strings["Change Profile Photo"] = "Изменить фотографию профиля"; -App::$strings["Create a new profile using these settings"] = "Создайте новый профиль со следующими настройками"; -App::$strings["Clone this profile"] = "Клонировать этот профиль"; -App::$strings["Delete this profile"] = "Удалить этот профиль"; -App::$strings["Profile Name:"] = "Имя профиля:"; -App::$strings["Your Full Name:"] = "Ваше полное имя:"; -App::$strings["Title/Description:"] = "Название / Описание:"; -App::$strings["Your Gender:"] = "Ваш пол:"; -App::$strings["Birthday (%s):"] = "Ваш День Рождения (%s):"; -App::$strings["Street Address:"] = "Улица:"; -App::$strings["Locality/City:"] = "Населенный пункт / город:"; -App::$strings["Postal/Zip Code:"] = "Почтовый индекс:"; -App::$strings["Country:"] = "Страна:"; -App::$strings["Region/State:"] = "Регион / Область:"; -App::$strings[" Marital Status:"] = ""; -App::$strings["Who: (if applicable)"] = "Кто: (если это применимо)"; -App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Примеры: cathy123, Cathy Williams, cathy@example.com"; -App::$strings["Since [date]:"] = "С тех пор [date]:"; -App::$strings["Homepage URL:"] = "URL-адрес домашней страницы:"; -App::$strings["Religious Views:"] = "Религиозные взгляды:"; -App::$strings["Keywords:"] = "Ключевые слова:"; -App::$strings["Example: fishing photography software"] = "Пример: fishing photography software"; -App::$strings["Used in directory listings"] = ""; -App::$strings["Tell us about yourself..."] = "Расскажите нам о себе ..."; -App::$strings["Hobbies/Interests"] = "Хобби / интересы"; -App::$strings["Contact information and Social Networks"] = "Информация и социальные сети контакта"; -App::$strings["My other channels"] = "Мои другие контакты"; -App::$strings["Musical interests"] = "Музыкальные интересы"; -App::$strings["Books, literature"] = "Книги, литература"; -App::$strings["Television"] = "Телевидение"; -App::$strings["Film/dance/culture/entertainment"] = "Кино / танцы / культура / развлечения"; -App::$strings["Love/romance"] = "Любовь / Романс"; -App::$strings["Work/employment"] = "Работа / Занятость"; -App::$strings["School/education"] = "Школа / образование"; -App::$strings["This is your public profile.
It may be visible to anybody using the internet."] = ""; -App::$strings["Age: "] = "Возраст:"; -App::$strings["Edit/Manage Profiles"] = "Редактирование / Управление профилей"; -App::$strings["Add profile things"] = ""; -App::$strings["Include desirable objects in your profile"] = ""; -App::$strings["Bookmark added"] = "Закладка добавлена"; -App::$strings["My Bookmarks"] = "Мои закладки"; -App::$strings["My Connections Bookmarks"] = "Закладки моих контактов"; -App::$strings["Invalid profile identifier."] = ""; -App::$strings["Profile Visibility Editor"] = "Редактор видимости профиля"; -App::$strings["Click on a contact to add or remove."] = "Нажмите на канал, чтобы добавить или удалить."; -App::$strings["Visible To"] = "Видно"; -App::$strings["All Connections"] = "Все контакты"; -App::$strings["Public Sites"] = "Публичные сайты"; -App::$strings["The listed sites allow public registration into the Hubzilla. All sites in the matrix are interlinked so membership on any of them conveys membership in the matrix as a whole. Some sites may require subscription or provide tiered service plans. The provider links may provide additional details."] = ""; -App::$strings["Site URL"] = "URL веб-сайта"; +App::$strings["Note"] = "Заметка"; +App::$strings["Add Field"] = "Добавить поле"; +App::$strings["P.O. Box"] = "абонентский ящик"; +App::$strings["Additional"] = "Дополнительно"; +App::$strings["Street"] = "Улица"; +App::$strings["Locality"] = "Населённый пункт"; +App::$strings["Region"] = "Регион"; +App::$strings["ZIP Code"] = "Индекс"; +App::$strings["Country"] = "Страна"; +App::$strings["Default Calendar"] = "Календарь по умолчанию"; +App::$strings["Default Addressbook"] = "Адресная книга по умолчанию"; +App::$strings["This page is available only to site members"] = "Эта страница доступна только для подписчиков сайта"; +App::$strings["Welcome"] = "Добро пожаловать"; +App::$strings["What would you like to do?"] = "Что бы вы хотели сделать?"; +App::$strings["Please bookmark this page if you would like to return to it in the future"] = "Пожалуйста, запомните эту страницу если вы хотите вернуться на неё в будущем"; +App::$strings["Upload a profile photo"] = "Загрузить фотографию профиля"; +App::$strings["Upload a cover photo"] = "Загрузить фотографию обложки"; +App::$strings["Edit your default profile"] = "Редактировать ваш профиль по умолчанию"; +App::$strings["View the channel directory"] = "Просмотр каталога каналов"; +App::$strings["View/edit your channel settings"] = "Просмотреть / редактировать настройки вашего канала"; +App::$strings["View the site or project documentation"] = "Просмотр документации сайта / проекта"; +App::$strings["Visit your channel homepage"] = "Посетить страницу вашего канала"; +App::$strings["View your connections and/or add somebody whose address you already know"] = "Просмотреть ваши контакты и / или добавить кого-то чей адрес в уже знаете"; +App::$strings["View your personal stream (this may be empty until you add some connections)"] = "Ваш персональный поток (может быть пуст пока вы не добавите контакты)"; +App::$strings["View the public stream. Warning: this content is not moderated"] = "Просмотр публичного потока. Предупреждение: этот контент не модерируется"; +App::$strings["Page owner information could not be retrieved."] = "Информация о владельце страницы не может быть получена."; +App::$strings["Album not found."] = "Альбом не найден."; +App::$strings["Delete Album"] = "Удалить альбом"; +App::$strings["Delete Photo"] = "Удалить фотографию"; +App::$strings["Public access denied."] = "Общественный доступ запрещен."; +App::$strings["No photos selected"] = "Никакие фотографии не выбраны"; +App::$strings["Access to this item is restricted."] = "Доступ к этому элементу ограничен."; +App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото."; +App::$strings["%1$.2f MB photo storage used."] = "Вы использовали %1$.2f мегабайт для хранения фото."; +App::$strings["Upload Photos"] = "Загрузить фотографии"; +App::$strings["Enter an album name"] = "Введите название альбома"; +App::$strings["or select an existing album (doubleclick)"] = "или выберите существующий альбом (двойной щелчок)"; +App::$strings["Create a status post for this upload"] = "Сделать публикацию о статусе для этой загрузки"; +App::$strings["Description (optional)"] = "Описание (необязательно)"; +App::$strings["Show Newest First"] = "Показать новые первыми"; +App::$strings["Show Oldest First"] = "Показать старые первыми"; +App::$strings["Add Photos"] = "Добавить фотографии"; +App::$strings["Permission denied. Access to this item may be restricted."] = "Доступ запрещен. Доступ к этому элементу может быть ограничен."; +App::$strings["Photo not available"] = "Фотография не доступна"; +App::$strings["Use as profile photo"] = "Использовать в качестве фотографии профиля"; +App::$strings["Use as cover photo"] = "Использовать в качестве фотографии обложки"; +App::$strings["Private Photo"] = "Личная фотография"; +App::$strings["View Full Size"] = "Посмотреть в полный размер"; +App::$strings["Edit photo"] = "Редактировать фотографию"; +App::$strings["Rotate CW (right)"] = "Повернуть CW (направо)"; +App::$strings["Rotate CCW (left)"] = "Повернуть CCW (налево)"; +App::$strings["Move photo to album"] = "Переместить фотографию в альбом"; +App::$strings["Enter a new album name"] = "Введите новое название альбома"; +App::$strings["or select an existing one (doubleclick)"] = "или выбрать существующую (двойной щелчок)"; +App::$strings["Add a Tag"] = "Добавить тег"; +App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Пример: @bob, @Barbara_Jensen, @jim@example.com"; +App::$strings["Flag as adult in album view"] = "Пометить как альбом \"для взрослых\""; +App::$strings["Photo Tools"] = "Фото-Инструменты"; +App::$strings["In This Photo:"] = "На этой фотографии:"; +App::$strings["Map"] = "Карта"; +App::$strings["The listed hubs allow public registration for the \$Projectname network. All hubs in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some hubs may require subscription or provide tiered service plans. The hub itself may provide additional details."] = "Указанные хабы разрешают публичную регистрацию для сети \$Projectname. Все хабы в сети взаимосвязаны, поэтому членство в любом из них передает членство во всю сеть. Некоторым хабам может потребоваться подписка или предоставление многоуровневых планов обслуживания. Сам хаб может предоставить дополнительные сведения."; +App::$strings["Hub URL"] = "URL сервера"; App::$strings["Access Type"] = "Тип доступа"; -App::$strings["Registration Policy"] = "Правила регистрации"; -App::$strings["You must be logged in to see this page."] = "Вы должны авторизоваться, чтобы увидеть эту страницу."; -App::$strings["Insufficient permissions. Request redirected to profile page."] = ""; -App::$strings["Select a bookmark folder"] = ""; -App::$strings["Save Bookmark"] = "Сохранить закладки"; -App::$strings["URL of bookmark"] = ""; -App::$strings["Description"] = "Описание"; -App::$strings["Or enter new bookmark folder name"] = ""; -App::$strings["Room not found"] = ""; -App::$strings["Leave Room"] = ""; -App::$strings["Delete This Room"] = ""; -App::$strings["I am away right now"] = ""; -App::$strings["I am online"] = "Я в сети"; -App::$strings["Bookmark this room"] = ""; -App::$strings["New Chatroom"] = "Новый чат"; -App::$strings["Chatroom Name"] = "Название чата"; -App::$strings["%1\$s's Chatrooms"] = "Чаты пользователя %1\$s"; -App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = ""; -App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = ""; -App::$strings["Passwords do not match."] = "Пароли не совпадают."; -App::$strings["Registration successful. Please check your email for validation instructions."] = ""; -App::$strings["Your registration is pending approval by the site owner."] = ""; -App::$strings["Your registration can not be processed."] = "Ваша регистрация не может быть обработана."; -App::$strings["Registration on this site/hub is by approval only."] = ""; -App::$strings["Register at another affiliated site/hub"] = ""; -App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = ""; -App::$strings["Terms of Service"] = "Условия предоставления услуг"; -App::$strings["I accept the %s for this website"] = ""; -App::$strings["I am over 13 years of age and accept the %s for this website"] = ""; -App::$strings["Registration"] = "Регистрация"; -App::$strings["Membership on this site is by invitation only."] = ""; -App::$strings["Please enter your invitation code"] = "Пожалуйста, введите Ваш код приглашения"; -App::$strings["Your email address"] = "Ваш адрес электронной почты"; -App::$strings["Choose a password"] = "Выберите пароль"; -App::$strings["Please re-enter your password"] = "Пожалуйста, введите пароль еще раз"; -App::$strings["Away"] = "Нет на месте"; -App::$strings["Online"] = "Сейчас в сети"; -App::$strings["Please login."] = "Войдите пожалуйста."; -App::$strings["Hubzilla - Guests: Username: {your email address}, Password: +++"] = ""; -App::$strings["Remove This Channel"] = "Удалить этот канал"; -App::$strings["This will completely remove this channel from the network. Once this has been done it is not recoverable."] = ""; -App::$strings["Please enter your password for verification:"] = "Пожалуйста, введите пароль для проверки:"; -App::$strings["Remove this channel and all its clones from the network"] = "Удалить этот канал и все его клоны из сети"; -App::$strings["By default only the instance of the channel located on this hub will be removed from the network"] = ""; -App::$strings["Remove Channel"] = "Удалить канал"; -App::$strings["No channel."] = "Не канал."; -App::$strings["Common connections"] = "Общие контакты"; -App::$strings["No connections in common."] = "Общих контактов нет."; -App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = ""; -App::$strings["The error message was:"] = "Сообщение об ошибке было:"; -App::$strings["Authentication failed."] = "Ошибка проверки подлинности."; -App::$strings["Remote Authentication"] = "Удаленная аутентификация"; -App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Введите адрес вашего канала (например: channel@example.com)"; -App::$strings["Authenticate"] = "Проверка подлинности"; +App::$strings["Registration Policy"] = "Политика регистрации"; +App::$strings["Stats"] = "Статистика"; +App::$strings["Software"] = "Программное обеспечение"; +App::$strings["Rate"] = "Оценка"; +App::$strings["View"] = "Просмотр"; App::$strings["Continue"] = "Продолжить"; App::$strings["Premium Channel Setup"] = "Установка премиум канала"; -App::$strings["Enable premium channel connection restrictions"] = ""; -App::$strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = ""; -App::$strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = ""; -App::$strings["Potential connections will then see the following text before proceeding:"] = ""; -App::$strings["By continuing, I certify that I have complied with any instructions provided on this page."] = ""; -App::$strings["(No specific instructions have been provided by the channel owner.)"] = ""; +App::$strings["Enable premium channel connection restrictions"] = "Включить ограничения для премиум канала"; +App::$strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = "Пожалуйста введите ваши ограничения или условия, такие, как оплата PayPal, правила использования и т.п."; +App::$strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = "Этот канал до подключения может требовать дополнительных шагов или подтверждений следующих условий:"; +App::$strings["Potential connections will then see the following text before proceeding:"] = "Потенциальные соединения будут видеть следующий предварительный текст:"; +App::$strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Продолжая, я подтверждаю что я выполнил все условия представленные на данной странице."; +App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(Владельцем канала не было представлено никаких специальных инструкций.)"; App::$strings["Restricted or Premium Channel"] = "Ограниченный или Премиум канал"; -App::$strings["No such group"] = "Нет такой группы"; -App::$strings["Search Results For:"] = "Результаты поиска для:"; -App::$strings["Collection is empty"] = "Коллекция пуста"; -App::$strings["Collection: "] = "Коллекции: "; -App::$strings["Connection: "] = "Контакты: "; -App::$strings["Invalid connection."] = ""; -App::$strings["Could not access contact record."] = ""; -App::$strings["Could not locate selected profile."] = ""; -App::$strings["Connection updated."] = "Связи обновленны."; -App::$strings["Failed to update connection record."] = ""; -App::$strings["Blocked"] = "Заблокированные"; -App::$strings["Ignored"] = "Игнорируемые"; -App::$strings["Hidden"] = "Скрытые"; -App::$strings["Archived"] = "Зархивированные"; -App::$strings["All"] = "Все"; -App::$strings["Unconnected"] = "Неприсоединенные"; -App::$strings["Suggest new connections"] = "Предлагать новые контакты"; -App::$strings["New Connections"] = "Новые контакты"; -App::$strings["Show pending (new) connections"] = "Просмотр (новых) ждущих контактов"; -App::$strings["Show all connections"] = "Просмотр всех контактов"; -App::$strings["Unblocked"] = "Разрешенные"; -App::$strings["Only show unblocked connections"] = "Показать только разрешенные контакты"; +App::$strings["Poke somebody"] = "Ткнуть кого-нибудь"; +App::$strings["Poke/Prod"] = "Толкнуть / подтолкнуть"; +App::$strings["Poke, prod or do other things to somebody"] = "Толкнуть, подтолкнуть или сделать что-то ещё с кем-то"; +App::$strings["Recipient"] = "Получатель"; +App::$strings["Choose what you wish to do to recipient"] = "Выбрать что вы хотите сделать с получателем"; +App::$strings["Make this post private"] = "Сделать эту публикацию приватной"; +App::$strings["Unable to find your hub."] = "Невозможно найти ваш сервер"; +App::$strings["Post successful."] = "Успешно опубликовано."; +App::$strings["%s element installed"] = "%s элемент установлен"; +App::$strings["%s element installation failed"] = "%sустановка элемента неудачна."; +App::$strings["sent you a private message"] = "отправил вам личное сообщение"; +App::$strings["added your channel"] = "добавил ваш канал"; +App::$strings["requires approval"] = "Требуется подтверждение"; +App::$strings["g A l F d"] = "g A l F d"; +App::$strings["[today]"] = "[сегодня]"; +App::$strings["posted an event"] = "событие опубликовано"; +App::$strings["shared a file with you"] = "с вами поделились файлом"; +App::$strings["Private forum"] = "Частный форум"; +App::$strings["Public forum"] = "Публичный форум"; +App::$strings["Some blurb about what to do when you're new here"] = "Некоторые предложения о том, что делать, если вы здесь новичок "; +App::$strings["Active"] = "Активен"; +App::$strings["Blocked"] = "Заблокирован"; +App::$strings["Ignored"] = "Игнорируется"; +App::$strings["Hidden"] = "Скрыт"; +App::$strings["Archived/Unreachable"] = "Заархивировано / недоступно"; +App::$strings["Active Connections"] = "Активные контакты"; +App::$strings["Show active connections"] = "Показать активные контакты"; +App::$strings["Show pending (new) connections"] = "Просмотр (новых) ожидающих контактов"; App::$strings["Only show blocked connections"] = "Показать только заблокированные контакты"; App::$strings["Only show ignored connections"] = "Показать только проигнорированные контакты"; -App::$strings["Only show archived connections"] = "Показать только архивированные контакты"; +App::$strings["Only show archived/unreachable connections"] = "Показать только заархивированные / недоступные контакты"; App::$strings["Only show hidden connections"] = "Показать только скрытые контакты"; -App::$strings["Only show one-way connections"] = ""; -App::$strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]"; -App::$strings["Edit contact"] = "Редактировать контакт"; -App::$strings["Search your connections"] = "Поиск ваших связей"; -App::$strings["Finding: "] = "Поиск:"; +App::$strings["All Connections"] = "Все контакты"; +App::$strings["Show all connections"] = "Просмотр всех контактов"; +App::$strings["Pending approval"] = "Ожидающие подтверждения"; +App::$strings["Archived"] = "Зархивирован"; +App::$strings["Not connected at this location"] = "Не подключено в этом месте"; +App::$strings["%1\$s [%2\$s]"] = ""; +App::$strings["Edit connection"] = "Редактировать контакт"; +App::$strings["Delete connection"] = "Удалить контакт"; +App::$strings["Channel address"] = "Адрес канала"; +App::$strings["Network"] = "Сеть"; +App::$strings["Call"] = "Вызов"; +App::$strings["Status"] = "Статус"; +App::$strings["Connected"] = "Подключено"; +App::$strings["Approve connection"] = "Утвердить контакт"; +App::$strings["Ignore connection"] = "Игнорировать контакт"; +App::$strings["Ignore"] = "Игнорировать"; +App::$strings["Recent activity"] = "Последние действия"; +App::$strings["Search your connections"] = "Поиск ваших контактов"; +App::$strings["Connections search"] = "Поиск контаков"; +App::$strings["Unable to locate original post."] = "Не удалось найти оригинальную публикацию."; +App::$strings["Empty post discarded."] = "Пустая публикация отклонена."; +App::$strings["Duplicate post suppressed."] = "Подавлена дублирующаяся публикация."; +App::$strings["System error. Post not saved."] = "Системная ошибка. Публикация не сохранена."; +App::$strings["Your comment is awaiting approval."] = "Ваш комментарий ожидает одобрения."; +App::$strings["Unable to obtain post information from database."] = "Невозможно получить информацию о публикации из базы данных"; +App::$strings["You have reached your limit of %1$.0f top level posts."] = "Вы достигли вашего ограничения в %1$.0f публикаций высокого уровня."; +App::$strings["You have reached your limit of %1$.0f webpages."] = "Вы достигли вашего ограничения в %1$.0f страниц."; +App::$strings["Calendar entries imported."] = "События календаря импортированы."; +App::$strings["No calendar entries found."] = "Не найдено событий в календаре."; +App::$strings["Event can not end before it has started."] = "Событие не может завершиться до его начала."; +App::$strings["Unable to generate preview."] = "Невозможно создать предварительный просмотр."; +App::$strings["Event title and start time are required."] = "Требуются наименование события и время начала."; +App::$strings["Event not found."] = "Событие не найдено."; +App::$strings["Edit event title"] = "Редактировать наименование события"; +App::$strings["Categories (comma-separated list)"] = "Категории (список через запятую)"; +App::$strings["Edit Category"] = "Редактировать категорию"; +App::$strings["Category"] = "Категория"; +App::$strings["Edit start date and time"] = "Редактировать дату и время начала"; +App::$strings["Finish date and time are not known or not relevant"] = "Дата и время окончания неизвестны или неприменимы"; +App::$strings["Edit finish date and time"] = "Редактировать дату и время окончания"; +App::$strings["Finish date and time"] = "Дата и время окончания"; +App::$strings["Adjust for viewer timezone"] = "Настройте просмотр часовых поясов"; +App::$strings["Important for events that happen in a particular place. Not practical for global holidays."] = "Важно для событий, которые происходят в определённом месте. Не подходит для всеобщих праздников."; +App::$strings["Edit Description"] = "Редактировать описание"; +App::$strings["Edit Location"] = "Редактировать местоположение"; +App::$strings["Timezone:"] = "Часовой пояс:"; +App::$strings["Advanced Options"] = "Дополнительные настройки"; +App::$strings["l, F j"] = ""; +App::$strings["Edit event"] = "Редактировать событие"; +App::$strings["Delete event"] = "Удалить событие"; +App::$strings["calendar"] = "календарь"; +App::$strings["Edit Event"] = "Редактировать событие"; +App::$strings["Create Event"] = "Создать событие"; +App::$strings["Event removed"] = "Событие удалено"; +App::$strings["Failed to remove event"] = "Не удалось удалить событие"; +App::$strings["Layout Name"] = "Название шаблона"; +App::$strings["Layout Description (Optional)"] = "Описание шаблона (необязательно)"; +App::$strings["Comanche page description language help"] = "Помощь по языку описания страниц Comanche "; +App::$strings["Layout Description"] = "Описание шаблона"; +App::$strings["Created"] = "Создано"; +App::$strings["Edited"] = "Отредактировано"; +App::$strings["Download PDL file"] = "Загрузить PDL файл"; +App::$strings["No more system notifications."] = "Нет новых оповещений системы."; +App::$strings["System Notifications"] = "Системные оповещения "; +App::$strings["Layout updated."] = "Шаблон обновлен."; +App::$strings["Feature disabled."] = "Функция отключена."; +App::$strings["Edit System Page Description"] = "Редактировать описание системной страницы"; +App::$strings["(modified)"] = "(изменено)"; +App::$strings["Reset"] = "Сбросить"; +App::$strings["Layout not found."] = "Шаблон не найден."; +App::$strings["Module Name:"] = "Имя модуля:"; +App::$strings["Layout Help"] = "Помощь к шаблону"; +App::$strings["Edit another layout"] = "Редактировать другой шаблон"; +App::$strings["System layout"] = "Системный шаблон"; +App::$strings["Unable to lookup recipient."] = "Не удалось найти получателя."; +App::$strings["Unable to communicate with requested channel."] = "Не удалось установить связь с запрашиваемым каналом."; +App::$strings["Cannot verify requested channel."] = "Не удалось установить подлинность требуемого канала."; +App::$strings["Selected channel has private message restrictions. Send failed."] = "Выбранный канал ограничивает частные сообщения. Отправка не удалась."; +App::$strings["Messages"] = "Сообщения"; +App::$strings["message"] = "сообщение"; +App::$strings["Message recalled."] = "Сообщение отозванно."; +App::$strings["Conversation removed."] = "Разговор удален."; +App::$strings["Expires YYYY-MM-DD HH:MM"] = "Истекает YYYY-MM-DD HH:MM"; +App::$strings["Requested channel is not in this network"] = "Запрашиваемый канал не доступен."; +App::$strings["Send Private Message"] = "Отправить личное сообщение"; +App::$strings["To:"] = "Кому:"; +App::$strings["Subject:"] = "Тема:"; +App::$strings["Your message:"] = "Сообщение:"; +App::$strings["Attach file"] = "Прикрепить файл"; +App::$strings["Send"] = "Отправить"; +App::$strings["Delete message"] = "Удалить сообщение"; +App::$strings["Delivery report"] = "Отчёт о доставке"; +App::$strings["Recall message"] = "Отозвать сообщение"; +App::$strings["Message has been recalled."] = "Сообщение отозванно"; +App::$strings["Delete Conversation"] = "Удалить разговор"; +App::$strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Безопасная связь недоступна. Вы можете попытаться ответить со страницы профиля отправителя."; +App::$strings["Send Reply"] = "Отправить ответ"; +App::$strings["Your message for %s (%s):"] = "Ваше сообщение для %s (%s):"; +App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "Удаление канала не разрешается в течении 48 часов после смены пароля у аккаунта."; +App::$strings["Remove This Channel"] = "Удалить этот канал"; +App::$strings["WARNING: "] = "ПРЕДУПРЕЖДЕНИЕ:"; +App::$strings["This channel will be completely removed from the network. "] = "Этот канал будет полностью удалён из сети."; +App::$strings["This action is permanent and can not be undone!"] = "Это действие необратимо и не может быть отменено!"; +App::$strings["Please enter your password for verification:"] = "Пожалуйста, введите ваш пароль для проверки:"; +App::$strings["Remove this channel and all its clones from the network"] = "Удалить этот канал и все его клоны из сети"; +App::$strings["By default only the instance of the channel located on this hub will be removed from the network"] = "По умолчанию только представление канала расположенное на данном хабе будет удалено из сети"; +App::$strings["Remove Channel"] = "Удаление канала"; +App::$strings["Reset form"] = "Очистить форму"; +App::$strings["Welcome to Hubzilla!"] = "Добро пожаловать в Hubzilla!"; +App::$strings["You have got no unseen posts..."] = "У вас нет видимых публикаций..."; +App::$strings["Item not found"] = "Элемент не найден"; +App::$strings["Channel not found."] = "Канал не найден."; +App::$strings["Edit Card"] = "Редактировать карточку"; +App::$strings["Xchan Lookup"] = "Поиск Xchan"; +App::$strings["Lookup xchan beginning with (or webbie): "] = "Запрос Xchan начинается с (или webbie):"; +App::$strings["Not found."] = "Не найдено."; +App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Нет предложений. Если это новый сайт, повторите попытку через 24 часа."; +App::$strings["Posts and comments"] = "Публикации и комментарии"; +App::$strings["Only posts"] = "Только публикации"; +App::$strings["Insufficient permissions. Request redirected to profile page."] = "Недостаточно прав. Запрос перенаправлен на страницу профиля."; +App::$strings["Search Results For:"] = "Результаты поиска для:"; +App::$strings["Documentation Search"] = "Поиск документации"; +App::$strings["Members"] = "Участники"; +App::$strings["Administrators"] = "Администраторы"; +App::$strings["Developers"] = "Разработчики"; +App::$strings["Tutorials"] = "Руководства"; +App::$strings["\$Projectname Documentation"] = "\$Projectname Документация"; +App::$strings["Contents"] = "Содержимое"; +App::$strings["This site is not a directory server"] = "Этот сайт не является сервером каталога"; +App::$strings["Export Channel"] = "Экспорт канала"; +App::$strings["Export your basic channel information to a file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new server hub, but does not contain your content."] = "Экспортировать основную информацию из канала в файл. Служит в качестве резервной копии ваших контактов, основных данных и профиля, однако не включает содержимое. Может быть использовано для импорта ваши данных на новый сервер."; +App::$strings["Export Content"] = "Экспортировать содержимое"; +App::$strings["Export your channel information and recent content to a JSON backup that can be restored or imported to another server hub. This backs up all of your connections, permissions, profile data and several months of posts. This file may be VERY large. Please be patient - it may take several minutes for this download to begin."] = "Экспортировать информацию из вашего канала и его содержимое в резервную копию в формате JSON которая может быть использована для восстановления или импорта на другом сервере. Сохраняет все ваши контакты, разрешения, данные профиля и публикации за несколько месяцев. Файл может иметь очень большой размер. Пожалуйста, будьте терпеливы и подождите несколько минут пока не начнётся загрузка."; +App::$strings["Export your posts from a given year."] = "Экспортировать ваши публикации за данный год."; +App::$strings["You may also export your posts and conversations for a particular year or month. Adjust the date in your browser location bar to select other dates. If the export fails (possibly due to memory exhaustion on your server hub), please try again selecting a more limited date range."] = "Вы также можете экспортировать ваши публикации и беседы за определённый месяц или год. Выберите дату в панели местоположения в браузере. Если экспорт будет неудачным (это возможно, например, из-за исчерпания памяти на сервере), повторите попытку, выбрав меньший диапазон дат."; +App::$strings["To select all posts for a given year, such as this year, visit %2\$s"] = "Для выбора всех публикаций заданного года, например текущего, посетите %2\$s"; +App::$strings["To select all posts for a given month, such as January of this year, visit %2\$s"] = "Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2\$s"; +App::$strings["These content files may be imported or restored by visiting %2\$s on any site containing your channel. For best results please import or restore these in date order (oldest first)."] = "Данные файлы с содержимым могут быть импортированы и восстановлены на любом содержащем ваш канал сайте. Посетите %2\$s. Для лучших результатов пожалуйста производите импорт и восстановление в порядке датировки (старые сначала)."; +App::$strings["Away"] = "Нет на месте"; +App::$strings["Online"] = "В сети"; +App::$strings["Invalid item."] = "Недействительный элемент."; +App::$strings["Authorize application connection"] = "Авторизовать подключение приложения"; +App::$strings["Return to your app and insert this Security Code:"] = "Вернитесь к своему приложению и вставьте этот код безопасности:"; +App::$strings["Please login to continue."] = "Пожалуйста, войдите, чтобы продолжить."; +App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Вы хотите авторизовать это приложение для доступа к вашим публикациям и контактам и / или созданию новых публикаций?"; +App::$strings["item"] = "пункт"; +App::$strings["No ratings"] = "Оценок нет"; +App::$strings["Rating: "] = "Оценкa:"; +App::$strings["Website: "] = "Веб-сайт:"; +App::$strings["Description: "] = "Описание:"; +App::$strings["Failed to create source. No channel selected."] = "Не удалось создать источник. Канал не выбран."; +App::$strings["Source created."] = "Источник создан."; +App::$strings["Source updated."] = "Источник обновлен."; +App::$strings["*"] = ""; +App::$strings["Manage remote sources of content for your channel."] = "Управлять удалённым источниками содержимого для вашего канала"; +App::$strings["New Source"] = "Новый источник"; +App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Импортировать всё или выбранное содержимое из следующего канала в этот канал и распределить его в соответствии с вашими настройками."; +App::$strings["Only import content with these words (one per line)"] = "Импортировать содержимое только с этим текстом (построчно)"; +App::$strings["Leave blank to import all public content"] = "Оставьте пустым для импорта всего общедоступного содержимого"; +App::$strings["Channel Name"] = "Название канала"; +App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Добавить следующие категории к импортированным публикациям из этого источника (через запятые)"; +App::$strings["Optional"] = "Необязательно"; +App::$strings["Resend posts with this channel as author"] = "Отправить публикации в этот канал повторно как автор"; +App::$strings["Copyrights may apply"] = "Могут применяться авторские права"; +App::$strings["Source not found."] = "Источник не найден."; +App::$strings["Edit Source"] = "Редактировать источник"; +App::$strings["Delete Source"] = "Удалить источник"; +App::$strings["Source removed"] = "Источник удален"; +App::$strings["Unable to remove source."] = "Невозможно удалить источник."; +App::$strings["About this site"] = "Об этом сайте"; +App::$strings["Site Name"] = "Название сайта"; +App::$strings["Site Information"] = "Информация о сайте"; +App::$strings["Administrator"] = "Администратор"; +App::$strings["Terms of Service"] = "Условия предоставления услуг"; +App::$strings["Software and Project information"] = "Информация о программном обеспечении и проекте"; +App::$strings["This site is powered by \$Projectname"] = "Этот сайт работает на \$Projectname"; +App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Объединенные и децентрализованные сети и службы идентификациии обеспечиваются Zot"; +App::$strings["Additional federated transport protocols:"] = "Дополнительные федеративные транспортные протоколы:"; +App::$strings["Version %s"] = "Версия %s"; +App::$strings["Project homepage"] = "Домашняя страница проекта"; +App::$strings["Developer homepage"] = "Домашняя страница разработчика"; +App::$strings["Image uploaded but image cropping failed."] = "Изображение загружено но обрезка не удалась."; +App::$strings["Image resize failed."] = "Не удалось изменить размер изображения."; +App::$strings["Image upload failed."] = "Загрузка изображения не удалась."; +App::$strings["Unable to process image."] = "Невозможно обработать изображение."; +App::$strings["Photo not available."] = "Фотография недоступна."; +App::$strings["Your default profile photo is visible to anybody on the internet. Profile photos for alternate profiles will inherit the permissions of the profile"] = "Фотография вашего профиля по умолчанию видна всем в Интернете. Фотографияпрофиля для альтернативных профилей наследуют разрешения текущего профиля"; +App::$strings["Your profile photo is visible to anybody on the internet and may be distributed to other websites."] = "Фотография вашего профиля видна всем в Интернете и может быть отправлена на другие сайты."; +App::$strings["Upload File:"] = "Загрузить файл:"; +App::$strings["Select a profile:"] = "Выбрать профиль:"; +App::$strings["Use Photo for Profile"] = "Использовать фотографию для профиля"; +App::$strings["Change Profile Photo"] = "Изменить фотографию профиля"; +App::$strings["Use"] = "Использовать"; +App::$strings["Use a photo from your albums"] = "Использовать фотографию из ваших альбомов"; +App::$strings["Choose a different album"] = "Выбрать другой альбом"; +App::$strings["Select existing photo"] = "Выбрать существующую фотографию"; +App::$strings["Crop Image"] = "Обрезать изображение"; +App::$strings["Please adjust the image cropping for optimum viewing."] = "Пожалуйста настройте обрезку изображения для оптимального просмотра."; +App::$strings["Done Editing"] = "Закончить редактирование"; +App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s отслеживает %2\$s's %3\$s"; +App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s прекратил отслеживать %2\$s's %3\$s"; +App::$strings["No channel."] = "Канала нет."; +App::$strings["No connections in common."] = "Общих контактов нет."; +App::$strings["View Common Connections"] = "Просмотр общий контактов"; +App::$strings["Permission Denied."] = "Доступ запрещен."; +App::$strings["File not found."] = "Файл не найден."; +App::$strings["Edit file permissions"] = "Редактировать разрешения файла"; +App::$strings["Set/edit permissions"] = "Редактировать разрешения"; +App::$strings["Include all files and sub folders"] = "Включить все файлы и подкаталоги"; +App::$strings["Return to file list"] = "Вернутся к списку файлов"; +App::$strings["Copy/paste this code to attach file to a post"] = "Копировать / вставить этот код для прикрепления файла к публикации"; +App::$strings["Copy/paste this URL to link file from a web page"] = "Копировать / вставить эту URL для ссылки на файл со страницы"; +App::$strings["Share this file"] = "Поделиться этим файлом"; +App::$strings["Show URL to this file"] = "Показать URL этого файла"; +App::$strings["Show in your contacts shared folder"] = "Показать общий каталог в ваших контактах"; +App::$strings["Post not found."] = "Публикация не найдена"; +App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s отметил тегом %2\$s %3\$s с %4\$s"; +App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Бля бля бля Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; +App::$strings["Block Name"] = "Название блока"; +App::$strings["Edit Block"] = "Редактировать блок"; +App::$strings["Item is not editable"] = "Элемент нельзя редактировать"; App::$strings["Edit post"] = "Редактировать сообщение"; -App::$strings["Could not access address book record."] = ""; -App::$strings["Refresh failed - channel is currently unavailable."] = ""; -App::$strings["Channel has been unblocked"] = "Канал разблокирован"; -App::$strings["Channel has been blocked"] = "Канал заблокирован"; -App::$strings["Unable to set address book parameters."] = ""; -App::$strings["Channel has been unignored"] = "Канал не проигнорирован"; -App::$strings["Channel has been ignored"] = "Канал проигнорирован"; -App::$strings["Channel has been unarchived"] = "Канал разархивирован"; -App::$strings["Channel has been archived"] = "Канал заархивирован"; -App::$strings["Channel has been unhidden"] = "Канал открыт"; -App::$strings["Channel has been hidden"] = "Канал скрыт"; -App::$strings["Channel has been approved"] = "Канал одобрен"; -App::$strings["Channel has been unapproved"] = "Канал не одобрен"; -App::$strings["Connection has been removed."] = "Соединение было удалено."; -App::$strings["View %s's profile"] = "Просмотр %s's профиля"; +App::$strings["Tag removed"] = "Тег удалён"; +App::$strings["Remove Item Tag"] = "Удалить тег элемента"; +App::$strings["Select a tag to remove: "] = "Выбрать тег для удаления:"; +App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "Удаление канала не разрешается в течении 48 часов после смены пароля у аккаунта."; +App::$strings["Remove This Account"] = "Удалить этот аккаунт"; +App::$strings["This account and all its channels will be completely removed from the network. "] = "Этот аккаунт и все его каналы будут полностью удалены из сети."; +App::$strings["Remove this account, all its channels and all its channel clones from the network"] = "Удалить этот аккаунт, все его каналы и их клоны из сети."; +App::$strings["By default only the instances of the channels located on this hub will be removed from the network"] = "По умолчанию только представление канала расположенное на данном хабе будет удалено из сети"; +App::$strings["Remove Account"] = "Удалить аккаунт"; +App::$strings["Blocked accounts"] = "Заблокированные аккаунты"; +App::$strings["Expired accounts"] = "Просроченные аккаунты"; +App::$strings["Expiring accounts"] = "Близкие к просрочке аккаунты"; +App::$strings["Primary"] = "Основной"; +App::$strings["Clones"] = "Клоны"; +App::$strings["Message queues"] = "Очередь сообщений"; +App::$strings["Your software should be updated"] = "Ваше программное обеспечение должно быть обновлено"; +App::$strings["Administration"] = "Администрирование"; +App::$strings["Summary"] = "Резюме"; +App::$strings["Registered accounts"] = "Зарегистрированные аккаунты"; +App::$strings["Pending registrations"] = "Ждут утверждения"; +App::$strings["Registered channels"] = "Зарегистрированные каналы"; +App::$strings["Active addons"] = "Активные расширения"; +App::$strings["Version"] = "Версия системы"; +App::$strings["Repository version (master)"] = "Версия репозитория (master)"; +App::$strings["Repository version (dev)"] = "Версия репозитория (dev)"; +App::$strings["Could not access contact record."] = "Не удалось получить доступ к записи контакта."; +App::$strings["Could not locate selected profile."] = "Не удалось обнаружить выбранный профиль."; +App::$strings["Connection updated."] = "Контакты обновлены."; +App::$strings["Failed to update connection record."] = "Не удалось обновить запись контакта."; +App::$strings["is now connected to"] = "теперь подключён к"; +App::$strings["Could not access address book record."] = "Не удалось получить доступ к записи адресной книги."; +App::$strings["Refresh failed - channel is currently unavailable."] = "Обновление невозможно - в настоящее время канал недоступен."; +App::$strings["Unable to set address book parameters."] = "Не удалось получить доступ к параметрам адресной книги."; +App::$strings["Connection has been removed."] = "Контакт был удалён."; +App::$strings["View %s's profile"] = "Просмотр %s профиля"; App::$strings["Refresh Permissions"] = "Обновить разрешения"; -App::$strings["Fetch updated permissions"] = ""; -App::$strings["Recent Activity"] = ""; -App::$strings["View recent posts and comments"] = ""; -App::$strings["Unblock"] = "Разрешить"; -App::$strings["Block"] = "Заблокировать"; -App::$strings["Block or Unblock this connection"] = "Запретить или разрешить этот канал"; +App::$strings["Fetch updated permissions"] = "Получить обновлённые разрешения"; +App::$strings["Refresh Photo"] = "Обновить фотографию"; +App::$strings["Fetch updated photo"] = "Получить обновлённую фотографию"; +App::$strings["View recent posts and comments"] = "Просмотреть последние публикации и комментарии"; +App::$strings["Unblock"] = "Разблокировать"; +App::$strings["Block"] = "Блокировать"; +App::$strings["Block (or Unblock) all communications with this connection"] = "Блокировать (или разблокировать) связи с этим контактом"; +App::$strings["This connection is blocked!"] = "Этот контакт заблокирован!"; App::$strings["Unignore"] = "Не игнорировать"; -App::$strings["Ignore"] = "Игнорировать"; -App::$strings["Ignore or Unignore this connection"] = "Игнорировать или не игнорировать этот канал"; +App::$strings["Ignore (or Unignore) all inbound communications from this connection"] = "Игнорировать (или не игнорировать) все связи для этого контакта"; +App::$strings["This connection is ignored!"] = "Этот контакт игнорируется!"; App::$strings["Unarchive"] = "Разархивировать"; App::$strings["Archive"] = "Заархивировать"; -App::$strings["Archive or Unarchive this connection"] = " Заархивировать или разархивировать этот канал"; -App::$strings["Unhide"] = "Показать"; -App::$strings["Hide"] = "Скрыть"; -App::$strings["Hide or Unhide this connection"] = "Скрыть или показывать этот канал"; -App::$strings["Delete this connection"] = "Удалить этот контакт"; -App::$strings["Approve this connection"] = "Утвердить этот контакт"; -App::$strings["Accept connection to allow communication"] = ""; -App::$strings["Automatic Permissions Settings"] = "Настройки автоматических разрешений"; -App::$strings["Connections: settings for %s"] = ""; -App::$strings["When receiving a channel introduction, any permissions provided here will be applied to the new connection automatically and the introduction approved. Leave this page if you do not wish to use this feature."] = ""; -App::$strings["Slide to adjust your degree of friendship"] = ""; -App::$strings["inherited"] = "унаследованный"; -App::$strings["Connection has no individual permissions!"] = ""; -App::$strings["This may be appropriate based on your privacy settings, though you may wish to review the \"Advanced Permissions\"."] = ""; -App::$strings["Profile Visibility"] = "Видимость профиля"; -App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = ""; -App::$strings["Contact Information / Notes"] = "Информация / Примечания о канале"; -App::$strings["Edit contact notes"] = "Редактировать примечания канала"; -App::$strings["Their Settings"] = "Их настройки"; -App::$strings["My Settings"] = "Мои настройки"; -App::$strings["Clear/Disable Automatic Permissions"] = ""; -App::$strings["Forum Members"] = "Участники форума"; -App::$strings["Soapbox"] = "Soapbox"; -App::$strings["Full Sharing (typical social network permissions)"] = ""; -App::$strings["Cautious Sharing "] = ""; -App::$strings["Follow Only"] = "Только следовать"; -App::$strings["Individual Permissions"] = "Индивидуальные разрешения"; -App::$strings["Some permissions may be inherited from your channel privacy settings, which have higher priority than individual settings. Changing those inherited settings on this page will have no effect."] = ""; -App::$strings["Advanced Permissions"] = "Дополнительные разрешения"; -App::$strings["Simple Permissions (select one and submit)"] = ""; -App::$strings["Visit %s's profile - %s"] = "Посетить %s's ​​профиль - %s"; -App::$strings["Block/Unblock contact"] = "Запретить/разрешить контакт"; -App::$strings["Ignore contact"] = "Игнорировать контакт"; -App::$strings["Repair URL settings"] = "Ремонт настройки URL"; -App::$strings["View conversations"] = "Просмотр разговоров"; -App::$strings["Delete contact"] = "Удалить контакт"; -App::$strings["Last update:"] = "Последнее обновление:"; -App::$strings["Update public posts"] = "Обновить публичные сообщения"; -App::$strings["Update now"] = "Обновить сейчас"; -App::$strings["Currently blocked"] = "В настоящее время заблокирован"; -App::$strings["Currently ignored"] = "В настоящее время игнорируются"; -App::$strings["Currently archived"] = "В настоящее время зархивированны"; -App::$strings["Currently pending"] = "В настоящее время в ожидании"; -App::$strings["Hide this contact from others"] = "Скрыть этот канал от других"; -App::$strings["Replies/likes to your public posts may still be visible"] = ""; -App::$strings["No potential page delegates located."] = ""; -App::$strings["Delegate Page Management"] = ""; -App::$strings["Delegates are able to manage all aspects of this account/page except for basic account settings. Please do not delegate your personal account to anybody that you do not trust completely."] = ""; -App::$strings["Existing Page Managers"] = ""; -App::$strings["Existing Page Delegates"] = ""; -App::$strings["Potential Delegates"] = ""; -App::$strings["Remove"] = "Удалить"; -App::$strings["Add"] = "Добавить"; -App::$strings["No entries."] = "Нет записей."; -App::$strings["Public access denied."] = "Общественный доступ запрещен."; -App::$strings["Gender: "] = "Пол:"; -App::$strings["Finding:"] = "Поиск:"; -App::$strings["next page"] = "следующая страница"; -App::$strings["previous page"] = "предыдущая страница"; -App::$strings["No entries (some entries may be hidden)."] = ""; -App::$strings["Status: "] = "Статус:"; -App::$strings["Sexual Preference: "] = "Сексуальная ориентация:"; -App::$strings["Homepage: "] = "Домашняя страница:"; -App::$strings["Hometown: "] = "Город проживания:"; -App::$strings["About: "] = "О себе:"; -App::$strings["Keywords: "] = "Ключевые слова:"; -App::$strings["This site is not a directory server"] = "Этот сайт не является сервером каталога"; -App::$strings["Hubzilla - "The Network""] = ""; -App::$strings["Welcome to %s"] = "Добро пожаловать в %s"; -App::$strings["Hubzilla Server - Setup"] = "Hubzilla Сервер - Установка"; +App::$strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Заархивировать (или разархивировать) этот контакт - пометить канал отключённым но сохранить содержимое"; +App::$strings["This connection is archived!"] = "Этот контакт заархивирован!"; +App::$strings["Unhide"] = "Показать"; +App::$strings["Hide"] = "Скрыть"; +App::$strings["Hide or Unhide this connection from your other connections"] = "Скрыть или показать этот контакт от / для остальных"; +App::$strings["This connection is hidden!"] = "Этот контакт скрыт!"; +App::$strings["Delete this connection"] = "Удалить этот контакт"; +App::$strings["Fetch Vcard"] = "Получить vCard"; +App::$strings["Fetch electronic calling card for this connection"] = "Получить электронную телефонную карточку для этого контакта"; +App::$strings["Open Individual Permissions section by default"] = "Открывать раздел \"Индивидуальные разрешения\" по умолчанию"; +App::$strings["Affinity"] = "Сходство"; +App::$strings["Open Set Affinity section by default"] = "Открыть секцию установления сходства по умолчанию"; +App::$strings["Filter"] = "Фильтр"; +App::$strings["Open Custom Filter section by default"] = "Открывать секцию \"Настраиваемый фильтр\" по умолчанию"; +App::$strings["Approve this connection"] = "Утвердить этот контакт"; +App::$strings["Accept connection to allow communication"] = "Принять контакт чтобы разрешить связь"; +App::$strings["Set Affinity"] = "Установить сходство"; +App::$strings["Set Profile"] = "Установить профиль"; +App::$strings["Set Affinity & Profile"] = "Установить сходство и профиль"; +App::$strings["This connection is unreachable from this location."] = "Этот контакт недоступен для данного местоположения"; +App::$strings["This connection may be unreachable from other channel locations."] = "Этот контакт может быть недоступен из других мест размещения канала"; +App::$strings["Location independence is not supported by their network."] = "Независимое местоположение не поддерживается их сетью."; +App::$strings["This connection is unreachable from this location. Location independence is not supported by their network."] = "Этот контакт недоступен из данного местоположения. Независимое местоположение не поддерживается их сетью."; +App::$strings["Apply these permissions automatically"] = "Применить эти разрешения автоматически"; +App::$strings["Connection requests will be approved without your interaction"] = "Запросы контактов будут одобрены без вашего участия"; +App::$strings["Permission role"] = "Роль разрешения"; +App::$strings["Add permission role"] = "Добавить роль разрешения"; +App::$strings["This connection's primary address is"] = "Главный адрес это контакта"; +App::$strings["Available locations:"] = "Доступные расположения:"; +App::$strings["The permissions indicated on this page will be applied to all new connections."] = "Разрешения, указанные на этой странице, будут применяться ко всем новым соединениям."; +App::$strings["Connection Tools"] = "Инструменты контактов"; +App::$strings["Slide to adjust your degree of friendship"] = "Прокрутить для настройки степени дружбы"; +App::$strings["Slide to adjust your rating"] = "Прокрутить для настройки оценки"; +App::$strings["Optionally explain your rating"] = "Объясните свою оценку (не обязательно)"; +App::$strings["Custom Filter"] = "Настраиваемый фильтр"; +App::$strings["Only import posts with this text"] = "Импортировать публикации только с этим текстом"; +App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "слова по одному в строку, #тег, /шаблон/ или lang=xxl; оставьте пустым для импорта всех публикаций"; +App::$strings["Do not import posts with this text"] = "Не импортировать публикации с этим текстом"; +App::$strings["This information is public!"] = "Эта информация общедоступна!"; +App::$strings["Connection Pending Approval"] = "Ожидающие подтверждения контактов"; +App::$strings["inherited"] = "наследуется"; +App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Пожалуйста, выберите профиль который вы хотит показывать в %s при безопасном просмотре."; +App::$strings["Their Settings"] = "Их настройки"; +App::$strings["My Settings"] = "Мои настройки"; +App::$strings["Individual Permissions"] = "Индивидуальные разрешения"; +App::$strings["Some permissions may be inherited from your channel's privacy settings, which have higher priority than individual settings. You can not change those settings here."] = "Некоторые разрешения могут наследовать из настроек приватности ваших каналов которые могут иметь более высокий приоритет чем индивидуальные. Вы не можете менять эти настройки здесь."; +App::$strings["Some permissions may be inherited from your channel's privacy settings, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Некоторые разрешения могут быть унаследованы из настроек приватности вашего канала, которые могут иметь более высокий приоритет чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения переданных по наследству настроек."; +App::$strings["Last update:"] = "Последнее обновление:"; +App::$strings["Details"] = "Сведения"; +App::$strings["Import Webpage Elements"] = "Импортировать части веб-страницы"; +App::$strings["Import selected"] = "Импортировать выбранное"; +App::$strings["Export Webpage Elements"] = "Экспортировать часть веб-страницы"; +App::$strings["Export selected"] = "Экспортировать выбранное"; +App::$strings["Actions"] = "Действия"; +App::$strings["Page Link"] = "Ссылка страницы"; +App::$strings["Page Title"] = "Заголовок страницы"; +App::$strings["Invalid file type."] = "Неверный тип файла."; +App::$strings["Error opening zip file"] = "Ошибка открытия ZIP файла"; +App::$strings["Invalid folder path."] = "Неверный путь к каталогу."; +App::$strings["No webpage elements detected."] = "Не обнаружено частей веб-страницы."; +App::$strings["Import complete."] = "Импорт завершен."; +App::$strings["Page link"] = "Ссылка страницы"; +App::$strings["Edit Webpage"] = "Редактировать веб-страницу"; +App::$strings["Edit Layout"] = "Редактировать шаблон"; +App::$strings["This directory server requires an access token"] = "Для доступа к этому серверу каталогов требуется токен"; +App::$strings["Comment approved"] = "Комментарий одобрен"; +App::$strings["Comment deleted"] = "Комментарий удалён"; +App::$strings["Add Article"] = "Добавить статью"; +App::$strings["Bookmark added"] = "Закладка добавлена"; +App::$strings["My Bookmarks"] = "Мои закладки"; +App::$strings["My Connections Bookmarks"] = "Закладки моих контактов"; +App::$strings["Files: shared with me"] = "Файлы: поделились со мной"; +App::$strings["NEW"] = "НОВОЕ"; +App::$strings["Last Modified"] = "Последнее изменение"; +App::$strings["Remove all files"] = "Удалить все файлы"; +App::$strings["Remove this file"] = "Удалить этот файл"; +App::$strings["Select a bookmark folder"] = "Выбрать каталог для закладок"; +App::$strings["Save Bookmark"] = "Сохранить закладку"; +App::$strings["URL of bookmark"] = "URL закладки"; +App::$strings["Or enter new bookmark folder name"] = "или введите новое имя каталога закладок"; +App::$strings["Permissions denied."] = "Доступ запрещен."; +App::$strings["Unknown App"] = "Неизвестное приложение"; +App::$strings["Authorize"] = "Авторизовать"; +App::$strings["Do you authorize the app %s to access your channel data?"] = "Авторизуете ли вы приложение %s для доступа к данным вашего канала?"; +App::$strings["Allow"] = "Разрешить"; +App::$strings["Deny"] = "Запретить"; +App::$strings["Items tagged with: %s"] = "Объекты помечены как: %s"; +App::$strings["Search results for: %s"] = "Результаты поиска для: %s"; +App::$strings["\$Projectname Server - Setup"] = "\$Projectname сервер - Установка"; App::$strings["Could not connect to database."] = "Не удалось подключиться к серверу баз данных."; -App::$strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = ""; +App::$strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "Не удалось подключиться к указанному URL. Вероятно проблема с SSL сертификатом или DNS."; App::$strings["Could not create table."] = "Не удалось создать таблицу."; App::$strings["Your site database has been installed."] = "Ваша база данных установлена."; -App::$strings["You may need to import the file \"install/database.sql\" manually using phpmyadmin or mysql."] = ""; +App::$strings["You may need to import the file \"install/schema_xxx.sql\" manually using a database client."] = "Вам может понадобится импортировать файл \"install/schema_xxx.sql\" вручную используя клиент базы данных."; App::$strings["Please see the file \"install/INSTALL.txt\"."] = "Пожалуйста, обратитесь к файлу \"install/INSTALL.txt\"."; App::$strings["System check"] = "Проверка системы"; -App::$strings["Next"] = "Следующая"; -App::$strings["Check again"] = "Проверить снова"; +App::$strings["Check again"] = "Перепроверить"; App::$strings["Database connection"] = "Подключение к базе данных"; -App::$strings["In order to install Hubzilla we need to know how to connect to your database."] = ""; -App::$strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = ""; -App::$strings["The database you specify below should already exist. If it does not, please create it before continuing."] = ""; -App::$strings["Database Server Name"] = "Имя сервера базы данных"; -App::$strings["Default is localhost"] = "По умолчанию localhost"; -App::$strings["Database Port"] = "Порт базы данных"; +App::$strings["In order to install \$Projectname we need to know how to connect to your database."] = "Для установки \$Projectname необходимо знать как подключиться к ваше базе данных."; +App::$strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Пожалуйста, свяжитесь с вашим хостинг провайдером или администрацией сайта если у вас есть вопросы об этих настройках."; +App::$strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Указанная ниже база данных должна существовать. Если это не так, пожалуйста, создайте её перед тем, как продолжить."; +App::$strings["Database Server Name"] = "Имя сервера баз данных"; +App::$strings["Default is 127.0.0.1"] = "По умолчанию 127.0.0.1"; +App::$strings["Database Port"] = "Порт сервера баз данных"; App::$strings["Communication port number - use 0 for default"] = "Порт коммуникации - используйте 0 по умолчанию"; App::$strings["Database Login Name"] = "Имя для подключения к базе данных"; App::$strings["Database Login Password"] = "Пароль для подключения к базе данных"; App::$strings["Database Name"] = "Имя базы данных"; +App::$strings["Database Type"] = "Тип базы данных"; App::$strings["Site administrator email address"] = "Адрес электронной почты администратора сайта"; -App::$strings["Your account email address must match this in order to use the web admin panel."] = ""; +App::$strings["Your account email address must match this in order to use the web admin panel."] = "Ваш адрес электронной почты должен соответствовать этому для использования веб-панели администратора."; App::$strings["Website URL"] = "URL веб-сайта"; App::$strings["Please use SSL (https) URL if available."] = "Пожалуйста, используйте SSL (https) URL если возможно."; App::$strings["Please select a default timezone for your website"] = "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта"; App::$strings["Site settings"] = "Настройки сайта"; -App::$strings["Could not find a command line version of PHP in the web server PATH."] = ""; -App::$strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = ""; -App::$strings["PHP executable path"] = "PHP executable путь"; -App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = ""; -App::$strings["Command line PHP"] = "Command line PHP"; -App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = ""; -App::$strings["This is required for message delivery to work."] = "Это требуется для доставки сообщений."; -App::$strings["PHP register_argc_argv"] = "PHP register_argc_argv"; -App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = ""; +App::$strings["PHP version 5.5 or greater is required."] = "Требуется PHP версии 5.5 или выше"; +App::$strings["PHP version"] = "Версия PHP"; +App::$strings["Could not find a command line version of PHP in the web server PATH."] = "Не удалось найти консольную версию PHP в путях переменной PATH веб-сервера."; +App::$strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = "Если у вас на сервере не установлена консольная версия PHP вы не сможете запустить фоновый опрос через cron. "; +App::$strings["PHP executable path"] = "Пусть к исполняемому модулю PHP"; +App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Введите полный путь к исполняемому модулю PHP. Вы можете оставить его пустым для продолжения установки."; +App::$strings["Command line PHP"] = "Командная строка PHP"; +App::$strings["Unable to check command line PHP, as shell_exec() is disabled. This is required."] = "Невозможно проверить командную строку PHP поскольку требуемая функция shell_exec() отключена."; +App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". "; +App::$strings["This is required for message delivery to work."] = "Это необходимо для функционирования доставки сообщений."; +App::$strings["PHP register_argc_argv"] = ""; +App::$strings["Your max allowed total upload size is set to %s. Maximum size of one file to upload is set to %s. You are allowed to upload up to %d files at once."] = "Максимально разрешённый общий размер загрузок установлен в %s. Максимальный размер одной загрузки установлен в %s. Вам разрешено загружать до %d файлов за один приём."; +App::$strings["You can adjust these settings in the server php.ini file."] = "Вы можете изменить эти настройки в файле php.ini на сервере."; +App::$strings["PHP upload limits"] = "Максимальный размер загрузки в PHP"; +App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования"; App::$strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"."; App::$strings["Generate encryption keys"] = "Генерация ключей шифрования"; -App::$strings["libCurl PHP module"] = "libCurl PHP модуль"; -App::$strings["GD graphics PHP module"] = "GD graphics PHP модуль"; -App::$strings["OpenSSL PHP module"] = "OpenSSL PHP модуль"; -App::$strings["mysqli PHP module"] = "mysqli PHP модуль"; -App::$strings["mb_string PHP module"] = "mb_string PHP модуль"; -App::$strings["mcrypt PHP module"] = "mcrypt PHP модуль"; -App::$strings["Apache mod_rewrite module"] = "Apache mod_rewrite модуль"; -App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Ошибка: Apache веб-сервер модуль mod-rewrite требуется, но не установлен."; -App::$strings["proc_open"] = "proc_open"; -App::$strings["Error: proc_open is required but is either not installed or has been disabled in php.ini"] = "Ошибка: proc_open требуется, но не установлен или отключен в php.ini"; -App::$strings["Error: libCURL PHP module required but not installed."] = "Ошибка: Модуль libCURL PHP требуется, но не установлен."; -App::$strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Ошибка: GD graphics PHP модуль с поддержкой JPEG требуется, но не установлен."; -App::$strings["Error: openssl PHP module required but not installed."] = "Ошибка: openssl PHP модуль требуется, но не установлен."; -App::$strings["Error: mysqli PHP module required but not installed."] = "Ошибка: mysqli PHP модуль требуется, но не установлен."; -App::$strings["Error: mb_string PHP module required but not installed."] = "Ошибка: mb_string PHP модуль требуется, но не установлен."; -App::$strings["Error: mcrypt PHP module required but not installed."] = "Ошибка: mcrypt PHP модуль требуется, но не установлен."; -App::$strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Веб-установщик должен быть в состоянии создать файл с именем \".htconfig.php\" в верхней папке вашего веб-сервера, но он не в состоянии сделать это."; +App::$strings["libCurl PHP module"] = ""; +App::$strings["GD graphics PHP module"] = ""; +App::$strings["OpenSSL PHP module"] = ""; +App::$strings["PDO database PHP module"] = ""; +App::$strings["mb_string PHP module"] = ""; +App::$strings["xml PHP module"] = ""; +App::$strings["zip PHP module"] = ""; +App::$strings["Apache mod_rewrite module"] = ""; +App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Ошибка: требуемый модуль mod_rewrite веб-сервера Apache не установлен."; +App::$strings["exec"] = ""; +App::$strings["Error: exec is required but is either not installed or has been disabled in php.ini"] = ""; +App::$strings["shell_exec"] = ""; +App::$strings["Error: shell_exec is required but is either not installed or has been disabled in php.ini"] = ""; +App::$strings["Error: libCURL PHP module required but not installed."] = ""; +App::$strings["Error: GD graphics PHP module with JPEG support required but not installed."] = ""; +App::$strings["Error: openssl PHP module required but not installed."] = ""; +App::$strings["Error: PDO database PHP module required but not installed."] = ""; +App::$strings["Error: mb_string PHP module required but not installed."] = ""; +App::$strings["Error: xml PHP module required for DAV but not installed."] = ""; +App::$strings["Error: zip PHP module required but not installed."] = ""; +App::$strings[".htconfig.php is writable"] = ""; +App::$strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = ""; App::$strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = ""; -App::$strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Red top folder."] = ""; -App::$strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"install/INSTALL.txt\" for instructions."] = "Вы можете пропустить эту процедуру и выполнить установку вручную. Обратитесь к файлу \"install/INSTALL.txt\" для получения инструкций."; -App::$strings[".htconfig.php is writable"] = ".htconfig.php доступен для записи"; -App::$strings["Red uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = ""; -App::$strings["In order to store these compiled templates, the web server needs to have write access to the directory view/tpl/smarty3/ under the Red top level folder."] = ""; +App::$strings["Please see install/INSTALL.txt for additional information."] = ""; +App::$strings["This software uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = ""; +App::$strings["In order to store these compiled templates, the web server needs to have write access to the directory %s under the top level web folder."] = ""; App::$strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = ""; -App::$strings["Note: as a security measure, you should give the web server write access to view/tpl/smarty3/ only--not the template files (.tpl) that it contains."] = ""; -App::$strings["view/tpl/smarty3 is writable"] = "view/tpl/smarty3 доступен для записи"; -App::$strings["Red uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the Red top level folder"] = ""; -App::$strings["store is writable"] = ""; +App::$strings["Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains."] = ""; +App::$strings["%s is writable"] = "%s доступен для записи"; +App::$strings["This software uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the top level web folder"] = "Эта программа использует каталог хранения для загруженных файлов. Для веб-сервера требуется доступ на запись начиная с верхнего уровня каталога хранения."; +App::$strings["store is writable"] = "хранилище доступно для записи"; App::$strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = ""; App::$strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = ""; -App::$strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = ""; -App::$strings["If your certificate is not recognised, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = ""; +App::$strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Эти ограничения приняты поскольку ваши общедоступные публикации могут, например, содержать ссылки на изображения на вашем собственном хабе."; +App::$strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = ""; App::$strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = ""; App::$strings["Providers are available that issue free certificates which are browser-valid."] = ""; -App::$strings["SSL certificate validation"] = "проверка сертификата SSL"; -App::$strings["Url rewrite in .htaccess is not working. Check your server configuration."] = ""; -App::$strings["Url rewrite is working"] = "Url rewrite работает"; +App::$strings["If you are confident that the certificate is valid and signed by a trusted authority, check to see if you have failed to install an intermediate cert. These are not normally required by browsers, but are required for server-to-server communications."] = ""; +App::$strings["SSL certificate validation"] = ""; +App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = ""; +App::$strings["Url rewrite is working"] = "Перезапись URL работает"; App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = ""; -App::$strings["Errors encountered creating database tables."] = ""; -App::$strings["

What next

"] = "

Что дальше

"; -App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = ""; -App::$strings["Item not found"] = "Элемент не найден"; -App::$strings["Edit Block"] = "Редактировать блок"; -App::$strings["Delete block?"] = "Удалить блок?"; -App::$strings["Insert YouTube video"] = "Вставить YouTube видео"; -App::$strings["Insert Vorbis [.ogg] video"] = "Вставить Vorbis [.ogg] видео"; -App::$strings["Insert Vorbis [.ogg] audio"] = "Вставить Vorbis [.ogg] музыку"; -App::$strings["Delete Block"] = "Удалить блок"; -App::$strings["Layout updated."] = "Шаблон обновлен."; -App::$strings["Edit System Page Description"] = ""; -App::$strings["Layout not found."] = "Шаблон не найден"; -App::$strings["Module Name:"] = "Имя модуля:"; -App::$strings["Layout Help"] = "Помощь к шаблону"; -App::$strings["Edit Layout"] = "Редактировать шаблон"; -App::$strings["Delete layout?"] = "Удалить шаблон?"; -App::$strings["Delete Layout"] = "Удалить шаблон"; -App::$strings["Item is not editable"] = "Элемент нельзя редактировать"; -App::$strings["Delete item?"] = "Удалить элемент?"; -App::$strings["Edit Webpage"] = "Редактировать веб-страницу"; -App::$strings["Delete webpage?"] = "Удалить веб-страницу?"; -App::$strings["Delete Webpage"] = "Удалить веб-страницу"; -App::$strings["Version %s"] = "Версия %s"; -App::$strings["Installed plugins/addons/apps:"] = ""; -App::$strings["No installed plugins/addons/apps"] = ""; -App::$strings["Red"] = "Red"; -App::$strings["This is a hub of the Hubzilla - a global cooperative network of decentralised privacy enhanced websites."] = ""; -App::$strings["Running at web location"] = ""; -App::$strings["Please visit GetZot.com to learn more about the Hubzilla."] = "Пожалуйста посетите GetZot.com чтобы узнать больше о Hubzilla."; -App::$strings["Bug reports and issues: please visit"] = ""; -App::$strings["Suggestions, praise, etc. - please email \"hubzilla\" at librelist - dot com"] = ""; -App::$strings["Site Administrators"] = "Администратор сайта"; -App::$strings["Page owner information could not be retrieved."] = ""; -App::$strings["Album not found."] = "Альбом не найден."; -App::$strings["Delete Album"] = "Удалить альбом"; -App::$strings["Delete Photo"] = "Удалить фотографию"; -App::$strings["No photos selected"] = "Никакие фотографии не выбраны"; -App::$strings["Access to this item is restricted."] = "Доступ к этому элементу ограничен."; -App::$strings["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото."; -App::$strings["You have used %1$.2f Mbytes of photo storage."] = "Вы использовали %1$.2f мегабайт для хранения фото."; -App::$strings["Upload Photos"] = "Загрузить фотографии"; -App::$strings["New album name: "] = "Название нового альбома:"; -App::$strings["or existing album name: "] = "или существующий альбом:"; -App::$strings["Do not show a status post for this upload"] = "Не показывать пост о состоянии этой загрузки"; -App::$strings["Contact Photos"] = "Фотографии контакта"; -App::$strings["Edit Album"] = "Редактировать Фотоальбом"; -App::$strings["Show Newest First"] = "Показать новые первыми"; -App::$strings["Show Oldest First"] = "Показать старые первыми"; -App::$strings["View Photo"] = "Посмотреть фотографию"; -App::$strings["Permission denied. Access to this item may be restricted."] = ""; -App::$strings["Photo not available"] = "Фотография не доступна"; -App::$strings["Use as profile photo"] = "Использовать в качестве фотографии профиля"; -App::$strings["View Full Size"] = "Посмотреть в полный размер"; -App::$strings["Edit photo"] = "Редактировать фотографию"; -App::$strings["Rotate CW (right)"] = "Повернуть CW (направо)"; -App::$strings["Rotate CCW (left)"] = "Повернуть CCW (налево)"; -App::$strings["New album name"] = "Новое название альбома:"; -App::$strings["Caption"] = "Подпись"; -App::$strings["Add a Tag"] = "Добавить тег"; -App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Например: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; -App::$strings["In This Photo:"] = ""; -App::$strings["View Album"] = "Посмотреть фотоальбом"; -App::$strings["Recent Photos"] = "Последние фотографии"; -App::$strings["Failed to create source. No channel selected."] = ""; -App::$strings["Source created."] = "Источник создан"; -App::$strings["Source updated."] = "Источник обновлен."; -App::$strings["*"] = "*"; -App::$strings["Manage remote sources of content for your channel."] = ""; -App::$strings["New Source"] = "Новый источник"; -App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = ""; -App::$strings["Only import content with these words (one per line)"] = ""; -App::$strings["Leave blank to import all public content"] = ""; -App::$strings["Channel Name"] = "Имя канала"; -App::$strings["Source not found."] = "Источник не найден."; -App::$strings["Edit Source"] = "Редактировать источник"; -App::$strings["Delete Source"] = "Удалить источник"; -App::$strings["Source removed"] = "Источник удален"; -App::$strings["Unable to remove source."] = ""; -App::$strings["- select -"] = "- выбрать -"; -App::$strings["Event title and start time are required."] = "Название события и время начала требуется."; -App::$strings["l, F j"] = "l, F j"; -App::$strings["Edit event"] = "Редактировать мероприятие"; -App::$strings["Create New Event"] = "Создать новое мероприятие"; -App::$strings["Previous"] = "Предыдущая"; -App::$strings["hour:minute"] = "часы:минуты"; -App::$strings["Event details"] = "Детали мероприятия"; -App::$strings["Format is %s %s. Starting date and Title are required."] = "Формат: %s %s. Дата начала и название необходимы."; -App::$strings["Event Starts:"] = "Начало мероприятия:"; -App::$strings["Required"] = "Необходимо"; -App::$strings["Finish date/time is not known or not relevant"] = "Дата окончания или время окончания не известно / не релевантно."; -App::$strings["Event Finishes:"] = "\t\nКонец мероприятий:"; -App::$strings["Adjust for viewer timezone"] = "Отрегулируйте для просмотра часовых поясов"; -App::$strings["Description:"] = "Описание:"; -App::$strings["Title:"] = "Заголовок:"; -App::$strings["Share this event"] = "Поделиться этим мероприятием"; -App::$strings["Permission Denied."] = "Доступ запрещен."; -App::$strings["File not found."] = "Файл не найден."; -App::$strings["Edit file permissions"] = "Редактировать разрешения файла"; -App::$strings["Set/edit permissions"] = ""; -App::$strings["Include all files and sub folders"] = ""; -App::$strings["Return to file list"] = ""; -App::$strings["Copy/paste this code to attach file to a post"] = ""; -App::$strings["Copy/paste this URL to link file from a web page"] = ""; -App::$strings["Channel added."] = "Контакт добавлен."; -App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s следит %2\$s's %3\$s"; -App::$strings["Contact not found."] = "Контакт не найден."; -App::$strings["Friend suggestion sent."] = "Предложение дружить отправлено."; -App::$strings["Suggest Friends"] = "Пригласить друзей"; -App::$strings["Suggest a friend for %s"] = ""; -App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = ""; -App::$strings["Collection created."] = "Коллекция создана."; -App::$strings["Could not create collection."] = "Не удалось создать коллекцию."; -App::$strings["Collection updated."] = ""; -App::$strings["Create a collection of channels."] = "Создать коллекцию контактов"; -App::$strings["Collection Name: "] = "Название коллекции:"; -App::$strings["Members are visible to other channels"] = "Пользователи могут видеть другие каналы"; -App::$strings["Collection removed."] = "Коллекция удалена."; -App::$strings["Unable to remove collection."] = "Невозможно удалить коллекцию."; -App::$strings["Collection Editor"] = "Редактор коллекций"; -App::$strings["Members"] = "Участники"; -App::$strings["All Connected Channels"] = "Все подключенные контакы"; -App::$strings["Click on a channel to add or remove."] = "Нажмите на канал, чтобы добавить или удалить."; -App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = ""; -App::$strings["Help:"] = "Помощь:"; -App::$strings["Not Found"] = "Не найдено"; -App::$strings["Tag removed"] = "Тег удален"; -App::$strings["Remove Item Tag"] = "Удалить Тег"; -App::$strings["Select a tag to remove: "] = "Выбрать тег для удаления: "; -App::$strings["Theme settings updated."] = "Настройки темы обновленны."; -App::$strings["Site"] = "Сайт"; -App::$strings["Accounts"] = "Пользователи"; -App::$strings["Channels"] = "Каналы"; -App::$strings["Plugins"] = "Плагины"; -App::$strings["Themes"] = "Темы"; -App::$strings["Server"] = "Серверы"; -App::$strings["DB updates"] = "Обновление базы данных"; -App::$strings["Logs"] = "Журналы"; -App::$strings["Plugin Features"] = "Функции плагинов"; -App::$strings["User registrations waiting for confirmation"] = "Регистрации пользователей, которые ждут подтверждения"; -App::$strings["Message queues"] = "Очередь недоставленных сообщений"; -App::$strings["Administration"] = "Администрация"; -App::$strings["Summary"] = "Резюме"; -App::$strings["Registered users"] = "Всего пользователeй"; -App::$strings["Pending registrations"] = "Ждут утверждения"; -App::$strings["Version"] = "Версия системы"; -App::$strings["Active plugins"] = "Активные плагины"; +App::$strings["

What next?

"] = "

Что дальше?

"; +App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "Вам понадобится [вручную] настроить запланированную задачу для опрашивателя."; +App::$strings["Remote privacy information not available."] = "Удаленная информация о конфиденциальности недоступна."; +App::$strings["Visible to:"] = "Видимо для:"; +App::$strings["Connection added."] = "Контакт добавлен."; +App::$strings["Menu not found."] = "Меню не найдено"; +App::$strings["Unable to create element."] = "Невозможно создать элемент."; +App::$strings["Unable to update menu element."] = "Невозможно обновить элемент меню."; +App::$strings["Unable to add menu element."] = "Невозможно добавить элемент меню."; +App::$strings["Menu Item Permissions"] = "Разрешения на пункт меню"; +App::$strings["(click to open/close)"] = "(нажмите чтобы открыть/закрыть)"; +App::$strings["Link Name"] = "Имя ссылки"; +App::$strings["Link or Submenu Target"] = "Ссылка или цель подменю"; +App::$strings["Enter URL of the link or select a menu name to create a submenu"] = "Введите URL ссылки или выберите имя меню для создания подменю"; +App::$strings["Use magic-auth if available"] = "Использовать magic-auth если возможно"; +App::$strings["Open link in new window"] = "Открыть ссылку в новом окне"; +App::$strings["Order in list"] = "Порядок в списке"; +App::$strings["Higher numbers will sink to bottom of listing"] = "Большие значения в конце списка"; +App::$strings["Submit and finish"] = "Отправить и завершить"; +App::$strings["Submit and continue"] = "Отправить и продолжить"; +App::$strings["Menu:"] = "Меню:"; +App::$strings["Link Target"] = "Цель ссылки"; +App::$strings["Edit menu"] = "Редактировать меню"; +App::$strings["Edit element"] = "Редактировать элемент"; +App::$strings["Drop element"] = "Удалить элемент"; +App::$strings["New element"] = "Новый элемент"; +App::$strings["Edit this menu container"] = "Редактировать контейнер меню"; +App::$strings["Add menu element"] = "Добавить элемент меню"; +App::$strings["Delete this menu item"] = "Удалить этот элемент меню"; +App::$strings["Edit this menu item"] = "Редактировать этот элемент меню"; +App::$strings["Menu item not found."] = "Элемент меню не найден."; +App::$strings["Menu item deleted."] = "Элемент меню удалён."; +App::$strings["Menu item could not be deleted."] = "Невозможно удалить элемент меню."; +App::$strings["Edit Menu Element"] = "Редактировать элемент меню"; +App::$strings["Link text"] = "Текст ссылки"; +App::$strings["Plugin %s disabled."] = "Плагин %s отключен."; +App::$strings["Plugin %s enabled."] = "Плагин %s включен."; +App::$strings["Disable"] = "Запретить"; +App::$strings["Enable"] = "Разрешить"; +App::$strings["Toggle"] = "Переключить"; +App::$strings["Author: "] = "Автор: "; +App::$strings["Maintainer: "] = "Сопровождающий:"; +App::$strings["Minimum project version: "] = "Минимальная версия проекта:"; +App::$strings["Maximum project version: "] = "Максимальная версия проекта:"; +App::$strings["Minimum PHP version: "] = "Минимальная версия PHP:"; +App::$strings["Compatible Server Roles: "] = "Совместимые роли сервера:"; +App::$strings["Requires: "] = "Необходимо:"; +App::$strings["Disabled - version incompatibility"] = "Отключено - несовместимость версий"; +App::$strings["Enter the public git repository URL of the addon repo."] = "Введите URL публичного репозитория расширений git"; +App::$strings["Addon repo git URL"] = "URL репозитория расширений git"; +App::$strings["Custom repo name"] = "Пользовательское имя репозитория"; +App::$strings["(optional)"] = "(необязательно)"; +App::$strings["Download Addon Repo"] = "Загрузить репозиторий расширений"; +App::$strings["Install new repo"] = "Установить новый репозиторий"; +App::$strings["Manage Repos"] = "Управление репозиториями"; +App::$strings["Installed Addon Repositories"] = "Установленные репозитории расширений"; +App::$strings["Install a New Addon Repository"] = "Установить новый репозиторий расширений"; +App::$strings["Switch branch"] = "Переключить ветку"; App::$strings["Site settings updated."] = "Настройки сайта обновлены."; -App::$strings["No special theme for accessibility"] = ""; -App::$strings["Yes - with approval"] = ""; -App::$strings["My site is not a public server"] = ""; -App::$strings["My site has paid access only"] = ""; -App::$strings["My site has free access only"] = ""; -App::$strings["My site offers free accounts with optional paid upgrades"] = ""; +App::$strings["%s - (Incompatible)"] = "%s - (несовместимо)"; +App::$strings["mobile"] = "мобильный"; +App::$strings["experimental"] = "экспериментальный"; +App::$strings["unsupported"] = "неподдерживаемый"; +App::$strings["Yes - with approval"] = "Да - требует подтверждения"; +App::$strings["My site is not a public server"] = "Мой сайт не является публичным сервером"; +App::$strings["My site has paid access only"] = "Мой сайт доступен только с оплатой "; +App::$strings["My site has free access only"] = "На моём сайте разрешён свободный доступ"; +App::$strings["My site offers free accounts with optional paid upgrades"] = "На моём сайте разрешены бесплатные аккаунты с дополнительными платными услугами"; +App::$strings["Beginner/Basic"] = "Начинающий/Базовый"; +App::$strings["Novice - not skilled but willing to learn"] = "Новичок - не опытный, но желающий учиться"; +App::$strings["Intermediate - somewhat comfortable"] = "Промежуточный - более удобный"; +App::$strings["Advanced - very comfortable"] = "Продвинутый - очень удобный"; +App::$strings["Expert - I can write computer code"] = "Эксперт - я умею программировать"; +App::$strings["Wizard - I probably know more than you do"] = "Волшебник - возможно я знаю больше чем ты"; +App::$strings["Default permission role for new accounts"] = "Разрешения по умолчанию для новых аккаунтов"; +App::$strings["This role will be used for the first channel created after registration."] = "Эта роль будет использоваться для первого канала, созданного после регистрации."; +App::$strings["Registration"] = "Регистрация"; App::$strings["File upload"] = "Загрузка файла"; App::$strings["Policies"] = "Правила"; -App::$strings["Site name"] = "Название сайта"; +App::$strings["Site default technical skill level"] = "Уровень технических навыков на сайте по умолчанию"; +App::$strings["Used to provide a member experience matched to technical comfort level"] = "Используется чтобы обеспечить удобство на уровне технических навыков пользователя"; +App::$strings["Lock the technical skill level setting"] = "Заблокировать уровень технических навыков"; +App::$strings["Members can set their own technical comfort level by default"] = "Участники могут выбрать уровень своих технических навыков по умолчанию"; App::$strings["Banner/Logo"] = "Баннер / логотип"; +App::$strings["Unfiltered HTML/CSS/JS is allowed"] = "Разрешён нефильтруемый HTML/CSS/JS"; App::$strings["Administrator Information"] = "Информация об администраторе"; -App::$strings["Contact information for site administrators. Displayed on siteinfo page. BBCode can be used here"] = ""; +App::$strings["Contact information for site administrators. Displayed on siteinfo page. BBCode can be used here"] = "Контактная информация для администраторов сайта. Показывается на информационной странице сайта. Можно использовать BBCode."; +App::$strings["Publicly visible description of this site. Displayed on siteinfo page. BBCode can be used here"] = "Публичное видимое описание сайта. Показывается на информационной странице сайта. Можно использовать BBCode."; App::$strings["System language"] = "Язык системы"; -App::$strings["System theme"] = "Тема системы"; -App::$strings["Default system theme - may be over-ridden by user profiles - change theme settings"] = ""; -App::$strings["Mobile system theme"] = "Мобильная тема системы"; -App::$strings["Theme for mobile devices"] = "Тема для мобильных устройств"; -App::$strings["Accessibility system theme"] = ""; -App::$strings["Accessibility theme"] = ""; -App::$strings["Channel to use for this website's static pages"] = ""; -App::$strings["Site Channel"] = "Канал сайта"; -App::$strings["Maximum image size"] = "Максимальный размер"; -App::$strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = ""; -App::$strings["Does this site allow new member registration?"] = ""; -App::$strings["Which best describes the types of account offered by this hub?"] = ""; +App::$strings["System theme"] = "Системная тема"; +App::$strings["Default system theme - may be over-ridden by user profiles - change theme settings"] = "Системная тема по умолчанию - может быть изменена в профиле пользователя - изменить параметры темы."; +App::$strings["Allow Feeds as Connections"] = "Разрешить ленты новостей как контакты"; +App::$strings["(Heavy system resource usage)"] = "(Высокое использование системных ресурсов)"; +App::$strings["Maximum image size"] = "Максимальный размер изображения"; +App::$strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Максимальный размер загруженных изображений в байтах. По умолчанию 0 или без ограничений."; +App::$strings["Does this site allow new member registration?"] = "Разрешается ли регистрация новых пользователей на этом сайте?"; +App::$strings["Invitation only"] = "Только по приглашениям"; +App::$strings["Only allow new member registrations with an invitation code. Above register policy must be set to Yes."] = "Регистрация пользователей разрешается только по приглашениям. Вышеуказанная политика регистрация должны быть установлена в \"Да\"."; +App::$strings["Minimum age"] = "Минимальный возраст"; +App::$strings["Minimum age (in years) for who may register on this site."] = "Минимальный возраст (в годах) для регистрации на этом сайте."; +App::$strings["Which best describes the types of account offered by this hub?"] = "Как лучше описать тип учётных записей предлагаемых на этом хабе?"; App::$strings["Register text"] = "Текст регистрации"; -App::$strings["Will be displayed prominently on the registration page."] = ""; -App::$strings["Accounts abandoned after x days"] = ""; -App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = ""; +App::$strings["Will be displayed prominently on the registration page."] = "Будет отображаться на странице регистрации на видном месте."; +App::$strings["Site homepage to show visitors (default: login box)"] = "Домашняя страница, которая будет показываться посетителям сайт (по умочанию - форма входа)."; +App::$strings["example: 'public' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file."] = "например: 'public' для показа публичного потока, 'page/sys/home' показывает системную страницу home или 'include:home.html' для подключения файла."; +App::$strings["Preserve site homepage URL"] = "Сохранить URL главной страницы сайта"; +App::$strings["Present the site homepage in a frame at the original location instead of redirecting"] = "Показывать домашнюю страницу сайта во фрейме вместо стандартной переадресации"; +App::$strings["Accounts abandoned after x days"] = "Аккаунты считаются заброшенными после N дней"; +App::$strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Системные ресурсы не будут расходоваться для опроса внешних сайтов для заброшенных аккаунтов. Введите 0 для отсутствия ограничений."; App::$strings["Allowed friend domains"] = "Разрешенные домены друзей"; -App::$strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = ""; -App::$strings["Allowed email domains"] = "Разрешенные домены электронной почты"; -App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = ""; -App::$strings["Block public"] = "Блокировать публичный доступ"; -App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = ""; -App::$strings["Force publish"] = "Заставить публиковать"; -App::$strings["Check to force all profiles on this site to be listed in the site directory."] = ""; -App::$strings["Disable discovery tab"] = "Отключить вкладку \"обнаруженные\""; -App::$strings["Remove the tab in the network view with public content pulled from sources chosen for this site."] = ""; -App::$strings["No login on Homepage"] = ""; -App::$strings["Check to hide the login form from your sites homepage when visitors arrive who are not logged in (e.g. when you put the content of the homepage in via the site channel)."] = ""; -App::$strings["Proxy user"] = "Proxy пользователь"; -App::$strings["Proxy URL"] = "Proxy URL"; +App::$strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Список разделённых запятыми доменов с которыми разрешено устанавливать дружеские отношения на этом сайте. Wildcards разрешены. Пусто означает разрешены любые домены."; +App::$strings["Verify Email Addresses"] = "Проверка адреса электронной почты"; +App::$strings["Check to verify email addresses used in account registration (recommended)."] = "Включите для проверки адреса электронной почты использованного при регистрации (рекомендуется)."; +App::$strings["Force publish"] = "Принудительно публиковать"; +App::$strings["Check to force all profiles on this site to be listed in the site directory."] = "Включите для принудительного включения всех учётных записей на данном сайте в каталог."; +App::$strings["Import Public Streams"] = "Импортированные публичные потоки"; +App::$strings["Import and allow access to public content pulled from other sites. Warning: this content is unmoderated."] = "Импортировать и разрешить публичный доступ к загружаемым с других сайтов потоков. Внимание - этот контент не может модерироваться."; +App::$strings["Site only Public Streams"] = "Публичные потоки только с сайта"; +App::$strings["Allow access to public content originating only from this site if Imported Public Streams are disabled."] = "Разрешить доступ к общедоступному контенту, исходящему только с этого сайта, если импортированные публичные потоки отключены."; +App::$strings["Allow anybody on the internet to access the Public streams"] = "Разрешить всем доступ к публичным потокам"; +App::$strings["Disable to require authentication before viewing. Warning: this content is unmoderated."] = "Отключите если для просмотра требуется аутентификация. Внимание - этот контент не может модерироваться."; +App::$strings["Only import Public stream posts with this text"] = "Импортировать только публичные потоки с этим текстом"; +App::$strings["Do not import Public stream posts with this text"] = "Не импортировать публичные потоки с этим текстом"; +App::$strings["Login on Homepage"] = "Вход на домашней странице"; +App::$strings["Present a login box to visitors on the home page if no other content has been configured."] = "Предоставлять форму входа для посетителей на домашней странице если другого содержимого не настроено."; +App::$strings["Enable context help"] = "Включить контекстную помощь"; +App::$strings["Display contextual help for the current page when the help button is pressed."] = "Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"."; +App::$strings["Reply-to email address for system generated email."] = "Адрес email Reply-to для генерируемых системой сообщений."; +App::$strings["Sender (From) email address for system generated email."] = "Адрес email отправителя (From) для генерируемых системой сообщений."; +App::$strings["Name of email sender for system generated email."] = "Имя отправителя для генерируемых системой сообщений."; +App::$strings["Directory Server URL"] = "URL сервера каталогов"; +App::$strings["Default directory server"] = "Сервер каталогов по умолчанию"; +App::$strings["Proxy user"] = "Имя пользователя proxy-сервера"; +App::$strings["Proxy URL"] = "URL proxy-сервера"; App::$strings["Network timeout"] = "Время ожидания сети"; -App::$strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = ""; +App::$strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Значение в секундах. Если установлен в 0 - без ограничений (не рекомендуется)."; App::$strings["Delivery interval"] = "Интервал доставки"; -App::$strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = ""; +App::$strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Значение задержки фоновых процессов доставки в секундах для снижения нагрузки на систему. Рекомендуется 4-5 для серверов совместного использования, 2-3 для частных виртуальных и 0-1 для выделенных серверов."; +App::$strings["Deliveries per process"] = "Доставок на процесс"; +App::$strings["Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5."] = "Количество доставок для одного процесса. Настройте в соответствии с производительностью системы. Рекомендуется 1-5."; +App::$strings["Queue Threshold"] = "Порог очереди"; +App::$strings["Always defer immediate delivery if queue contains more than this number of entries."] = "Всегда откладывать немедленную доставку, если в очереди содержится большее количество записей, чем это."; App::$strings["Poll interval"] = "Интервал опроса"; -App::$strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = ""; -App::$strings["Maximum Load Average"] = ""; -App::$strings["Maximum system load before delivery and poll processes are deferred - default 50."] = ""; -App::$strings["No server found"] = "Сервер не найден"; -App::$strings["ID"] = "ID"; -App::$strings["for channel"] = "для канала"; -App::$strings["on server"] = "на сервере"; -App::$strings["Status"] = "Статус"; -App::$strings["Update has been marked successful"] = ""; -App::$strings["Executing %s failed. Check system logs."] = ""; -App::$strings["Update %s was successfully applied."] = ""; -App::$strings["Update %s did not return a status. Unknown if it succeeded."] = ""; -App::$strings["Update function %s could not be found."] = ""; -App::$strings["No failed updates."] = "Ошибок обновлений нет."; -App::$strings["Failed Updates"] = "Обновления с ошибками"; -App::$strings["Mark success (if update was manually applied)"] = ""; -App::$strings["Attempt to execute this update step automatically"] = ""; -App::$strings["%s user blocked/unblocked"] = array( +App::$strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Задержка фоновых процессов опроса на указанное количество секунд для снижения нагрузки на систему. Если 0 - использовать интервал доставки."; +App::$strings["Path to ImageMagick convert program"] = "Путь к ImageMagick"; +App::$strings["If set, use this program to generate photo thumbnails for huge images ( > 4000 pixels in either dimension), otherwise memory exhaustion may occur. Example: /usr/bin/convert"] = "При установке эта программа генерирует миниатюры изображений для больших файлов (свыше 4000 в любом измерении) для предотвращения утечки памяти. Пример: /usr/bin/convert"; +App::$strings["Allow SVG thumbnails in file browser"] = "Разрешить SVG миниатюры в просмотрщике файлов"; +App::$strings["WARNING: SVG images may contain malicious code."] = "Внимание: изображения SVG могут содержать вредоносный код."; +App::$strings["Maximum Load Average"] = "Максимальная средняя нагрузка"; +App::$strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Максимальная нагрузка системы для откладывания процессов опроса и доставки - по умолчанию 50."; +App::$strings["Expiration period in days for imported (grid/network) content"] = "Срок хранения в днях для импортированного содержимого (из матрицы / сети)."; +App::$strings["0 for no expiration of imported content"] = "0 для постоянного хранения импортированного содержимого"; +App::$strings["Do not expire any posts which have comments less than this many days ago"] = "Продлевать строк хранения для любых публикаций, которые имею комментарии возрастом менее этого значения"; +App::$strings["Public servers: Optional landing (marketing) webpage for new registrants"] = "Публичные серверы: необязательная маркетинговая лэндинг-страница для новых пользователей"; +App::$strings["Create this page first. Default is %s/register"] = "Создать эту страницу первой. По умолчанию %s/register"; +App::$strings["Page to display after creating a new channel"] = "Страница для показа после создания нового канала"; +App::$strings["Default: profiles"] = "По умолчанию: профили"; +App::$strings["Optional: site location"] = "Необязательно: место размещения сайта"; +App::$strings["Region or country"] = "Регион или страна"; +App::$strings["Log settings updated."] = "Настройки журнала обновлены."; +App::$strings["Clear"] = "Очистить"; +App::$strings["Debugging"] = "Отладка"; +App::$strings["Log file"] = "Файл журнала"; +App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "Должен быть доступен для записи веб-сервером. Пусть относителен основного каталога веб-сайта."; +App::$strings["Log level"] = "Уровень журнала"; +App::$strings["%s account blocked/unblocked"] = array( 0 => "", 1 => "", - 2 => "", ); -App::$strings["%s user deleted"] = array( - 0 => "%s канал удален", - 1 => "%s канала удалены", - 2 => "%s каналов удалено", +App::$strings["%s account deleted"] = array( + 0 => "", + 1 => "", ); App::$strings["Account not found"] = "Аккаунт не найден"; -App::$strings["User '%s' deleted"] = "Пользователь '%s' удален"; -App::$strings["User '%s' unblocked"] = "Пользователь '%s' разрешен"; -App::$strings["User '%s' blocked"] = "Пользователь '%s' заблокирован"; -App::$strings["Users"] = "Пользователи"; +App::$strings["Account '%s' blocked"] = "Аккаунт '%s' заблокирован"; +App::$strings["Account '%s' unblocked"] = "Аккаунт '%s' разблокирован"; App::$strings["select all"] = "выбрать все"; -App::$strings["User registrations waiting for confirm"] = "Регистрации пользователей ждут подтверждения"; +App::$strings["Registrations waiting for confirm"] = "Регистрации ждут подтверждения"; App::$strings["Request date"] = "Дата запроса"; -App::$strings["No registrations."] = "Новых регистраций пока нет."; -App::$strings["Approve"] = "Утвердить"; -App::$strings["Deny"] = "Запретить"; +App::$strings["No registrations."] = "Нет новых регистраций."; +App::$strings["ID"] = ""; +App::$strings["All Channels"] = "Все каналы"; App::$strings["Register date"] = "Дата регистрации"; App::$strings["Last login"] = "Последний вход"; -App::$strings["Expires"] = ""; -App::$strings["Service Class"] = "Класс службы"; -App::$strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; -App::$strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; +App::$strings["Expires"] = "Срок действия"; +App::$strings["Service Class"] = "Класс обслуживания"; +App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно."; +App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:"; +App::$strings["https://youtube.com/
https://www.youtube.com/
https://youtu.be/
https://vimeo.com/
https://soundcloud.com/
"] = ""; +App::$strings["All other embedded content will be filtered, unless embedded content from that site is explicitly blocked."] = "се остальные встроенные материалы будут отфильтрованы, если встроенное содержимое с этого сайта явно заблокировано."; +App::$strings["Block public"] = "Блокировать публичный доступ"; +App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Установите флажок для блокировки публичного доступа ко всем другим общедоступным страницам на этом сайте, если вы в настоящее время не аутентифицированы."; +App::$strings["Provide a cloud root directory"] = "Предоставить корневой каталог в облаке"; +App::$strings["The cloud root directory lists all channel names which provide public files"] = "В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы"; +App::$strings["Show total disk space available to cloud uploads"] = "Показывать общее доступное для загрузок место в хранилище"; +App::$strings["Set \"Transport Security\" HTTP header"] = "Установить HTTP-заголовок \"Transport Security\""; +App::$strings["Set \"Content Security Policy\" HTTP header"] = "Установить HTTP-заголовок \"Content Security Policy\""; +App::$strings["Allowed email domains"] = "Разрешённые домены email"; +App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Список разделённых запятыми доменов для которых разрешена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены."; +App::$strings["Not allowed email domains"] = "Запрещённые домены email"; +App::$strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые домены не будут указаны."; +App::$strings["Allow communications only from these sites"] = "Разрешить связь только с этими сайтами"; +App::$strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Один сайт на строку. Оставьте пустым для разрешения взаимодействия без ограничений (по умочанию)."; +App::$strings["Block communications from these sites"] = "Блокировать связь с этими сайтами"; +App::$strings["Allow communications only from these channels"] = "Разрешить связь только для этих каналов"; +App::$strings["One channel (hash) per line. Leave empty to allow from any channel by default"] = "Один канал (или его хэш) на строку. Оставьте пустым для разрешения взаимодействия с любым каналом (по умолчанию)."; +App::$strings["Block communications from these channels"] = "Блокировать связь с этими каналами"; +App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Разрешать встраивание только для безопасных (SSL/TLS) сайтов и ссылок."; +App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Разрешить встраивать нефильтруемое HTML-содержимое только для этих доменов"; +App::$strings["One site per line. By default embedded content is filtered."] = "Один сайт на строку. По умолчанию встраиваемое содержимое фильтруется."; +App::$strings["Block embedded HTML from these domains"] = "Блокировать встраивание HTML-содержимого для этих доменов"; +App::$strings["Update has been marked successful"] = "Обновление было помечено как успешное"; +App::$strings["Executing %s failed. Check system logs."] = "Выполнение %s неудачно. Проверьте системный журнал."; +App::$strings["Update %s was successfully applied."] = "Обновление %sбыло успешно применено."; +App::$strings["Update %s did not return a status. Unknown if it succeeded."] = "Обновление %s не вернуло статус. Неизвестно было ли оно успешным."; +App::$strings["Update function %s could not be found."] = "Функция обновления %sне может быть найдена."; +App::$strings["Failed Updates"] = "Обновления с ошибками"; +App::$strings["Mark success (if update was manually applied)"] = "Пометить успешным (если обновление было применено вручную)"; +App::$strings["Attempt to execute this update step automatically"] = "Попытаться применить это обновление автоматически"; +App::$strings["No failed updates."] = "Ошибок обновлений нет."; +App::$strings["New Profile Field"] = "Поле нового профиля"; +App::$strings["Field nickname"] = "Псевдоним поля"; +App::$strings["System name of field"] = "Системное имя поля"; +App::$strings["Input type"] = "Тип ввода"; +App::$strings["Field Name"] = "Имя поля"; +App::$strings["Label on profile pages"] = "Метка на странице профиля"; +App::$strings["Help text"] = "Текст подсказки"; +App::$strings["Additional info (optional)"] = "Дополнительная информация (необязательно)"; +App::$strings["Field definition not found"] = "Определения поля не найдено"; +App::$strings["Edit Profile Field"] = "Редактировать поле профиля"; +App::$strings["Basic Profile Fields"] = "Основные поля профиля"; +App::$strings["Advanced Profile Fields"] = "Дополнительные поля профиля"; +App::$strings["(In addition to basic fields)"] = "(к основым полям)"; +App::$strings["All available fields"] = "Все доступные поля"; +App::$strings["Custom Fields"] = "Настраиваемые поля"; +App::$strings["Create Custom Field"] = "Создать настраиваемое поле"; +App::$strings["Theme settings updated."] = "Настройки темы обновленны."; +App::$strings["No themes found."] = "Темы не найдены."; +App::$strings["Screenshot"] = "Снимок экрана"; +App::$strings["[Experimental]"] = "[экспериментальный]"; +App::$strings["[Unsupported]"] = "[неподдерживаемый]"; +App::$strings["Off"] = "Выкл."; +App::$strings["On"] = "Вкл."; +App::$strings["Lock feature %s"] = "Функция блокировки \"%s\""; +App::$strings["Manage Additional Features"] = "Управлять дополнительными функциями"; +App::$strings["Queue Statistics"] = "Статистика очереди"; +App::$strings["Total Entries"] = "Всего записей"; +App::$strings["Priority"] = "Приоритет"; +App::$strings["Destination URL"] = "Конечный URL-адрес"; +App::$strings["Mark hub permanently offline"] = "Пометить хаб как постоянно отключенный"; +App::$strings["Empty queue for this hub"] = "Освободить очередь для этого хаба"; +App::$strings["Last known contact"] = "Последний известный контакт"; +App::$strings["Password changed for account %d."] = "Пароль для аккаунта %d изменён."; +App::$strings["Account settings updated."] = "Настройки аккаунта обновлены."; +App::$strings["Account not found."] = "Учётная запись не найдена."; +App::$strings["Account Edit"] = "Редактировать аккаунт"; +App::$strings["New Password"] = "Новый пароль"; +App::$strings["New Password again"] = "Повторите новый пароль"; +App::$strings["Technical skill level"] = "Уровень технических навыков"; +App::$strings["Account language (for emails)"] = "Язык сообщения для email"; +App::$strings["Service class"] = "Класс обслуживания"; App::$strings["%s channel censored/uncensored"] = array( 0 => "", 1 => "", - 2 => "", +); +App::$strings["%s channel code allowed/disallowed"] = array( + 0 => "", + 1 => "", ); App::$strings["%s channel deleted"] = array( - 0 => "%s канал удален", - 1 => "%s канала удалены", - 2 => "%s каналы удалены", + 0 => "", + 1 => "", ); App::$strings["Channel not found"] = "Канал не найден"; -App::$strings["Channel '%s' deleted"] = "Канал '%s' удален"; -App::$strings["Channel '%s' uncensored"] = ""; -App::$strings["Channel '%s' censored"] = ""; -App::$strings["Censor"] = ""; -App::$strings["Uncensor"] = ""; -App::$strings["UID"] = "UID"; -App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; -App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; -App::$strings["Plugin %s disabled."] = "Плагин %s отключен."; -App::$strings["Plugin %s enabled."] = "Плагин %s включен."; -App::$strings["Disable"] = "Запретить"; -App::$strings["Enable"] = "Разрешить"; -App::$strings["Toggle"] = "Переключить"; -App::$strings["Author: "] = "Автор: "; -App::$strings["Maintainer: "] = "Обслуживающий: "; -App::$strings["No themes found."] = "Темы не найдены."; -App::$strings["Screenshot"] = "Скриншот"; -App::$strings["[Experimental]"] = "[экспериментальный]"; -App::$strings["[Unsupported]"] = "[неподдерживаемый]"; -App::$strings["Log settings updated."] = "Настройки журнала обновленны."; -App::$strings["Clear"] = "Очистить"; -App::$strings["Debugging"] = "Включить/Выключить"; -App::$strings["Log file"] = "Файл журнала"; -App::$strings["Must be writable by web server. Relative to your Red top-level directory."] = "Должна быть доступна для записи веб-сервером. Относительно верхнего уровня веб-сайта."; -App::$strings["Log level"] = "Уровень журнала"; -App::$strings["Thing updated"] = ""; -App::$strings["Object store: failed"] = ""; -App::$strings["Thing added"] = ""; -App::$strings["OBJ: %1\$s %2\$s %3\$s"] = ""; -App::$strings["Show Thing"] = ""; -App::$strings["item not found."] = "Элемент не найден."; -App::$strings["Edit Thing"] = ""; -App::$strings["Select a profile"] = "Выберите профиль"; -App::$strings["Post an activity"] = ""; -App::$strings["Only sends to viewers of the applicable profile"] = ""; -App::$strings["Name of thing e.g. something"] = ""; -App::$strings["URL of thing (optional)"] = ""; -App::$strings["URL for photo of thing (optional)"] = ""; -App::$strings["Add Thing to your Profile"] = ""; +App::$strings["Channel '%s' deleted"] = "Канал '%s' удалён"; +App::$strings["Channel '%s' censored"] = "Канал '%s' цензурируется"; +App::$strings["Channel '%s' uncensored"] = "Канал '%s' нецензурируется"; +App::$strings["Channel '%s' code allowed"] = "Код в канале '%s' разрешён"; +App::$strings["Channel '%s' code disallowed"] = "Код в канале '%s' запрещён"; +App::$strings["Censor"] = "Цензурировать"; +App::$strings["Uncensor"] = "Нецензурировать"; +App::$strings["Allow Code"] = "Разрешить код"; +App::$strings["Disallow Code"] = "Запретить код"; +App::$strings["UID"] = ""; +App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["Token verification failed."] = "Не удалось выполнить проверку токена."; +App::$strings["Email Verification Required"] = "Требуется проверка адреса email"; +App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма."; +App::$strings["Resend Email"] = "Выслать повторно"; +App::$strings["Validation token"] = "Проверочный токен"; +App::$strings["Total invitation limit exceeded."] = "Превышено общее количество приглашений."; +App::$strings["%s : Not a valid email address."] = "%s : Недействительный адрес электронной почты."; +App::$strings["Please join us on \$Projectname"] = "Присоединятесь к \$Projectname !"; +App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "Превышен лимит приглашений. Пожалуйста, свяжитесь с администрацией сайта."; +App::$strings["%d message sent."] = array( + 0 => "", + 1 => "", +); +App::$strings["You have no more invitations available"] = "У вас больше нет приглашений"; +App::$strings["Send invitations"] = "Отправить приглашение"; +App::$strings["Enter email addresses, one per line:"] = "Введите адреса электронной почты, по одному в строке:"; +App::$strings["Please join my community on \$Projectname."] = "Присоединятесь к нашему сообществу \$Projectname !"; +App::$strings["You will need to supply this invitation code:"] = "Вам нужно предоставит этот код приглашения:"; +App::$strings["1. Register at any \$Projectname location (they are all inter-connected)"] = "1. Зарегистрируйтесь на любом из серверов \$Projectname"; +App::$strings["2. Enter my \$Projectname network address into the site searchbar."] = "2. Введите сетевой адрес \$Projectname в поисковой строке сайта"; +App::$strings["or visit"] = "или посетите"; +App::$strings["3. Click [Connect]"] = "Нажать [Подключиться]"; +App::$strings["Block Title"] = "Заблокировать заголовок"; +App::$strings["Cover Photos"] = "Фотографии обложки"; +App::$strings["Your cover photo may be visible to anybody on the internet"] = "Ваше фото обложки может быть видно кому угодно в Интернете"; +App::$strings["Change Cover Photo"] = "Изменить фотографию обложки"; +App::$strings["Like/Dislike"] = "Нравится / не нравится"; +App::$strings["This action is restricted to members."] = "Это действие доступно только участникам."; +App::$strings["Please login with your \$Projectname ID or register as a new \$Projectname member to continue."] = "Пожалуйста, для продолжения войдите с вашим \$Projectname ID или зарегистрируйтесь как новый участник \$Projectname."; +App::$strings["Invalid request."] = "Неверный запрос."; +App::$strings["thing"] = "предмет"; +App::$strings["Channel unavailable."] = "Канал недоступен."; +App::$strings["Previous action reversed."] = "Предыдущее действие отменено."; +App::$strings["%1\$s agrees with %2\$s's %3\$s"] = "%1\$s согласен с %2\$s %3\$s"; +App::$strings["%1\$s doesn't agree with %2\$s's %3\$s"] = "%1\$s не согласен с %2\$s %3\$s"; +App::$strings["%1\$s abstains from a decision on %2\$s's %3\$s"] = "%1\$s воздерживается от решения по %2\$s%3\$s"; +App::$strings["Action completed."] = "Действие завершено."; +App::$strings["Thank you."] = "Спасибо."; +App::$strings["If enabled, connection requests will be approved without your interaction"] = "Если включено, запросы контактов будут одобрены без вашего участия"; +App::$strings["Automatic approval settings"] = "Настройки автоматического одобрения"; +App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "Некоторые индивидуальные разрешения могут быть предустановлены или заблокированы на основании типа вашего канала и настроек приватности."; +App::$strings["Unable to update menu."] = "Невозможно обновить меню."; +App::$strings["Unable to create menu."] = "Невозможно создать меню."; +App::$strings["Menu Name"] = "Название меню"; +App::$strings["Unique name (not visible on webpage) - required"] = "Уникальное название (не видимо на странице) - требуется"; +App::$strings["Menu Title"] = "Заголовок меню"; +App::$strings["Visible on webpage - leave empty for no title"] = "Видимость на странице - оставьте пустым если не хотите иметь заголовок"; +App::$strings["Allow Bookmarks"] = "Разрешить закладки"; +App::$strings["Menu may be used to store saved bookmarks"] = "Меню может использоваться, чтобы сохранить закладки"; +App::$strings["Submit and proceed"] = "Отправить и обработать"; +App::$strings["Drop"] = "Удалить"; +App::$strings["Bookmarks allowed"] = "Закладки разрешены"; +App::$strings["Delete this menu"] = "Удалить это меню"; +App::$strings["Edit menu contents"] = "Редактировать содержание меню"; +App::$strings["Edit this menu"] = "Редактировать это меню"; +App::$strings["Menu could not be deleted."] = "Меню не может быть удалено."; +App::$strings["Edit Menu"] = "Редактировать меню"; +App::$strings["Add or remove entries to this menu"] = "Добавить или удалить пункты этого меню"; +App::$strings["Menu name"] = "Название меню"; +App::$strings["Must be unique, only seen by you"] = "Должно быть уникальным (видно только вам)"; +App::$strings["Menu title"] = "Заголовок меню"; +App::$strings["Menu title as seen by others"] = "Видимый другими заголовок меню"; +App::$strings["Allow bookmarks"] = "Разрешить закладки"; +App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Вы создали %1$.0f из %2$.0f возможных каналов."; +App::$strings["Create a new channel"] = "Создать новый канал"; +App::$strings["Create New"] = "Создать новый"; +App::$strings["Current Channel"] = "Текущий канал"; +App::$strings["Switch to one of your channels by selecting it."] = "Выбрать и переключиться на один из ваших каналов"; +App::$strings["Default Channel"] = "Основной канал"; +App::$strings["Make Default"] = "Сделать основным"; +App::$strings["%d new messages"] = "%d новых сообщений"; +App::$strings["%d new introductions"] = "%d новых представлений"; +App::$strings["Delegated Channel"] = "Делегированный канал"; +App::$strings["Channel name changes are not allowed within 48 hours of changing the account password."] = "Изменение названия канала не разрешается в течении 48 часов после смены пароля у аккаунта."; +App::$strings["Change channel nickname/address"] = "Изменить псевдоним / адрес канала"; +App::$strings["Any/all connections on other networks will be lost!"] = "Любые / все контакты в других сетях будут утеряны!"; +App::$strings["New channel address"] = "Новый адрес канала"; +App::$strings["Rename Channel"] = "Переименовать канал"; +App::$strings["Additional Features"] = "Дополнительные функции"; +App::$strings["Your technical skill level"] = "Ваш уровень технических навыков"; +App::$strings["Used to provide a member experience and additional features consistent with your comfort level"] = "Используется чтобы обеспечить соответствие опыта пользователя и функций на комфортном для вас уровне"; +App::$strings["Nobody except yourself"] = "Никто кроме вас"; +App::$strings["Only those you specifically allow"] = "Только персонально разрешённые"; +App::$strings["Approved connections"] = "Одобренные контакты"; +App::$strings["Any connections"] = "Любые контакты"; +App::$strings["Anybody on this website"] = "Любой на этом сайте"; +App::$strings["Anybody in this network"] = "Любой в этой сети"; +App::$strings["Anybody authenticated"] = "Любой аутентифицированный"; +App::$strings["Anybody on the internet"] = "Любой в интернете"; +App::$strings["Publish your default profile in the network directory"] = "Публиковать ваш профиль по умолчанию в сетевом каталоге"; +App::$strings["Allow us to suggest you as a potential friend to new members?"] = "Разрешить предлагать вас как потенциального друга для новых пользователей?"; +App::$strings["or"] = "или"; +App::$strings["Your channel address is"] = "Адрес вашего канала"; +App::$strings["Your files/photos are accessible via WebDAV at"] = "Ваши файы / фотографии доступны через WebDAV по"; +App::$strings["Automatic membership approval"] = "Членство одобрено автоматически"; +App::$strings["Channel Settings"] = "Выбор канала"; +App::$strings["Basic Settings"] = "Основные настройки"; +App::$strings["Email Address:"] = "Адрес email:"; +App::$strings["Your Timezone:"] = "Часовой пояс:"; +App::$strings["Default Post Location:"] = "Расположение по умолчанию:"; +App::$strings["Geographical location to display on your posts"] = "Показывать географическое положение в ваших публикациях"; +App::$strings["Use Browser Location:"] = "Определять расположение из браузера"; +App::$strings["Adult Content"] = "Содержимое для взрослых"; +App::$strings["This channel frequently or regularly publishes adult content. (Please tag any adult material and/or nudity with #NSFW)"] = "Этот канал часто или регулярно публикует содержимое для взрослых. Пожалуйста, помечайте любой такой материал тегом #NSFW"; +App::$strings["Security and Privacy Settings"] = "Безопасность и настройки приватности"; +App::$strings["Your permissions are already configured. Click to view/adjust"] = "Ваши разрешения уже настроены. Нажмите чтобы просмотреть или изменить"; +App::$strings["Hide my online presence"] = "Скрывать моё присутствие онлайн"; +App::$strings["Prevents displaying in your profile that you are online"] = "Предотвращает отображения статуса \"в сети\" в вашем профиле"; +App::$strings["Simple Privacy Settings:"] = "Простые настройки безопасности:"; +App::$strings["Very Public - extremely permissive (should be used with caution)"] = "Полностью открытый - сверхлиберальный (должен использоваться с осторожностью)"; +App::$strings["Typical - default public, privacy when desired (similar to social network permissions but with improved privacy)"] = "Обычный - открытый по умолчанию, приватность по желанию (как в социальных сетях, но с улучшенными настройками)"; +App::$strings["Private - default private, never open or public"] = "Частный - частный по умочанию, не открытый и не публичный"; +App::$strings["Blocked - default blocked to/from everybody"] = "Закрытый - заблокированный по умолчанию от / для всех"; +App::$strings["Allow others to tag your posts"] = "Разрешить другим отмечать ваши публикации"; +App::$strings["Often used by the community to retro-actively flag inappropriate content"] = "Часто используется сообществом для маркировки неподобающего содержания"; +App::$strings["Channel Permission Limits"] = "Ограничения разрешений канала"; +App::$strings["Expire other channel content after this many days"] = "Храненить содержимое других каналов, дней"; +App::$strings["0 or blank to use the website limit."] = "0 или пусто - использовать настройки сайта."; +App::$strings["This website expires after %d days."] = "Срок хранения содержимого этого сайта истекает через %d дней"; +App::$strings["This website does not expire imported content."] = "Срок хранения импортированного содержимого этого сайта не ограничен."; +App::$strings["The website limit takes precedence if lower than your limit."] = "Ограничение сайта имеет приоритет если ниже вашего значения."; +App::$strings["Maximum Friend Requests/Day:"] = "Запросов в друзья в день:"; +App::$strings["May reduce spam activity"] = "Может ограничить спам активность"; +App::$strings["Default Privacy Group"] = "Группа конфиденциальности по умолчанию"; +App::$strings["Use my default audience setting for the type of object published"] = "Использовать настройки аудитории по умолчанию для типа опубликованного объекта"; +App::$strings["Profile to assign new connections"] = "Назначить профиль для новых контактов"; +App::$strings["Channel role and privacy"] = "Роль и конфиденциальность канала"; +App::$strings["Default Permissions Group"] = "Группа разрешений по умолчанию"; +App::$strings["Maximum private messages per day from unknown people:"] = "Максимально количество сообщений от незнакомых людей, в день:"; +App::$strings["Useful to reduce spamming"] = "Полезно для сокращения количества спама"; +App::$strings["By default post a status message when:"] = "По умолчанию публиковать новый статус при:"; +App::$strings["accepting a friend request"] = "одобрении запроса в друзья"; +App::$strings["joining a forum/community"] = "вступлении в сообщество / форум"; +App::$strings["making an interesting profile change"] = "интересном изменении профиля"; +App::$strings["Send a notification email when:"] = "Отправить уведомление по email когда:"; +App::$strings["You receive a connection request"] = "вы получили новый запрос контакта"; +App::$strings["Your connections are confirmed"] = "ваш запрос контакта был одобрен"; +App::$strings["Someone writes on your profile wall"] = "кто-то написал на стене вашего профиля"; +App::$strings["Someone writes a followup comment"] = "кто-то пишет комментарий"; +App::$strings["You receive a private message"] = "вы получили личное сообщение"; +App::$strings["You receive a friend suggestion"] = "вы получили предложение друзей"; +App::$strings["You are tagged in a post"] = "вы были отмечены в публикации"; +App::$strings["You are poked/prodded/etc. in a post"] = "вас толкнули, подтолкнули и т.п. в публикации"; +App::$strings["Someone likes your post/comment"] = "кому-то нравится ваша публикация / комментарий"; +App::$strings["Show visual notifications including:"] = "Показывать визуальные оповещения включая:"; +App::$strings["Unseen grid activity"] = "невидимую сетевую активность"; +App::$strings["Unseen channel activity"] = "невидимую активность в канале"; +App::$strings["Unseen private messages"] = "невидимое личное сообщение"; +App::$strings["Upcoming events"] = "грядущие события"; +App::$strings["Events today"] = "события сегодня"; +App::$strings["Upcoming birthdays"] = "грядущие дни рождения"; +App::$strings["Not available in all themes"] = "не доступно во всех темах"; +App::$strings["System (personal) notifications"] = "системные (личные) уведомления"; +App::$strings["System info messages"] = "сообщения с системной информацией"; +App::$strings["System critical alerts"] = "критические уведомления системы"; +App::$strings["New connections"] = "новые контакты"; +App::$strings["System Registrations"] = "системные регистрации"; +App::$strings["Unseen shared files"] = "невидимые общие файлы"; +App::$strings["Unseen public activity"] = "невидимая публичная активность"; +App::$strings["Unseen likes and dislikes"] = "невидимые лайки и дислайки"; +App::$strings["Unseen forum posts"] = "Невидимые публикации на форуме"; +App::$strings["Email notification hub (hostname)"] = "Центр уведомлений по email (имя хоста)"; +App::$strings["If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s"] = "Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s"; +App::$strings["Show new wall posts, private messages and connections under Notices"] = "Показать новые сообщения на стене, личные сообщения и контакты в \"Уведомлениях\""; +App::$strings["Notify me of events this many days in advance"] = "Уведомлять меня о событиях заранее, дней"; +App::$strings["Must be greater than 0"] = "Должно быть больше 0"; +App::$strings["Advanced Account/Page Type Settings"] = "Дополнительные настройки учётной записи / страницы"; +App::$strings["Change the behaviour of this account for special situations"] = "Изменить поведение этого аккаунта в особых ситуациях"; +App::$strings["Miscellaneous Settings"] = "Дополнительные настройки"; +App::$strings["Default photo upload folder"] = "Каталог загрузки фотографий по умолчанию"; +App::$strings["%Y - current year, %m - current month"] = "%Y - текущий год, %y - текущий месяц"; +App::$strings["Default file upload folder"] = "Каталог загрузки файлов по умолчанию"; +App::$strings["Personal menu to display in your channel pages"] = "Персональное меню для отображения на странице вашего канала"; +App::$strings["Remove this channel."] = "Удалить этот канал."; +App::$strings["Firefox Share \$Projectname provider"] = ""; +App::$strings["Start calendar week on Monday"] = "Начинать календарную неделю с понедельника"; +App::$strings["Affinity Slider settings updated."] = "Обновлены настройки слайдера cходства."; +App::$strings["No feature settings configured"] = "Параметры функций не настроены"; +App::$strings["Default maximum affinity level"] = "Максимальный уровень сходства по умолчанию."; +App::$strings["0-99 default 99"] = "0-99 (по умолчанию 99)"; +App::$strings["Default minimum affinity level"] = "Минимальный уровень сходства по умолчанию."; +App::$strings["0-99 - default 0"] = "0-99 (по умолчанию 0)"; +App::$strings["Affinity Slider Settings"] = "Настройки слайдера сходства"; +App::$strings["Addon Settings"] = "Настройки расширений"; +App::$strings["Please save/submit changes to any panel before opening another."] = "Пожалуйста сохраните / отправьте изменения на панели прежде чем открывать другую."; +App::$strings["Not valid email."] = "Не действительный адрес email."; +App::$strings["Protected email address. Cannot change to that email."] = "Защищенный адрес электронной почты. Нельзя изменить."; +App::$strings["System failure storing new email. Please try again."] = "Системная ошибка сохранения email. Пожалуйста попробуйте ещё раз."; +App::$strings["Technical skill level updated"] = "Уровень технических навыков обновлён"; +App::$strings["Password verification failed."] = "Не удалось выполнить проверку пароля."; +App::$strings["Passwords do not match. Password unchanged."] = "Пароли не совпадают. Пароль не изменён."; +App::$strings["Empty passwords are not allowed. Password unchanged."] = "Пустые пароли не допускаются. Пароль не изменён."; +App::$strings["Password changed."] = "Пароль изменен."; +App::$strings["Password update failed. Please try again."] = "Изменение пароля не удалось. Пожалуйста, попробуйте ещё раз."; +App::$strings["Account Settings"] = "Настройки аккаунта"; +App::$strings["Current Password"] = "Текущий пароль"; +App::$strings["Enter New Password"] = "Введите новый пароль:"; +App::$strings["Confirm New Password"] = "Подтвердите новый пароль:"; +App::$strings["Leave password fields blank unless changing"] = "Оставьте поля пустыми до измнения"; +App::$strings["Remove this account including all its channels"] = "Удалить этот аккаунт включая все каналы"; +App::$strings["%s - (Experimental)"] = "%s - (экспериментальный)"; +App::$strings["Display Settings"] = "Настройки отображения"; +App::$strings["Theme Settings"] = "Настройки темы"; +App::$strings["Custom Theme Settings"] = "Дополнительные настройки темы"; +App::$strings["Content Settings"] = "Настройки содержимого"; +App::$strings["Display Theme:"] = "Тема отображения:"; +App::$strings["Select scheme"] = "Выбрать схему"; +App::$strings["Preload images before rendering the page"] = "Предзагрузка изображений перед обработкой страницы"; +App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "Субъективное время загрузки страницы будет длиннее, но страница будет готова при отображении"; +App::$strings["Enable user zoom on mobile devices"] = "Включить масштабирование на мобильных устройствах"; +App::$strings["Update browser every xx seconds"] = "Обновление браузера каждые N секунд"; +App::$strings["Minimum of 10 seconds, no maximum"] = "Минимум 10 секунд, без максимума"; +App::$strings["Maximum number of conversations to load at any time:"] = "Максимальное количество бесед для загрузки одновременно:"; +App::$strings["Maximum of 100 items"] = "Максимум 100 элементов"; +App::$strings["Show emoticons (smilies) as images"] = "Показывать эмотиконы (смайлики) как изображения"; +App::$strings["Provide channel menu in navigation bar"] = "Показывать меню канала в панели навигации"; +App::$strings["Default: channel menu located in app menu"] = "По умолчанию каналы расположены в меню приложения"; +App::$strings["Manual conversation updates"] = "Обновление бесед вручную"; +App::$strings["Default is on, turning this off may increase screen jumping"] = "Включено по умолчанию, выключение может привести к рывкам в отображении"; +App::$strings["Link post titles to source"] = "Ссылки на источник заголовков публикаций"; +App::$strings["System Page Layout Editor - (advanced)"] = "Системный редактор макета страницы - (продвинутый)"; +App::$strings["Use blog/list mode on channel page"] = "Использовать режим блога / списка на странице канала"; +App::$strings["(comments displayed separately)"] = "(комментарии отображаются отдельно)"; +App::$strings["Use blog/list mode on grid page"] = "Использовать режим блога / списка на странице матрицы"; +App::$strings["Channel page max height of content (in pixels)"] = "Максимальная высота содержания канала (в пикселях)"; +App::$strings["click to expand content exceeding this height"] = "нажмите, чтобы увеличить содержимое, превышающее эту высоту"; +App::$strings["Grid page max height of content (in pixels)"] = "Максимальная высота содержания на страницах матрицы (в пикселях)"; +App::$strings["Permission Name is required."] = "Требуется имя разрешения"; +App::$strings["Permission category saved."] = "Категория разрешения сохранена."; +App::$strings["Use this form to create permission rules for various classes of people or connections."] = "Используйте эту форму для создания правил разрешений для различных групп людей и контактов."; +App::$strings["Permission Name"] = "Имя разрешения"; +App::$strings["Name and Secret are required"] = "Требуются имя и код"; +App::$strings["Add OAuth2 application"] = "Добавить приложение OAuth2"; +App::$strings["Name of application"] = "Название приложения"; +App::$strings["Automatically generated - change if desired. Max length 20"] = "Сгенерирован автоматические - измените если требуется. Макс. длина 20"; +App::$strings["Redirect"] = "Перенаправление"; +App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI перенаправления - оставьте пустыми до тех пока ваше приложение не требует этого"; +App::$strings["Grant Types"] = "Разрешить типы"; +App::$strings["leave blank unless your application sepcifically requires this"] = "оставьте пустыми до тех пока ваше приложение не требует этого"; +App::$strings["Authorization scope"] = "Область полномочий"; +App::$strings["OAuth2 Application not found."] = "Приложение OAuth2 не найдено."; +App::$strings["Add application"] = "Добавить приложение"; +App::$strings["Connected OAuth2 Apps"] = "Подключённые приложения OAuth2"; +App::$strings["Client key starts with"] = "Ключ клиента начинаетя с"; +App::$strings["No name"] = "Без названия"; +App::$strings["Remove authorization"] = "Удалить разрешение"; +App::$strings["Name is required"] = "Необходимо имя"; +App::$strings["Key and Secret are required"] = "Требуются ключ и код"; +App::$strings["Icon url"] = "URL значка"; +App::$strings["Application not found."] = "Приложение не найдено."; +App::$strings["Connected Apps"] = "Подключенные приложения"; +App::$strings["This channel is limited to %d tokens"] = "Этот канал ограничен %d токенами"; +App::$strings["Name and Password are required."] = "Требуются имя и пароль."; +App::$strings["Token saved."] = "Токен сохранён."; +App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in Access Control Lists and visitors may login using these credentials to access private content."] = "Используйте эту форму для создания идентификаторов временного доступа для сторонних пользователей. Эти идентификаторы могут использоваться в списках контроля доступа, и посетители могут использовать эти учетные данные для доступа к частному контенту."; +App::$strings["You may also provide dropbox style access links to friends and associates by adding the Login Password to any specific site URL as shown. Examples:"] = "Вы также можете предоставить доступ в стиле dropbox для друзей и коллег, добавив имя и пароль для входа на любой URL-адрес сайта. Например:"; +App::$strings["Login Name"] = "Имя"; +App::$strings["Login Password"] = "Пароль"; +App::$strings["Expires (yyyy-mm-dd)"] = "Срок действия (yyyy-mm-dd)"; +App::$strings["Room not found"] = "Комната не найдена"; +App::$strings["Leave Room"] = "Покинуть комнату"; +App::$strings["Delete Room"] = "Удалить комнату"; +App::$strings["I am away right now"] = "Я сейчас отошёл"; +App::$strings["I am online"] = "Я на связи"; +App::$strings["Bookmark this room"] = "Запомнить эту комнату"; +App::$strings["New Chatroom"] = "Новый чат"; +App::$strings["Chatroom name"] = "Название чата"; +App::$strings["Expiration of chats (minutes)"] = "Завершение чатов (минут)"; +App::$strings["%1\$s's Chatrooms"] = "Чаты пользователя %1\$s"; +App::$strings["No chatrooms available"] = "Нет доступных чатов"; +App::$strings["Expiration"] = "Срок действия"; +App::$strings["min"] = "мин."; +App::$strings["Website:"] = "Веб-сайт:"; +App::$strings["Remote Channel [%s] (not yet known on this site)"] = "Удалённый канал [%s] (пока неизвестен на этом сайте)"; +App::$strings["Rating (this information is public)"] = "Оценка (эта информация общедоступна)"; +App::$strings["Optionally explain your rating (this information is public)"] = "Объясните свою оценку (необязательно; эта информация общедоступна)"; +App::$strings["Fetching URL returns error: %1\$s"] = "Загрузка URL возвращает ошибку: %1\$s"; +App::$strings["Location not found."] = "Местоположение не найдено"; +App::$strings["Location lookup failed."] = "Поиск местоположения не удался"; +App::$strings["Please select another location to become primary before removing the primary location."] = "Пожалуйста, выберите другое местоположение в качестве основного прежде чем удалить предыдущее"; +App::$strings["Syncing locations"] = "Синхронизировать местоположение"; +App::$strings["No locations found."] = "Местоположений не найдено"; +App::$strings["Manage Channel Locations"] = "Управление местоположением канала"; +App::$strings["Sync Now"] = "Синхронизировать"; +App::$strings["Please wait several minutes between consecutive operations."] = "Пожалуйста, подождите несколько минут между последовательными операциями."; +App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "По возможности, очистите местоположение, войдя на этот веб-сайт / хаб и удалив свой канал."; +App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Используйте эту форму, чтобы удалить местоположение, если хаб больше не функционирует."; App::$strings["Nothing to import."] = "Ничего импортировать."; -App::$strings["Unable to download data from old server"] = "Невозможно загрузить данные из старого сервера"; +App::$strings["Unable to download data from old server"] = "Невозможно загрузить данные со старого сервера"; App::$strings["Imported file is empty."] = "Импортированный файл пуст."; -App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = ""; -App::$strings["Channel clone failed. Import failed."] = ""; -App::$strings["Cloned channel not found. Import failed."] = ""; -App::$strings["Import completed."] = "Импорт завершен."; +App::$strings["Your service plan only allows %d channels."] = "Ваш класс обслуживания разрешает только %d каналов."; +App::$strings["No channel. Import failed."] = "Канала нет. Импорт невозможен."; App::$strings["You must be logged in to use this feature."] = "Вы должны войти в систему, чтобы использовать эту функцию."; -App::$strings["Import Channel"] = "Импорт канала"; -App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file. Only identity and connections/relationships will be imported. Importation of content is not yet available."] = ""; +App::$strings["Import Channel"] = "Импортировать канал"; +App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file."] = "Используйте эту форм для импорта существующего канала с другого сервера / хаба. Вы можете получить идентификационные данные канала со старого сервера / хаба через сеть или предоставить файл экспорта."; App::$strings["File to Upload"] = "Файл для загрузки"; -App::$strings["Or provide the old server/hub details"] = ""; +App::$strings["Or provide the old server/hub details"] = "или предоставьте данные старого сервера"; App::$strings["Your old identity address (xyz@example.com)"] = "Ваш старый адрес идентичности (xyz@example.com)"; App::$strings["Your old login email address"] = "Ваш старый адрес электронной почты"; App::$strings["Your old login password"] = "Ваш старый пароль"; -App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = ""; -App::$strings["Make this hub my primary location"] = ""; -App::$strings["Total invitation limit exceeded."] = ""; -App::$strings["%s : Not a valid email address."] = "%s : Не действительный адрес электронной почты."; -App::$strings["Please join us on Red"] = "Пожалуйста, присоединяйтесь к нам в Red"; -App::$strings["Invitation limit exceeded. Please contact your site administrator."] = ""; -App::$strings["%s : Message delivery failed."] = "%s : Доставка сообщения не удалась."; -App::$strings["%d message sent."] = array( - 0 => "%d сообщение отправленно.", - 1 => "%d сообщения отправленно.", - 2 => "%d сообщений отправленно.", +App::$strings["Import a few months of posts if possible (limited by available memory"] = "Импортировать несколько месяцев публикаций если возможно (ограничено доступной памятью)"; +App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Для любого варианта, пожалуйста, выберите, следует ли сделать этот хаб вашим новым основным адресом, или ваше прежнее местоположение должно продолжить выполнять эту роль. Вы сможете отправлять сообщения из любого местоположения, но только одно может быть помечено как основное место для файлов, фотографий и мультимедиа."; +App::$strings["Make this hub my primary location"] = "Сделать этот хаб главным"; +App::$strings["Move this channel (disable all previous locations)"] = "Переместить это канал (отключить все предыдущие месторасположения)"; +App::$strings["Use this channel nickname instead of the one provided"] = "Использовать псевдоним этого канала вместо предоставленного"; +App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным образом назначен похожий псевдоним если такое имя уже выделено на этом сайте."; +App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Процесс может занять несколько минут. Пожалуйста, отправьте форму только один раз и оставьте эту страницу открытой до завершения."; +App::$strings["No connections."] = "Контактов нет."; +App::$strings["Visit %s's profile [%s]"] = "Посетить %s ​​профиль [%s]"; +App::$strings["View Connections"] = "Просмотр контактов"; +App::$strings["Authentication failed."] = "Ошибка аутентификации."; +App::$strings["Your real name is recommended."] = "Рекомендуется использовать ваше настоящее имя."; +App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""; +App::$strings["This will be used to create a unique network address (like an email address)."] = "Это будет использовано для создания уникального сетевого адреса (наподобие email)."; +App::$strings["Allowed characters are a-z 0-9, - and _"] = "Разрешённые символы a-z 0-9, - и _"; +App::$strings["Channel name"] = "Название канала"; +App::$strings["Choose a short nickname"] = "Выберите короткий псевдоним"; +App::$strings["Select a channel permission role compatible with your usage needs and privacy requirements."] = "Выберите разрешения для канала в соответствии с вашими потребностями и требованиями безопасности."; +App::$strings["Read more about channel permission roles"] = "Прочитать больше о разрешениях для каналов"; +App::$strings["Create a Channel"] = "Создать канал"; +App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Канал это уникальная сетевая идентичность. Он может представлять человека (профиль в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту и многие другие вещи."; +App::$strings["or import an existing channel from another location."] = "или импортировать существующий канал из другого места."; +App::$strings["Validate"] = "Проверить"; +App::$strings["Manage apps"] = "Управление приложениями"; +App::$strings["Create new app"] = "Создать новое приложение"; +App::$strings["No default suggestions were found."] = "Предложений по умолчанию не найдено."; +App::$strings["%d rating"] = array( + 0 => "%d оценка", + 1 => "%d оценки", + 2 => "%d оценок", ); -App::$strings["You have no more invitations available"] = "У вас больше нет приглашений"; -App::$strings["Send invitations"] = "Послать приглашения"; -App::$strings["Enter email addresses, one per line:"] = "Введите адреса электронной почты, по одному на строку:"; -App::$strings["Your message:"] = "Сообщение:"; -App::$strings["You are cordially invited to join me and some other close friends on the Hubzilla - a revolutionary new decentralised communication and information tool."] = ""; -App::$strings["You will need to supply this invitation code: \$invite_code"] = ""; -App::$strings["Please visit my channel at"] = "Пожалуйста, посетите мой канал на"; -App::$strings["Once you have registered (on ANY Hubzilla site - they are all inter-connected), please connect with my Hubzilla channel address:"] = ""; -App::$strings["Click the [Register] link on the following page to join."] = ""; -App::$strings["For more information about the Hubzilla Project and why it has the potential to change the internet as we know it, please visit http://getzot.com"] = "Чтобы узнать больше о проекте Hubzilla, и чтобы узнать почему он имеет потенциал для изменения привычного нам Интернета, пожалуйста, посетите http://getzot.com"; -App::$strings["Unable to locate original post."] = "Не удалось найти оригинал."; -App::$strings["Empty post discarded."] = "Отказаться от пустой почты."; -App::$strings["Executable content type not permitted to this channel."] = ""; -App::$strings["System error. Post not saved."] = "Системная ошибка. Сообщение не сохранено."; -App::$strings["You have reached your limit of %1$.0f top level posts."] = ""; -App::$strings["You have reached your limit of %1$.0f webpages."] = ""; -App::$strings["[Embedded content - reload page to view]"] = ""; -App::$strings["Help with this feature"] = ""; -App::$strings["Layout Name"] = "Название шаблона"; -App::$strings["thing"] = ""; -App::$strings["Remote privacy information not available."] = ""; -App::$strings["Visible to:"] = "Кому видно:"; -App::$strings["No connections."] = "Никаких связей."; -App::$strings["Visit %s's profile [%s]"] = "Посетить %s's ​​профиль [%s]"; -App::$strings["View Connnections"] = "Просмотр контактов"; +App::$strings["Gender: "] = "Пол:"; +App::$strings["Status: "] = "Статус:"; +App::$strings["Homepage: "] = "Домашняя страница:"; +App::$strings["Description:"] = "Описание:"; +App::$strings["Public Forum:"] = "Публичный форум:"; +App::$strings["Keywords: "] = "Ключевые слова:"; +App::$strings["Don't suggest"] = "Не предлагать"; +App::$strings["Common connections (estimated):"] = "Общие контакты (оценочно):"; +App::$strings["Global Directory"] = "Глобальный каталог"; +App::$strings["Local Directory"] = "Локальный каталог"; +App::$strings["Finding:"] = "Поиск:"; +App::$strings["next page"] = "следующая страница"; +App::$strings["previous page"] = "предыдущая страница"; +App::$strings["Sort options"] = "Параметры сортировки"; +App::$strings["Alphabetic"] = "По алфавиту"; +App::$strings["Reverse Alphabetic"] = "Против алфавита"; +App::$strings["Newest to Oldest"] = "От новых к старым"; +App::$strings["Oldest to Newest"] = "От старых к новым"; +App::$strings["No entries (some entries may be hidden)."] = "Нет записей (некоторые записи могут быть скрыты)."; +App::$strings["Enter a folder name"] = "Введите название каталога"; +App::$strings["or select an existing folder (doubleclick)"] = "или выберите существующий каталог (двойной щелчок)"; +App::$strings["Invalid message"] = "Неверное сообщение"; +App::$strings["no results"] = "Ничего не найдено."; +App::$strings["channel sync processed"] = "синхронизация канала завершена"; +App::$strings["queued"] = "в очереди"; +App::$strings["posted"] = "опубликовано"; +App::$strings["accepted for delivery"] = "принято к доставке"; +App::$strings["updated"] = "обновлено"; +App::$strings["update ignored"] = "обновление игнорируется"; +App::$strings["permission denied"] = "доступ запрещен"; +App::$strings["recipient not found"] = "получатель не найден"; +App::$strings["mail recalled"] = "почта отозвана"; +App::$strings["duplicate mail received"] = "получено дублирующее сообщение"; +App::$strings["mail delivered"] = "почта доставлен"; +App::$strings["Delivery report for %1\$s"] = "Отчёт о доставке для %1\$s"; +App::$strings["Redeliver"] = "Доставить повторно"; +App::$strings["No such group"] = "Нет такой группы"; +App::$strings["No such channel"] = "Нет такого канала"; +App::$strings["Privacy group is empty"] = "Группа безопасности пуста"; +App::$strings["Privacy group: "] = "Группа безопасности:"; +App::$strings["Please login."] = "Пожалуйста, войдите."; +App::$strings["No service class restrictions found."] = "Ограничений класса обслуживание не найдено."; +App::$strings["Add Card"] = "Добавить карточку"; +App::$strings["Change Order of Pinned Navbar Apps"] = "Изменить порядок приложений на панели навигации"; +App::$strings["Change Order of App Tray Apps"] = "Изменить порядок приложений в лотке"; +App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Используйте стрелки для перемещения приложения влево (вверх) или вправо (вниз) в панели навигации"; +App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Используйте стрелки для перемещения приложения вверх или вниз в лотке"; +App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Превышено максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра."; +App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась."; +App::$strings["Passwords do not match."] = "Пароли не совпадают."; +App::$strings["Registration successful. Continue to create your first channel..."] = "Регистрация завершена успешно. Для продолжения создайте свой первый канал..."; +App::$strings["Registration successful. Please check your email for validation instructions."] = "Регистрация завершена успешно. Пожалуйста проверьте вашу электронную почту для подтверждения."; +App::$strings["Your registration is pending approval by the site owner."] = "Ваша регистрация ожидает одобрения администрации сайта."; +App::$strings["Your registration can not be processed."] = "Ваша регистрация не может быть обработана."; +App::$strings["Registration on this hub is disabled."] = "Регистрация на этом хабе отключена."; +App::$strings["Registration on this hub is by approval only."] = "Регистрация на этом хабе только по утверждению."; +App::$strings["Register at another affiliated hub."] = "Зарегистрироваться на другом хабе."; +App::$strings["Registration on this hub is by invitation only."] = "Регистрация на этом хабе доступна только по приглашениям."; +App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Этот сайт превысил максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра. "; +App::$strings["I accept the %s for this website"] = "Я принимаю %s для этого веб-сайта."; +App::$strings["I am over %s years of age and accept the %s for this website"] = "Мой возраст превышает %s лет и я принимаю %s для этого веб-сайта."; +App::$strings["Your email address"] = "Ваш адрес электронной почты"; +App::$strings["Choose a password"] = "Выберите пароль"; +App::$strings["Please re-enter your password"] = "Пожалуйста, введите пароль еще раз"; +App::$strings["Please enter your invitation code"] = "Пожалуйста, введите Ваш код приглашения"; +App::$strings["Your Name"] = "Ваше имя"; +App::$strings["Real names are preferred."] = "Предпочтительны реальные имена."; +App::$strings["Your nickname will be used to create an easy to remember channel address e.g. nickname%s"] = "Ваш псевдоним будет использован для создания легко запоминаемого адреса канала, напр. nickname %s"; +App::$strings["Select a channel permission role for your usage needs and privacy requirements."] = "Выберите разрешения для канала в зависимости от ваших потребностей и требований приватности."; +App::$strings["no"] = "нет"; +App::$strings["yes"] = "да"; +App::$strings["This site requires email verification. After completing this form, please check your email for further instructions."] = "Этот сайт требует проверку адреса электронной почты. После заполнения этой формы, пожалуйста, проверьте ваш почтовый ящик для дальнейших инструкций."; +App::$strings["This setting requires special processing and editing has been blocked."] = "Этот параметр требует специальной обработки и редактирования и был заблокирован."; +App::$strings["Configuration Editor"] = "Редактор конфигурации"; +App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Предупреждение. Изменение некоторых настроек может привести к неработоспособности вашего канала. Пожалуйста, покиньте эту страницу, если вы точно не значете, как правильно использовать эту функцию."; +App::$strings["Edit Article"] = "Редактировать статью"; +App::$strings["Not found"] = "Не найдено."; +App::$strings["Error retrieving wiki"] = "Ошибка при получении Wiki"; +App::$strings["Error creating zip file export folder"] = "Ошибка при создании zip-файла при экспорте каталога"; +App::$strings["Error downloading wiki: "] = "Ошибка загрузки Wiki:"; +App::$strings["Download"] = "Загрузить"; +App::$strings["Wiki name"] = "Название Wiki"; +App::$strings["Content type"] = "Тип содержимого"; +App::$strings["Type"] = "Тип"; +App::$strings["Any type"] = "Любой тип"; +App::$strings["Lock content type"] = "Зафиксировать тип содержимого"; +App::$strings["Create a status post for this wiki"] = "Создать публикацию о статусе этой Wiki"; +App::$strings["Edit Wiki Name"] = "Редактировать наименование Wiki"; +App::$strings["Wiki not found"] = "Wiki не найдена"; +App::$strings["Rename page"] = "Переименовать страницу"; +App::$strings["Error retrieving page content"] = "Ошибка при получении содержимого страницы"; +App::$strings["New page"] = "Новая страница"; +App::$strings["Revision Comparison"] = "Сравнение ревизий"; +App::$strings["Revert"] = "Вернуть"; +App::$strings["Short description of your changes (optional)"] = "Краткое описание ваших изменений (необязательно)"; +App::$strings["Source"] = "Источник"; +App::$strings["New page name"] = "Новое имя страницы"; +App::$strings["Embed image from photo albums"] = "Встроить изображение из фотоальбома"; +App::$strings["Error creating wiki. Invalid name."] = "Ошибка создания Wiki. Неверное имя."; +App::$strings["A wiki with this name already exists."] = "Wiki с таким именем уже существует."; +App::$strings["Wiki created, but error creating Home page."] = "Wiki создана, но возникла ошибка при создании домашней страницы"; +App::$strings["Error creating wiki"] = "Ошибка при создании Wiki"; +App::$strings["Error updating wiki. Invalid name."] = "Ошибка при обновлении Wiki. Неверное имя."; +App::$strings["Error updating wiki"] = "Ошибка при обновлении Wiki"; +App::$strings["Wiki delete permission denied."] = "Нет прав на удаление Wiki."; +App::$strings["Error deleting wiki"] = "Ошибка удаления Wiki"; +App::$strings["New page created"] = "Создана новая страница"; +App::$strings["Cannot delete Home"] = "Невозможно удалить домашнюю страницу"; +App::$strings["Current Revision"] = "Текущая ревизия"; +App::$strings["Selected Revision"] = "Выбранная ревизия"; +App::$strings["You must be authenticated."] = "Вы должны быть аутентифицированы."; +App::$strings["Hub not found."] = "Узел не найден."; +App::$strings["Item not available."] = "Элемент недоступен."; +App::$strings["Privacy group created."] = "Группа безопасности создана."; +App::$strings["Could not create privacy group."] = "Не удалось создать группу безопасности."; +App::$strings["Privacy group updated."] = "Группа безопасности обновлена."; +App::$strings["Add Group"] = "Добавить группу"; +App::$strings["Privacy group name"] = "Имя группы безопасности"; +App::$strings["Members are visible to other channels"] = "Участники канала видимые для остальных"; +App::$strings["Privacy group removed."] = "Группа безопасности удалена."; +App::$strings["Unable to remove privacy group."] = "Ну удалось удалить группу безопасности."; +App::$strings["Privacy Group: %s"] = "Группа безопасности: %s"; +App::$strings["Privacy group name: "] = "Название группы безопасности:"; +App::$strings["Delete Group"] = "Удалить группу"; +App::$strings["Group members"] = "Члены группы"; +App::$strings["Not in this group"] = "Не в этой группе"; +App::$strings["Click a channel to toggle membership"] = "Нажмите на канал для просмотра членства"; +App::$strings["Profile not found."] = "Профиль не найден."; +App::$strings["Profile deleted."] = "Профиль удален."; +App::$strings["Profile-"] = "Профиль -"; +App::$strings["New profile created."] = "Новый профиль создан."; +App::$strings["Profile unavailable to clone."] = "Профиль недоступен для клонирования."; +App::$strings["Profile unavailable to export."] = "Профиль недоступен для экспорта."; +App::$strings["Profile Name is required."] = "Требуется имя профиля."; +App::$strings["Marital Status"] = "Семейное положение"; +App::$strings["Romantic Partner"] = "Романтический партнер"; +App::$strings["Likes"] = "Нравится"; +App::$strings["Dislikes"] = "Не нравится"; +App::$strings["Work/Employment"] = "Работа / Занятость"; +App::$strings["Religion"] = "Религия"; +App::$strings["Political Views"] = "Политические взгляды"; +App::$strings["Sexual Preference"] = "Сексуальная ориентация"; +App::$strings["Homepage"] = "Домашняя страница"; +App::$strings["Interests"] = "Интересы"; +App::$strings["Profile updated."] = "Профиль обновлен."; +App::$strings["Hide your connections list from viewers of this profile"] = "Скрывать от просмотра ваш список контактов в этом профиле"; +App::$strings["Edit Profile Details"] = "Редактирование профиля"; +App::$strings["View this profile"] = "Посмотреть этот профиль"; +App::$strings["Profile Tools"] = "Инструменты профиля"; +App::$strings["Change cover photo"] = "Изменить фотографию обложки"; +App::$strings["Create a new profile using these settings"] = "Создать новый профиль со следующими настройками"; +App::$strings["Clone this profile"] = "Клонировать этот профиль"; +App::$strings["Delete this profile"] = "Удалить этот профиль"; +App::$strings["Add profile things"] = "Добавить в профиль"; +App::$strings["Relationship"] = "Отношения"; +App::$strings["Import profile from file"] = "Импортировать профиль из файла"; +App::$strings["Export profile to file"] = "Экспортировать профиль в файл"; +App::$strings["Your gender"] = "Ваш пол"; +App::$strings["Marital status"] = "Семейное положение"; +App::$strings["Sexual preference"] = "Сексуальная ориентация"; +App::$strings["Profile name"] = "Имя профиля"; +App::$strings["This is your default profile."] = "Это ваш профиль по умолчанию."; +App::$strings["Your full name"] = "Ваше полное имя"; +App::$strings["Title/Description"] = "Заголовок / описание"; +App::$strings["Street address"] = "Улица, дом, квартира"; +App::$strings["Locality/City"] = "Населенный пункт / город"; +App::$strings["Region/State"] = "Регион / Область"; +App::$strings["Postal/Zip code"] = "Почтовый индекс"; +App::$strings["Who (if applicable)"] = "Кто (если применимо)"; +App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Примеры: ivan1990, Ivan Petrov, ivan@example.com"; +App::$strings["Since (date)"] = "С (дата)"; +App::$strings["Tell us about yourself"] = "Расскажите нам о себе"; +App::$strings["Hometown"] = "Родной город"; +App::$strings["Political views"] = "Политические взгляды"; +App::$strings["Religious views"] = "Религиозные взгляды"; +App::$strings["Keywords used in directory listings"] = "Ключевые слова для участия в каталоге"; +App::$strings["Example: fishing photography software"] = "Например: fishing photography software"; +App::$strings["Musical interests"] = "Музыкальные интересы"; +App::$strings["Books, literature"] = "Книги, литература"; +App::$strings["Television"] = "Телевидение"; +App::$strings["Film/Dance/Culture/Entertainment"] = "Кино / танцы / культура / развлечения"; +App::$strings["Hobbies/Interests"] = "Хобби / интересы"; +App::$strings["Love/Romance"] = "Любовь / романтические отношения"; +App::$strings["School/Education"] = "Школа / образование"; +App::$strings["Contact information and social networks"] = "Информация и социальные сети для связи"; +App::$strings["My other channels"] = "Мои другие контакты"; +App::$strings["Communications"] = "Связи"; +App::$strings["Email verification resent"] = "Сообщение для проверки email отправлено повторно"; +App::$strings["Unable to resend email verification message."] = "Невозможно повторно отправить сообщение для проверки email"; +App::$strings["vcard"] = "vCard"; +App::$strings["Invalid profile identifier."] = "Неверный идентификатор профиля"; +App::$strings["Profile Visibility Editor"] = "Редактор видимости профиля"; +App::$strings["Click on a contact to add or remove."] = "Нажмите на контакт, чтобы добавить или удалить."; +App::$strings["Visible To"] = "Видно"; +App::$strings["Thing updated"] = "Обновлено"; +App::$strings["Object store: failed"] = "Хранлищие объектов: неудача"; +App::$strings["Thing added"] = "Добавлено"; +App::$strings["OBJ: %1\$s %2\$s %3\$s"] = ""; +App::$strings["Show Thing"] = "Показать"; +App::$strings["item not found."] = "Элемент не найден."; +App::$strings["Edit Thing"] = "Редактировать"; +App::$strings["Select a profile"] = "Выбрать профиль"; +App::$strings["Post an activity"] = "Опубликовать мероприятие"; +App::$strings["Only sends to viewers of the applicable profile"] = "Отправлять только подходящий профиль"; +App::$strings["Name of thing e.g. something"] = "Наименование, например \"нечто\""; +App::$strings["URL of thing (optional)"] = "URL (необязательно)"; +App::$strings["URL for photo of thing (optional)"] = "URL для фотографии (необязательно)"; +App::$strings["Add Thing to your Profile"] = "Добавить к вашему профилю"; +App::$strings["Article"] = "Статья"; +App::$strings["Item has been removed."] = "Элемент был удалён."; +App::$strings["Welcome to %s"] = "Добро пожаловать в %s"; +App::$strings["Please refresh page"] = "Пожалуйста обновите страницу"; +App::$strings["Unknown error"] = "Неизвестная ошибка"; App::$strings["No valid account found."] = "Действительный аккаунт не найден."; -App::$strings["Password reset request issued. Check your email."] = ""; +App::$strings["Password reset request issued. Check your email."] = "Запрос на сброс пароля отправлен. Проверьте вашу электронную почту."; App::$strings["Site Member (%s)"] = "Участник сайта (%s)"; -App::$strings["Password reset requested at %s"] = "Требуется сброс пароля на %s"; -App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = ""; -App::$strings["Password Reset"] = "Сбросить пароль"; +App::$strings["Password reset requested at %s"] = "Запроше сброс пароля на %s"; +App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Запрос не может быть проверен. (Вы могли отправить его раньше). Сброс пароля не возможен."; App::$strings["Your password has been reset as requested."] = "Ваш пароль в соответствии с просьбой сброшен."; App::$strings["Your new password is"] = "Ваш новый пароль"; -App::$strings["Save or copy your new password - and then"] = ""; -App::$strings["click here to login"] = "нажмите здесь чтобы выйти"; -App::$strings["Your password may be changed from the Settings page after successful login."] = ""; -App::$strings["Your password has changed at %s"] = "Пароль изменен на %s"; -App::$strings["Forgot your Password?"] = "Забыли пароль или логин?"; -App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = ""; +App::$strings["Save or copy your new password - and then"] = "Сохраните ваш новый пароль и затем"; +App::$strings["click here to login"] = "нажмите здесь чтобы войти"; +App::$strings["Your password may be changed from the Settings page after successful login."] = "Ваш пароль может быть изменён на странице Настройкипосле успешного входа."; +App::$strings["Your password has changed at %s"] = "Пароль был изменен на %s"; +App::$strings["Forgot your Password?"] = "Забыли ваш пароль?"; +App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Введите ваш адрес электронной почты и нажмите отправить чтобы сбросить пароль. Затем проверьте ваш почтовый ящик для дальнейших инструкций. "; App::$strings["Email Address"] = "Адрес электронной почты"; -App::$strings["Reset"] = "Сброс"; -App::$strings["Hub not found."] = "Hub не найден."; -App::$strings["Total votes"] = ""; -App::$strings["Average Rating"] = ""; -App::$strings["Unable to lookup recipient."] = ""; -App::$strings["Unable to communicate with requested channel."] = ""; -App::$strings["Cannot verify requested channel."] = ""; -App::$strings["Selected channel has private message restrictions. Send failed."] = ""; -App::$strings["Messages"] = "Переписка"; -App::$strings["Message deleted."] = "Сообщение удалено."; -App::$strings["Message recalled."] = ""; -App::$strings["Send Private Message"] = "Отправить личное сообщение"; -App::$strings["To:"] = "Кому:"; -App::$strings["Subject:"] = "Тема:"; -App::$strings["Message not found."] = "Сообщение не найдено."; -App::$strings["Delete message"] = "Удалить сообщение"; -App::$strings["Recall message"] = ""; -App::$strings["Message has been recalled."] = ""; -App::$strings["Private Conversation"] = "Личный разговор"; -App::$strings["Delete conversation"] = "Удалить разговор"; -App::$strings["No secure communications available. You may be able to respond from the sender's profile page."] = ""; -App::$strings["Send Reply"] = "Отправить снова"; -App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = ""; -App::$strings["Create a new channel"] = "Создать новый канал"; -App::$strings["Channel Manager"] = "Настройки канала"; -App::$strings["Current Channel"] = "Текущий канал"; -App::$strings["Attach to one of your channels by selecting it."] = ""; -App::$strings["Default Channel"] = "Канал по умолчанию"; -App::$strings["Make Default"] = "Сделать стандартным"; -App::$strings["Wall Photos"] = "Стена фотографий"; -App::$strings["Profile Match"] = "Профиль Совпадение"; -App::$strings["No keywords to match. Please add keywords to your default profile."] = ""; -App::$strings["is interested in:"] = "заинтересован в:"; -App::$strings["No matches"] = "Нет соответствий"; -App::$strings["Menu updated."] = "Меню обновлено."; -App::$strings["Unable to update menu."] = "Невозможно обновление меню."; -App::$strings["Menu created."] = "Меню создано."; -App::$strings["Unable to create menu."] = "Невозможно создать меню."; -App::$strings["Manage Menus"] = "Управление меню"; -App::$strings["Drop"] = "Удалить"; -App::$strings["Create a new menu"] = "Создать новое меню"; -App::$strings["Delete this menu"] = "Удалить это меню"; -App::$strings["Edit menu contents"] = "Редактировать содержание меню"; -App::$strings["Edit this menu"] = "Редактировать это меню"; -App::$strings["New Menu"] = "Новое меню"; -App::$strings["Menu name"] = "Название меню"; -App::$strings["Must be unique, only seen by you"] = ""; -App::$strings["Menu title"] = "Название меню"; -App::$strings["Menu title as seen by others"] = ""; -App::$strings["Allow bookmarks"] = "Разрешить закладки"; -App::$strings["Menu may be used to store saved bookmarks"] = "Меню может использоваться, чтобы сохранить закладки"; -App::$strings["Menu deleted."] = "Меню удалено."; -App::$strings["Menu could not be deleted."] = "Меню не может быть удален."; -App::$strings["Edit Menu"] = "Редактировать меню"; -App::$strings["Add or remove entries to this menu"] = ""; -App::$strings["Conversation removed."] = "Разговор удален."; -App::$strings["No messages."] = "Нет сообщений."; -App::$strings["D, d M Y - g:i A"] = "D, d M Y - g:i A"; -App::$strings["Add a Channel"] = "Добавить контакт"; -App::$strings["A channel is your own collection of related web pages. A channel can be used to hold social network profiles, blogs, conversation groups and forums, celebrity pages, and much more. You may create as many channels as your service provider allows."] = ""; -App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\" "] = ""; -App::$strings["Choose a short nickname"] = "Выберите короткий псевдоним"; -App::$strings["Your nickname will be used to create an easily remembered channel address (like an email address) which you can share with others."] = ""; -App::$strings["Or import an existing channel from another location"] = ""; -App::$strings["Invalid request identifier."] = ""; -App::$strings["Discard"] = "Отменить"; -App::$strings["No more system notifications."] = "Новых оповещений системы пока нет."; -App::$strings["System Notifications"] = "Системные оповещения "; -App::$strings["Unable to find your hub."] = ""; -App::$strings["Post successful."] = "Публикация прошла успешно."; -App::$strings["invalid target signature"] = ""; -App::$strings["OpenID protocol error. No ID returned."] = ""; -App::$strings["App installed."] = "Приложение установлено ."; -App::$strings["Malformed app."] = ""; -App::$strings["Embed code"] = "Код для вставки"; -App::$strings["Edit App"] = "Редактировать приложение"; -App::$strings["Create App"] = "Создать приложение"; -App::$strings["Name of app"] = "Название приложения"; -App::$strings["Location (URL) of app"] = ""; -App::$strings["Photo icon URL"] = ""; -App::$strings["80 x 80 pixels - optional"] = "80 x 80 pixels - необязательно"; -App::$strings["Version ID"] = "Версия ID"; -App::$strings["Price of app"] = ""; -App::$strings["Location (URL) to purchase app"] = ""; -App::$strings["Schema Default"] = ""; -App::$strings["Sans-Serif"] = ""; -App::$strings["Monospace"] = ""; -App::$strings["Theme settings"] = "Настройки темы"; -App::$strings["Set scheme"] = "Установить схему"; -App::$strings["Set font-size for posts and comments"] = "Установить размер шрифта для сообщений и комментариев"; -App::$strings["Set font face"] = ""; -App::$strings["Set iconset"] = ""; -App::$strings["Set big shadow size, default 15px 15px 15px"] = ""; -App::$strings["Set small shadow size, default 5px 5px 5px"] = ""; -App::$strings["Set shadow colour, default #000"] = ""; -App::$strings["Set radius size, default 5px"] = ""; -App::$strings["Set line-height for posts and comments"] = ""; -App::$strings["Set background image"] = ""; -App::$strings["Set background attachment"] = ""; -App::$strings["Set background colour"] = ""; -App::$strings["Set section background image"] = ""; -App::$strings["Set section background colour"] = ""; -App::$strings["Set colour of items - use hex"] = ""; -App::$strings["Set colour of links - use hex"] = ""; -App::$strings["Set max-width for items. Default 400px"] = ""; -App::$strings["Set min-width for items. Default 240px"] = ""; -App::$strings["Set the generic content wrapper width. Default 48%"] = ""; -App::$strings["Set colour of fonts - use hex"] = ""; -App::$strings["Set background-size element"] = ""; -App::$strings["Item opacity"] = ""; -App::$strings["Display post previews only"] = ""; -App::$strings["Display side bar on channel page"] = ""; -App::$strings["Colour of the navigation bar"] = ""; -App::$strings["Item float"] = ""; -App::$strings["Left offset of the section element"] = ""; -App::$strings["Right offset of the section element"] = ""; -App::$strings["Section width"] = ""; -App::$strings["Left offset of the aside"] = ""; -App::$strings["Right offset of the aside element"] = ""; -App::$strings["None"] = ""; -App::$strings["Header image"] = "Графика заголовока"; -App::$strings["Header image only on profile pages"] = ""; -App::$strings["Narrow navbar"] = "Узкая панель навигации"; -App::$strings["Navigation bar background colour"] = "Панель навигации, цвет фона"; -App::$strings["Navigation bar gradient top colour"] = "Панель навигации, цвет градиента вверху"; -App::$strings["Navigation bar gradient bottom colour"] = "Панель навигации, цвет градиента внизу"; -App::$strings["Navigation active button gradient top colour"] = "Панель навигации, цвет градиента вверху активной кнопки"; -App::$strings["Navigation active button gradient bottom colour"] = "Панель навигации, цвет градиента внизу активной кнопки"; -App::$strings["Navigation bar border colour "] = "Панель навигации, цвет границы"; -App::$strings["Navigation bar icon colour "] = "Панель навигации, цвет значков"; -App::$strings["Navigation bar active icon colour "] = "Панель навигации, цвет активного значка"; -App::$strings["link colour"] = "Цвет ссылок"; -App::$strings["Set font-colour for banner"] = "Цвет текста в шапке"; -App::$strings["Set the background colour"] = "Цвет фона на странице канала"; -App::$strings["Set the background image"] = "Фоновое изображение"; -App::$strings["Set the background colour of items"] = "Цвет фона для постов и других элементов"; -App::$strings["Set the background colour of comments"] = "Цвет фона для комментариев"; -App::$strings["Set the border colour of comments"] = "Цвет границы для области комментариев"; -App::$strings["Set the indent for comments"] = ""; -App::$strings["Set the basic colour for item icons"] = "Основной цвет в иконках редактирования"; -App::$strings["Set the hover colour for item icons"] = "Цвет в иконках редактирования при наведении мыши"; -App::$strings["Set font-size for the entire application"] = "Установить размер шрифта для системы в целом"; -App::$strings["Set font-colour for posts and comments"] = "Цвет шрифта для постов и комментариев"; -App::$strings["Set radius of corners"] = "Радиус скруглений"; -App::$strings["Set shadow depth of photos"] = ""; -App::$strings["Set maximum width of conversation regions"] = ""; -App::$strings["Center conversation regions"] = ""; -App::$strings["Set minimum opacity of nav bar - to hide it"] = "Панель навигации, прозрачность"; -App::$strings["Set size of conversation author photo"] = ""; -App::$strings["Set size of followup author photos"] = ""; -App::$strings["Sloppy photo albums"] = ""; -App::$strings["Are you a clean desk or a messy desk person?"] = ""; -App::$strings["Type"] = "Тип"; -App::$strings["Size"] = "Размер"; -App::$strings["Last modified"] = "Последнее изменение"; -App::$strings["Are you sure you want to delete this item?"] = "Вы уверены, что хотите удалить этот элемент?"; +App::$strings["Set your current mood and tell your friends"] = "Установить текущее настроение и рассказать друзьям"; +App::$strings["Warning: Database versions differ by %1\$d updates."] = "Предупреждение: Версия базы данных отличается от %1\$d обновления."; +App::$strings["Import completed"] = "Импорт завершён."; +App::$strings["Import Items"] = "Импортировать объекты"; +App::$strings["Use this form to import existing posts and content from an export file."] = "Используйте эту форму для импорта существующих публикаций и содержимого из файла."; +App::$strings["toggle full screen mode"] = "переключение полноэкранного режима"; +App::$strings["parent"] = "источник"; +App::$strings["Principal"] = "Субъект"; +App::$strings["Addressbook"] = "Адресная книга"; +App::$strings["Schedule Inbox"] = "План занятий входящий"; +App::$strings["Schedule Outbox"] = "План занятий исходящий"; App::$strings["Total"] = "Всего"; -App::$strings["Update %s failed. See error logs."] = ""; -App::$strings["Update Error at %s"] = "Ошибка обновления на %s"; -App::$strings["Create an account to access services and applications within the Hubzilla"] = ""; -App::$strings["Password"] = "Пароль"; -App::$strings["Remember me"] = "Запомнить"; -App::$strings["Forgot your password?"] = "Забыли пароль или логин?"; -App::$strings["permission denied"] = "доступ запрещен"; -App::$strings["Got Zot?"] = "Got Zot?"; -App::$strings["toggle mobile"] = "мобильное подключение"; +App::$strings["Shared"] = "Общие"; +App::$strings["Add Files"] = "Добавить файлы"; +App::$strings["You are using %1\$s of your available file storage."] = "Вы используете %1\$s из доступного вам хранилища файлов."; +App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s%)"] = "Вы используете %1\$s из %2\$s доступного хранилища файлов (%3\$s%)."; +App::$strings["WARNING:"] = "Предупреждение:"; +App::$strings["Create new folder"] = "Создать новую папку"; +App::$strings["Upload file"] = "Загрузить файл"; +App::$strings["Drop files here to immediately upload"] = "Поместите файлы сюда для немедленной загрузки"; -- cgit v1.2.3 From c72f6e6ea8d363c43de27760a2374230ce521606 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 20 Jul 2018 10:42:16 +0200 Subject: fix jot drag and drop --- view/tpl/jot-header.tpl | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index 365a922f9..cd8e3e97c 100755 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -482,10 +482,13 @@ var activeCommentText = ''; } - // file drag hover - function DragDropUploadFileHover(e) { - e.target.className = (e.type == "dragover" ? "hover" : ""); - } + // file drag hover + function DragDropUploadFileHover(e) { + if(e.type == 'dragover') + $(e.target).addClass('hover'); + else + $(e.target).removeClass('hover'); + } // file selection function DragDropUploadFileSelectHandler(e) { @@ -494,7 +497,7 @@ var activeCommentText = ''; DragDropUploadFileHover(e); // open editor if it isn't yet initialised if (!editor) { - initEditor(); + enableOnUser(); } linkdrop(e); @@ -586,7 +589,7 @@ $( document ).on( "click", ".wall-item-delete-link,.page-delete-link,.layout-del openEditor = true; } if(openEditor) { - initEditor(); + enableOnUser(); } } else { postSaveChanges('clean'); -- cgit v1.2.3 From 062633d312b4d595e21ac09029f73ca8768508b0 Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 16:40:35 +0200 Subject: Add var to respect current hstrings.php format --- util/php2po.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index 352ed41f6..c47dcac1b 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -2,9 +2,9 @@ if(! class_exists('App')) { class App { - static public $strings = Array(); + static public $rtl; + static public $strings = Array(); } - //$a = new App(); } if ($argc!=2) { -- cgit v1.2.3 From f6de91bf0fe1abf41d9b15a553ba378e42a956d1 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 20 Jul 2018 16:44:43 +0200 Subject: prevent double file uploads when dropping files into jot --- view/tpl/jot-header.tpl | 1 + 1 file changed, 1 insertion(+) diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index cd8e3e97c..dd64c3454 100755 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -97,6 +97,7 @@ var activeCommentText = ''; $('#invisible-comment-upload').fileupload({ url: 'wall_attach/{{$nickname}}', dataType: 'json', + dropZone: $(), maxChunkSize: 4 * 1024 * 1024, add: function(e,data) { -- cgit v1.2.3 From a65c23546bafa081a37b239045c6e38d5c2b2fdd Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:21:58 +0200 Subject: Add new file --- view/ru/hubzilla_update_fail_eml.tpl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 view/ru/hubzilla_update_fail_eml.tpl diff --git a/view/ru/hubzilla_update_fail_eml.tpl b/view/ru/hubzilla_update_fail_eml.tpl new file mode 100644 index 000000000..c2042e13c --- /dev/null +++ b/view/ru/hubzilla_update_fail_eml.tpl @@ -0,0 +1,14 @@ + +Привет, +Я веб-сервер {{$sitename}}; + +Разработчики Hubzilla только что выпустили обновление {{$update}}  +но когда я попыталась/ся установить его, что-то пошло не так. +Это должно быть исправлено в ближайшее время и требует вмешательства человека. +Пожалуйста, обратитесь к разработчикам Hubzilla, если вы не можете понять, как +исправьте это по своему усмотрению. Моя база данных может быть недействительной. + +Сообщение ошибки является следующим '{{$}}'. + +Приносим извинения за неудобства, + Ваш веб-сервер {{$siteurl}} -- cgit v1.2.3 From 3713aa210f88bc56289917ed66a853e5eb68652e Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:25:46 +0200 Subject: Update lostpass_eml.tpl --- view/ru/lostpass_eml.tpl | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/view/ru/lostpass_eml.tpl b/view/ru/lostpass_eml.tpl index 3b79d2791..76ccb0f01 100644 --- a/view/ru/lostpass_eml.tpl +++ b/view/ru/lostpass_eml.tpl @@ -1,32 +1,35 @@ -Dear {{$username}}, - A request was recently received at {{$sitename}} to reset your account -password. In order to confirm this request, please select the verification link -below or paste it into your web browser address bar. +Уважаемый {{$username}}, + Недавно {{$sitename}} был получен запрос на сброс пароля вашей +учётной записи. Для подтверждения этого запроса, пожалуйста перейдите по ссылке +проверки ниже или вставьте его в адресную строку вашего браузера. -If you did NOT request this change, please DO NOT follow the link -provided and ignore and/or delete this email. +Если вы НЕ запрашивали это измнение, пожалуйста НЕ используйте предоставленную +ссылку и игнорируйте и / или удалите это письмо. -Your password will not be changed unless we can verify that you -issued this request. +Ваш пароль не будет изменён до тех пор, пока мы не сможем убедиться что именно +вами создан запрос. -Follow this link to verify your identity: +Проследуйте по ссылке для подтверждения вашей личности: {{$reset_link}} -You will then receive a follow-up message containing the new password. +После этого вы получите email содержащий новый пароль. -You may change that password from your account settings page after logging in. +Вы можете изменить этот пароль в вашей учётной записи после входа. -The login details are as follows: +Подробности логина: -Site Location: {{$siteurl}} -Login Name: {{$email}} +Расположение сайта: {{$siteurl}} +Имя для входа: {{$email}} -Sincerely, - {{$sitename}} Administrator +С уважением, + администрация {{$sitename}} - +-- +Условия использования сервиса: +{{$siteurl}}/help/TermsOfService + \ No newline at end of file -- cgit v1.2.3 From 8e2e09bb167de47b2171f4698afff3cc472c0fbb Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:26:24 +0200 Subject: Update passchanged_eml.tpl --- view/ru/passchanged_eml.tpl | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/view/ru/passchanged_eml.tpl b/view/ru/passchanged_eml.tpl index 0d94be3c2..86a0ea3f2 100644 --- a/view/ru/passchanged_eml.tpl +++ b/view/ru/passchanged_eml.tpl @@ -1,20 +1,24 @@ -Dear {{$username}}, - Your password has been changed as requested. Please retain this -information for your records (or change your password immediately to -something that you will remember). +Дорогой {{$username}}, + Ваш пароль был изменен, как вы и просили. Пожалуйста, сохраните эту +информацию в ваших записях (или смените свой пароль на такой +который вы точно не забудете). -Your login details are as follows: +Детали учетной записи: -Site Location: {{$siteurl}} -Login Name: {{$email}} -Password: {{$new_password}} +Адрес сайта: {{$siteurl}} +Имя Пользователя: {{$email}} +Пароль: {{$new_password}} -You may change that password from your account settings page after logging in. +Вы можете сменить этот пароль в настройках учетной записи после того, как войдете в систему. -Sincerely, - {{$sitename}} Administrator +С уважением, + администрация {{$sitename}} + +-- +Условия предоставления услуг: +{{$siteurl}}/help/TermsOfService -- cgit v1.2.3 From 86a42aad16ddc6654c0781847c0e69a71c62a2e4 Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:26:54 +0200 Subject: Update register_open_eml.tpl --- view/ru/register_open_eml.tpl | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/view/ru/register_open_eml.tpl b/view/ru/register_open_eml.tpl index 4b397201c..0b148fd61 100644 --- a/view/ru/register_open_eml.tpl +++ b/view/ru/register_open_eml.tpl @@ -1,19 +1,17 @@ -An account has been created at {{$sitename}} for this email address. -The login details are as follows: +Учётная запись была создана на {{$sitename}} для этого адреса электронной почты. +Детали учётной записи: -Site Location: {{$siteurl}} -Login: {{$email}} -Password: (the password which was provided during registration) +Адрес сайта: {{$siteurl}} +Имя для входа: {{$email}} +Пароль: (указанный вами при регистрации) -If this account was created without your knowledge and is not desired, you may -visit this site and reset the password. This will allow you to remove the -account from the links on the Settings page, and we -apologise for any inconvenience. +Если эта учётная запись была создана без вашего ведома или нежелательна, вы +можете посетить сайт и сбросить пароль. Это позволит вам удалить учётную запись +по ссылке на странице "Настройки". +Приносим извинения за любые неудобства. -Thank you and welcome to {{$sitename}}. +Спасибо и добро пожаловать на {{$sitename}}! -Sincerely, - {{$sitename}} Administrator - - +С уважением, + администрация {{$sitename}} -- cgit v1.2.3 From b6c2c8117e4bb778d2dad325398b348969557836 Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:27:29 +0200 Subject: Update register_verify_eml.tpl --- view/ru/register_verify_eml.tpl | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/view/ru/register_verify_eml.tpl b/view/ru/register_verify_eml.tpl index 85d9a12d3..2b2912fd4 100644 --- a/view/ru/register_verify_eml.tpl +++ b/view/ru/register_verify_eml.tpl @@ -1,25 +1,24 @@ -A new user registration request was received at {{$sitename}} which requires -your approval. +Был получен запрос на регистрацию нового пользователя на {{$sitename}} +что требует вашего подтверждения. -The login details are as follows: +Детали учётной записи: -Site Location: {{$siteurl}} -Login Name: {{$email}} -IP Address: {{$details}} +Адрес сайта: {{$siteurl}} +Имя для входа: {{$email}} +IP-адрес: {{$details}} -To approve this request please visit the following link: +Для подтверждения этого запроса пожалуйса перейдите по ссылке: {{$siteurl}}/regmod/allow/{{$hash}} -To deny the request and remove the account, please visit: +Для отказа и удаления учётной записи перейдите по ссылке: {{$siteurl}}/regmod/deny/{{$hash}} -Thank you. - +Спасибо. -- cgit v1.2.3 From 4db4ab9798a07e6fb2cf3ce27cf268ecf0b6fb37 Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:28:13 +0200 Subject: Create register_verify_member.tpl --- view/ru/register_verify_member.tpl | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 view/ru/register_verify_member.tpl diff --git a/view/ru/register_verify_member.tpl b/view/ru/register_verify_member.tpl new file mode 100644 index 000000000..347ae870f --- /dev/null +++ b/view/ru/register_verify_member.tpl @@ -0,0 +1,34 @@ + +Благодарим вас за регистрацию на {{$sitename}}. + +Детали учётной записи: + +Адрес сайта: {{$siteurl}} +Имя для входа: {{$email}} + +Войдите с паролем, который вы указали при регистрации. + +Для предоставления полного доступа необходимо проверить ваш адрес электронной почты. + +Ваш код подтверждения + +{{$hash}} + + +Если вы регистрировали эту учётную запись, пожалуйста введите код подтверждения перейдя по ссылке: + +{{$siteurl}}/regver/allow/{{$hash}} + + +Для отказа и удаления учётной записи перейдите по ссылке: + + +{{$siteurl}}/regver/deny/{{$hash}} + + +Спасибо. + + +-- +Условия предоставления услуг: +{{$siteurl}}/help/TermsOfService -- cgit v1.2.3 From 8fc7f2aca178b170cf23504abdf60dfd6083e2eb Mon Sep 17 00:00:00 2001 From: kostikov Date: Fri, 20 Jul 2018 19:28:45 +0200 Subject: Update update_fail_eml.tpl --- view/ru/update_fail_eml.tpl | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/view/ru/update_fail_eml.tpl b/view/ru/update_fail_eml.tpl index 61f44b1e6..8bcba334f 100644 --- a/view/ru/update_fail_eml.tpl +++ b/view/ru/update_fail_eml.tpl @@ -1,13 +1,14 @@ -Hey, -I'm the web server at {{$sitename}}; - -The Hubzilla developers released update {{$update}} recently, -but when I tried to install it, something went terribly wrong. -This needs to be fixed soon and it requires human intervention. -Please contact a Red developer if you can not figure out how to -fix it on your own. My database might be invalid. - -The error message is '{{$error}}'. - -Apologies for the inconvenience, - your web server at {{$siteurl}} \ No newline at end of file + +Привет, +Я веб-сервер {{$sitename}}; + +Разработчики Hubzilla только что выпустили обновление {{$update}}  +но когда я попыталась/ся установить его, что-то пошло не так. +Это должно быть исправлено в ближайшее время и требует вмешательства человека. +Пожалуйста, обратитесь к разработчикам Hubzilla, если вы не можете понять, как +исправьте это по своему усмотрению. Моя база данных может быть недействительной. + +Сообщение ошибки является следующим '{{$}}. + +Приносим извинения за неудобства, + Ваш веб-сервер {{$siteurl}} -- cgit v1.2.3 From 6be66d6df9c35adb48148b791730ec9c6c533988 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sat, 21 Jul 2018 22:01:59 +0200 Subject: update changelog --- CHANGELOG | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index b2b1fc81f..a1a68fd64 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,97 @@ +Hubzilla 3.6 (????-??-??) + - Update jquery.timeago library + - Implement Hookable CSP + - ActivityStreams: accept header changes to support plume + - Streamline inconsistencies in addon naming + - SECURITY: hash the session_id in logs + - Update justified gallery library + - Hide channel in /cloud root if channel is hidden in directory + - Add resend option to channel sources tp discard original author. + - Provide flag to exclude privacy groups for federation plugin use in collect_recipients() + - Upgrading from redmatrix is no longer supported + - Deal with htmlentity encoding during authentication workflow + - Rework mod group + - Make droping posts of removed connections more memory efficient + - Refactor getOutainfo() for DAV storage + - Optionally report total available space when uploading + - SECURITY: provide option to disable the cloud 'root' directory and make the cloud module require a target channel nickname + - Add plink and llink to viewsource + - Add new 'filter by name' feature + - Remove network tabs + - New activity filter widget + - New activity order widget + - Make menus editable by visitors with webpage write permissions + - Move forum notifications to notifications + - Move manage privacy groups to the panel channel menu + - Don't remove items that are starred, filed, or that you replied to when removing a connection + - Don't deliver local items more than once + - Make navbar search use the module search function in /network and /channel + - Paint the locks on private activitypub items red. Their privacy model is "slightly" different from hubzillas + - Improve new channel creation workflow + - Add hook 'get_system_apps' + - Implement reset button for jot + - Adjust accept header to make pleroma happy + - Provide a general purpose GDPR document + - Provide function to fetch photo contents from url + - Make get_default_profile_photo() pluggable + - Refactor tags/mentions + - Refactor autocomplete mechanism + - Display pubsites link in info area if invite only + - Add cancel button to editor + - Implement MessageFilter for pubstream and sourced messages + - Add supported protocols to siteinfo + - Allow pdf embeds + - Allow uninstall of plugins which no longer exists via cmdline tool + - Improve the homeinstall script + - Provide easy access to the autoperms setting for forum and repository channels + - Implement admin delete of files, photos and posts + - Allow a different username to be used when importing a channel + - Provide warnings about profile photo and cover photo permissions + - Set the 'force' flag on attach_mkdir when initiated from a DAV operation + + Bugfixes + - Fix double file uploads when dropping files into jot + - Fix jot collapsing when drag and drop to open jot + - Fix wrong album name when moving photos + - Fix wrong timestamp localization before first update in mod mail + - Fix post exiration not propagated to other networks (which support it) + - Fix sys channels visible in dirsearch + - Fix remote_self not working correctly + - Fix photos not syncing properly if destination is a postgres site + - Fix wrong hubloc_url for activitypub hublocs + - Fix z_check_dns() for BSD + - Fix not null violation in oauth1 + - Fix DB issues with oauth2 on postgresql + - Fix 'anybody authenticated' not correctly handled in can_comment_on_post() + - Fix postgres issue if register mode is set to yes - with approval + - Fix tag search not finding articles + - Fix issue with mentions when markdown post addon is enabled + - Fix duplicate addressbook entries on repeated channel imports + + Addons + - Cart: various display improvements + - Cart: make cart work with postgresql DB backend + - Cart: add new hzservice for service_classes + - Cart: add storewide currency settings + - Cart: provide channel app 'Shop' for cart addon + - Cart: implement order updating + - Cart: use CSP hook for paypals checkout.js + - Cart: provide a cancel mechanism for orders + - Cart: add paypal button + - Gallery: new addon to display photo albums with the photoswipe library + - Ldapauth: optionally auto create channel + - Pubcrawl: new setting to ignore ActivityPub recipients in privacy groups + - Diaspora: fix issue with displaying multiple photos + - Pubcrawl: provide plink + - Pubcrawl: hubloc_url should be baseurl, not actor url + - Pubcrawl: deliver restricted posts from hubzilla as direct messages (there is no other way to address only a subset of followers in mastodon) + - Pubcrawl: address comments to a restricted mastodon post to /followers + + +Hubzilla 3.4.2 (2018-07-19) + - Compatibility fix for future versions + + Hubzilla 3.4.1 (2018-06-08) - Say bye, bye to GitHub and move sourcecode repositories to #^https://framagit.org/hubzilla - When removing a connection, don't remove items that are starred, filed or replied to -- cgit v1.2.3 From 64efd07f6bf9220d31da61edef07adc43c271af5 Mon Sep 17 00:00:00 2001 From: kostikov Date: Sun, 22 Jul 2018 19:39:53 +0200 Subject: Escape internal quotes in translation on export --- util/php2po.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index c47dcac1b..c165006a1 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -32,17 +32,17 @@ if ($k!="" && substr($l,0,7)=="msgstr "){ $ink = False; - $v = '""'; + $v = ''; //echo "DBG: k:'$k'\n"; if (isset(App::$strings[$k])) { - $v= '"'.App::$strings[$k].'"'; + $v= App::$strings[$k]; //echo "DBG\n"; //var_dump($k, $v, App::$strings[$k], $v); //echo "/DBG\n"; } //echo "DBG: v:'$v'\n"; - $l = "msgstr ".$v."\n"; + $l = "msgstr \"".str_replace('"','\"',$v)."\"\n"; } if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[" )$ink = False;; -- cgit v1.2.3 From 87857fe5d95f91af511b52b75b80f8f2d30c58cc Mon Sep 17 00:00:00 2001 From: kostikov Date: Mon, 23 Jul 2018 12:14:33 +0200 Subject: Update hmessages.po --- view/ru/hmessages.po | 354 +++++++++++++++++++++++++-------------------------- 1 file changed, 171 insertions(+), 183 deletions(-) diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index 365251f15..f7ea3df15 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-04-23 11:34+0200\n" -"PO-Revision-Date: 2018-06-13 19:32+0000\n" -"Last-Translator: Max Kostikov \n" +"PO-Revision-Date: 2018-07-22 19:32+0000\n" +"Last-Translator: Max Kostikov \n" "Language-Team: Russian (http://www.transifex.com/Friendica/hubzilla/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -173,7 +173,7 @@ msgstr "Включить плагин публикаций Dreamwidth" #: ../../extend/addon/hzaddons/redred/redred.php:99 #: ../../extend/addon/hzaddons/wppost/wppost.php:82 #: ../../extend/addon/hzaddons/wppost/wppost.php:105 -#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1621 #: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 @@ -249,7 +249,7 @@ msgstr "Нет" #: ../../extend/addon/hzaddons/redred/redred.php:99 #: ../../extend/addon/hzaddons/wppost/wppost.php:82 #: ../../extend/addon/hzaddons/wppost/wppost.php:105 -#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1621 #: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 @@ -579,8 +579,9 @@ msgid "" "to be installed on this machine with synchronized credentials via the " "\"auth_ejabberd.php\" script." msgstr "" -"Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт" -"\"auth_ejabberd.php\"." +"Если включено, участники автоматически войдут на сервер ejabberd, который должен " +"быть установлен на этом компьютере с синхронизированными учетными данными через " +"скрипт \"auth_ejabberd.php\"." #: ../../extend/addon/hzaddons/xmpp/xmpp.php:102 #: ../../extend/addon/hzaddons/logrot/logrot.php:54 @@ -607,7 +608,7 @@ msgstr "администратор %s" #: ../../extend/addon/hzaddons/hubwall/hubwall.php:73 #, php-format msgid "%1$d of %2$d messages sent." -msgstr "%1$dиз %2$d сообщений отправлено." +msgstr "%1$d из %2$d сообщений отправлено." #: ../../extend/addon/hzaddons/hubwall/hubwall.php:81 msgid "Send email to all hub members." @@ -711,10 +712,7 @@ msgid "" "Please note Diaspora and Friendica statistics are merely those **this " "directory** is aware of, and not all those known in the network. This also " "applies to chatrooms," -msgstr "" -"Обратите внимание, что статистика Diaspora и Friendica это только те, " -"о которых **этот каталог** знает, а не все известные в сети. Это также " -"относится и к чатам." +msgstr "Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам." #: ../../extend/addon/hzaddons/chess/chess.php:353 #: ../../extend/addon/hzaddons/chess/chess.php:542 @@ -1274,9 +1272,9 @@ msgid "" "press the \"New identity\" button or refresh the page to register a new " "identity. You may use the same name." msgstr "" -"Этот идентификатор был удалён другим участником из-за неактивности. " -"Пожалуйста нажмите кнопку \"Новый идентификатор\" для обновления страницы и " -"получения нового идентификатора. Вы можете использовать то же имя." +"Этот идентификатор был удалён другим участником из-за неактивности. Пожалуйста " +"нажмите кнопку \"Новый идентификатор\" для обновления страницы и получения " +"нового идентификатора. Вы можете использовать то же имя." #: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168 msgid "Welcome to Rendezvous!" @@ -1410,8 +1408,7 @@ msgstr "URL сервера Tile" msgid "" "A list of public tile servers" -msgstr "" -"Список общедоступных серверов" +msgstr "Список общедоступных серверов" #: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:170 msgid "Nominatim (reverse geocoding) Server URL" @@ -1421,8 +1418,7 @@ msgstr "URL сервера Nominatim (обратное геокодирован msgid "" "A list of Nominatim servers" -msgstr "" -"Список серверов Nominatim" +msgstr "Список серверов Nominatim" #: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:171 msgid "Default zoom" @@ -1758,7 +1754,7 @@ msgstr "статус" #: ../../include/conversation.php:160 ../../Zotlabs/Module/Like.php:438 #, php-format msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s нравится %2$s %3$s" +msgstr "%1$s нравится %3$s %2$s" #: ../../extend/addon/hzaddons/pubcrawl/as.php:1546 #: ../../include/conversation.php:163 ../../Zotlabs/Module/Like.php:440 @@ -1789,9 +1785,7 @@ msgstr "Доставить получателям ActivityPub в группах msgid "" "May result in a large number of mentions and expose all the members of your " "privacy group" -msgstr "" -"Может привести к большому количеству упоминаний и раскрытию участников " -"группы безопасности" +msgstr "Может привести к большому количеству упоминаний и раскрытию участников группы безопасности" #: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1155 msgid "Send multi-media HTML articles" @@ -1994,8 +1988,7 @@ msgstr "Неизвестная ошибка. Пожалуйста, повтор msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." -msgstr "" -"Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера" +msgstr "Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера" #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:308 msgid "Profile photo updated successfully." @@ -2114,7 +2107,7 @@ msgstr "Показывать только публикации из опреде #: ../../extend/addon/hzaddons/tour/tour.php:110 msgid "" "Easily find posts containing tags (keywords preceded by the \"#\" symbol)." -msgstr "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")." +msgstr "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ #)." #: ../../extend/addon/hzaddons/tour/tour.php:111 msgid "Easily find posts in given category." @@ -2157,7 +2150,10 @@ msgid "" "pause it at any time and continue where you left off by reloading the page, " "or navigting to another page.

You can also advance by pressing the " "return key" -msgstr "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\"" +msgstr "" +"Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

" +"

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

" +"

Также вы можете нажать клавишу \"Назад\"" #: ../../extend/addon/hzaddons/skeleton/skeleton.php:59 msgid "Some setting" @@ -2792,9 +2788,7 @@ msgstr "Кнопка Paypal для платежей не включена." msgid "" "Paypal button payments are not properly configured. Please choose another " "payment option." -msgstr "" -"Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте " -"другой вариант оплаты." +msgstr "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты." #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:71 msgid "Enable Hubzilla Services Module" @@ -2805,7 +2799,7 @@ msgid "Cart - Hubzilla Services Addon" msgstr "Корзина - плагин сервиса Hubzilla" #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:169 -msgid "New SKU" +msgid "New Sku" msgstr "Новый код" #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:204 @@ -3185,11 +3179,11 @@ msgstr "искушённый" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 msgid "raise eyebrows at" -msgstr "" +msgstr "поднять брови" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 msgid "raised their eyebrows at" -msgstr "" +msgstr "поднял брови" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:28 msgid "insult" @@ -3265,11 +3259,11 @@ msgstr "" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 msgid "declare undying love for" -msgstr "" +msgstr "признаться в любви к" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 msgid "declared undying love for" -msgstr "" +msgstr "признался в любви к" #: ../../extend/addon/hzaddons/wppost/wppost.php:45 msgid "Post to WordPress" @@ -3330,71 +3324,71 @@ msgstr "Ваш аккаунт на %s перестанет работать че #: ../../extend/addon/hzaddons/testdrive/testdrive.php:105 msgid "Your $Productname test account is about to expire." -msgstr "Тестовый период вашей учётной записи в $Productname истёк." +msgstr "Срок действия пробного аккаунта в $Productname близок к окончанию." -#: ../../boot.php:1592 +#: ../../boot.php:1595 msgid "Create an account to access services and applications" msgstr "Создайте аккаунт для доступа к службам и приложениям" -#: ../../boot.php:1593 ../../include/nav.php:158 +#: ../../boot.php:1596 ../../include/nav.php:158 #: ../../Zotlabs/Module/Register.php:294 msgid "Register" msgstr "Регистрация" -#: ../../boot.php:1612 ../../include/nav.php:105 ../../include/nav.php:134 +#: ../../boot.php:1615 ../../include/nav.php:105 ../../include/nav.php:134 #: ../../include/nav.php:153 msgid "Logout" msgstr "Выход" -#: ../../boot.php:1613 ../../include/nav.php:120 ../../include/nav.php:124 +#: ../../boot.php:1616 ../../include/nav.php:120 ../../include/nav.php:124 #: ../../Zotlabs/Lib/Apps.php:301 msgid "Login" msgstr "Войти" -#: ../../boot.php:1614 ../../include/channel.php:2334 +#: ../../boot.php:1617 ../../include/channel.php:2334 #: ../../Zotlabs/Module/Rmagic.php:75 msgid "Remote Authentication" msgstr "Удаленная аутентификация" -#: ../../boot.php:1616 +#: ../../boot.php:1619 msgid "Login/Email" msgstr "Пользователь / email" -#: ../../boot.php:1617 +#: ../../boot.php:1620 msgid "Password" msgstr "Пароль" -#: ../../boot.php:1618 +#: ../../boot.php:1621 msgid "Remember me" msgstr "Запомнить меня" -#: ../../boot.php:1621 +#: ../../boot.php:1624 msgid "Forgot your password?" msgstr "Забыли пароль или логин?" -#: ../../boot.php:1622 ../../Zotlabs/Module/Lostpass.php:91 +#: ../../boot.php:1625 ../../Zotlabs/Module/Lostpass.php:91 msgid "Password Reset" msgstr "Сбросить пароль" -#: ../../boot.php:2405 +#: ../../boot.php:2408 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Ошибка SSL/TLS веб-сайта для %s" -#: ../../boot.php:2410 +#: ../../boot.php:2413 msgid "Website SSL certificate is not valid. Please correct." msgstr "SSL/TLS сертификат веб-сайт недействителен. Исправьте это." -#: ../../boot.php:2526 +#: ../../boot.php:2529 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Задания Cron не запущены на %s" -#: ../../boot.php:2531 +#: ../../boot.php:2534 msgid "Cron/Scheduled tasks not running." msgstr "Задания Cron / планировщика не запущены." -#: ../../boot.php:2532 ../../include/datetime.php:238 +#: ../../boot.php:2535 ../../include/datetime.php:238 msgid "never" msgstr "никогд" @@ -3724,7 +3718,7 @@ msgstr "Не нравится" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Agree" -msgstr "За" +msgstr "Согласен" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" @@ -3734,22 +3728,22 @@ msgstr "Против" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Abstain" -msgstr "Воздерживается" +msgstr "Воздерживаюсь" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Attending" -msgstr "Посещает" +msgstr "Присоединившиеся" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Not attending" -msgstr "Не посещает" +msgstr "Не присоединившиеся" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Might attend" -msgstr "Может присутствовать" +msgstr "Могут присоединиться" #: ../../include/conversation.php:690 ../../Zotlabs/Lib/ThreadItem.php:158 msgid "Select" @@ -3902,15 +3896,17 @@ msgstr "%s не нравится это." #, php-format msgid "%2$d people like this." msgid_plural "%2$d people like this." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%2$d человеку это нравится." +msgstr[1] "%2$d человекам это нравится." +msgstr[2] "%2$d человекам это нравится." #: ../../include/conversation.php:1217 #, php-format msgid "%2$d people don't like this." msgid_plural "%2$d people don't like this." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%2$d человеку это не нравится." +msgstr[1] "%2$d человекам это не нравится." +msgstr[2] "%2$d человекам это не нравится." #: ../../include/conversation.php:1223 msgid "and" @@ -3920,8 +3916,9 @@ msgstr "и" #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" -msgstr[0] "" -msgstr[1] "" +msgstr[0] ", и ещё %d человеку" +msgstr[1] ", и ещё %d человекам" +msgstr[2] ", и ещё %d человекам" #: ../../include/conversation.php:1227 #, php-format @@ -4281,58 +4278,66 @@ msgstr "" msgctxt "noun" msgid "Like" msgid_plural "Likes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Нравится" +msgstr[1] "Нравится" +msgstr[2] "Нравится" #: ../../include/conversation.php:1993 ../../Zotlabs/Lib/ThreadItem.php:221 #: ../../Zotlabs/Module/Photos.php:1170 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не нравится" +msgstr[1] "Не нравится" +msgstr[2] "Не нравится" #: ../../include/conversation.php:1996 msgctxt "noun" msgid "Attending" msgid_plural "Attending" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Посетит" +msgstr[1] "Посетят" +msgstr[2] "Посетят" #: ../../include/conversation.php:1999 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не посетит" +msgstr[1] "Не посетят" +msgstr[2] "Не посетят" #: ../../include/conversation.php:2002 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не решил" +msgstr[1] "Не решили" +msgstr[2] "Не решили" #: ../../include/conversation.php:2005 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Согласен" +msgstr[1] "Согласны" +msgstr[2] "Согласны" #: ../../include/conversation.php:2008 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не согласен" +msgstr[1] "Не согласны" +msgstr[2] "Не согласны" #: ../../include/conversation.php:2011 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Воздержался" +msgstr[1] "Воздержались" +msgstr[2] "Воздержались" #: ../../include/zot.php:772 msgid "Invalid data packet" @@ -4366,7 +4371,7 @@ msgstr "Окончание:" #: ../../include/event.php:54 ../../include/event.php:86 #: ../../include/channel.php:1391 ../../Zotlabs/Module/Directory.php:324 msgid "Location:" -msgstr "Откуда:" +msgstr "Местоположение:" #: ../../include/event.php:1011 msgid "This event has been added to your calendar." @@ -4935,7 +4940,9 @@ msgstr "Настраиваемый выбор" msgid "" "Select \"Show\" to allow viewing. \"Don't show\" lets you override and limit " "the scope of \"Show\"." -msgstr "Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам переопределить и ограничить область показа." +msgstr "" +"Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам " +"переопределить и ограничить область показа." #: ../../include/acl_selectors.php:116 msgid "Show" @@ -4997,7 +5004,7 @@ msgstr "менее чем одну секунду" #, php-format msgctxt "e.g. 22 hours ago, 1 minute ago" msgid "%1$d %2$s ago" -msgstr "%1$d %2$s тому назад" +msgstr "%1$d %2$s назад" #: ../../include/datetime.php:273 msgctxt "relative_date" @@ -5621,8 +5628,9 @@ msgstr "Комментарий" #, php-format msgid "%d invitation available" msgid_plural "%d invitations available" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "доступно %d приглашение" +msgstr[1] "доступны %d приглашения" +msgstr[2] "доступны %d приглашений" #: ../../include/contact_widgets.php:16 ../../Zotlabs/Module/Admin/Site.php:313 msgid "Advanced" @@ -6220,9 +6228,7 @@ msgstr "Отображение потока" msgid "" "Ability to order the stream by last post date, last comment date or " "unthreaded activities" -msgstr "" -"Возможность показывать поток по дате последнего сообщения, последнего комментария или " -"по дате публикации" +msgstr "Возможность показывать поток по дате последнего сообщения, последнего комментария или в порядке поступления" #: ../../include/features.php:399 msgid "Contact Filter" @@ -6685,9 +6691,7 @@ msgstr "отлично" msgid "" "Your chosen nickname was either already taken or not valid. Please use our " "suggestion (" -msgstr "" -"Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать " -"наше предложение (" +msgstr "Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать наше предложение (" #: ../../include/js_strings.php:31 msgid ") or enter a new one." @@ -6935,7 +6939,7 @@ msgstr "новая фотография" #, php-format msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" -msgstr "%1$s опубликовал %2$s к %3$s" +msgstr "%1$s опубликовал %2$s в %3$s" #: ../../include/photos.php:668 ../../Zotlabs/Module/Photos.php:1370 #: ../../Zotlabs/Module/Photos.php:1383 ../../Zotlabs/Module/Photos.php:1384 @@ -7104,8 +7108,9 @@ msgstr "Отчёт о доставке" #, php-format msgid "%d comment" msgid_plural "%d comments" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d комментарий" +msgstr[1] "%d комментария" +msgstr[2] "%d комментариев" #: ../../Zotlabs/Lib/ThreadItem.php:347 ../../Zotlabs/Lib/ThreadItem.php:348 #, php-format @@ -7322,7 +7327,7 @@ msgstr "Чтобы прекратить получать эти сообщени #: ../../Zotlabs/Lib/Enotify.php:68 #, php-format msgid "To stop receiving these messages, please adjust your %s." -msgstr "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s." +msgstr "Чтобы прекратить получать эти сообщения, пожалуйста измените %s." #: ../../Zotlabs/Lib/Enotify.php:68 #: ../../Zotlabs/Module/Settings/Channel.php:570 @@ -7540,7 +7545,7 @@ msgstr "Пожалуйста, посетите %s, чтобы одобрить #: ../../Zotlabs/Lib/Enotify.php:640 msgid "[$Projectname:Notify]" -msgstr "" +msgstr "[$Projectname:Уведомление]" #: ../../Zotlabs/Lib/Enotify.php:808 msgid "created a new post" @@ -7700,7 +7705,7 @@ msgstr "Сортировка в порядке поступления" #: ../../Zotlabs/Widget/Activity_order.php:119 msgid "Activity Order" -msgstr "Сортировка по активности" +msgstr "Сортировка активности" #: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:308 msgid "Site" @@ -8472,7 +8477,7 @@ msgstr "Может редактировать мои вики-страницы" #: ../../Zotlabs/Access/Permissions.php:66 msgid "Can post on my channel (wall) page" -msgstr "Может публиковать на моей странице канала (\"стена\")" +msgstr "Может публиковать на моей странице канала" #: ../../Zotlabs/Access/Permissions.php:67 msgid "Can comment on or like my posts" @@ -8488,7 +8493,7 @@ msgstr "Может комментировать или отмечать как #: ../../Zotlabs/Access/Permissions.php:70 msgid "Can forward to all my channel connections via ! mentions in posts" -msgstr "Может отправлять всем подписчикам моего канала через использование ! в публикациях" +msgstr "Может пересылать всем подписчикам моего канала используя ! в публикациях" #: ../../Zotlabs/Access/Permissions.php:71 msgid "Can chat with me" @@ -9766,16 +9771,14 @@ msgstr "Вы также можете экспортировать ваши пу msgid "" "To select all posts for a given year, such as this year, visit %2$s" -msgstr "" -"Для выбора всех публикаций заданного года, например текущего, посетите %2$s" +msgstr "Для выбора всех публикаций заданного года, например текущего, посетите %2$s" #: ../../Zotlabs/Module/Uexport.php:67 #, php-format msgid "" "To select all posts for a given month, such as January of this year, visit " "%2$s" -msgstr "" -"Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2$s" +msgstr "Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2$s" #: ../../Zotlabs/Module/Uexport.php:68 #, php-format @@ -9784,9 +9787,10 @@ msgid "" "%2$s on any site containing your channel. For best results please import " "or restore these in date order (oldest first)." msgstr "" -"Данные файлы с содержимым могут быть импортированы и восстановлены на любом содержащем " -"ваш канал сайте. Посетите %2$s. Для лучших результатов пожалуйста " -"производите импорт и восстановление в порядке датировки (старые сначала)." +"Данные файлы с содержимым могут быть импортированы и восстановлены на любом " +"содержащем ваш канал сайте. Посетите %2$s. Для лучших " +"результатов пожалуйста производите импорт и восстановление в порядке датировки " +"(старые сначала)." #: ../../Zotlabs/Module/Chatsvc.php:131 msgid "Away" @@ -10000,17 +10004,13 @@ msgstr "Фотография недоступна." msgid "" "Your default profile photo is visible to anybody on the internet. Profile " "photos for alternate profiles will inherit the permissions of the profile" -msgstr "" -"Фотография вашего профиля по умолчанию видна всем в Интернете. Фотография" -"профиля для альтернативных профилей наследуют разрешения текущего профиля" +msgstr "Фотография вашего профиля по умолчанию видна всем в Интернете. Фотографияпрофиля для альтернативных профилей наследуют разрешения текущего профиля" #: ../../Zotlabs/Module/Profile_photo.php:454 msgid "" "Your profile photo is visible to anybody on the internet and may be " "distributed to other websites." -msgstr "" -"Фотография вашего профиля видна всем в Интернете и может быть отправлена " -"на другие сайты." +msgstr "Фотография вашего профиля видна всем в Интернете и может быть отправлена на другие сайты." #: ../../Zotlabs/Module/Profile_photo.php:456 #: ../../Zotlabs/Module/Cover_photo.php:392 @@ -10594,8 +10594,8 @@ msgid "" "\">privacy settings, which have higher priority than " "individual settings. You can not change those settings here." msgstr "" -"Некоторые разрешения могут наследовать из " -"настроек приватности ваших каналов которые могут иметь более высокий приоритет " +"Некоторые разрешения могут наследовать из настроек " +"приватности ваших каналов которые могут иметь более высокий приоритет " "чем индивидуальные. Вы не можете менять эти настройки здесь." #: ../../Zotlabs/Module/Connedit.php:895 @@ -10605,10 +10605,10 @@ msgid "" "individual settings. You can change those settings here but they wont have " "any impact unless the inherited setting changes." msgstr "" -"Некоторые разрешения могут быть унаследованы из " -"настроек приватности вашего канала, которые могут иметь более высокий приоритет " -"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения " -"переданных по наследству настроек." +"Некоторые разрешения могут быть унаследованы из настроек " +"приватности вашего канала, которые могут иметь более высокий приоритет " +"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до " +"изменения переданных по наследству настроек." #: ../../Zotlabs/Module/Connedit.php:896 msgid "Last update:" @@ -10805,9 +10805,7 @@ msgstr "Ваша база данных установлена." msgid "" "You may need to import the file \"install/schema_xxx.sql\" manually using a " "database client." -msgstr "" -"Вам может понадобится импортировать файл \"install/schema_xxx.sql\" " -"вручную используя клиент базы данных." +msgstr "Вам может понадобится импортировать файл \"install/schema_xxx.sql\" вручную используя клиент базы данных." #: ../../Zotlabs/Module/Setup.php:198 ../../Zotlabs/Module/Setup.php:262 #: ../../Zotlabs/Module/Setup.php:749 @@ -10944,8 +10942,7 @@ msgstr "Невозможно проверить командную строку msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." -msgstr "" -"В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". " +msgstr "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\"." #: ../../Zotlabs/Module/Setup.php:425 msgid "This is required for message delivery to work." @@ -10974,15 +10971,13 @@ msgstr "Максимальный размер загрузки в PHP" msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" -msgstr "" -"Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования" +msgstr "Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования" #: ../../Zotlabs/Module/Setup.php:477 msgid "" "If running under Windows, please see \"http://www.php.net/manual/en/openssl." "installation.php\"." -msgstr "" -"Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." +msgstr "Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." #: ../../Zotlabs/Module/Setup.php:480 msgid "Generate encryption keys" @@ -11517,8 +11512,7 @@ msgstr "Разрешения по умолчанию для новых акка #: ../../Zotlabs/Module/Admin/Site.php:299 msgid "" "This role will be used for the first channel created after registration." -msgstr "" -"Эта роль будет использоваться для первого канала, созданного после регистрации." +msgstr "Эта роль будет использоваться для первого канала, созданного после регистрации." #: ../../Zotlabs/Module/Admin/Site.php:310 #: ../../Zotlabs/Module/Register.php:278 @@ -11754,7 +11748,8 @@ msgstr "Включить контекстную помощь" #: ../../Zotlabs/Module/Admin/Site.php:352 msgid "" "Display contextual help for the current page when the help button is pressed." -msgstr "Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." +msgstr "" +"Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." #: ../../Zotlabs/Module/Admin/Site.php:354 msgid "Reply-to email address for system generated email." @@ -11931,15 +11926,17 @@ msgstr "Уровень журнала" #, php-format msgid "%s account blocked/unblocked" msgid_plural "%s account blocked/unblocked" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s аккаунт блокирован/разблокирован" +msgstr[1] "%s аккаунта блокированы/разблокированы" +msgstr[2] "%s аккаунтов блокированы/разблокированы" #: ../../Zotlabs/Module/Admin/Accounts.php:44 #, php-format msgid "%s account deleted" msgid_plural "%s accounts deleted" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s аккаунт удалён" +msgstr[1] "%s аккаунта удалёны" +msgstr[2] "%s аккаунтов удалёны" #: ../../Zotlabs/Module/Admin/Accounts.php:80 msgid "Account not found" @@ -12001,28 +11998,30 @@ msgid "" "Selected accounts will be deleted!\\n\\nEverything these accounts had posted " "on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на " +"этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Accounts.php:191 msgid "" "The account {0} will be deleted!\\n\\nEverything this account has posted on " "this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом " -"сайте будет удалено навсегда!\\n\\nВы уверены?" +"Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте " +"будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Security.php:83 msgid "" "By default, unfiltered HTML is allowed in embedded media. This is inherently " "insecure." -msgstr "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." +msgstr "" +"По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." #: ../../Zotlabs/Module/Admin/Security.php:86 msgid "" "The recommended setting is to only allow unfiltered HTML from the following " "sites:" -msgstr "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" +msgstr "" +"Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" #: ../../Zotlabs/Module/Admin/Security.php:87 msgid "" @@ -12053,8 +12052,7 @@ msgstr "Предоставить корневой каталог в облаке #: ../../Zotlabs/Module/Admin/Security.php:96 msgid "" "The cloud root directory lists all channel names which provide public files" -msgstr "" -"В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы" +msgstr "В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы" #: ../../Zotlabs/Module/Admin/Security.php:97 msgid "Show total disk space available to cloud uploads" @@ -12077,8 +12075,7 @@ msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" -msgstr "Список разделённых запятыми доменов для которых разрешена регистрация " -"на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены." +msgstr "Список разделённых запятыми доменов для которых разрешена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены." #: ../../Zotlabs/Module/Admin/Security.php:101 msgid "Not allowed email domains" @@ -12089,9 +12086,7 @@ msgid "" "Comma separated list of domains which are not allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains, unless allowed domains have been defined." -msgstr "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. " -"Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые " -"домены не будут указаны." +msgstr "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые домены не будут указаны." #: ../../Zotlabs/Module/Admin/Security.php:102 msgid "Allow communications only from these sites" @@ -12282,7 +12277,7 @@ msgstr "Вкл." #: ../../Zotlabs/Module/Admin/Features.php:56 #, php-format msgid "Lock feature %s" -msgstr "Функция блокировки \"%s\"" +msgstr "Заблокировать функцию \"%s\"" #: ../../Zotlabs/Module/Admin/Features.php:64 msgid "Manage Additional Features" @@ -12357,22 +12352,25 @@ msgstr "Класс обслуживания" #, php-format msgid "%s channel censored/uncensored" msgid_plural "%s channels censored/uncensored" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s канал цензурируется/нецензурируется" +msgstr[1] "%s канала цензурируются/нецензурируются" +msgstr[2] "%s каналов цензурируются/нецензурируются" #: ../../Zotlabs/Module/Admin/Channels.php:40 #, php-format msgid "%s channel code allowed/disallowed" msgid_plural "%s channels code allowed/disallowed" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "в %s канале код разрешён/запрещён" +msgstr[1] "в %s каналах код разрешён/запрещён" +msgstr[2] "в %s каналах код разрешён/запрещён" #: ../../Zotlabs/Module/Admin/Channels.php:46 #, php-format msgid "%s channel deleted" msgid_plural "%s channels deleted" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s канал удалён" +msgstr[1] "%s канала удалены" +msgstr[2] "%s каналов удалены" #: ../../Zotlabs/Module/Admin/Channels.php:65 msgid "Channel not found" @@ -12428,16 +12426,16 @@ msgid "" "Selected channels will be deleted!\\n\\nEverything that was posted in these " "channels on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на " +"этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Channels.php:163 msgid "" "The channel {0} will be deleted!\\n\\nEverything that was posted in this " "channel on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте " +"будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Email_validation.php:24 #: ../../Zotlabs/Module/Email_resend.php:12 @@ -12455,9 +12453,10 @@ msgid "" "here to complete the account verification step. Please allow a few minutes " "for delivery, and check your spam folder if you do not see the message." msgstr "" -"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен " -"здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут " -"для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма." +"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот " +"токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите " +"несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы " +"не видите письма." #: ../../Zotlabs/Module/Email_validation.php:38 msgid "Resend Email" @@ -12488,8 +12487,9 @@ msgstr "Превышен лимит приглашений. Пожалуйста #, php-format msgid "%d message sent." msgid_plural "%d messages sent." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d сообщение отправлено." +msgstr[1] "%d сообщения отправлено." +msgstr[2] "%d сообщений отправлено." #: ../../Zotlabs/Module/Invite.php:107 msgid "You have no more invitations available" @@ -12538,7 +12538,7 @@ msgstr "Фотографии обложки" #: ../../Zotlabs/Module/Cover_photo.php:390 msgid "Your cover photo may be visible to anybody on the internet" -msgstr "Ваше фото обложки может быть видно кому угодно в Интернете" +msgstr "Фотография вашей обложки может быть видна всем в Интернете" #: ../../Zotlabs/Module/Cover_photo.php:394 msgid "Change Cover Photo" @@ -13125,9 +13125,7 @@ msgstr "Центр уведомлений по email (имя хоста)" msgid "" "If your channel is mirrored to multiple hubs, set this to your preferred " "location. This will prevent duplicate email notifications. Example: %s" -msgstr "" -"Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное " -"местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s" +msgstr "Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s" #: ../../Zotlabs/Module/Settings/Channel.php:606 msgid "Show new wall posts, private messages and connections under Notices" @@ -13757,9 +13755,7 @@ msgstr "Использовать псевдоним этого канала вм msgid "" "Leave blank to keep your existing channel nickname. You will be randomly " "assigned a similar nickname if either name is already allocated on this site." -msgstr "" -"Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным " -"образом назначен похожий псевдоним если такое имя уже выделено на этом сайте." +msgstr "Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным образом назначен похожий псевдоним если такое имя уже выделено на этом сайте." #: ../../Zotlabs/Module/Import.php:562 msgid "" @@ -13793,8 +13789,7 @@ msgid "" "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " "Group\"" msgstr "" -"Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " -"Group\"" +"Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\"" #: ../../Zotlabs/Module/New_channel.php:162 msgid "" @@ -13819,9 +13814,7 @@ msgstr "Выберите короткий псевдоним" msgid "" "Select a channel permission role compatible with your usage needs and " "privacy requirements." -msgstr "" -"Выберите разрешения для канала в соответствии с вашими потребностями и " -"требованиями безопасности." +msgstr "Выберите разрешения для канала в соответствии с вашими потребностями и требованиями безопасности." #: ../../Zotlabs/Module/New_channel.php:177 #: ../../Zotlabs/Module/Register.php:266 @@ -13837,10 +13830,7 @@ msgid "" "A channel is a unique network identity. It can represent a person (social " "network profile), a forum (group), a business or celebrity page, a newsfeed, " "and many other things." -msgstr "" -"Канал это уникальная сетевая идентичность. Он может представлять человека (профиль " -"в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту " -"и многие другие вещи." +msgstr "Канал это уникальная сетевая идентичность. Он может представлять человека (профиль в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту и многие другие вещи." #: ../../Zotlabs/Module/New_channel.php:182 msgid "" @@ -14030,7 +14020,7 @@ msgstr "Группа безопасности пуста" #: ../../Zotlabs/Module/Network.php:253 msgid "Privacy group: " -msgstr "Группа безопасности:" +msgstr "Группа безопасности: " #: ../../Zotlabs/Module/Regmod.php:15 msgid "Please login." @@ -14069,7 +14059,8 @@ msgstr "Превышено максимальное количество рег #: ../../Zotlabs/Module/Register.php:55 msgid "" "Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась." +msgstr "" +"Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась." #: ../../Zotlabs/Module/Register.php:89 msgid "Passwords do not match." @@ -14159,9 +14150,7 @@ msgstr "Ваш псевдоним будет использован для со msgid "" "Select a channel permission role for your usage needs and privacy " "requirements." -msgstr "" -"Выберите разрешения для канала в зависимости от ваших потребностей и требований " -"приватности." +msgstr "Выберите разрешения для канала в зависимости от ваших потребностей и требований приватности." #: ../../Zotlabs/Module/Register.php:267 msgid "no" @@ -14383,7 +14372,7 @@ msgstr "Группа безопасности: %s" #: ../../Zotlabs/Module/Group.php:217 msgid "Privacy group name: " -msgstr "Название группы безопасности:" +msgstr "Название группы безопасности: " #: ../../Zotlabs/Module/Group.php:222 msgid "Delete Group" @@ -14895,4 +14884,3 @@ msgstr "Загрузить файл" #: ../../Zotlabs/Storage/Browser.php:404 msgid "Drop files here to immediately upload" msgstr "Поместите файлы сюда для немедленной загрузки" - -- cgit v1.2.3 From 3342fc2244ceef4b9ff9fd7cc691fbc586f51704 Mon Sep 17 00:00:00 2001 From: kostikov Date: Mon, 23 Jul 2018 12:15:10 +0200 Subject: Update hstrings.php --- view/ru/hstrings.php | 169 ++++++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 75 deletions(-) diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index d97aa2c7f..45fc75773 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -78,11 +78,11 @@ App::$strings["XMPP Settings"] = "Настройки XMPP"; App::$strings["Save Settings"] = "Сохранить настройки"; App::$strings["Jabber BOSH host"] = "Узел Jabber BOSH"; App::$strings["Use central userbase"] = "Использовать центральную базу данных"; -App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт\"auth_ejabberd.php\"."; +App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт \"auth_ejabberd.php\"."; App::$strings["Settings updated."] = "Настройки обновлены."; App::$strings["Send email to all members"] = "Отправить email всем участникам"; App::$strings["%s Administrator"] = "администратор %s"; -App::$strings["%1\$d of %2\$d messages sent."] = "%1\$dиз %2\$d сообщений отправлено."; +App::$strings["%1\$d of %2\$d messages sent."] = "%1\$d из %2\$d сообщений отправлено."; App::$strings["Send email to all hub members."] = "Отправить email всем участникам узла."; App::$strings["Sender Email address"] = "Адрес электронной почты отправителя"; App::$strings["Test mode (only send to hub administrator)"] = "Тестовый режим (отправка только администратору узла)"; @@ -107,7 +107,7 @@ App::$strings["Aged 34 and under"] = "Возраст 34 и ниже"; App::$strings["Average Age"] = "Средний возраст"; App::$strings["Known Chatrooms"] = "Известные чаты"; App::$strings["Known Tags"] = "Известные теги"; -App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "166/500Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам."; +App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам."; App::$strings["Invalid game."] = "Недействительная игра"; App::$strings["You are not a player in this game."] = "Вы не играете в эту игру."; App::$strings["You must be a local channel to create a game."] = "Ваш канал должен быть локальным чтобы создать игру."; @@ -312,7 +312,7 @@ App::$strings["Unknown"] = "Неизвестный"; App::$strings["ActivityPub"] = ""; App::$strings["photo"] = "фото"; App::$strings["status"] = "статус"; -App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %2\$s %3\$s"; +App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %3\$s %2\$s"; App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %2\$s %3\$s"; App::$strings["ActivityPub Protocol Settings updated."] = "Настройки протокола ActivityPub обновлены."; App::$strings["The ActivityPub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "Протокол ActivityPub не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала. "; @@ -391,7 +391,7 @@ App::$strings["Choose who you share with."] = "Выбрать с кем поде App::$strings["Click here when you are done."] = "Нажмите здесь когда закончите."; App::$strings["Adjust from which channels posts should be displayed."] = "Настройте из каких каналов должны отображаться публикации."; App::$strings["Only show posts from channels in the specified privacy group."] = "Показывать только публикации из определённой группы безопасности."; -App::$strings["Easily find posts containing tags (keywords preceded by the \"#\" symbol)."] = "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")."; +App::$strings["Easily find posts containing tags (keywords preceded by the \"#\" symbol)."] = "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ #)."; App::$strings["Easily find posts in given category."] = "Лёгкий поиск публикаций в данной категории."; App::$strings["Easily find posts by date."] = "Лёгкий поиск публикаций по дате."; App::$strings["Suggested users who have volounteered to be shown as suggestions, and who we think you might find interesting."] = "Рекомендуемые пользователи, которые были представлены в качестве предложений, и которые, по нашему мнению, могут оказаться интересными."; @@ -399,7 +399,7 @@ App::$strings["Here you see channels you have connected to."] = "Здесь вы App::$strings["Save your search so you can repeat it at a later date."] = "Сохраните ваш поиск с тем, чтобы повторить его позже."; App::$strings["If you see this icon you can be sure that the sender is who it say it is. It is normal that it is not always possible to verify the sender, so the icon will be missing sometimes. There is usually no need to worry about that."] = "Если вы видите этот значок, вы можете быть уверены, что отправитель - это тот, кто это говорит. Это нормально, что не всегда можно проверить отправителя, поэтому значок иногда будет отсутствовать. Обычно об этом не нужно беспокоиться."; App::$strings["Danger! It seems someone tried to forge a message! This message is not necessarily from who it says it is from!"] = "Опасность! Кажется, кто-то пытался подделать сообщение! Это сообщение не обязательно от того, от кого оно значится!"; -App::$strings["Welcome to Hubzilla! Would you like to see a tour of the UI?

You can pause it at any time and continue where you left off by reloading the page, or navigting to another page.

You can also advance by pressing the return key"] = "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\""; +App::$strings["Welcome to Hubzilla! Would you like to see a tour of the UI?

You can pause it at any time and continue where you left off by reloading the page, or navigting to another page.

You can also advance by pressing the return key"] = "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\""; App::$strings["Some setting"] = "Некоторые настройки"; App::$strings["A setting"] = "Настройка"; App::$strings["Skeleton Settings"] = "Настройки скелета"; @@ -544,7 +544,7 @@ App::$strings["Paypal button payments are not enabled."] = "Кнопка Paypal App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты."; App::$strings["Enable Hubzilla Services Module"] = "Включить модуль сервиса Hubzilla"; App::$strings["Cart - Hubzilla Services Addon"] = "Корзина - плагин сервиса Hubzilla"; -App::$strings["New SKU"] = "Новый код"; +App::$strings["New Sku"] = "Новый код"; App::$strings["Cannot save edits to locked item."] = "Невозможно сохранить изменения заблокированной позиции."; App::$strings["SKU not found."] = "Код не найден."; App::$strings["Invalid Activation Directive."] = "Недействительная директива активации."; @@ -631,8 +631,8 @@ App::$strings["kiss"] = "целовать"; App::$strings["kissed"] = "поцелованный"; App::$strings["tempt"] = "искушать"; App::$strings["tempted"] = "искушённый"; -App::$strings["raise eyebrows at"] = ""; -App::$strings["raised their eyebrows at"] = ""; +App::$strings["raise eyebrows at"] = "поднять брови"; +App::$strings["raised their eyebrows at"] = "поднял брови"; App::$strings["insult"] = "оскорбить"; App::$strings["insulted"] = "оскорблённый"; App::$strings["praise"] = "хвалить"; @@ -651,8 +651,8 @@ App::$strings["fuck"] = "трахнуть"; App::$strings["fucked"] = "трахнул"; App::$strings["bonk"] = ""; App::$strings["bonked"] = ""; -App::$strings["declare undying love for"] = ""; -App::$strings["declared undying love for"] = ""; +App::$strings["declare undying love for"] = "признаться в любви к"; +App::$strings["declared undying love for"] = "признался в любви к"; App::$strings["Post to WordPress"] = "Опубликовать в WordPress"; App::$strings["Enable WordPress Post Plugin"] = "Включить плагин публикаций WordPress"; App::$strings["WordPress username"] = "Имя пользователя WordPress"; @@ -667,7 +667,7 @@ App::$strings["WordPress Post Settings"] = "Настройки публикац App::$strings["Wordpress Settings saved."] = "Настройки WordPress сохранены."; App::$strings["Who likes me?"] = "Кому я нравлюсь?"; App::$strings["Your account on %s will expire in a few days."] = "Ваш аккаунт на %s перестанет работать через несколько дней."; -App::$strings["Your $Productname test account is about to expire."] = "Тестовый период вашей учётной записи в $Productname истёк."; +App::$strings["Your $Productname test account is about to expire."] = "Срок действия пробного аккаунта в $Productname близок к окончанию."; App::$strings["Create an account to access services and applications"] = "Создайте аккаунт для доступа к службам и приложениям"; App::$strings["Register"] = "Регистрация"; App::$strings["Logout"] = "Выход"; @@ -756,12 +756,12 @@ App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s в %2\$s"; App::$strings["This is an unsaved preview"] = "Это несохранённый просмотр"; App::$strings["__ctx:title__ Likes"] = "Нравится"; App::$strings["__ctx:title__ Dislikes"] = "Не нравится"; -App::$strings["__ctx:title__ Agree"] = "За"; +App::$strings["__ctx:title__ Agree"] = "Согласен"; App::$strings["__ctx:title__ Disagree"] = "Против"; -App::$strings["__ctx:title__ Abstain"] = "Воздерживается"; -App::$strings["__ctx:title__ Attending"] = "Посещает"; -App::$strings["__ctx:title__ Not attending"] = "Не посещает"; -App::$strings["__ctx:title__ Might attend"] = "Может присутствовать"; +App::$strings["__ctx:title__ Abstain"] = "Воздерживаюсь"; +App::$strings["__ctx:title__ Attending"] = "Присоединившиеся"; +App::$strings["__ctx:title__ Not attending"] = "Не присоединившиеся"; +App::$strings["__ctx:title__ Might attend"] = "Могут присоединиться"; App::$strings["Select"] = "Выбрать"; App::$strings["Delete"] = "Удалить"; App::$strings["Toggle Star Status"] = "Переключить статус пометки"; @@ -792,17 +792,20 @@ App::$strings["Poke"] = "Ткнуть"; App::$strings["%s likes this."] = "%s нравится это."; App::$strings["%s doesn't like this."] = "%s не нравится это."; App::$strings["%2\$d people like this."] = array( - 0 => "", - 1 => "", + 0 => "%2\$d человеку это нравится.", + 1 => "%2\$d человекам это нравится.", + 2 => "%2\$d человекам это нравится.", ); App::$strings["%2\$d people don't like this."] = array( - 0 => "", - 1 => "", + 0 => "%2\$d человеку это не нравится.", + 1 => "%2\$d человекам это не нравится.", + 2 => "%2\$d человекам это не нравится.", ); App::$strings["and"] = "и"; App::$strings[", and %d other people"] = array( - 0 => "", - 1 => "", + 0 => ", и ещё %d человеку", + 1 => ", и ещё %d человекам", + 2 => ", и ещё %d человекам", ); App::$strings["%s like this."] = "%s нравится это."; App::$strings["%s don't like this."] = "%s не нравится это."; @@ -877,36 +880,44 @@ App::$strings["View Webpages"] = "Просмотр веб-страниц"; App::$strings["Wikis"] = ""; App::$strings["Wiki"] = ""; App::$strings["__ctx:noun__ Like"] = array( - 0 => "", - 1 => "", + 0 => "Нравится", + 1 => "Нравится", + 2 => "Нравится", ); App::$strings["__ctx:noun__ Dislike"] = array( - 0 => "", - 1 => "", + 0 => "Не нравится", + 1 => "Не нравится", + 2 => "Не нравится", ); App::$strings["__ctx:noun__ Attending"] = array( - 0 => "", - 1 => "", + 0 => "Посетит", + 1 => "Посетят", + 2 => "Посетят", ); App::$strings["__ctx:noun__ Not Attending"] = array( - 0 => "", - 1 => "", + 0 => "Не посетит", + 1 => "Не посетят", + 2 => "Не посетят", ); App::$strings["__ctx:noun__ Undecided"] = array( - 0 => "", - 1 => "", + 0 => "Не решил", + 1 => "Не решили", + 2 => "Не решили", ); App::$strings["__ctx:noun__ Agree"] = array( - 0 => "", - 1 => "", + 0 => "Согласен", + 1 => "Согласны", + 2 => "Согласны", ); App::$strings["__ctx:noun__ Disagree"] = array( - 0 => "", - 1 => "", + 0 => "Не согласен", + 1 => "Не согласны", + 2 => "Не согласны", ); App::$strings["__ctx:noun__ Abstain"] = array( - 0 => "", - 1 => "", + 0 => "Воздержался", + 1 => "Воздержались", + 2 => "Воздержались", ); App::$strings["Invalid data packet"] = "Неверный пакет данных"; App::$strings["Unable to verify channel signature"] = "Невозможно проверить подпись канала"; @@ -915,7 +926,7 @@ App::$strings["invalid target signature"] = "недопустимая целев App::$strings["l F d, Y \\@ g:i A"] = ""; App::$strings["Starts:"] = "Начало:"; App::$strings["Finishes:"] = "Окончание:"; -App::$strings["Location:"] = "Откуда:"; +App::$strings["Location:"] = "Местоположение:"; App::$strings["This event has been added to your calendar."] = "Это событие было добавлено в ваш календарь."; App::$strings["Not specified"] = "Не указано"; App::$strings["Needs Action"] = "Требует действия"; @@ -1054,7 +1065,7 @@ App::$strings["Age: "] = "Возраст:"; App::$strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD или MM-DD"; App::$strings["Required"] = "Требуется"; App::$strings["less than a second ago"] = "менее чем одну секунду"; -App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s тому назад"; +App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s назад"; App::$strings["__ctx:relative_date__ year"] = array( 0 => "год", 1 => "года", @@ -1220,8 +1231,9 @@ App::$strings["[Edited %s]"] = "[Отредактировано %s]"; App::$strings["__ctx:edit_activity__ Post"] = "Публикация"; App::$strings["__ctx:edit_activity__ Comment"] = "Комментарий"; App::$strings["%d invitation available"] = array( - 0 => "", - 1 => "", + 0 => "доступно %d приглашение", + 1 => "доступны %d приглашения", + 2 => "доступны %d приглашений", ); App::$strings["Advanced"] = "Дополнительно"; App::$strings["Find Channels"] = "Поиск каналов"; @@ -1360,7 +1372,7 @@ App::$strings["Ability to select posts by date ranges"] = "Возможност App::$strings["Saved Searches"] = "Сохранённые поиски"; App::$strings["Save search terms for re-use"] = "Сохранять результаты поиска для повторного использования"; App::$strings["Alternate Stream Order"] = "Отображение потока"; -App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Возможность показывать поток по дате последнего сообщения, последнего комментария или по дате публикации"; +App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Возможность показывать поток по дате последнего сообщения, последнего комментария или в порядке поступления"; App::$strings["Contact Filter"] = "Фильтр контактов"; App::$strings["Ability to display only posts of a selected contact"] = "Возможность показа публикаций только от выбранных контактов"; App::$strings["Forum Filter"] = "Фильтр по форумам"; @@ -1531,7 +1543,7 @@ App::$strings["Image file is empty."] = "Файл изображения пус App::$strings["Unable to process image"] = "Не удается обработать изображение"; App::$strings["Photo storage failed."] = "Ошибка хранилища фотографий."; App::$strings["a new photo"] = "новая фотография"; -App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s опубликовал %2\$s к %3\$s"; +App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s опубликовал %2\$s в %3\$s"; App::$strings["Recent Photos"] = "Последние фотографии"; App::$strings["Upload New Photos"] = "Загрузить новые фотографии"; App::$strings["New window"] = "Новое окно"; @@ -1572,8 +1584,9 @@ App::$strings["Share This"] = "Поделиться этим"; App::$strings["share"] = "поделиться"; App::$strings["Delivery Report"] = "Отчёт о доставке"; App::$strings["%d comment"] = array( - 0 => "", - 1 => "", + 0 => "%d комментарий", + 1 => "%d комментария", + 2 => "%d комментариев", ); App::$strings["View %s's profile - %s"] = "Просмотр %s профиля - %s"; App::$strings["to"] = "к"; @@ -1624,7 +1637,7 @@ App::$strings["\$Projectname Notification"] = "Оповещение \$Projectnam App::$strings["Thank You,"] = "Спасибо,"; App::$strings["This email was sent by %1\$s at %2\$s."] = "Это письмо было отправлено %1\$s на %2\$s."; App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "Чтобы прекратить получать эти сообщения, настройте параметры уведомлений в %s"; -App::$strings["To stop receiving these messages, please adjust your %s."] = "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s."; +App::$strings["To stop receiving these messages, please adjust your %s."] = "Чтобы прекратить получать эти сообщения, пожалуйста измените %s."; App::$strings["Notification Settings"] = "Настройки уведомлений"; App::$strings["%s "] = ""; App::$strings["[\$Projectname:Notify] New mail received at %s"] = "[\$Projectname:Notify] Получено новое сообщение в %s"; @@ -1669,7 +1682,7 @@ App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s fr App::$strings["Name:"] = "Имя:"; App::$strings["Photo:"] = "Фото:"; App::$strings["Please visit %s to approve or reject the suggestion."] = "Пожалуйста, посетите %s, чтобы одобрить или отклонить предложение."; -App::$strings["[\$Projectname:Notify]"] = ""; +App::$strings["[\$Projectname:Notify]"] = "[\$Projectname:Уведомление]"; App::$strings["created a new post"] = "создал новую публикацию"; App::$strings["commented on %s's post"] = "прокомментировал публикацию %s"; App::$strings["edited a post dated %s"] = "отредактировал публикацию датированную %s"; @@ -1705,7 +1718,7 @@ App::$strings["Posted Date"] = "По публикациям"; App::$strings["Order by last posted date"] = "Сортировка по дате последней публикации"; App::$strings["Date Unthreaded"] = "По порядку"; App::$strings["Order unthreaded by date"] = "Сортировка в порядке поступления"; -App::$strings["Activity Order"] = "Сортировка по активности"; +App::$strings["Activity Order"] = "Сортировка активности"; App::$strings["Site"] = "Сайт"; App::$strings["Accounts"] = "Учётные записи"; App::$strings["Member registrations waiting for confirmation"] = "Регистрации участников, ожидающие подверждения"; @@ -1887,11 +1900,11 @@ App::$strings["Can view my channel webpages"] = "Может просматрив App::$strings["Can view my wiki pages"] = "Может просматривать мои вики-страницы"; App::$strings["Can create/edit my channel webpages"] = "Может редактировать мои веб-страницы"; App::$strings["Can write to my wiki pages"] = "Может редактировать мои вики-страницы"; -App::$strings["Can post on my channel (wall) page"] = "Может публиковать на моей странице канала (\"стена\")"; +App::$strings["Can post on my channel (wall) page"] = "Может публиковать на моей странице канала"; App::$strings["Can comment on or like my posts"] = "Может прокомментировать или отмечать как понравившиеся мои посты"; App::$strings["Can send me private mail messages"] = "Может отправлять мне личные сообщения по эл. почте"; App::$strings["Can like/dislike profiles and profile things"] = "Может комментировать или отмечать как нравится/ненравится мой профиль"; -App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Может отправлять всем подписчикам моего канала через использование ! в публикациях"; +App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Может пересылать всем подписчикам моего канала используя ! в публикациях"; App::$strings["Can chat with me"] = "Может общаться со мной в чате"; App::$strings["Can source my public posts in derived channels"] = "Может использовать мои публичные сообщения в клонированных лентах сообщений"; App::$strings["Can administer my channel"] = "Может администрировать мой канал"; @@ -2443,7 +2456,7 @@ App::$strings["PHP executable path"] = "Пусть к исполняемому App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Введите полный путь к исполняемому модулю PHP. Вы можете оставить его пустым для продолжения установки."; App::$strings["Command line PHP"] = "Командная строка PHP"; App::$strings["Unable to check command line PHP, as shell_exec() is disabled. This is required."] = "Невозможно проверить командную строку PHP поскольку требуемая функция shell_exec() отключена."; -App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". "; +App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\"."; App::$strings["This is required for message delivery to work."] = "Это необходимо для функционирования доставки сообщений."; App::$strings["PHP register_argc_argv"] = ""; App::$strings["Your max allowed total upload size is set to %s. Maximum size of one file to upload is set to %s. You are allowed to upload up to %d files at once."] = "Максимально разрешённый общий размер загрузок установлен в %s. Максимальный размер одной загрузки установлен в %s. Вам разрешено загружать до %d файлов за один приём."; @@ -2660,12 +2673,14 @@ App::$strings["Log file"] = "Файл журнала"; App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "Должен быть доступен для записи веб-сервером. Пусть относителен основного каталога веб-сайта."; App::$strings["Log level"] = "Уровень журнала"; App::$strings["%s account blocked/unblocked"] = array( - 0 => "", - 1 => "", + 0 => "%s аккаунт блокирован/разблокирован", + 1 => "%s аккаунта блокированы/разблокированы", + 2 => "%s аккаунтов блокированы/разблокированы", ); App::$strings["%s account deleted"] = array( - 0 => "", - 1 => "", + 0 => "%s аккаунт удалён", + 1 => "%s аккаунта удалёны", + 2 => "%s аккаунтов удалёны", ); App::$strings["Account not found"] = "Аккаунт не найден"; App::$strings["Account '%s' blocked"] = "Аккаунт '%s' заблокирован"; @@ -2680,8 +2695,8 @@ App::$strings["Register date"] = "Дата регистрации"; App::$strings["Last login"] = "Последний вход"; App::$strings["Expires"] = "Срок действия"; App::$strings["Service Class"] = "Класс обслуживания"; -App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; -App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?"; +App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно."; App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:"; App::$strings["https://youtube.com/
https://www.youtube.com/
https://youtu.be/
https://vimeo.com/
https://soundcloud.com/
"] = ""; @@ -2739,7 +2754,7 @@ App::$strings["[Experimental]"] = "[экспериментальный]"; App::$strings["[Unsupported]"] = "[неподдерживаемый]"; App::$strings["Off"] = "Выкл."; App::$strings["On"] = "Вкл."; -App::$strings["Lock feature %s"] = "Функция блокировки \"%s\""; +App::$strings["Lock feature %s"] = "Заблокировать функцию \"%s\""; App::$strings["Manage Additional Features"] = "Управлять дополнительными функциями"; App::$strings["Queue Statistics"] = "Статистика очереди"; App::$strings["Total Entries"] = "Всего записей"; @@ -2758,16 +2773,19 @@ App::$strings["Technical skill level"] = "Уровень технических App::$strings["Account language (for emails)"] = "Язык сообщения для email"; App::$strings["Service class"] = "Класс обслуживания"; App::$strings["%s channel censored/uncensored"] = array( - 0 => "", - 1 => "", + 0 => "%s канал цензурируется/нецензурируется", + 1 => "%s канала цензурируются/нецензурируются", + 2 => "%s каналов цензурируются/нецензурируются", ); App::$strings["%s channel code allowed/disallowed"] = array( - 0 => "", - 1 => "", + 0 => "в %s канале код разрешён/запрещён", + 1 => "в %s каналах код разрешён/запрещён", + 2 => "в %s каналах код разрешён/запрещён", ); App::$strings["%s channel deleted"] = array( - 0 => "", - 1 => "", + 0 => "%s канал удалён", + 1 => "%s канала удалены", + 2 => "%s каналов удалены", ); App::$strings["Channel not found"] = "Канал не найден"; App::$strings["Channel '%s' deleted"] = "Канал '%s' удалён"; @@ -2780,8 +2798,8 @@ App::$strings["Uncensor"] = "Нецензурировать"; App::$strings["Allow Code"] = "Разрешить код"; App::$strings["Disallow Code"] = "Запретить код"; App::$strings["UID"] = ""; -App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; -App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\n\nВы уверены?"; +App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["Token verification failed."] = "Не удалось выполнить проверку токена."; App::$strings["Email Verification Required"] = "Требуется проверка адреса email"; App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма."; @@ -2792,8 +2810,9 @@ App::$strings["%s : Not a valid email address."] = "%s : Недействите App::$strings["Please join us on \$Projectname"] = "Присоединятесь к \$Projectname !"; App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "Превышен лимит приглашений. Пожалуйста, свяжитесь с администрацией сайта."; App::$strings["%d message sent."] = array( - 0 => "", - 1 => "", + 0 => "%d сообщение отправлено.", + 1 => "%d сообщения отправлено.", + 2 => "%d сообщений отправлено.", ); App::$strings["You have no more invitations available"] = "У вас больше нет приглашений"; App::$strings["Send invitations"] = "Отправить приглашение"; @@ -2806,7 +2825,7 @@ App::$strings["or visit"] = "или посетите"; App::$strings["3. Click [Connect]"] = "Нажать [Подключиться]"; App::$strings["Block Title"] = "Заблокировать заголовок"; App::$strings["Cover Photos"] = "Фотографии обложки"; -App::$strings["Your cover photo may be visible to anybody on the internet"] = "Ваше фото обложки может быть видно кому угодно в Интернете"; +App::$strings["Your cover photo may be visible to anybody on the internet"] = "Фотография вашей обложки может быть видна всем в Интернете"; App::$strings["Change Cover Photo"] = "Изменить фотографию обложки"; App::$strings["Like/Dislike"] = "Нравится / не нравится"; App::$strings["This action is restricted to members."] = "Это действие доступно только участникам."; @@ -3094,7 +3113,7 @@ App::$strings["Visit %s's profile [%s]"] = "Посетить %s ​​профи App::$strings["View Connections"] = "Просмотр контактов"; App::$strings["Authentication failed."] = "Ошибка аутентификации."; App::$strings["Your real name is recommended."] = "Рекомендуется использовать ваше настоящее имя."; -App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""; +App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\""; App::$strings["This will be used to create a unique network address (like an email address)."] = "Это будет использовано для создания уникального сетевого адреса (наподобие email)."; App::$strings["Allowed characters are a-z 0-9, - and _"] = "Разрешённые символы a-z 0-9, - и _"; App::$strings["Channel name"] = "Название канала"; @@ -3152,7 +3171,7 @@ App::$strings["Redeliver"] = "Доставить повторно"; App::$strings["No such group"] = "Нет такой группы"; App::$strings["No such channel"] = "Нет такого канала"; App::$strings["Privacy group is empty"] = "Группа безопасности пуста"; -App::$strings["Privacy group: "] = "Группа безопасности:"; +App::$strings["Privacy group: "] = "Группа безопасности: "; App::$strings["Please login."] = "Пожалуйста, войдите."; App::$strings["No service class restrictions found."] = "Ограничений класса обслуживание не найдено."; App::$strings["Add Card"] = "Добавить карточку"; @@ -3161,7 +3180,7 @@ App::$strings["Change Order of App Tray Apps"] = "Изменить порядо App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Используйте стрелки для перемещения приложения влево (вверх) или вправо (вниз) в панели навигации"; App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Используйте стрелки для перемещения приложения вверх или вниз в лотке"; App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Превышено максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра."; -App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась."; +App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась."; App::$strings["Passwords do not match."] = "Пароли не совпадают."; App::$strings["Registration successful. Continue to create your first channel..."] = "Регистрация завершена успешно. Для продолжения создайте свой первый канал..."; App::$strings["Registration successful. Please check your email for validation instructions."] = "Регистрация завершена успешно. Пожалуйста проверьте вашу электронную почту для подтверждения."; @@ -3235,7 +3254,7 @@ App::$strings["Members are visible to other channels"] = "Участники к App::$strings["Privacy group removed."] = "Группа безопасности удалена."; App::$strings["Unable to remove privacy group."] = "Ну удалось удалить группу безопасности."; App::$strings["Privacy Group: %s"] = "Группа безопасности: %s"; -App::$strings["Privacy group name: "] = "Название группы безопасности:"; +App::$strings["Privacy group name: "] = "Название группы безопасности: "; App::$strings["Delete Group"] = "Удалить группу"; App::$strings["Group members"] = "Члены группы"; App::$strings["Not in this group"] = "Не в этой группе"; -- cgit v1.2.3 From 278eeb5ee9d6d3fb870c0bf29fd0c2c36866af67 Mon Sep 17 00:00:00 2001 From: kostikov Date: Mon, 23 Jul 2018 12:19:46 +0200 Subject: Update hmessages.po --- view/ru/hmessages.po | 354 +++++++++++++++++++++++++-------------------------- 1 file changed, 171 insertions(+), 183 deletions(-) diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index 365251f15..f7ea3df15 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-04-23 11:34+0200\n" -"PO-Revision-Date: 2018-06-13 19:32+0000\n" -"Last-Translator: Max Kostikov \n" +"PO-Revision-Date: 2018-07-22 19:32+0000\n" +"Last-Translator: Max Kostikov \n" "Language-Team: Russian (http://www.transifex.com/Friendica/hubzilla/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -173,7 +173,7 @@ msgstr "Включить плагин публикаций Dreamwidth" #: ../../extend/addon/hzaddons/redred/redred.php:99 #: ../../extend/addon/hzaddons/wppost/wppost.php:82 #: ../../extend/addon/hzaddons/wppost/wppost.php:105 -#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1621 #: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 @@ -249,7 +249,7 @@ msgstr "Нет" #: ../../extend/addon/hzaddons/redred/redred.php:99 #: ../../extend/addon/hzaddons/wppost/wppost.php:82 #: ../../extend/addon/hzaddons/wppost/wppost.php:105 -#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1618 +#: ../../extend/addon/hzaddons/wppost/wppost.php:109 ../../boot.php:1621 #: ../../view/theme/redbasic/php/config.php:98 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Events.php:470 @@ -579,8 +579,9 @@ msgid "" "to be installed on this machine with synchronized credentials via the " "\"auth_ejabberd.php\" script." msgstr "" -"Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт" -"\"auth_ejabberd.php\"." +"Если включено, участники автоматически войдут на сервер ejabberd, который должен " +"быть установлен на этом компьютере с синхронизированными учетными данными через " +"скрипт \"auth_ejabberd.php\"." #: ../../extend/addon/hzaddons/xmpp/xmpp.php:102 #: ../../extend/addon/hzaddons/logrot/logrot.php:54 @@ -607,7 +608,7 @@ msgstr "администратор %s" #: ../../extend/addon/hzaddons/hubwall/hubwall.php:73 #, php-format msgid "%1$d of %2$d messages sent." -msgstr "%1$dиз %2$d сообщений отправлено." +msgstr "%1$d из %2$d сообщений отправлено." #: ../../extend/addon/hzaddons/hubwall/hubwall.php:81 msgid "Send email to all hub members." @@ -711,10 +712,7 @@ msgid "" "Please note Diaspora and Friendica statistics are merely those **this " "directory** is aware of, and not all those known in the network. This also " "applies to chatrooms," -msgstr "" -"Обратите внимание, что статистика Diaspora и Friendica это только те, " -"о которых **этот каталог** знает, а не все известные в сети. Это также " -"относится и к чатам." +msgstr "Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам." #: ../../extend/addon/hzaddons/chess/chess.php:353 #: ../../extend/addon/hzaddons/chess/chess.php:542 @@ -1274,9 +1272,9 @@ msgid "" "press the \"New identity\" button or refresh the page to register a new " "identity. You may use the same name." msgstr "" -"Этот идентификатор был удалён другим участником из-за неактивности. " -"Пожалуйста нажмите кнопку \"Новый идентификатор\" для обновления страницы и " -"получения нового идентификатора. Вы можете использовать то же имя." +"Этот идентификатор был удалён другим участником из-за неактивности. Пожалуйста " +"нажмите кнопку \"Новый идентификатор\" для обновления страницы и получения " +"нового идентификатора. Вы можете использовать то же имя." #: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168 msgid "Welcome to Rendezvous!" @@ -1410,8 +1408,7 @@ msgstr "URL сервера Tile" msgid "" "A list of public tile servers" -msgstr "" -"Список общедоступных серверов" +msgstr "Список общедоступных серверов" #: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:170 msgid "Nominatim (reverse geocoding) Server URL" @@ -1421,8 +1418,7 @@ msgstr "URL сервера Nominatim (обратное геокодирован msgid "" "A list of Nominatim servers" -msgstr "" -"Список серверов Nominatim" +msgstr "Список серверов Nominatim" #: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:171 msgid "Default zoom" @@ -1758,7 +1754,7 @@ msgstr "статус" #: ../../include/conversation.php:160 ../../Zotlabs/Module/Like.php:438 #, php-format msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s нравится %2$s %3$s" +msgstr "%1$s нравится %3$s %2$s" #: ../../extend/addon/hzaddons/pubcrawl/as.php:1546 #: ../../include/conversation.php:163 ../../Zotlabs/Module/Like.php:440 @@ -1789,9 +1785,7 @@ msgstr "Доставить получателям ActivityPub в группах msgid "" "May result in a large number of mentions and expose all the members of your " "privacy group" -msgstr "" -"Может привести к большому количеству упоминаний и раскрытию участников " -"группы безопасности" +msgstr "Может привести к большому количеству упоминаний и раскрытию участников группы безопасности" #: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1155 msgid "Send multi-media HTML articles" @@ -1994,8 +1988,7 @@ msgstr "Неизвестная ошибка. Пожалуйста, повтор msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." -msgstr "" -"Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера" +msgstr "Если новая фотография не отображается немедленно то нажмите Shift + \"Обновить\" для очистки кэша браузера" #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:308 msgid "Profile photo updated successfully." @@ -2114,7 +2107,7 @@ msgstr "Показывать только публикации из опреде #: ../../extend/addon/hzaddons/tour/tour.php:110 msgid "" "Easily find posts containing tags (keywords preceded by the \"#\" symbol)." -msgstr "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")." +msgstr "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ #)." #: ../../extend/addon/hzaddons/tour/tour.php:111 msgid "Easily find posts in given category." @@ -2157,7 +2150,10 @@ msgid "" "pause it at any time and continue where you left off by reloading the page, " "or navigting to another page.

You can also advance by pressing the " "return key" -msgstr "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\"" +msgstr "" +"Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

" +"

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

" +"

Также вы можете нажать клавишу \"Назад\"" #: ../../extend/addon/hzaddons/skeleton/skeleton.php:59 msgid "Some setting" @@ -2792,9 +2788,7 @@ msgstr "Кнопка Paypal для платежей не включена." msgid "" "Paypal button payments are not properly configured. Please choose another " "payment option." -msgstr "" -"Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте " -"другой вариант оплаты." +msgstr "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты." #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:71 msgid "Enable Hubzilla Services Module" @@ -2805,7 +2799,7 @@ msgid "Cart - Hubzilla Services Addon" msgstr "Корзина - плагин сервиса Hubzilla" #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:169 -msgid "New SKU" +msgid "New Sku" msgstr "Новый код" #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:204 @@ -3185,11 +3179,11 @@ msgstr "искушённый" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 msgid "raise eyebrows at" -msgstr "" +msgstr "поднять брови" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:27 msgid "raised their eyebrows at" -msgstr "" +msgstr "поднял брови" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:28 msgid "insult" @@ -3265,11 +3259,11 @@ msgstr "" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 msgid "declare undying love for" -msgstr "" +msgstr "признаться в любви к" #: ../../extend/addon/hzaddons/morepokes/morepokes.php:37 msgid "declared undying love for" -msgstr "" +msgstr "признался в любви к" #: ../../extend/addon/hzaddons/wppost/wppost.php:45 msgid "Post to WordPress" @@ -3330,71 +3324,71 @@ msgstr "Ваш аккаунт на %s перестанет работать че #: ../../extend/addon/hzaddons/testdrive/testdrive.php:105 msgid "Your $Productname test account is about to expire." -msgstr "Тестовый период вашей учётной записи в $Productname истёк." +msgstr "Срок действия пробного аккаунта в $Productname близок к окончанию." -#: ../../boot.php:1592 +#: ../../boot.php:1595 msgid "Create an account to access services and applications" msgstr "Создайте аккаунт для доступа к службам и приложениям" -#: ../../boot.php:1593 ../../include/nav.php:158 +#: ../../boot.php:1596 ../../include/nav.php:158 #: ../../Zotlabs/Module/Register.php:294 msgid "Register" msgstr "Регистрация" -#: ../../boot.php:1612 ../../include/nav.php:105 ../../include/nav.php:134 +#: ../../boot.php:1615 ../../include/nav.php:105 ../../include/nav.php:134 #: ../../include/nav.php:153 msgid "Logout" msgstr "Выход" -#: ../../boot.php:1613 ../../include/nav.php:120 ../../include/nav.php:124 +#: ../../boot.php:1616 ../../include/nav.php:120 ../../include/nav.php:124 #: ../../Zotlabs/Lib/Apps.php:301 msgid "Login" msgstr "Войти" -#: ../../boot.php:1614 ../../include/channel.php:2334 +#: ../../boot.php:1617 ../../include/channel.php:2334 #: ../../Zotlabs/Module/Rmagic.php:75 msgid "Remote Authentication" msgstr "Удаленная аутентификация" -#: ../../boot.php:1616 +#: ../../boot.php:1619 msgid "Login/Email" msgstr "Пользователь / email" -#: ../../boot.php:1617 +#: ../../boot.php:1620 msgid "Password" msgstr "Пароль" -#: ../../boot.php:1618 +#: ../../boot.php:1621 msgid "Remember me" msgstr "Запомнить меня" -#: ../../boot.php:1621 +#: ../../boot.php:1624 msgid "Forgot your password?" msgstr "Забыли пароль или логин?" -#: ../../boot.php:1622 ../../Zotlabs/Module/Lostpass.php:91 +#: ../../boot.php:1625 ../../Zotlabs/Module/Lostpass.php:91 msgid "Password Reset" msgstr "Сбросить пароль" -#: ../../boot.php:2405 +#: ../../boot.php:2408 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Ошибка SSL/TLS веб-сайта для %s" -#: ../../boot.php:2410 +#: ../../boot.php:2413 msgid "Website SSL certificate is not valid. Please correct." msgstr "SSL/TLS сертификат веб-сайт недействителен. Исправьте это." -#: ../../boot.php:2526 +#: ../../boot.php:2529 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Задания Cron не запущены на %s" -#: ../../boot.php:2531 +#: ../../boot.php:2534 msgid "Cron/Scheduled tasks not running." msgstr "Задания Cron / планировщика не запущены." -#: ../../boot.php:2532 ../../include/datetime.php:238 +#: ../../boot.php:2535 ../../include/datetime.php:238 msgid "never" msgstr "никогд" @@ -3724,7 +3718,7 @@ msgstr "Не нравится" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Agree" -msgstr "За" +msgstr "Согласен" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" @@ -3734,22 +3728,22 @@ msgstr "Против" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Abstain" -msgstr "Воздерживается" +msgstr "Воздерживаюсь" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Attending" -msgstr "Посещает" +msgstr "Присоединившиеся" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Not attending" -msgstr "Не посещает" +msgstr "Не присоединившиеся" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Might attend" -msgstr "Может присутствовать" +msgstr "Могут присоединиться" #: ../../include/conversation.php:690 ../../Zotlabs/Lib/ThreadItem.php:158 msgid "Select" @@ -3902,15 +3896,17 @@ msgstr "%s не нравится это." #, php-format msgid "%2$d people like this." msgid_plural "%2$d people like this." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%2$d человеку это нравится." +msgstr[1] "%2$d человекам это нравится." +msgstr[2] "%2$d человекам это нравится." #: ../../include/conversation.php:1217 #, php-format msgid "%2$d people don't like this." msgid_plural "%2$d people don't like this." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%2$d человеку это не нравится." +msgstr[1] "%2$d человекам это не нравится." +msgstr[2] "%2$d человекам это не нравится." #: ../../include/conversation.php:1223 msgid "and" @@ -3920,8 +3916,9 @@ msgstr "и" #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" -msgstr[0] "" -msgstr[1] "" +msgstr[0] ", и ещё %d человеку" +msgstr[1] ", и ещё %d человекам" +msgstr[2] ", и ещё %d человекам" #: ../../include/conversation.php:1227 #, php-format @@ -4281,58 +4278,66 @@ msgstr "" msgctxt "noun" msgid "Like" msgid_plural "Likes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Нравится" +msgstr[1] "Нравится" +msgstr[2] "Нравится" #: ../../include/conversation.php:1993 ../../Zotlabs/Lib/ThreadItem.php:221 #: ../../Zotlabs/Module/Photos.php:1170 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не нравится" +msgstr[1] "Не нравится" +msgstr[2] "Не нравится" #: ../../include/conversation.php:1996 msgctxt "noun" msgid "Attending" msgid_plural "Attending" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Посетит" +msgstr[1] "Посетят" +msgstr[2] "Посетят" #: ../../include/conversation.php:1999 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не посетит" +msgstr[1] "Не посетят" +msgstr[2] "Не посетят" #: ../../include/conversation.php:2002 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не решил" +msgstr[1] "Не решили" +msgstr[2] "Не решили" #: ../../include/conversation.php:2005 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Согласен" +msgstr[1] "Согласны" +msgstr[2] "Согласны" #: ../../include/conversation.php:2008 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Не согласен" +msgstr[1] "Не согласны" +msgstr[2] "Не согласны" #: ../../include/conversation.php:2011 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Воздержался" +msgstr[1] "Воздержались" +msgstr[2] "Воздержались" #: ../../include/zot.php:772 msgid "Invalid data packet" @@ -4366,7 +4371,7 @@ msgstr "Окончание:" #: ../../include/event.php:54 ../../include/event.php:86 #: ../../include/channel.php:1391 ../../Zotlabs/Module/Directory.php:324 msgid "Location:" -msgstr "Откуда:" +msgstr "Местоположение:" #: ../../include/event.php:1011 msgid "This event has been added to your calendar." @@ -4935,7 +4940,9 @@ msgstr "Настраиваемый выбор" msgid "" "Select \"Show\" to allow viewing. \"Don't show\" lets you override and limit " "the scope of \"Show\"." -msgstr "Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам переопределить и ограничить область показа." +msgstr "" +"Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам " +"переопределить и ограничить область показа." #: ../../include/acl_selectors.php:116 msgid "Show" @@ -4997,7 +5004,7 @@ msgstr "менее чем одну секунду" #, php-format msgctxt "e.g. 22 hours ago, 1 minute ago" msgid "%1$d %2$s ago" -msgstr "%1$d %2$s тому назад" +msgstr "%1$d %2$s назад" #: ../../include/datetime.php:273 msgctxt "relative_date" @@ -5621,8 +5628,9 @@ msgstr "Комментарий" #, php-format msgid "%d invitation available" msgid_plural "%d invitations available" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "доступно %d приглашение" +msgstr[1] "доступны %d приглашения" +msgstr[2] "доступны %d приглашений" #: ../../include/contact_widgets.php:16 ../../Zotlabs/Module/Admin/Site.php:313 msgid "Advanced" @@ -6220,9 +6228,7 @@ msgstr "Отображение потока" msgid "" "Ability to order the stream by last post date, last comment date or " "unthreaded activities" -msgstr "" -"Возможность показывать поток по дате последнего сообщения, последнего комментария или " -"по дате публикации" +msgstr "Возможность показывать поток по дате последнего сообщения, последнего комментария или в порядке поступления" #: ../../include/features.php:399 msgid "Contact Filter" @@ -6685,9 +6691,7 @@ msgstr "отлично" msgid "" "Your chosen nickname was either already taken or not valid. Please use our " "suggestion (" -msgstr "" -"Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать " -"наше предложение (" +msgstr "Выбранный вами псевдоним уже используется или недействителен. Попробуйте использовать наше предложение (" #: ../../include/js_strings.php:31 msgid ") or enter a new one." @@ -6935,7 +6939,7 @@ msgstr "новая фотография" #, php-format msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" -msgstr "%1$s опубликовал %2$s к %3$s" +msgstr "%1$s опубликовал %2$s в %3$s" #: ../../include/photos.php:668 ../../Zotlabs/Module/Photos.php:1370 #: ../../Zotlabs/Module/Photos.php:1383 ../../Zotlabs/Module/Photos.php:1384 @@ -7104,8 +7108,9 @@ msgstr "Отчёт о доставке" #, php-format msgid "%d comment" msgid_plural "%d comments" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d комментарий" +msgstr[1] "%d комментария" +msgstr[2] "%d комментариев" #: ../../Zotlabs/Lib/ThreadItem.php:347 ../../Zotlabs/Lib/ThreadItem.php:348 #, php-format @@ -7322,7 +7327,7 @@ msgstr "Чтобы прекратить получать эти сообщени #: ../../Zotlabs/Lib/Enotify.php:68 #, php-format msgid "To stop receiving these messages, please adjust your %s." -msgstr "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s." +msgstr "Чтобы прекратить получать эти сообщения, пожалуйста измените %s." #: ../../Zotlabs/Lib/Enotify.php:68 #: ../../Zotlabs/Module/Settings/Channel.php:570 @@ -7540,7 +7545,7 @@ msgstr "Пожалуйста, посетите %s, чтобы одобрить #: ../../Zotlabs/Lib/Enotify.php:640 msgid "[$Projectname:Notify]" -msgstr "" +msgstr "[$Projectname:Уведомление]" #: ../../Zotlabs/Lib/Enotify.php:808 msgid "created a new post" @@ -7700,7 +7705,7 @@ msgstr "Сортировка в порядке поступления" #: ../../Zotlabs/Widget/Activity_order.php:119 msgid "Activity Order" -msgstr "Сортировка по активности" +msgstr "Сортировка активности" #: ../../Zotlabs/Widget/Admin.php:22 ../../Zotlabs/Module/Admin/Site.php:308 msgid "Site" @@ -8472,7 +8477,7 @@ msgstr "Может редактировать мои вики-страницы" #: ../../Zotlabs/Access/Permissions.php:66 msgid "Can post on my channel (wall) page" -msgstr "Может публиковать на моей странице канала (\"стена\")" +msgstr "Может публиковать на моей странице канала" #: ../../Zotlabs/Access/Permissions.php:67 msgid "Can comment on or like my posts" @@ -8488,7 +8493,7 @@ msgstr "Может комментировать или отмечать как #: ../../Zotlabs/Access/Permissions.php:70 msgid "Can forward to all my channel connections via ! mentions in posts" -msgstr "Может отправлять всем подписчикам моего канала через использование ! в публикациях" +msgstr "Может пересылать всем подписчикам моего канала используя ! в публикациях" #: ../../Zotlabs/Access/Permissions.php:71 msgid "Can chat with me" @@ -9766,16 +9771,14 @@ msgstr "Вы также можете экспортировать ваши пу msgid "" "To select all posts for a given year, such as this year, visit %2$s" -msgstr "" -"Для выбора всех публикаций заданного года, например текущего, посетите %2$s" +msgstr "Для выбора всех публикаций заданного года, например текущего, посетите %2$s" #: ../../Zotlabs/Module/Uexport.php:67 #, php-format msgid "" "To select all posts for a given month, such as January of this year, visit " "%2$s" -msgstr "" -"Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2$s" +msgstr "Для выбора всех публикаций заданного месяца, например за январь сего года, посетите %2$s" #: ../../Zotlabs/Module/Uexport.php:68 #, php-format @@ -9784,9 +9787,10 @@ msgid "" "%2$s on any site containing your channel. For best results please import " "or restore these in date order (oldest first)." msgstr "" -"Данные файлы с содержимым могут быть импортированы и восстановлены на любом содержащем " -"ваш канал сайте. Посетите %2$s. Для лучших результатов пожалуйста " -"производите импорт и восстановление в порядке датировки (старые сначала)." +"Данные файлы с содержимым могут быть импортированы и восстановлены на любом " +"содержащем ваш канал сайте. Посетите %2$s. Для лучших " +"результатов пожалуйста производите импорт и восстановление в порядке датировки " +"(старые сначала)." #: ../../Zotlabs/Module/Chatsvc.php:131 msgid "Away" @@ -10000,17 +10004,13 @@ msgstr "Фотография недоступна." msgid "" "Your default profile photo is visible to anybody on the internet. Profile " "photos for alternate profiles will inherit the permissions of the profile" -msgstr "" -"Фотография вашего профиля по умолчанию видна всем в Интернете. Фотография" -"профиля для альтернативных профилей наследуют разрешения текущего профиля" +msgstr "Фотография вашего профиля по умолчанию видна всем в Интернете. Фотографияпрофиля для альтернативных профилей наследуют разрешения текущего профиля" #: ../../Zotlabs/Module/Profile_photo.php:454 msgid "" "Your profile photo is visible to anybody on the internet and may be " "distributed to other websites." -msgstr "" -"Фотография вашего профиля видна всем в Интернете и может быть отправлена " -"на другие сайты." +msgstr "Фотография вашего профиля видна всем в Интернете и может быть отправлена на другие сайты." #: ../../Zotlabs/Module/Profile_photo.php:456 #: ../../Zotlabs/Module/Cover_photo.php:392 @@ -10594,8 +10594,8 @@ msgid "" "\">privacy settings, which have higher priority than " "individual settings. You can not change those settings here." msgstr "" -"Некоторые разрешения могут наследовать из " -"настроек приватности ваших каналов которые могут иметь более высокий приоритет " +"Некоторые разрешения могут наследовать из настроек " +"приватности ваших каналов которые могут иметь более высокий приоритет " "чем индивидуальные. Вы не можете менять эти настройки здесь." #: ../../Zotlabs/Module/Connedit.php:895 @@ -10605,10 +10605,10 @@ msgid "" "individual settings. You can change those settings here but they wont have " "any impact unless the inherited setting changes." msgstr "" -"Некоторые разрешения могут быть унаследованы из " -"настроек приватности вашего канала, которые могут иметь более высокий приоритет " -"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения " -"переданных по наследству настроек." +"Некоторые разрешения могут быть унаследованы из настроек " +"приватности вашего канала, которые могут иметь более высокий приоритет " +"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до " +"изменения переданных по наследству настроек." #: ../../Zotlabs/Module/Connedit.php:896 msgid "Last update:" @@ -10805,9 +10805,7 @@ msgstr "Ваша база данных установлена." msgid "" "You may need to import the file \"install/schema_xxx.sql\" manually using a " "database client." -msgstr "" -"Вам может понадобится импортировать файл \"install/schema_xxx.sql\" " -"вручную используя клиент базы данных." +msgstr "Вам может понадобится импортировать файл \"install/schema_xxx.sql\" вручную используя клиент базы данных." #: ../../Zotlabs/Module/Setup.php:198 ../../Zotlabs/Module/Setup.php:262 #: ../../Zotlabs/Module/Setup.php:749 @@ -10944,8 +10942,7 @@ msgstr "Невозможно проверить командную строку msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." -msgstr "" -"В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". " +msgstr "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\"." #: ../../Zotlabs/Module/Setup.php:425 msgid "This is required for message delivery to work." @@ -10974,15 +10971,13 @@ msgstr "Максимальный размер загрузки в PHP" msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" -msgstr "" -"Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования" +msgstr "Ошибка: функция \"openssl_pkey_new\" не может сгенерировать ключи шифрования" #: ../../Zotlabs/Module/Setup.php:477 msgid "" "If running under Windows, please see \"http://www.php.net/manual/en/openssl." "installation.php\"." -msgstr "" -"Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." +msgstr "Если работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." #: ../../Zotlabs/Module/Setup.php:480 msgid "Generate encryption keys" @@ -11517,8 +11512,7 @@ msgstr "Разрешения по умолчанию для новых акка #: ../../Zotlabs/Module/Admin/Site.php:299 msgid "" "This role will be used for the first channel created after registration." -msgstr "" -"Эта роль будет использоваться для первого канала, созданного после регистрации." +msgstr "Эта роль будет использоваться для первого канала, созданного после регистрации." #: ../../Zotlabs/Module/Admin/Site.php:310 #: ../../Zotlabs/Module/Register.php:278 @@ -11754,7 +11748,8 @@ msgstr "Включить контекстную помощь" #: ../../Zotlabs/Module/Admin/Site.php:352 msgid "" "Display contextual help for the current page when the help button is pressed." -msgstr "Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." +msgstr "" +"Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." #: ../../Zotlabs/Module/Admin/Site.php:354 msgid "Reply-to email address for system generated email." @@ -11931,15 +11926,17 @@ msgstr "Уровень журнала" #, php-format msgid "%s account blocked/unblocked" msgid_plural "%s account blocked/unblocked" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s аккаунт блокирован/разблокирован" +msgstr[1] "%s аккаунта блокированы/разблокированы" +msgstr[2] "%s аккаунтов блокированы/разблокированы" #: ../../Zotlabs/Module/Admin/Accounts.php:44 #, php-format msgid "%s account deleted" msgid_plural "%s accounts deleted" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s аккаунт удалён" +msgstr[1] "%s аккаунта удалёны" +msgstr[2] "%s аккаунтов удалёны" #: ../../Zotlabs/Module/Admin/Accounts.php:80 msgid "Account not found" @@ -12001,28 +11998,30 @@ msgid "" "Selected accounts will be deleted!\\n\\nEverything these accounts had posted " "on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на " +"этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Accounts.php:191 msgid "" "The account {0} will be deleted!\\n\\nEverything this account has posted on " "this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом " -"сайте будет удалено навсегда!\\n\\nВы уверены?" +"Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте " +"будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Security.php:83 msgid "" "By default, unfiltered HTML is allowed in embedded media. This is inherently " "insecure." -msgstr "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." +msgstr "" +"По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." #: ../../Zotlabs/Module/Admin/Security.php:86 msgid "" "The recommended setting is to only allow unfiltered HTML from the following " "sites:" -msgstr "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" +msgstr "" +"Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" #: ../../Zotlabs/Module/Admin/Security.php:87 msgid "" @@ -12053,8 +12052,7 @@ msgstr "Предоставить корневой каталог в облаке #: ../../Zotlabs/Module/Admin/Security.php:96 msgid "" "The cloud root directory lists all channel names which provide public files" -msgstr "" -"В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы" +msgstr "В корневом каталоге облака показываются все имена каналов, которые предоставляют общедоступные файлы" #: ../../Zotlabs/Module/Admin/Security.php:97 msgid "Show total disk space available to cloud uploads" @@ -12077,8 +12075,7 @@ msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" -msgstr "Список разделённых запятыми доменов для которых разрешена регистрация " -"на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены." +msgstr "Список разделённых запятыми доменов для которых разрешена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены." #: ../../Zotlabs/Module/Admin/Security.php:101 msgid "Not allowed email domains" @@ -12089,9 +12086,7 @@ msgid "" "Comma separated list of domains which are not allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains, unless allowed domains have been defined." -msgstr "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. " -"Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые " -"домены не будут указаны." +msgstr "Список разделённых запятыми доменов для которых запрещена регистрация на этом сайте. Wildcards разрешены. Если пусто то разрешены любые домены до тех пор, пока разрешённые домены не будут указаны." #: ../../Zotlabs/Module/Admin/Security.php:102 msgid "Allow communications only from these sites" @@ -12282,7 +12277,7 @@ msgstr "Вкл." #: ../../Zotlabs/Module/Admin/Features.php:56 #, php-format msgid "Lock feature %s" -msgstr "Функция блокировки \"%s\"" +msgstr "Заблокировать функцию \"%s\"" #: ../../Zotlabs/Module/Admin/Features.php:64 msgid "Manage Additional Features" @@ -12357,22 +12352,25 @@ msgstr "Класс обслуживания" #, php-format msgid "%s channel censored/uncensored" msgid_plural "%s channels censored/uncensored" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s канал цензурируется/нецензурируется" +msgstr[1] "%s канала цензурируются/нецензурируются" +msgstr[2] "%s каналов цензурируются/нецензурируются" #: ../../Zotlabs/Module/Admin/Channels.php:40 #, php-format msgid "%s channel code allowed/disallowed" msgid_plural "%s channels code allowed/disallowed" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "в %s канале код разрешён/запрещён" +msgstr[1] "в %s каналах код разрешён/запрещён" +msgstr[2] "в %s каналах код разрешён/запрещён" #: ../../Zotlabs/Module/Admin/Channels.php:46 #, php-format msgid "%s channel deleted" msgid_plural "%s channels deleted" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s канал удалён" +msgstr[1] "%s канала удалены" +msgstr[2] "%s каналов удалены" #: ../../Zotlabs/Module/Admin/Channels.php:65 msgid "Channel not found" @@ -12428,16 +12426,16 @@ msgid "" "Selected channels will be deleted!\\n\\nEverything that was posted in these " "channels on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на " +"этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Channels.php:163 msgid "" "The channel {0} will be deleted!\\n\\nEverything that was posted in this " "channel on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -"Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале " -"на этом сайте будет удалено навсегда!\\n\\nВы уверены?" +"Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте " +"будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Email_validation.php:24 #: ../../Zotlabs/Module/Email_resend.php:12 @@ -12455,9 +12453,10 @@ msgid "" "here to complete the account verification step. Please allow a few minutes " "for delivery, and check your spam folder if you do not see the message." msgstr "" -"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен " -"здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут " -"для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма." +"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот " +"токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите " +"несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы " +"не видите письма." #: ../../Zotlabs/Module/Email_validation.php:38 msgid "Resend Email" @@ -12488,8 +12487,9 @@ msgstr "Превышен лимит приглашений. Пожалуйста #, php-format msgid "%d message sent." msgid_plural "%d messages sent." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d сообщение отправлено." +msgstr[1] "%d сообщения отправлено." +msgstr[2] "%d сообщений отправлено." #: ../../Zotlabs/Module/Invite.php:107 msgid "You have no more invitations available" @@ -12538,7 +12538,7 @@ msgstr "Фотографии обложки" #: ../../Zotlabs/Module/Cover_photo.php:390 msgid "Your cover photo may be visible to anybody on the internet" -msgstr "Ваше фото обложки может быть видно кому угодно в Интернете" +msgstr "Фотография вашей обложки может быть видна всем в Интернете" #: ../../Zotlabs/Module/Cover_photo.php:394 msgid "Change Cover Photo" @@ -13125,9 +13125,7 @@ msgstr "Центр уведомлений по email (имя хоста)" msgid "" "If your channel is mirrored to multiple hubs, set this to your preferred " "location. This will prevent duplicate email notifications. Example: %s" -msgstr "" -"Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное " -"местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s" +msgstr "Если ваш канал зеркалируется в нескольких местах, это ваше предпочтительное местоположение. Это должно предотвратить дублировать уведомлений по email. Например: %s" #: ../../Zotlabs/Module/Settings/Channel.php:606 msgid "Show new wall posts, private messages and connections under Notices" @@ -13757,9 +13755,7 @@ msgstr "Использовать псевдоним этого канала вм msgid "" "Leave blank to keep your existing channel nickname. You will be randomly " "assigned a similar nickname if either name is already allocated on this site." -msgstr "" -"Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным " -"образом назначен похожий псевдоним если такое имя уже выделено на этом сайте." +msgstr "Оставьте пустым для сохранения существующего псевдонима канала. Вам будет случайным образом назначен похожий псевдоним если такое имя уже выделено на этом сайте." #: ../../Zotlabs/Module/Import.php:562 msgid "" @@ -13793,8 +13789,7 @@ msgid "" "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " "Group\"" msgstr "" -"Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " -"Group\"" +"Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\"" #: ../../Zotlabs/Module/New_channel.php:162 msgid "" @@ -13819,9 +13814,7 @@ msgstr "Выберите короткий псевдоним" msgid "" "Select a channel permission role compatible with your usage needs and " "privacy requirements." -msgstr "" -"Выберите разрешения для канала в соответствии с вашими потребностями и " -"требованиями безопасности." +msgstr "Выберите разрешения для канала в соответствии с вашими потребностями и требованиями безопасности." #: ../../Zotlabs/Module/New_channel.php:177 #: ../../Zotlabs/Module/Register.php:266 @@ -13837,10 +13830,7 @@ msgid "" "A channel is a unique network identity. It can represent a person (social " "network profile), a forum (group), a business or celebrity page, a newsfeed, " "and many other things." -msgstr "" -"Канал это уникальная сетевая идентичность. Он может представлять человека (профиль " -"в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту " -"и многие другие вещи." +msgstr "Канал это уникальная сетевая идентичность. Он может представлять человека (профиль в социальной сети), форум или группу, бизнес или страницу знаменитости, новостную ленту и многие другие вещи." #: ../../Zotlabs/Module/New_channel.php:182 msgid "" @@ -14030,7 +14020,7 @@ msgstr "Группа безопасности пуста" #: ../../Zotlabs/Module/Network.php:253 msgid "Privacy group: " -msgstr "Группа безопасности:" +msgstr "Группа безопасности: " #: ../../Zotlabs/Module/Regmod.php:15 msgid "Please login." @@ -14069,7 +14059,8 @@ msgstr "Превышено максимальное количество рег #: ../../Zotlabs/Module/Register.php:55 msgid "" "Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась." +msgstr "" +"Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась." #: ../../Zotlabs/Module/Register.php:89 msgid "Passwords do not match." @@ -14159,9 +14150,7 @@ msgstr "Ваш псевдоним будет использован для со msgid "" "Select a channel permission role for your usage needs and privacy " "requirements." -msgstr "" -"Выберите разрешения для канала в зависимости от ваших потребностей и требований " -"приватности." +msgstr "Выберите разрешения для канала в зависимости от ваших потребностей и требований приватности." #: ../../Zotlabs/Module/Register.php:267 msgid "no" @@ -14383,7 +14372,7 @@ msgstr "Группа безопасности: %s" #: ../../Zotlabs/Module/Group.php:217 msgid "Privacy group name: " -msgstr "Название группы безопасности:" +msgstr "Название группы безопасности: " #: ../../Zotlabs/Module/Group.php:222 msgid "Delete Group" @@ -14895,4 +14884,3 @@ msgstr "Загрузить файл" #: ../../Zotlabs/Storage/Browser.php:404 msgid "Drop files here to immediately upload" msgstr "Поместите файлы сюда для немедленной загрузки" - -- cgit v1.2.3 From a4f64c02d0ac6cfdf1e7ab04d2f6e772fb9ab4fe Mon Sep 17 00:00:00 2001 From: kostikov Date: Mon, 23 Jul 2018 12:20:50 +0200 Subject: Update hstrings.php --- view/ru/hstrings.php | 169 ++++++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 75 deletions(-) diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index d97aa2c7f..45fc75773 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -78,11 +78,11 @@ App::$strings["XMPP Settings"] = "Настройки XMPP"; App::$strings["Save Settings"] = "Сохранить настройки"; App::$strings["Jabber BOSH host"] = "Узел Jabber BOSH"; App::$strings["Use central userbase"] = "Использовать центральную базу данных"; -App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт\"auth_ejabberd.php\"."; +App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт \"auth_ejabberd.php\"."; App::$strings["Settings updated."] = "Настройки обновлены."; App::$strings["Send email to all members"] = "Отправить email всем участникам"; App::$strings["%s Administrator"] = "администратор %s"; -App::$strings["%1\$d of %2\$d messages sent."] = "%1\$dиз %2\$d сообщений отправлено."; +App::$strings["%1\$d of %2\$d messages sent."] = "%1\$d из %2\$d сообщений отправлено."; App::$strings["Send email to all hub members."] = "Отправить email всем участникам узла."; App::$strings["Sender Email address"] = "Адрес электронной почты отправителя"; App::$strings["Test mode (only send to hub administrator)"] = "Тестовый режим (отправка только администратору узла)"; @@ -107,7 +107,7 @@ App::$strings["Aged 34 and under"] = "Возраст 34 и ниже"; App::$strings["Average Age"] = "Средний возраст"; App::$strings["Known Chatrooms"] = "Известные чаты"; App::$strings["Known Tags"] = "Известные теги"; -App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "166/500Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам."; +App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "Обратите внимание, что статистика Diaspora и Friendica это только те, о которых ** этот каталог ** знает, а не все известные в сети. Это также относится и к чатам."; App::$strings["Invalid game."] = "Недействительная игра"; App::$strings["You are not a player in this game."] = "Вы не играете в эту игру."; App::$strings["You must be a local channel to create a game."] = "Ваш канал должен быть локальным чтобы создать игру."; @@ -312,7 +312,7 @@ App::$strings["Unknown"] = "Неизвестный"; App::$strings["ActivityPub"] = ""; App::$strings["photo"] = "фото"; App::$strings["status"] = "статус"; -App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %2\$s %3\$s"; +App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %3\$s %2\$s"; App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %2\$s %3\$s"; App::$strings["ActivityPub Protocol Settings updated."] = "Настройки протокола ActivityPub обновлены."; App::$strings["The ActivityPub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "Протокол ActivityPub не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала. "; @@ -391,7 +391,7 @@ App::$strings["Choose who you share with."] = "Выбрать с кем поде App::$strings["Click here when you are done."] = "Нажмите здесь когда закончите."; App::$strings["Adjust from which channels posts should be displayed."] = "Настройте из каких каналов должны отображаться публикации."; App::$strings["Only show posts from channels in the specified privacy group."] = "Показывать только публикации из определённой группы безопасности."; -App::$strings["Easily find posts containing tags (keywords preceded by the \"#\" symbol)."] = "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ \"#\")."; +App::$strings["Easily find posts containing tags (keywords preceded by the \"#\" symbol)."] = "Лёгкий поиск сообщения, содержащего теги (ключевые слова, которым предшествует символ #)."; App::$strings["Easily find posts in given category."] = "Лёгкий поиск публикаций в данной категории."; App::$strings["Easily find posts by date."] = "Лёгкий поиск публикаций по дате."; App::$strings["Suggested users who have volounteered to be shown as suggestions, and who we think you might find interesting."] = "Рекомендуемые пользователи, которые были представлены в качестве предложений, и которые, по нашему мнению, могут оказаться интересными."; @@ -399,7 +399,7 @@ App::$strings["Here you see channels you have connected to."] = "Здесь вы App::$strings["Save your search so you can repeat it at a later date."] = "Сохраните ваш поиск с тем, чтобы повторить его позже."; App::$strings["If you see this icon you can be sure that the sender is who it say it is. It is normal that it is not always possible to verify the sender, so the icon will be missing sometimes. There is usually no need to worry about that."] = "Если вы видите этот значок, вы можете быть уверены, что отправитель - это тот, кто это говорит. Это нормально, что не всегда можно проверить отправителя, поэтому значок иногда будет отсутствовать. Обычно об этом не нужно беспокоиться."; App::$strings["Danger! It seems someone tried to forge a message! This message is not necessarily from who it says it is from!"] = "Опасность! Кажется, кто-то пытался подделать сообщение! Это сообщение не обязательно от того, от кого оно значится!"; -App::$strings["Welcome to Hubzilla! Would you like to see a tour of the UI?

You can pause it at any time and continue where you left off by reloading the page, or navigting to another page.

You can also advance by pressing the return key"] = "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\""; +App::$strings["Welcome to Hubzilla! Would you like to see a tour of the UI?

You can pause it at any time and continue where you left off by reloading the page, or navigting to another page.

You can also advance by pressing the return key"] = "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\""; App::$strings["Some setting"] = "Некоторые настройки"; App::$strings["A setting"] = "Настройка"; App::$strings["Skeleton Settings"] = "Настройки скелета"; @@ -544,7 +544,7 @@ App::$strings["Paypal button payments are not enabled."] = "Кнопка Paypal App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты."; App::$strings["Enable Hubzilla Services Module"] = "Включить модуль сервиса Hubzilla"; App::$strings["Cart - Hubzilla Services Addon"] = "Корзина - плагин сервиса Hubzilla"; -App::$strings["New SKU"] = "Новый код"; +App::$strings["New Sku"] = "Новый код"; App::$strings["Cannot save edits to locked item."] = "Невозможно сохранить изменения заблокированной позиции."; App::$strings["SKU not found."] = "Код не найден."; App::$strings["Invalid Activation Directive."] = "Недействительная директива активации."; @@ -631,8 +631,8 @@ App::$strings["kiss"] = "целовать"; App::$strings["kissed"] = "поцелованный"; App::$strings["tempt"] = "искушать"; App::$strings["tempted"] = "искушённый"; -App::$strings["raise eyebrows at"] = ""; -App::$strings["raised their eyebrows at"] = ""; +App::$strings["raise eyebrows at"] = "поднять брови"; +App::$strings["raised their eyebrows at"] = "поднял брови"; App::$strings["insult"] = "оскорбить"; App::$strings["insulted"] = "оскорблённый"; App::$strings["praise"] = "хвалить"; @@ -651,8 +651,8 @@ App::$strings["fuck"] = "трахнуть"; App::$strings["fucked"] = "трахнул"; App::$strings["bonk"] = ""; App::$strings["bonked"] = ""; -App::$strings["declare undying love for"] = ""; -App::$strings["declared undying love for"] = ""; +App::$strings["declare undying love for"] = "признаться в любви к"; +App::$strings["declared undying love for"] = "признался в любви к"; App::$strings["Post to WordPress"] = "Опубликовать в WordPress"; App::$strings["Enable WordPress Post Plugin"] = "Включить плагин публикаций WordPress"; App::$strings["WordPress username"] = "Имя пользователя WordPress"; @@ -667,7 +667,7 @@ App::$strings["WordPress Post Settings"] = "Настройки публикац App::$strings["Wordpress Settings saved."] = "Настройки WordPress сохранены."; App::$strings["Who likes me?"] = "Кому я нравлюсь?"; App::$strings["Your account on %s will expire in a few days."] = "Ваш аккаунт на %s перестанет работать через несколько дней."; -App::$strings["Your $Productname test account is about to expire."] = "Тестовый период вашей учётной записи в $Productname истёк."; +App::$strings["Your $Productname test account is about to expire."] = "Срок действия пробного аккаунта в $Productname близок к окончанию."; App::$strings["Create an account to access services and applications"] = "Создайте аккаунт для доступа к службам и приложениям"; App::$strings["Register"] = "Регистрация"; App::$strings["Logout"] = "Выход"; @@ -756,12 +756,12 @@ App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s в %2\$s"; App::$strings["This is an unsaved preview"] = "Это несохранённый просмотр"; App::$strings["__ctx:title__ Likes"] = "Нравится"; App::$strings["__ctx:title__ Dislikes"] = "Не нравится"; -App::$strings["__ctx:title__ Agree"] = "За"; +App::$strings["__ctx:title__ Agree"] = "Согласен"; App::$strings["__ctx:title__ Disagree"] = "Против"; -App::$strings["__ctx:title__ Abstain"] = "Воздерживается"; -App::$strings["__ctx:title__ Attending"] = "Посещает"; -App::$strings["__ctx:title__ Not attending"] = "Не посещает"; -App::$strings["__ctx:title__ Might attend"] = "Может присутствовать"; +App::$strings["__ctx:title__ Abstain"] = "Воздерживаюсь"; +App::$strings["__ctx:title__ Attending"] = "Присоединившиеся"; +App::$strings["__ctx:title__ Not attending"] = "Не присоединившиеся"; +App::$strings["__ctx:title__ Might attend"] = "Могут присоединиться"; App::$strings["Select"] = "Выбрать"; App::$strings["Delete"] = "Удалить"; App::$strings["Toggle Star Status"] = "Переключить статус пометки"; @@ -792,17 +792,20 @@ App::$strings["Poke"] = "Ткнуть"; App::$strings["%s likes this."] = "%s нравится это."; App::$strings["%s doesn't like this."] = "%s не нравится это."; App::$strings["%2\$d people like this."] = array( - 0 => "", - 1 => "", + 0 => "%2\$d человеку это нравится.", + 1 => "%2\$d человекам это нравится.", + 2 => "%2\$d человекам это нравится.", ); App::$strings["%2\$d people don't like this."] = array( - 0 => "", - 1 => "", + 0 => "%2\$d человеку это не нравится.", + 1 => "%2\$d человекам это не нравится.", + 2 => "%2\$d человекам это не нравится.", ); App::$strings["and"] = "и"; App::$strings[", and %d other people"] = array( - 0 => "", - 1 => "", + 0 => ", и ещё %d человеку", + 1 => ", и ещё %d человекам", + 2 => ", и ещё %d человекам", ); App::$strings["%s like this."] = "%s нравится это."; App::$strings["%s don't like this."] = "%s не нравится это."; @@ -877,36 +880,44 @@ App::$strings["View Webpages"] = "Просмотр веб-страниц"; App::$strings["Wikis"] = ""; App::$strings["Wiki"] = ""; App::$strings["__ctx:noun__ Like"] = array( - 0 => "", - 1 => "", + 0 => "Нравится", + 1 => "Нравится", + 2 => "Нравится", ); App::$strings["__ctx:noun__ Dislike"] = array( - 0 => "", - 1 => "", + 0 => "Не нравится", + 1 => "Не нравится", + 2 => "Не нравится", ); App::$strings["__ctx:noun__ Attending"] = array( - 0 => "", - 1 => "", + 0 => "Посетит", + 1 => "Посетят", + 2 => "Посетят", ); App::$strings["__ctx:noun__ Not Attending"] = array( - 0 => "", - 1 => "", + 0 => "Не посетит", + 1 => "Не посетят", + 2 => "Не посетят", ); App::$strings["__ctx:noun__ Undecided"] = array( - 0 => "", - 1 => "", + 0 => "Не решил", + 1 => "Не решили", + 2 => "Не решили", ); App::$strings["__ctx:noun__ Agree"] = array( - 0 => "", - 1 => "", + 0 => "Согласен", + 1 => "Согласны", + 2 => "Согласны", ); App::$strings["__ctx:noun__ Disagree"] = array( - 0 => "", - 1 => "", + 0 => "Не согласен", + 1 => "Не согласны", + 2 => "Не согласны", ); App::$strings["__ctx:noun__ Abstain"] = array( - 0 => "", - 1 => "", + 0 => "Воздержался", + 1 => "Воздержались", + 2 => "Воздержались", ); App::$strings["Invalid data packet"] = "Неверный пакет данных"; App::$strings["Unable to verify channel signature"] = "Невозможно проверить подпись канала"; @@ -915,7 +926,7 @@ App::$strings["invalid target signature"] = "недопустимая целев App::$strings["l F d, Y \\@ g:i A"] = ""; App::$strings["Starts:"] = "Начало:"; App::$strings["Finishes:"] = "Окончание:"; -App::$strings["Location:"] = "Откуда:"; +App::$strings["Location:"] = "Местоположение:"; App::$strings["This event has been added to your calendar."] = "Это событие было добавлено в ваш календарь."; App::$strings["Not specified"] = "Не указано"; App::$strings["Needs Action"] = "Требует действия"; @@ -1054,7 +1065,7 @@ App::$strings["Age: "] = "Возраст:"; App::$strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD или MM-DD"; App::$strings["Required"] = "Требуется"; App::$strings["less than a second ago"] = "менее чем одну секунду"; -App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s тому назад"; +App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s назад"; App::$strings["__ctx:relative_date__ year"] = array( 0 => "год", 1 => "года", @@ -1220,8 +1231,9 @@ App::$strings["[Edited %s]"] = "[Отредактировано %s]"; App::$strings["__ctx:edit_activity__ Post"] = "Публикация"; App::$strings["__ctx:edit_activity__ Comment"] = "Комментарий"; App::$strings["%d invitation available"] = array( - 0 => "", - 1 => "", + 0 => "доступно %d приглашение", + 1 => "доступны %d приглашения", + 2 => "доступны %d приглашений", ); App::$strings["Advanced"] = "Дополнительно"; App::$strings["Find Channels"] = "Поиск каналов"; @@ -1360,7 +1372,7 @@ App::$strings["Ability to select posts by date ranges"] = "Возможност App::$strings["Saved Searches"] = "Сохранённые поиски"; App::$strings["Save search terms for re-use"] = "Сохранять результаты поиска для повторного использования"; App::$strings["Alternate Stream Order"] = "Отображение потока"; -App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Возможность показывать поток по дате последнего сообщения, последнего комментария или по дате публикации"; +App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Возможность показывать поток по дате последнего сообщения, последнего комментария или в порядке поступления"; App::$strings["Contact Filter"] = "Фильтр контактов"; App::$strings["Ability to display only posts of a selected contact"] = "Возможность показа публикаций только от выбранных контактов"; App::$strings["Forum Filter"] = "Фильтр по форумам"; @@ -1531,7 +1543,7 @@ App::$strings["Image file is empty."] = "Файл изображения пус App::$strings["Unable to process image"] = "Не удается обработать изображение"; App::$strings["Photo storage failed."] = "Ошибка хранилища фотографий."; App::$strings["a new photo"] = "новая фотография"; -App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s опубликовал %2\$s к %3\$s"; +App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s опубликовал %2\$s в %3\$s"; App::$strings["Recent Photos"] = "Последние фотографии"; App::$strings["Upload New Photos"] = "Загрузить новые фотографии"; App::$strings["New window"] = "Новое окно"; @@ -1572,8 +1584,9 @@ App::$strings["Share This"] = "Поделиться этим"; App::$strings["share"] = "поделиться"; App::$strings["Delivery Report"] = "Отчёт о доставке"; App::$strings["%d comment"] = array( - 0 => "", - 1 => "", + 0 => "%d комментарий", + 1 => "%d комментария", + 2 => "%d комментариев", ); App::$strings["View %s's profile - %s"] = "Просмотр %s профиля - %s"; App::$strings["to"] = "к"; @@ -1624,7 +1637,7 @@ App::$strings["\$Projectname Notification"] = "Оповещение \$Projectnam App::$strings["Thank You,"] = "Спасибо,"; App::$strings["This email was sent by %1\$s at %2\$s."] = "Это письмо было отправлено %1\$s на %2\$s."; App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "Чтобы прекратить получать эти сообщения, настройте параметры уведомлений в %s"; -App::$strings["To stop receiving these messages, please adjust your %s."] = "Чтобы прекратить получать эти сообщения, пожалуйста настройте ваш %s."; +App::$strings["To stop receiving these messages, please adjust your %s."] = "Чтобы прекратить получать эти сообщения, пожалуйста измените %s."; App::$strings["Notification Settings"] = "Настройки уведомлений"; App::$strings["%s "] = ""; App::$strings["[\$Projectname:Notify] New mail received at %s"] = "[\$Projectname:Notify] Получено новое сообщение в %s"; @@ -1669,7 +1682,7 @@ App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s fr App::$strings["Name:"] = "Имя:"; App::$strings["Photo:"] = "Фото:"; App::$strings["Please visit %s to approve or reject the suggestion."] = "Пожалуйста, посетите %s, чтобы одобрить или отклонить предложение."; -App::$strings["[\$Projectname:Notify]"] = ""; +App::$strings["[\$Projectname:Notify]"] = "[\$Projectname:Уведомление]"; App::$strings["created a new post"] = "создал новую публикацию"; App::$strings["commented on %s's post"] = "прокомментировал публикацию %s"; App::$strings["edited a post dated %s"] = "отредактировал публикацию датированную %s"; @@ -1705,7 +1718,7 @@ App::$strings["Posted Date"] = "По публикациям"; App::$strings["Order by last posted date"] = "Сортировка по дате последней публикации"; App::$strings["Date Unthreaded"] = "По порядку"; App::$strings["Order unthreaded by date"] = "Сортировка в порядке поступления"; -App::$strings["Activity Order"] = "Сортировка по активности"; +App::$strings["Activity Order"] = "Сортировка активности"; App::$strings["Site"] = "Сайт"; App::$strings["Accounts"] = "Учётные записи"; App::$strings["Member registrations waiting for confirmation"] = "Регистрации участников, ожидающие подверждения"; @@ -1887,11 +1900,11 @@ App::$strings["Can view my channel webpages"] = "Может просматрив App::$strings["Can view my wiki pages"] = "Может просматривать мои вики-страницы"; App::$strings["Can create/edit my channel webpages"] = "Может редактировать мои веб-страницы"; App::$strings["Can write to my wiki pages"] = "Может редактировать мои вики-страницы"; -App::$strings["Can post on my channel (wall) page"] = "Может публиковать на моей странице канала (\"стена\")"; +App::$strings["Can post on my channel (wall) page"] = "Может публиковать на моей странице канала"; App::$strings["Can comment on or like my posts"] = "Может прокомментировать или отмечать как понравившиеся мои посты"; App::$strings["Can send me private mail messages"] = "Может отправлять мне личные сообщения по эл. почте"; App::$strings["Can like/dislike profiles and profile things"] = "Может комментировать или отмечать как нравится/ненравится мой профиль"; -App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Может отправлять всем подписчикам моего канала через использование ! в публикациях"; +App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Может пересылать всем подписчикам моего канала используя ! в публикациях"; App::$strings["Can chat with me"] = "Может общаться со мной в чате"; App::$strings["Can source my public posts in derived channels"] = "Может использовать мои публичные сообщения в клонированных лентах сообщений"; App::$strings["Can administer my channel"] = "Может администрировать мой канал"; @@ -2443,7 +2456,7 @@ App::$strings["PHP executable path"] = "Пусть к исполняемому App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Введите полный путь к исполняемому модулю PHP. Вы можете оставить его пустым для продолжения установки."; App::$strings["Command line PHP"] = "Командная строка PHP"; App::$strings["Unable to check command line PHP, as shell_exec() is disabled. This is required."] = "Невозможно проверить командную строку PHP поскольку требуемая функция shell_exec() отключена."; -App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\". "; +App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "В консольной версии PHP в вашей системе отключена опция \"register_argc_argv\"."; App::$strings["This is required for message delivery to work."] = "Это необходимо для функционирования доставки сообщений."; App::$strings["PHP register_argc_argv"] = ""; App::$strings["Your max allowed total upload size is set to %s. Maximum size of one file to upload is set to %s. You are allowed to upload up to %d files at once."] = "Максимально разрешённый общий размер загрузок установлен в %s. Максимальный размер одной загрузки установлен в %s. Вам разрешено загружать до %d файлов за один приём."; @@ -2660,12 +2673,14 @@ App::$strings["Log file"] = "Файл журнала"; App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "Должен быть доступен для записи веб-сервером. Пусть относителен основного каталога веб-сайта."; App::$strings["Log level"] = "Уровень журнала"; App::$strings["%s account blocked/unblocked"] = array( - 0 => "", - 1 => "", + 0 => "%s аккаунт блокирован/разблокирован", + 1 => "%s аккаунта блокированы/разблокированы", + 2 => "%s аккаунтов блокированы/разблокированы", ); App::$strings["%s account deleted"] = array( - 0 => "", - 1 => "", + 0 => "%s аккаунт удалён", + 1 => "%s аккаунта удалёны", + 2 => "%s аккаунтов удалёны", ); App::$strings["Account not found"] = "Аккаунт не найден"; App::$strings["Account '%s' blocked"] = "Аккаунт '%s' заблокирован"; @@ -2680,8 +2695,8 @@ App::$strings["Register date"] = "Дата регистрации"; App::$strings["Last login"] = "Последний вход"; App::$strings["Expires"] = "Срок действия"; App::$strings["Service Class"] = "Класс обслуживания"; -App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные учётные записи будут удалены!\\n\\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; -App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\\n\\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?"; +App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно."; App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:"; App::$strings["https://youtube.com/
https://www.youtube.com/
https://youtu.be/
https://vimeo.com/
https://soundcloud.com/
"] = ""; @@ -2739,7 +2754,7 @@ App::$strings["[Experimental]"] = "[экспериментальный]"; App::$strings["[Unsupported]"] = "[неподдерживаемый]"; App::$strings["Off"] = "Выкл."; App::$strings["On"] = "Вкл."; -App::$strings["Lock feature %s"] = "Функция блокировки \"%s\""; +App::$strings["Lock feature %s"] = "Заблокировать функцию \"%s\""; App::$strings["Manage Additional Features"] = "Управлять дополнительными функциями"; App::$strings["Queue Statistics"] = "Статистика очереди"; App::$strings["Total Entries"] = "Всего записей"; @@ -2758,16 +2773,19 @@ App::$strings["Technical skill level"] = "Уровень технических App::$strings["Account language (for emails)"] = "Язык сообщения для email"; App::$strings["Service class"] = "Класс обслуживания"; App::$strings["%s channel censored/uncensored"] = array( - 0 => "", - 1 => "", + 0 => "%s канал цензурируется/нецензурируется", + 1 => "%s канала цензурируются/нецензурируются", + 2 => "%s каналов цензурируются/нецензурируются", ); App::$strings["%s channel code allowed/disallowed"] = array( - 0 => "", - 1 => "", + 0 => "в %s канале код разрешён/запрещён", + 1 => "в %s каналах код разрешён/запрещён", + 2 => "в %s каналах код разрешён/запрещён", ); App::$strings["%s channel deleted"] = array( - 0 => "", - 1 => "", + 0 => "%s канал удалён", + 1 => "%s канала удалены", + 2 => "%s каналов удалены", ); App::$strings["Channel not found"] = "Канал не найден"; App::$strings["Channel '%s' deleted"] = "Канал '%s' удалён"; @@ -2780,8 +2798,8 @@ App::$strings["Uncensor"] = "Нецензурировать"; App::$strings["Allow Code"] = "Разрешить код"; App::$strings["Disallow Code"] = "Запретить код"; App::$strings["UID"] = ""; -App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\\n\\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; -App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\\n\\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\\n\\nВы уверены?"; +App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\n\nВы уверены?"; +App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["Token verification failed."] = "Не удалось выполнить проверку токена."; App::$strings["Email Verification Required"] = "Требуется проверка адреса email"; App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма."; @@ -2792,8 +2810,9 @@ App::$strings["%s : Not a valid email address."] = "%s : Недействите App::$strings["Please join us on \$Projectname"] = "Присоединятесь к \$Projectname !"; App::$strings["Invitation limit exceeded. Please contact your site administrator."] = "Превышен лимит приглашений. Пожалуйста, свяжитесь с администрацией сайта."; App::$strings["%d message sent."] = array( - 0 => "", - 1 => "", + 0 => "%d сообщение отправлено.", + 1 => "%d сообщения отправлено.", + 2 => "%d сообщений отправлено.", ); App::$strings["You have no more invitations available"] = "У вас больше нет приглашений"; App::$strings["Send invitations"] = "Отправить приглашение"; @@ -2806,7 +2825,7 @@ App::$strings["or visit"] = "или посетите"; App::$strings["3. Click [Connect]"] = "Нажать [Подключиться]"; App::$strings["Block Title"] = "Заблокировать заголовок"; App::$strings["Cover Photos"] = "Фотографии обложки"; -App::$strings["Your cover photo may be visible to anybody on the internet"] = "Ваше фото обложки может быть видно кому угодно в Интернете"; +App::$strings["Your cover photo may be visible to anybody on the internet"] = "Фотография вашей обложки может быть видна всем в Интернете"; App::$strings["Change Cover Photo"] = "Изменить фотографию обложки"; App::$strings["Like/Dislike"] = "Нравится / не нравится"; App::$strings["This action is restricted to members."] = "Это действие доступно только участникам."; @@ -3094,7 +3113,7 @@ App::$strings["Visit %s's profile [%s]"] = "Посетить %s ​​профи App::$strings["View Connections"] = "Просмотр контактов"; App::$strings["Authentication failed."] = "Ошибка аутентификации."; App::$strings["Your real name is recommended."] = "Рекомендуется использовать ваше настоящее имя."; -App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""; +App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\""; App::$strings["This will be used to create a unique network address (like an email address)."] = "Это будет использовано для создания уникального сетевого адреса (наподобие email)."; App::$strings["Allowed characters are a-z 0-9, - and _"] = "Разрешённые символы a-z 0-9, - и _"; App::$strings["Channel name"] = "Название канала"; @@ -3152,7 +3171,7 @@ App::$strings["Redeliver"] = "Доставить повторно"; App::$strings["No such group"] = "Нет такой группы"; App::$strings["No such channel"] = "Нет такого канала"; App::$strings["Privacy group is empty"] = "Группа безопасности пуста"; -App::$strings["Privacy group: "] = "Группа безопасности:"; +App::$strings["Privacy group: "] = "Группа безопасности: "; App::$strings["Please login."] = "Пожалуйста, войдите."; App::$strings["No service class restrictions found."] = "Ограничений класса обслуживание не найдено."; App::$strings["Add Card"] = "Добавить карточку"; @@ -3161,7 +3180,7 @@ App::$strings["Change Order of App Tray Apps"] = "Изменить порядо App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Используйте стрелки для перемещения приложения влево (вверх) или вправо (вниз) в панели навигации"; App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Используйте стрелки для перемещения приложения вверх или вниз в лотке"; App::$strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Превышено максимальное количество регистраций на сегодня. Пожалуйста, попробуйте снова завтра."; -App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Просьба подтвердить согласие с \"Условиями обслуживания\". Регистрация не удалась."; +App::$strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась."; App::$strings["Passwords do not match."] = "Пароли не совпадают."; App::$strings["Registration successful. Continue to create your first channel..."] = "Регистрация завершена успешно. Для продолжения создайте свой первый канал..."; App::$strings["Registration successful. Please check your email for validation instructions."] = "Регистрация завершена успешно. Пожалуйста проверьте вашу электронную почту для подтверждения."; @@ -3235,7 +3254,7 @@ App::$strings["Members are visible to other channels"] = "Участники к App::$strings["Privacy group removed."] = "Группа безопасности удалена."; App::$strings["Unable to remove privacy group."] = "Ну удалось удалить группу безопасности."; App::$strings["Privacy Group: %s"] = "Группа безопасности: %s"; -App::$strings["Privacy group name: "] = "Название группы безопасности:"; +App::$strings["Privacy group name: "] = "Название группы безопасности: "; App::$strings["Delete Group"] = "Удалить группу"; App::$strings["Group members"] = "Члены группы"; App::$strings["Not in this group"] = "Не в этой группе"; -- cgit v1.2.3 From b0c8e75c6e1621470e360f42eff1454241e41e8b Mon Sep 17 00:00:00 2001 From: kostikov Date: Wed, 25 Jul 2018 22:28:21 +0200 Subject: Fix duplicate transport displaying --- Zotlabs/Module/Siteinfo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Siteinfo.php b/Zotlabs/Module/Siteinfo.php index 25276815d..79b94662d 100644 --- a/Zotlabs/Module/Siteinfo.php +++ b/Zotlabs/Module/Siteinfo.php @@ -32,7 +32,7 @@ class Siteinfo extends \Zotlabs\Web\Controller { '$transport_link' => 'https://zotlabs.com', '$additional_text' => t('Additional federated transport protocols:'), - '$additional_fed' => implode(',',$federated), + '$additional_fed' => implode(', ',array_unique($federated)), '$prj_version' => ((get_config('system','hidden_version_siteinfo')) ? '' : sprintf( t('Version %s'), \Zotlabs\Lib\System::get_project_version())), '$prj_linktxt' => t('Project homepage'), '$prj_srctxt' => t('Developer homepage'), -- cgit v1.2.3 From ec3a066e4e94ad7c72d1d07371081318a4d5e9ab Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 26 Jul 2018 09:32:52 +0200 Subject: fix sql error --- include/connections.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/connections.php b/include/connections.php index 807d07220..129bcdc8d 100644 --- a/include/connections.php +++ b/include/connections.php @@ -380,7 +380,7 @@ function contact_remove($channel_id, $abook_id) { ); if($r) { foreach($r as $rr) { - $x = q("select uid from term where otype = %d and oid = %d ttype = %d limit 1", + $x = q("select uid from term where otype = %d and oid = %d and ttype = %d limit 1", intval(TERM_OBJ_POST), intval($rr['id']), intval(TERM_FILE) -- cgit v1.2.3 From e01c277c56771d96c0666eb4e401b7c3563ef823 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 26 Jul 2018 12:18:54 +0200 Subject: Update lostpass_eml.tpl --- view/ru/lostpass_eml.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/ru/lostpass_eml.tpl b/view/ru/lostpass_eml.tpl index 76ccb0f01..6cff3c485 100644 --- a/view/ru/lostpass_eml.tpl +++ b/view/ru/lostpass_eml.tpl @@ -1,5 +1,5 @@ - Уважаемый {{$username}}, + Недавно {{$sitename}} был получен запрос на сброс пароля вашей учётной записи. Для подтверждения этого запроса, пожалуйста перейдите по ссылке проверки ниже или вставьте его в адресную строку вашего браузера. -- cgit v1.2.3 From baa5fd9739ea983541252dc154dfb146d3ceb0b6 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 26 Jul 2018 12:19:59 +0200 Subject: Update passchanged_eml.tpl --- view/ru/passchanged_eml.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/ru/passchanged_eml.tpl b/view/ru/passchanged_eml.tpl index 86a0ea3f2..a9b689f1d 100644 --- a/view/ru/passchanged_eml.tpl +++ b/view/ru/passchanged_eml.tpl @@ -1,5 +1,5 @@ - Дорогой {{$username}}, + Ваш пароль был изменен, как вы и просили. Пожалуйста, сохраните эту информацию в ваших записях (или смените свой пароль на такой который вы точно не забудете). -- cgit v1.2.3 From 48fb3d3653dde9332ab942eb43ee1ed05ba5bc23 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 26 Jul 2018 12:20:53 +0200 Subject: Update hmessages.po --- view/ru/hmessages.po | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index f7ea3df15..15b1c136b 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -3390,7 +3390,7 @@ msgstr "Задания Cron / планировщика не запущены." #: ../../boot.php:2535 ../../include/datetime.php:238 msgid "never" -msgstr "никогд" +msgstr "никогда" #: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3078 #: ../../Zotlabs/Module/Admin/Site.php:198 @@ -3733,17 +3733,17 @@ msgstr "Воздерживаюсь" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Attending" -msgstr "Присоединившиеся" +msgstr "Посещаю" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Not attending" -msgstr "Не присоединившиеся" +msgstr "Не посещаю" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" msgid "Might attend" -msgstr "Могут присоединиться" +msgstr "Возможно посещу" #: ../../include/conversation.php:690 ../../Zotlabs/Lib/ThreadItem.php:158 msgid "Select" @@ -7365,7 +7365,7 @@ msgstr "Пожалуйста, посетите %s для просмотра и/ #: ../../Zotlabs/Lib/Enotify.php:144 msgid "commented on" -msgstr " прокомментировал в" +msgstr "прокомментировал" #: ../../Zotlabs/Lib/Enotify.php:155 msgid "liked" @@ -7974,7 +7974,7 @@ msgstr "Настройки аккаунта" #: ../../Zotlabs/Widget/Settings_menu.php:41 msgid "Channel settings" -msgstr "Выбор канала" +msgstr "Настройки канала" #: ../../Zotlabs/Widget/Settings_menu.php:50 msgid "Additional features" @@ -12844,7 +12844,7 @@ msgstr "Членство одобрено автоматически" #: ../../Zotlabs/Module/Settings/Channel.php:514 msgid "Channel Settings" -msgstr "Выбор канала" +msgstr "Настройки канала" #: ../../Zotlabs/Module/Settings/Channel.php:521 msgid "Basic Settings" @@ -14753,7 +14753,7 @@ msgstr "Участник сайта (%s)" #: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49 #, php-format msgid "Password reset requested at %s" -msgstr "Запроше сброс пароля на %s" +msgstr "Запрошен сброс пароля на %s" #: ../../Zotlabs/Module/Lostpass.php:68 msgid "" @@ -14781,7 +14781,7 @@ msgstr "нажмите здесь чтобы войти" msgid "" "Your password may be changed from the Settings page after " "successful login." -msgstr "Ваш пароль может быть изменён на странице Настройкипосле успешного входа." +msgstr "Ваш пароль может быть изменён на странице Настройки после успешного входа." #: ../../Zotlabs/Module/Lostpass.php:117 #, php-format @@ -14884,3 +14884,4 @@ msgstr "Загрузить файл" #: ../../Zotlabs/Storage/Browser.php:404 msgid "Drop files here to immediately upload" msgstr "Поместите файлы сюда для немедленной загрузки" + -- cgit v1.2.3 From 06b0dbdfbad995dc1f1b2144594fad08a42ef146 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 26 Jul 2018 12:21:33 +0200 Subject: Update hstrings.php --- view/ru/hstrings.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index 45fc75773..cedd38a31 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -682,7 +682,7 @@ App::$strings["[\$Projectname] Website SSL error for %s"] = "[\$Projectname] О App::$strings["Website SSL certificate is not valid. Please correct."] = "SSL/TLS сертификат веб-сайт недействителен. Исправьте это."; App::$strings["[\$Projectname] Cron tasks not running on %s"] = "[\$Projectname] Задания Cron не запущены на %s"; App::$strings["Cron/Scheduled tasks not running."] = "Задания Cron / планировщика не запущены."; -App::$strings["never"] = "никогд"; +App::$strings["never"] = "никогда"; App::$strings["Default"] = "По умолчанию"; App::$strings["Focus (Hubzilla default)"] = "Фокус (по умолчанию Hubzilla)"; App::$strings["Theme settings"] = "Настройки темы"; @@ -759,9 +759,9 @@ App::$strings["__ctx:title__ Dislikes"] = "Не нравится"; App::$strings["__ctx:title__ Agree"] = "Согласен"; App::$strings["__ctx:title__ Disagree"] = "Против"; App::$strings["__ctx:title__ Abstain"] = "Воздерживаюсь"; -App::$strings["__ctx:title__ Attending"] = "Присоединившиеся"; -App::$strings["__ctx:title__ Not attending"] = "Не присоединившиеся"; -App::$strings["__ctx:title__ Might attend"] = "Могут присоединиться"; +App::$strings["__ctx:title__ Attending"] = "Посещаю"; +App::$strings["__ctx:title__ Not attending"] = "Не посещаю"; +App::$strings["__ctx:title__ Might attend"] = "Возможно посещу"; App::$strings["Select"] = "Выбрать"; App::$strings["Delete"] = "Удалить"; App::$strings["Toggle Star Status"] = "Переключить статус пометки"; @@ -1645,7 +1645,7 @@ App::$strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s отп App::$strings["%1\$s sent you %2\$s."] = "%1\$s послал вам %2\$s."; App::$strings["a private message"] = "личное сообщение"; App::$strings["Please visit %s to view and/or reply to your private messages."] = "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения."; -App::$strings["commented on"] = " прокомментировал в"; +App::$strings["commented on"] = "прокомментировал"; App::$strings["liked"] = "понравилось"; App::$strings["disliked"] = "не понравилось"; App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = ""; @@ -1780,7 +1780,7 @@ App::$strings["Export Calendar"] = "Экспортировать календа App::$strings["Import Calendar"] = "Импортировать календарь"; App::$strings["Wiki List"] = "Список Wiki"; App::$strings["Account settings"] = "Настройки аккаунта"; -App::$strings["Channel settings"] = "Выбор канала"; +App::$strings["Channel settings"] = "Настройки канала"; App::$strings["Additional features"] = "Дополнительные функции"; App::$strings["Addon settings"] = "Настройки расширений"; App::$strings["Display settings"] = "Настройки отображения"; @@ -2896,7 +2896,7 @@ App::$strings["or"] = "или"; App::$strings["Your channel address is"] = "Адрес вашего канала"; App::$strings["Your files/photos are accessible via WebDAV at"] = "Ваши файы / фотографии доступны через WebDAV по"; App::$strings["Automatic membership approval"] = "Членство одобрено автоматически"; -App::$strings["Channel Settings"] = "Выбор канала"; +App::$strings["Channel Settings"] = "Настройки канала"; App::$strings["Basic Settings"] = "Основные настройки"; App::$strings["Email Address:"] = "Адрес email:"; App::$strings["Your Timezone:"] = "Часовой пояс:"; @@ -3348,13 +3348,13 @@ App::$strings["Unknown error"] = "Неизвестная ошибка"; App::$strings["No valid account found."] = "Действительный аккаунт не найден."; App::$strings["Password reset request issued. Check your email."] = "Запрос на сброс пароля отправлен. Проверьте вашу электронную почту."; App::$strings["Site Member (%s)"] = "Участник сайта (%s)"; -App::$strings["Password reset requested at %s"] = "Запроше сброс пароля на %s"; +App::$strings["Password reset requested at %s"] = "Запрошен сброс пароля на %s"; App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Запрос не может быть проверен. (Вы могли отправить его раньше). Сброс пароля не возможен."; App::$strings["Your password has been reset as requested."] = "Ваш пароль в соответствии с просьбой сброшен."; App::$strings["Your new password is"] = "Ваш новый пароль"; App::$strings["Save or copy your new password - and then"] = "Сохраните ваш новый пароль и затем"; App::$strings["click here to login"] = "нажмите здесь чтобы войти"; -App::$strings["Your password may be changed from the Settings page after successful login."] = "Ваш пароль может быть изменён на странице Настройкипосле успешного входа."; +App::$strings["Your password may be changed from the Settings page after successful login."] = "Ваш пароль может быть изменён на странице Настройки после успешного входа."; App::$strings["Your password has changed at %s"] = "Пароль был изменен на %s"; App::$strings["Forgot your Password?"] = "Забыли ваш пароль?"; App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Введите ваш адрес электронной почты и нажмите отправить чтобы сбросить пароль. Затем проверьте ваш почтовый ящик для дальнейших инструкций. "; -- cgit v1.2.3 From 0fe7004d38f884ddde310a7dd2aca87b8154f15b Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Fri, 27 Jul 2018 11:03:02 +0200 Subject: Update Apps.php --- Zotlabs/Lib/Apps.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 82f0b57b8..d89d8b878 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -323,7 +323,10 @@ class Apps { 'Features' => t('Features'), 'Language' => t('Language'), 'Post' => t('Post'), - 'Profile Photo' => t('Profile Photo') + 'Profile Photo' => t('Profile Photo'), + 'Profile' => t('Profile'), + 'Profiles' => t('Profiles'), + 'Privacy Groups' => t('Privacy Groups') ); if(array_key_exists('name',$arr)) { -- cgit v1.2.3 From 4fd9d1ee5ff95822975bb530fa42c31f48caeff3 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Fri, 27 Jul 2018 11:29:38 +0200 Subject: Update Apps.php --- Zotlabs/Lib/Apps.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index d89d8b878..abac2090e 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -324,9 +324,10 @@ class Apps { 'Language' => t('Language'), 'Post' => t('Post'), 'Profile Photo' => t('Profile Photo'), - 'Profile' => t('Profile'), - 'Profiles' => t('Profiles'), - 'Privacy Groups' => t('Privacy Groups') + 'Profile' => t('Profile'), + 'Profiles' => t('Profiles'), + 'Privacy Groups' => t('Privacy Groups'), + 'Notifications' => t('Notifications') ); if(array_key_exists('name',$arr)) { -- cgit v1.2.3 From 05b3237bae016e888d15b954292fe3a37a5c4899 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Fri, 27 Jul 2018 11:50:04 +0200 Subject: Update nav.php --- include/nav.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/nav.php b/include/nav.php index 41358c93e..05d2d199f 100644 --- a/include/nav.php +++ b/include/nav.php @@ -105,12 +105,12 @@ function nav($template = 'default') { $nav['logout'] = ['logout',t('Logout'), "", t('End this session'),'logout_nav_btn']; // user menu - $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['name'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn']; + $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['raw_name'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn']; if(feature_enabled(local_channel(),'multi_profiles')) - $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn']; + $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn']; else - $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn']; + $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn']; } else { -- cgit v1.2.3 From e28dab17d6b958d6ef76181d23f784d17bc70b5e Mon Sep 17 00:00:00 2001 From: zotlabs Date: Fri, 27 Jul 2018 13:59:27 -0700 Subject: app update and ownership issues --- Zotlabs/Lib/Apps.php | 57 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 82f0b57b8..b337a3bcd 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -140,10 +140,15 @@ class Apps { foreach(self::$available_apps as $iapp) { if($iapp['app_id'] == hash('whirlpool',$app['name'])) { $notfound = false; - if(($iapp['app_version'] != $app['version']) + if(($iapp['app_version'] !== $app['version']) || ($app['plugin'] && (! $iapp['app_plugin']))) { return intval($iapp['app_id']); } + + if(($iapp['app_url'] !== $app['url']) + || ($iapp['app_photo'] !== $app['photo'])) { + return intval($iapp['app_id']); + } } } @@ -198,12 +203,11 @@ class Apps { if($lines) { foreach($lines as $x) { if(preg_match('/^([a-zA-Z].*?):(.*?)$/ism',$x,$matches)) { - $ret[$matches[1]] = trim(str_replace(array('$baseurl','$nick'),array($baseurl,$address),$matches[2])); + $ret[$matches[1]] = trim($matches[2]); } } } - if(! $ret['photo']) $ret['photo'] = $baseurl . '/' . get_default_profile_photo(80); @@ -372,9 +376,24 @@ class Apps { $papp['papp'] = self::papp_encode($papp); + // This will catch somebody clicking on a system "available" app that hasn't had the path macros replaced + // and they are allowed to see the app + + + if(strstr($papp['url'],'$baseurl') || strstr($papp['url'],'$nick') || strstr($papp['photo'],'$baseurl') || strstr($pap['photo'],'$nick')) { + $view_channel = local_channel(); + if(! $view_channel) { + $sys = get_sys_channel(); + $view_channel = $sys['channel_id']; + } + self::app_macros($view_channel,$papp); + } + if(! strstr($papp['url'],'://')) $papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url']; + + foreach($papp as $k => $v) { if(strpos($v,'http') === 0 && $k != 'papp') { if(! (local_channel() && strpos($v,z_root()) === 0)) { @@ -811,6 +830,29 @@ class Apps { } + static public function app_macros($uid,&$arr) { + + if(! intval($uid)) + return; + + $baseurl = z_root(); + $channel = channelx_by_n($uid); + $address = (($channel) ? $channel['channel_address'] : ''); + + //future expansion + + $observer = \App::get_observer(); + + $arr['url'] = str_replace(array('$baseurl','$nick'),array($baseurl,$address),$arr['url']); + $arr['photo'] = str_replace(array('$baseurl','$nick'),array($baseurl,$address),$arr['photo']); + + } + + + + + + static public function app_store($arr) { //logger('app_store: ' . print_r($arr,true)); @@ -820,6 +862,7 @@ class Apps { $sys = get_sys_channel(); + self::app_macros($arr['uid'],$arr); $darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : ''); $darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0); @@ -905,11 +948,14 @@ class Apps { $darray = array(); $ret = array('success' => false); + self::app_macros($arr['uid'],$arr); + + $darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : ''); $darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0); $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : 0); - if((! $darray['app_url']) || (! $darray['app_channel']) || (! $darray['app_id'])) + if((! $darray['app_url']) || (! $darray['app_id'])) return $ret; if($arr['photo'] && (strpos($arr['photo'],'icon:') !== 0) && (! strstr($arr['photo'],z_root()))) { @@ -996,9 +1042,6 @@ class Apps { $ret['type'] = 'personal'; - if($app['app_id']) - $ret['guid'] = $app['app_id']; - if($app['app_id']) $ret['guid'] = $app['app_id']; -- cgit v1.2.3 From e25d205a7f1428588edd431002a2e10833c8f76e Mon Sep 17 00:00:00 2001 From: zotlabs Date: Fri, 27 Jul 2018 14:36:06 -0700 Subject: app delete issue with base installed apps and app photo being reloaded uneccessarily --- Zotlabs/Lib/Apps.php | 66 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index b337a3bcd..841fffd39 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -56,12 +56,8 @@ class Apps { } - - static public function import_system_apps() { - if(! local_channel()) - return; - - self::$base_apps = get_config('system','base_apps',[ + static public function get_base_apps() { + return get_config('system','base_apps',[ 'Connections', 'Suggest Channels', 'Grid', @@ -77,7 +73,16 @@ class Apps { 'Mail', 'Profile Photo' ]); + } + + + static public function import_system_apps() { + if(! local_channel()) + return; + + self::$base_apps = self::get_base_apps(); + $apps = self::get_system_apps(false); self::$available_apps = q("select * from app where app_channel = 0"); @@ -537,9 +542,26 @@ class Apps { return false; } - static public function app_destroy($uid,$app) { + + static public function can_delete($uid,$app) { + if(! $uid) { + return false; + } + + $base_apps = self::get_base_apps(); + if($base_apps) { + foreach($base_apps as $b) { + if($app['guid'] === hash('whirlpool',$b)) { + return false; + } + } + } + return true; + } + static public function app_destroy($uid,$app) { + if($uid && $app['guid']) { $x = q("select * from app where app_id = '%s' and app_channel = %d limit 1", @@ -549,25 +571,31 @@ class Apps { if($x) { if(! intval($x[0]['app_deleted'])) { $x[0]['app_deleted'] = 1; - q("delete from term where otype = %d and oid = %d", - intval(TERM_OBJ_APP), - intval($x[0]['id']) - ); - if ($uid) { + if(self::can_delete($uid,$app)) { $r = q("delete from app where app_id = '%s' and app_channel = %d", dbesc($app['guid']), intval($uid) ); - - // we don't sync system apps - they may be completely different on the other system - build_sync_packet($uid,array('app' => $x)); + q("delete from term where otype = %d and oid = %d", + intval(TERM_OBJ_APP), + intval($x[0]['id']) + ); + } + else { + $r = q("update app set app_deleted = 1 where app_id = '%s' and app_channel = %d", + dbesc($app['guid']), + intval($uid) + ); } + + build_sync_packet($uid,array('app' => $x)); } else { self::app_undestroy($uid,$app); } } } + } static public function app_undestroy($uid,$app) { @@ -874,8 +902,8 @@ class Apps { $arr['author'] = $sys['channel_hash']; } - if($arr['photo'] && (strpos($arr['photo'],'icon:') !== 0) && (! strstr($arr['photo'],z_root()))) { - $x = import_xchan_photo($arr['photo'],get_observer_hash(),true); + if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strstr($arr['photo'],z_root()))) { + $x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true); $arr['photo'] = $x[1]; } @@ -958,8 +986,8 @@ class Apps { if((! $darray['app_url']) || (! $darray['app_id'])) return $ret; - if($arr['photo'] && (strpos($arr['photo'],'icon:') !== 0) && (! strstr($arr['photo'],z_root()))) { - $x = import_xchan_photo($arr['photo'],get_observer_hash(),true); + if($arr['photo'] && (strpos($arr['photo'],'icon:') === false) && (! strstr($arr['photo'],z_root()))) { + $x = import_xchan_photo(str_replace('$baseurl',z_root(),$arr['photo']),get_observer_hash(),true); $arr['photo'] = $x[1]; } -- cgit v1.2.3 From a0f28708ab125e953157299d13d8ebbea8b77396 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Fri, 27 Jul 2018 15:05:29 -0700 Subject: don't sync system apps --- Zotlabs/Lib/Apps.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 841fffd39..ddaf8c44d 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -527,7 +527,7 @@ class Apps { intval($uid) ); if($r) { - if(! $r[0]['app_system']) { + if(($app['uid']) && (! $r[0]['app_system'])) { if($app['categories'] && (! $app['term'])) { $r[0]['term'] = q("select * from term where otype = %d and oid = %d", intval(TERM_OBJ_APP), @@ -587,8 +587,9 @@ class Apps { intval($uid) ); } - - build_sync_packet($uid,array('app' => $x)); + if(! intval($x[0]['app_system'])) { + build_sync_packet($uid,array('app' => $x)); + } } else { self::app_undestroy($uid,$app); -- cgit v1.2.3 From e27e0ca198d6e4890eedd7eeaa121a32ed5fba46 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 28 Jul 2018 17:36:48 +0200 Subject: Plural form strings export added --- util/php2po.php | 121 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 62 insertions(+), 59 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index c165006a1..459226f85 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -7,65 +7,68 @@ } } - if ($argc!=2) { - print "Usage: ".$argv[0]." \n\n"; - return; - } - - $phpfile = $argv[1]; - $pofile = dirname($phpfile)."/hmessages.po"; + if ($argc!=2) { + print "Usage: ".$argv[0]." \n\n"; + return; + } + + $phpfile = $argv[1]; + $pofile = dirname($phpfile)."/hmessages.po"; + + if (!file_exists($phpfile)){ + print "Unable to find '$phpfile'\n"; + return; + } + + include_once($phpfile); - if (!file_exists($phpfile)){ - print "Unable to find '$phpfile'\n"; - return; - } + print "Out to '$pofile'\n"; - include_once($phpfile); + $out = ""; + $infile = file($pofile); + $k=""; + $ink = False; + foreach ($infile as $l) { - print "Out to '$pofile'\n"; - - $out = ""; - $infile = file($pofile); - $k=""; - $ink = False; - foreach ($infile as $l) { - - if ($k!="" && substr($l,0,7)=="msgstr "){ - $ink = False; - $v = ''; - //echo "DBG: k:'$k'\n"; - if (isset(App::$strings[$k])) { - $v= App::$strings[$k]; - //echo "DBG\n"; - //var_dump($k, $v, App::$strings[$k], $v); - //echo "/DBG\n"; - - } - //echo "DBG: v:'$v'\n"; - $l = "msgstr \"".str_replace('"','\"',$v)."\"\n"; - } - - if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[" )$ink = False;; - - if ($ink) { - $k .= trim($l,"\"\r\n"); - $k = str_replace('\"','"',$k); - } - - if (substr($l,0,6)=="msgid "){ - $arr=False; - $k = str_replace("msgid ","",$l); - if ($k != '""' ) { - $k = trim($k,"\"\r\n"); - $k = str_replace('\"','"',$k); - } else { - $k = ""; - } - $ink = True; - } - - $out .= $l; - } - //echo $out; - file_put_contents($pofile, $out); -?> \ No newline at end of file + if (!preg_match("/^msgstr\[[1-9]/",$l)) { + if ($k!="" && (substr($l,0,7)=="msgstr " || substr($l,0,8)=="msgstr[0")){ + $ink = False; + $v = ""; + if (isset(App::$strings[$k])) { + $v = App::$strings[$k]; + if (is_array($v)) { + $l = ""; + $n = 0; + foreach ($v as &$value) { + $l .= "msgstr[".$n."] \"".str_replace('"','\"',$value)."\"\n"; + $n++; + } + } else { + $l = "msgstr \"".str_replace('"','\"',$v)."\"\n"; + } + } + } + + if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[") $ink = False; + + if ($ink) { + $k .= trim($l,"\"\r\n"); + $k = str_replace('\"','"',$k); + } + + if (substr($l,0,6)=="msgid "){ + $k = str_replace("msgid ","",$l); + if ($k != '""' ) { + $k = trim($k,"\"\r\n"); + $k = str_replace('\"','"',$k); + } else { + $k = ""; + } + $ink = True; + } + + $out .= $l; + } + } + file_put_contents($pofile, $out); +?> -- cgit v1.2.3 From 2367d94a4264b228995e54ab6e1383652f82a2c2 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sat, 28 Jul 2018 15:33:20 -0700 Subject: SECURITY: sanitise vcard fields --- include/network.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/network.php b/include/network.php index 91a39a6cb..0d37db58d 100644 --- a/include/network.php +++ b/include/network.php @@ -1923,23 +1923,23 @@ function scrape_vcard($url) { $level2 = $item->getElementsByTagName('*'); foreach($level2 as $x) { if(attribute_contains($x->getAttribute('id'),'pod_location')) - $ret['pod_location'] = $x->textContent; + $ret['pod_location'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'fn')) - $ret['fn'] = $x->textContent; + $ret['fn'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'uid')) - $ret['uid'] = $x->textContent; + $ret['uid'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'nickname')) - $ret['nick'] = $x->textContent; + $ret['nick'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'searchable')) - $ret['searchable'] = $x->textContent; + $ret['searchable'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'key')) $ret['public_key'] = $x->textContent; if(attribute_contains($x->getAttribute('class'),'given_name')) - $ret['given_name'] = $x->textContent; + $ret['given_name'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'family_name')) - $ret['family_name'] = $x->textContent; + $ret['family_name'] = escxape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'url')) - $ret['url'] = $x->textContent; + $ret['url'] = escape_tags($x->textContent); if((attribute_contains($x->getAttribute('class'),'photo')) || (attribute_contains($x->getAttribute('class'),'avatar'))) { -- cgit v1.2.3 From 77dfe63d909202526fd6ffae25f4c14850c5c2a1 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 29 Jul 2018 02:11:27 +0200 Subject: Process msgctxt plurals --- util/php2po.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index 459226f85..99578a12d 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -33,9 +33,16 @@ if (!preg_match("/^msgstr\[[1-9]/",$l)) { if ($k!="" && (substr($l,0,7)=="msgstr " || substr($l,0,8)=="msgstr[0")){ $ink = False; + $k = str_replace('\"','"',$k); $v = ""; if (isset(App::$strings[$k])) { $v = App::$strings[$k]; + } else { + $k = "__ctx:".$c."__ ".$k; + if (isset(App::$strings[$k])) + $v = App::$strings[$k]; + } + if (!empty($v)) { if (is_array($v)) { $l = ""; $n = 0; @@ -53,20 +60,19 @@ if ($ink) { $k .= trim($l,"\"\r\n"); - $k = str_replace('\"','"',$k); } - if (substr($l,0,6)=="msgid "){ - $k = str_replace("msgid ","",$l); - if ($k != '""' ) { - $k = trim($k,"\"\r\n"); - $k = str_replace('\"','"',$k); - } else { - $k = ""; - } + if (substr($l,0,6)=="msgid ") { + preg_match('/^msgid "(.*)"/',$l,$m); + $k = $m[1]; $ink = True; } + if (substr($l,0,8)=="msgctxt ") { + preg_match('/^msgctxt "(.*)"/',$l,$m); + $c = $m[1]; + } + $out .= $l; } } -- cgit v1.2.3 From 97015162282989913d6b54c373af3b73b8043bad Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sat, 28 Jul 2018 17:17:12 -0700 Subject: fix unsanitised xchan_name --- Zotlabs/Update/_1216.php | 19 +++++++++++++++++++ boot.php | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Zotlabs/Update/_1216.php diff --git a/Zotlabs/Update/_1216.php b/Zotlabs/Update/_1216.php new file mode 100644 index 000000000..843567633 --- /dev/null +++ b/Zotlabs/Update/_1216.php @@ -0,0 +1,19 @@ + Date: Sun, 29 Jul 2018 06:58:35 +0200 Subject: wrong class name --- Zotlabs/Update/_1216.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Update/_1216.php b/Zotlabs/Update/_1216.php index 843567633..8890795f1 100644 --- a/Zotlabs/Update/_1216.php +++ b/Zotlabs/Update/_1216.php @@ -2,7 +2,7 @@ namespace Zotlabs\Update; -class _1215 { +class _1216 { function run() { -- cgit v1.2.3 From 643b6f0aa3a4f082fb34ade6508dd42b9c458822 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sun, 29 Jul 2018 07:00:30 +0200 Subject: version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index a873371b1..17fe7e54e 100755 --- a/boot.php +++ b/boot.php @@ -50,7 +50,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '3.7' ); +define ( 'STD_VERSION', '3.7.1' ); define ( 'ZOT_REVISION', '6.0a' ); -- cgit v1.2.3 From e4a1286aae411023210628d3be306420f7844d22 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sun, 29 Jul 2018 08:05:41 +0200 Subject: fix sql empty query error in db update 1216 --- Zotlabs/Update/_1216.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Update/_1216.php b/Zotlabs/Update/_1216.php index 8890795f1..69f2be15a 100644 --- a/Zotlabs/Update/_1216.php +++ b/Zotlabs/Update/_1216.php @@ -6,7 +6,7 @@ class _1216 { function run() { - $r = q("UPDATE xchan set xchan_name = 'unknown' where xchan_name like '%<%' "); + $r = dbq("UPDATE xchan set xchan_name = 'unknown' where xchan_name like '%<%' "); if($r) { return UPDATE_SUCCESS; -- cgit v1.2.3 From 90a9febb6cf6a42c9da1c16c2da6f8cbde1921b7 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 29 Jul 2018 12:05:53 +0200 Subject: Workaround on possible error --- util/php2po.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index 99578a12d..17feafa5d 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -26,7 +26,8 @@ $out = ""; $infile = file($pofile); - $k=""; + $k = ""; + $c = ""; $ink = False; foreach ($infile as $l) { @@ -39,8 +40,10 @@ $v = App::$strings[$k]; } else { $k = "__ctx:".$c."__ ".$k; - if (isset(App::$strings[$k])) + if (isset(App::$strings[$k])) { $v = App::$strings[$k]; + $c = ""; + } } if (!empty($v)) { if (is_array($v)) { -- cgit v1.2.3 From e078caffd86feca160633778f884007acae6a9fa Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 29 Jul 2018 14:20:01 +0200 Subject: Update php2po.php --- util/php2po.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index 17feafa5d..a29ba7459 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -31,6 +31,7 @@ $ink = False; foreach ($infile as $l) { + $l = trim($l, " "); if (!preg_match("/^msgstr\[[1-9]/",$l)) { if ($k!="" && (substr($l,0,7)=="msgstr " || substr($l,0,8)=="msgstr[0")){ $ink = False; @@ -66,13 +67,13 @@ } if (substr($l,0,6)=="msgid ") { - preg_match('/^msgid "(.*)"/',$l,$m); + preg_match('/^msgid "(.*)"$/',$l,$m); $k = $m[1]; $ink = True; } if (substr($l,0,8)=="msgctxt ") { - preg_match('/^msgctxt "(.*)"/',$l,$m); + preg_match('/^msgctxt "(.*)"$/',$l,$m); $c = $m[1]; } -- cgit v1.2.3 From cb4afd39bd372597c66f6e14c276861f2d2b1781 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 29 Jul 2018 16:26:33 +0200 Subject: Workaround on possible error --- util/php2po.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/util/php2po.php b/util/php2po.php index a29ba7459..c710b86fe 100644 --- a/util/php2po.php +++ b/util/php2po.php @@ -35,7 +35,7 @@ if (!preg_match("/^msgstr\[[1-9]/",$l)) { if ($k!="" && (substr($l,0,7)=="msgstr " || substr($l,0,8)=="msgstr[0")){ $ink = False; - $k = str_replace('\"','"',$k); + $k = stripslashes($k); $v = ""; if (isset(App::$strings[$k])) { $v = App::$strings[$k]; @@ -44,18 +44,18 @@ if (isset(App::$strings[$k])) { $v = App::$strings[$k]; $c = ""; - } + }; } if (!empty($v)) { if (is_array($v)) { $l = ""; $n = 0; foreach ($v as &$value) { - $l .= "msgstr[".$n."] \"".str_replace('"','\"',$value)."\"\n"; + $l .= "msgstr[".$n."] \"".addcslashes($value,"\"\n")."\"\n"; $n++; } } else { - $l = "msgstr \"".str_replace('"','\"',$v)."\"\n"; + $l = "msgstr \"".addcslashes($v,"\"\n")."\"\n"; } } } @@ -63,7 +63,8 @@ if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[") $ink = False; if ($ink) { - $k .= trim($l,"\"\r\n"); + preg_match('/^"(.*)"$/',$l,$m); + $k .= $m[1]; } if (substr($l,0,6)=="msgid ") { -- cgit v1.2.3 From 9dc5a3bfc9152f04b9e39d61e90310d660029108 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 29 Jul 2018 17:59:40 -0700 Subject: this may conflict --- Zotlabs/Update/_1216.php | 4 ++-- include/plugin.php | 29 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Zotlabs/Update/_1216.php b/Zotlabs/Update/_1216.php index 843567633..69f2be15a 100644 --- a/Zotlabs/Update/_1216.php +++ b/Zotlabs/Update/_1216.php @@ -2,11 +2,11 @@ namespace Zotlabs\Update; -class _1215 { +class _1216 { function run() { - $r = q("UPDATE xchan set xchan_name = 'unknown' where xchan_name like '%<%' "); + $r = dbq("UPDATE xchan set xchan_name = 'unknown' where xchan_name like '%<%' "); if($r) { return UPDATE_SUCCESS; diff --git a/include/plugin.php b/include/plugin.php index 734c20d79..13652c620 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -14,17 +14,17 @@ * @param bool $uninstall uninstall plugin */ function handleerrors_plugin($plugin,$notice,$log,$uninstall=false){ - logger("Addons: [" . $plugin . "] Error: ".$log, LOGGER_ERROR); - if ($notice != '') { - notice("[" . $plugin . "] Error: ".$notice, LOGGER_ERROR); - } + logger("Addons: [" . $plugin . "] Error: ".$log, LOGGER_ERROR); + if ($notice != '') { + notice("[" . $plugin . "] Error: ".$notice, LOGGER_ERROR); + } - if ($uninstall) { - $idx = array_search($plugin, \App::$plugins); - unset(\App::$plugins[$idx]); - uninstall_plugin($plugin); - set_config("system","addon", implode(", ",\App::$plugins)); - } + if ($uninstall) { + $idx = array_search($plugin, \App::$plugins); + unset(\App::$plugins[$idx]); + uninstall_plugin($plugin); + set_config("system","addon", implode(", ",\App::$plugins)); + } } /** @@ -206,19 +206,19 @@ function reload_plugins() { if(function_exists($pl . '_unload')) { $func = $pl . '_unload'; try { - $func(); + $func(); } catch (Exception $e) { handleerrors_plugin($plugin,"","UNLOAD FAILED (uninstalling) : ".$e->getMessage(),true); - continue; + continue; } } if(function_exists($pl . '_load')) { $func = $pl . '_load'; try { - $func(); + $func(); } catch (Exception $e) { handleerrors_plugin($plugin,"","LOAD FAILED (uninstalling): ".$e->getMessage(),true); - continue; + continue; } } q("UPDATE addon SET tstamp = %d WHERE id = %d", @@ -431,6 +431,7 @@ function insert_hook($hook, $fn, $version = 0, $priority = 0) { */ function call_hooks($name, &$data = null) { $a = 0; + if((is_array(App::$hooks)) && (array_key_exists($name, App::$hooks))) { foreach(App::$hooks[$name] as $hook) { $origfn = $hook[1]; -- cgit v1.2.3 From 149071bf0cb5f59d5462cd1857f8d95f3daa72cb Mon Sep 17 00:00:00 2001 From: gia vec Date: Sun, 29 Jul 2018 17:19:37 +0000 Subject: Update network.php (cherry picked from commit 8db006d9a1b3401f79ad0458e3a2ebae64c3575c) --- include/network.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/network.php b/include/network.php index 0d37db58d..6961bf0ba 100644 --- a/include/network.php +++ b/include/network.php @@ -1937,7 +1937,7 @@ function scrape_vcard($url) { if(attribute_contains($x->getAttribute('class'),'given_name')) $ret['given_name'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'family_name')) - $ret['family_name'] = escxape_tags($x->textContent); + $ret['family_name'] = escape_tags($x->textContent); if(attribute_contains($x->getAttribute('class'),'url')) $ret['url'] = escape_tags($x->textContent); -- cgit v1.2.3 From edf834188d12221c622f8f4c0110ebb4de6a916e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Jim=C3=A9nez=20Friaza?= Date: Mon, 30 Jul 2018 12:03:03 +0200 Subject: Update Spanish translation --- view/es-es/lostpass_eml.tpl | 17 ++++++++++------- view/es-es/passchanged_eml.tpl | 12 ++++++++---- view/es-es/register_verify_eml.tpl | 4 ++-- view/es-es/register_verify_member.tpl | 12 +++++++++++- view/es-es/update_fail_eml.tpl | 4 ++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/view/es-es/lostpass_eml.tpl b/view/es-es/lostpass_eml.tpl index 0ae657aca..1e92ee758 100644 --- a/view/es-es/lostpass_eml.tpl +++ b/view/es-es/lostpass_eml.tpl @@ -1,13 +1,13 @@ Estimado {{$username}}, - Una petición fue recibida recientemente en {{$sitename}} para cambiar la contraseña de su cuenta -contraseña. Para confirmar esta petición, por favor, selecciona el enlace de verificación -de más abajo o corte y pégelo en la barra de su navegador web. + Una petición fue recibida recientemente en {{$sitename}} para cambiar la contraseña de su cuenta. +Para confirmar esta petición, por favor, seleccione el enlace de verificación +de más abajo o corte y péguelo en la barra de su navegador web. Si no hizo esta petición de cambio, por favor, NO siga el enlace que encontrará más abajo e ignore y/o borre este correo electrónico. -Su contraseña no será cambiada hasta que verifiquemos que es usted +Su contraseña no será cambiada hasta que confirme su solicitud envió esta petición. Siga el enlace para verificar su identidad: @@ -16,12 +16,12 @@ Siga el enlace para verificar su identidad: Seguidamente recibirá un mensaje con la nueva contraseña. -Puede cambiar esta contraseña desde tu cuenta después de iniciar sesión. +Puede cambiar esta contraseña desde su cuenta después de iniciar sesión. Los detalles del inicio de sesión son los siguientes: -Localización del Sitio: {{$siteurl}} -Nombre de usuario: {{$email}} +Localización del sitio:⇥{{$siteurl}} +Nombre de usuario:⇥{{$email}} @@ -29,4 +29,7 @@ Nombre de usuario: {{$email}} Atentamente, Administrador de {{$sitename}} +-- +Términos del servicio +{{$siteurl}}/help/TermsOfService \ No newline at end of file diff --git a/view/es-es/passchanged_eml.tpl b/view/es-es/passchanged_eml.tpl index be6ad74d9..9e81f89eb 100644 --- a/view/es-es/passchanged_eml.tpl +++ b/view/es-es/passchanged_eml.tpl @@ -7,9 +7,9 @@ a alguna que pueda recordar). Los detalles del inicio de sesión son los siguientes: -Localización del Sitio: {{$siteurl}} -Nombre de usuario: {{$email}} -Contraseña: {{$new_password}} +Localización del sitio:⇥{{$siteurl}} +Nombre de usuario:⇥{{$email}} +Contraseña:⇥{{$new_password}} Puede cambiar esta contraseña desde su cuenta después de iniciar sesión. @@ -17,4 +17,8 @@ Puede cambiar esta contraseña desde su cuenta después de iniciar sesión. Atentamente, Administrador de {{$sitename}} - \ No newline at end of file + + +-- +Términos del servicio +{{$siteurl}}/help/TermsOfService diff --git a/view/es-es/register_verify_eml.tpl b/view/es-es/register_verify_eml.tpl index dc913be97..781ef72c8 100644 --- a/view/es-es/register_verify_eml.tpl +++ b/view/es-es/register_verify_eml.tpl @@ -7,9 +7,9 @@ Los detalles del inicio de sesión son los siguientes: Localización del sitio:⇥{{$siteurl}} Nombre de usuario:⇥{{$email}} -Dirección IP: {{$details}} +Dirección IP: {{$details}} -Para aprobar la petición siga el enlace: +Para aprobar la petición siga el enlace {{$siteurl}}/regmod/allow/{{$hash}} diff --git a/view/es-es/register_verify_member.tpl b/view/es-es/register_verify_member.tpl index 058c3a3c8..1d3c24e80 100644 --- a/view/es-es/register_verify_member.tpl +++ b/view/es-es/register_verify_member.tpl @@ -10,7 +10,12 @@ Inicie la sesión con la contraseña que eligió durante el registro. Necesitamos verificar su correo electrónico para poder darle pleno acceso. -Si registró esta cuenta, por favor, siga el enlace: +Su código de validación es + +{{$hash}} + + +Si ha registrado esta cuenta, introduzca el código de validación cuando se le solicite o visite el siguiente enlace: {{$siteurl}}/regver/allow/{{$hash}} @@ -22,3 +27,8 @@ Para rechazar la petición y eliminar la cuenta , siga: Gracias. + + +-- +Términos del servicio +{{$siteurl}}/help/TermsOfService diff --git a/view/es-es/update_fail_eml.tpl b/view/es-es/update_fail_eml.tpl index b613c40b7..6ebb521c5 100644 --- a/view/es-es/update_fail_eml.tpl +++ b/view/es-es/update_fail_eml.tpl @@ -1,10 +1,10 @@ Hola, Soy el servidor web en {{$sitename}}; -Los desarrolladores de Red Matrix han lanzado la actualización {{$update}} recientemente, +Los desarrolladores de Hubzilla lanzaron una actualización {{$update}} recientemente, pero cuando se intentaba instalar, alguna cosa ha ido terriblemente mal. Esto requiere intervención humana tan pronto como sea posible. -Por favor, contacte con algún desarrollador de Red Matrix si no puede arreglarlo +Póngase en contacto con un desarrollador de proyectos si no sabe cómo por sí mismo. Mi base se datos puede quedar inservible. El mensaje de error ha sido el siguiente: '{{$error}}'. -- cgit v1.2.3 From e8aeecc4c9842d4c6b25f7b488ede9644afc5d78 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 30 Jul 2018 17:41:37 -0700 Subject: When checking permissions ignore checking site "Block Public" settings in cases where site permissions aren't applicable --- Zotlabs/Module/Connedit.php | 2 +- Zotlabs/Module/Defperms.php | 1 - Zotlabs/Module/Settings/Tokens.php | 2 +- include/permissions.php | 17 +++++++++++------ include/zot.php | 6 +++--- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index cb9c19cf0..712215bc3 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -774,7 +774,7 @@ class Connedit extends \Zotlabs\Web\Controller { $global_perms = \Zotlabs\Access\Permissions::Perms(); - $existing = get_all_perms(local_channel(),$contact['abook_xchan']); + $existing = get_all_perms(local_channel(),$contact['abook_xchan'],false); $unapproved = array('pending', t('Approve this connection'), '', t('Accept connection to allow communication'), array(t('No'),('Yes'))); diff --git a/Zotlabs/Module/Defperms.php b/Zotlabs/Module/Defperms.php index 97d9cfd1d..63acc9795 100644 --- a/Zotlabs/Module/Defperms.php +++ b/Zotlabs/Module/Defperms.php @@ -209,7 +209,6 @@ class Defperms extends \Zotlabs\Web\Controller { $global_perms = \Zotlabs\Access\Permissions::Perms(); - $existing = get_all_perms(local_channel(),$contact['abook_xchan']); $hidden_perms = []; foreach($global_perms as $k => $v) { diff --git a/Zotlabs/Module/Settings/Tokens.php b/Zotlabs/Module/Settings/Tokens.php index 619c8b5ba..e59cf8d1c 100644 --- a/Zotlabs/Module/Settings/Tokens.php +++ b/Zotlabs/Module/Settings/Tokens.php @@ -117,7 +117,7 @@ class Tokens { $global_perms = \Zotlabs\Access\Permissions::Perms(); $their_perms = []; - $existing = get_all_perms(local_channel(),(($atoken_xchan) ? $atoken_xchan : '')); + $existing = get_all_perms(local_channel(),(($atoken_xchan) ? $atoken_xchan : ''),false); if($atoken_xchan) { $theirs = q("select * from abconfig where chan = %d and xchan = '%s' and cat = 'their_perms'", diff --git a/include/permissions.php b/include/permissions.php index 185d37b6a..115d96eca 100644 --- a/include/permissions.php +++ b/include/permissions.php @@ -16,11 +16,14 @@ require_once('include/security.php'); * * @param int $uid The channel_id associated with the resource owner * @param string $observer_xchan The xchan_hash representing the observer - * @param bool $internal_use (default true) + * @param bool $check_siteblock (default true) + * if false, bypass check for "Block Public" on the site + * @param bool $default_ignored (default true) + * if false, lie and pretend the ignored person has permissions you are ignoring (used in channel discovery) * * @returns array of all permissions, key is permission name, value is true or false */ -function get_all_perms($uid, $observer_xchan, $internal_use = true) { +function get_all_perms($uid, $observer_xchan, $check_siteblock = true, $default_ignored = true) { $api = App::get_oauth_key(); if($api) @@ -111,7 +114,7 @@ function get_all_perms($uid, $observer_xchan, $internal_use = true) { $blocked_anon_perms = \Zotlabs\Access\Permissions::BlockedAnonPerms(); - if(($x) && ($internal_use) && in_array($perm_name,$blocked_anon_perms) && intval($x[0]['abook_ignored'])) { + if(($x) && ($default_ignored) && in_array($perm_name,$blocked_anon_perms) && intval($x[0]['abook_ignored'])) { $ret[$perm_name] = false; continue; } @@ -119,7 +122,7 @@ function get_all_perms($uid, $observer_xchan, $internal_use = true) { // system is blocked to anybody who is not authenticated - if((! $observer_xchan) && intval(get_config('system', 'block_public'))) { + if(($check_siteblock) && (! $observer_xchan) && intval(get_config('system', 'block_public'))) { $ret[$perm_name] = false; continue; } @@ -251,9 +254,11 @@ function get_all_perms($uid, $observer_xchan, $internal_use = true) { * @param int $uid The channel_id associated with the resource owner * @param string $observer_xchan The xchan_hash representing the observer * @param string $permission + * @param boolean $check_siteblock (default true) + * if false bypass check for "Block Public" at the site level * @return bool true if permission is allowed for observer on channel */ -function perm_is_allowed($uid, $observer_xchan, $permission) { +function perm_is_allowed($uid, $observer_xchan, $permission, $check_siteblock = true) { $api = App::get_oauth_key(); if($api) @@ -326,7 +331,7 @@ function perm_is_allowed($uid, $observer_xchan, $permission) { // system is blocked to anybody who is not authenticated - if((! $observer_xchan) && intval(get_config('system', 'block_public'))) + if(($check_siteblock) && (! $observer_xchan) && intval(get_config('system', 'block_public'))) return false; // Check if this $uid is actually the $observer_xchan diff --git a/include/zot.php b/include/zot.php index 5c74947d6..5c79dd4fa 100644 --- a/include/zot.php +++ b/include/zot.php @@ -491,7 +491,7 @@ function zot_refresh($them, $channel = null, $force = false) { $profile_assign = get_pconfig($channel['channel_id'],'system','profile_assign',''); // Keep original perms to check if we need to notify them - $previous_perms = get_all_perms($channel['channel_id'],$x['hash']); + $previous_perms = get_all_perms($channel['channel_id'],$x['hash'],false); $r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1", dbesc($x['hash']), @@ -560,7 +560,7 @@ function zot_refresh($them, $channel = null, $force = false) { if($y) { logger("New introduction received for {$channel['channel_name']}"); - $new_perms = get_all_perms($channel['channel_id'],$x['hash']); + $new_perms = get_all_perms($channel['channel_id'],$x['hash'],false); // Send a clone sync packet and a permissions update if permissions have changed @@ -4419,7 +4419,7 @@ function zotinfo($arr) { if(! $ret['follow_url']) $ret['follow_url'] = z_root() . '/follow?f=&url=%s'; - $permissions = get_all_perms($e['channel_id'],$ztarget_hash,false); + $permissions = get_all_perms($e['channel_id'],$ztarget_hash,false,false); if($ztarget_hash) { $permissions['connected'] = false; -- cgit v1.2.3 From 4d0611b7d4be21d9b436348fbe9b7b1a4c0b189c Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 1 Aug 2018 16:12:44 -0700 Subject: hubzilla core issue #1258 --- Zotlabs/Widget/Activity_order.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Zotlabs/Widget/Activity_order.php b/Zotlabs/Widget/Activity_order.php index 0e660afc3..27d1a971a 100644 --- a/Zotlabs/Widget/Activity_order.php +++ b/Zotlabs/Widget/Activity_order.php @@ -34,6 +34,7 @@ class Activity_order { break; default: $commentord_active = 'active'; + break; } } else { @@ -78,6 +79,9 @@ class Activity_order { if(x($_GET,'file')) $filter .= '&file=' . $_GET['file']; + if(x($_GET,'pf')) + $filter .= '&pf=' . $_GET['pf']; + // tabs $tabs = []; -- cgit v1.2.3 From c806279fa97aa6880e1e0542be00937406e79d27 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 1 Aug 2018 21:32:05 -0700 Subject: update certs --- library/cacert.pem | 1063 +++++++++------------------------------------- library/certs/cacert.pem | 1063 +++++++++------------------------------------- 2 files changed, 422 insertions(+), 1704 deletions(-) diff --git a/library/cacert.pem b/library/cacert.pem index 55958581d..e287611a6 100644 --- a/library/cacert.pem +++ b/library/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Wed Jun 7 03:12:05 2017 GMT +## Certificate data from Mozilla as of: Wed Jun 20 03:12:06 2018 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: 93753268e1c596aee21893fb1c6975338389132f15c942ed65fc394a904371d7 +## SHA256: c80f571d9f4ebca4a91e0ad3a546f263153d71afffc845c6f8f52ce9d1a2e8ec ## @@ -130,30 +130,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - AddTrust External Root ====================== -----BEGIN CERTIFICATE----- @@ -178,54 +154,6 @@ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- @@ -273,27 +201,6 @@ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm Mw== -----END CERTIFICATE----- -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - GeoTrust Universal CA ===================== -----BEGIN CERTIFICATE----- @@ -376,25 +283,6 @@ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt 398znM/jra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- @@ -419,56 +307,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - QuoVadis Root CA ================ -----BEGIN CERTIFICATE----- @@ -608,86 +446,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH llpwrN9M -----END CERTIFICATE----- -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- @@ -760,47 +518,6 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - Taiwan GRCA =========== -----BEGIN CERTIFICATE----- @@ -831,38 +548,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 -MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM -MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF -NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe -AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC -b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn -7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN -cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp -WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 -haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY -MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 -MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn -jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ -MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H -VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl -vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl -OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 -1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq -nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy -x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- @@ -971,30 +656,6 @@ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -1237,27 +898,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE -BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl -Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO -/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX -WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z -ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 -bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK -9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm -iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG -Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW -mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW -T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - OISTE WISeKey Global Root GA CA =============================== -----BEGIN CERTIFICATE----- @@ -1378,34 +1018,6 @@ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- -T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 -============================================================================================================================= ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH -DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q -aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry -b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV -BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg -S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 -MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl -IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF -n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl -IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft -dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl -cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO -Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 -xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR -6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd -BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 -N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT -y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh -LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M -dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= ------END CERTIFICATE----- - certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- @@ -1426,27 +1038,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE -ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw -OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD -o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz -VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT -VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or -czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK -y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC -wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S -lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 -Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM -O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 -BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 -G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m -mxE= ------END CERTIFICATE----- - GeoTrust Primary Certification Authority - G3 ============================================= -----BEGIN CERTIFICATE----- @@ -1674,37 +1265,6 @@ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD -T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 -MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG -A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk -WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD -YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew -MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb -m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk -HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT -xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 -3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 -2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq -TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz -4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU -9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg -aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP -eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk -zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 -ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI -KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq -nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE -I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp -MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o -tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- @@ -2065,37 +1625,6 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- -Certinomis - Autorité Racine -============================ ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg -LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG -A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw -JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa -wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly -Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw -2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N -jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q -c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC -lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb -xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g -530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna -4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x -WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva -R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 -nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B -CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv -JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE -qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b -WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE -wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ -vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -2244,75 +1773,6 @@ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl iB6XzCGcKQENZetX2fNXlrtIzYE= -----END CERTIFICATE----- -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ -Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 -dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu -c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv -bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 -aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 -fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm -N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN -Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T -tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX -e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA -2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs -HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib -D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE -ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O -o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG -4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi -Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul -Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs -O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H -vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L -nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS -FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa -z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ -KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk -J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ -JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG -/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc -nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld -blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc -l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm -7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm -obp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- @@ -2419,31 +1879,6 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU dcGWxZ0= -----END CERTIFICATE----- -TURKTRUST Certificate Services Provider Root 2007 -================================================= ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X -DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl -a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N -YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv -KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya -KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT -rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC -AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s -Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO -Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb -BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK -poRq0Tl9 ------END CERTIFICATE----- - D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- @@ -2493,171 +1928,6 @@ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv w9y4AyHqnxbxLFS1 -----END CERTIFICATE----- -PSCProcert -========== ------BEGIN CERTIFICATE----- -MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk -ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ -MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz -dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl -cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw -IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw -MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w -DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD -ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp -Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC -wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA -3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh -RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO -EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 -0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH -0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU -td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw -Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp -r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ -AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz -Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId -xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp -ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH -EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h -Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k -ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG -9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG -MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG -LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 -ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy -YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v -Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o -dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq -T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN -g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q -uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 -n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn -FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo -5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq -3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 -poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y -eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km ------END CERTIFICATE----- - -China Internet Network Information Center EV Certificates Root -============================================================== ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D -aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg -Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG -A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM -PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl -cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y -jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV -98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H -klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 -KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC -7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD -glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 -0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM -7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws -ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 -5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= ------END CERTIFICATE----- - -Swisscom Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 -MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM -LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo -ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ -wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH -Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a -SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS -NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab -mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY -Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 -qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O -BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu -MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO -v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ -82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz -o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs -a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx -OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW -mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o -+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC -rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX -5OfNeOI5wSsSnqaeG8XmDtkx2Q== ------END CERTIFICATE----- - -Swisscom Root EV CA 2 -===================== ------BEGIN CERTIFICATE----- -MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE -BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl -cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN -MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT -HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg -Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz -o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy -Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti -GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li -qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH -Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG -alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa -m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox -bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi -xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED -MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB -bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL -j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU -wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 -XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH -59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ -23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq -J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA -HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi -uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW -l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= ------END CERTIFICATE----- - -CA Disig Root R1 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy -3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 -u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 -m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk -CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa -YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 -vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL -LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX -ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is -XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ -04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR -xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B -LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM -CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb -VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 -YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS -ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix -lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N -UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ -a7+h89n07eLw4+1knj0vllJPgFOL ------END CERTIFICATE----- - CA Disig Root R2 ================ -----BEGIN CERTIFICATE----- @@ -3061,66 +2331,6 @@ G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP 82Z+ -----END CERTIFICATE----- -WoSign -====== ------BEGIN CERTIFICATE----- -MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g -QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ -BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA -vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO -CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX -2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 -KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR -+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez -EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk -lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 -8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY -yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C -AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R -8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 -LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq -T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj -y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC -2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes -5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ -EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh -mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx -kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi -kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== ------END CERTIFICATE----- - -WoSign China -============ ------BEGIN CERTIFICATE----- -MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv -geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD -VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k -8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 -uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 -dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 -Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy -b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc -76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m -+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 -yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX -GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA -A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 -yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY -r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 -j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A -kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 -qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y -jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB -ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv -T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO -kI26oQ== ------END CERTIFICATE----- - COMODO RSA Certification Authority ================================== -----BEGIN CERTIFICATE----- @@ -3425,30 +2635,6 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- -TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 -==================================================== ------BEGIN CERTIFICATE----- -MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg -RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw -ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w -SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE -n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp -ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 -jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m -ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP -9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV -4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH -HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI -hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo -BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq -URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl -lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 -B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= ------END CERTIFICATE----- - Certinomis - Root CA ==================== -----BEGIN CERTIFICATE----- @@ -3502,42 +2688,6 @@ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= -----END CERTIFICATE----- -Certification Authority of WoSign G2 -==================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g -QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx -CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai -XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du -W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 -5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK -v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI -hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY -P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 -TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu -+sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ -7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= ------END CERTIFICATE----- - -CA WoSign ECC Root -================== ------BEGIN CERTIFICATE----- -MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD -TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v -dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK -ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU -t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw -QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R -MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 -Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu -a/GRspBl9JrmkO5K ------END CERTIFICATE----- - SZAFIR ROOT CA2 =============== -----BEGIN CERTIFICATE----- @@ -3953,6 +3103,215 @@ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= -----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM +BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x +MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw +MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM +LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C +Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 +P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge +oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp +k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z +fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ +gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 +UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 +1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s +bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr +dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf +ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl +u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq +erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj +MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ +vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI +Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y +wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G diff --git a/library/certs/cacert.pem b/library/certs/cacert.pem index 8f1357b66..ee25bee11 100644 --- a/library/certs/cacert.pem +++ b/library/certs/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Wed Jun 7 03:12:05 2017 GMT +## Certificate data from Mozilla as of: Wed Jun 20 03:12:06 2018 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: 93753268e1c596aee21893fb1c6975338389132f15c942ed65fc394a904371d7 +## SHA256: c80f571d9f4ebca4a91e0ad3a546f263153d71afffc845c6f8f52ce9d1a2e8ec ## @@ -130,30 +130,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - AddTrust External Root ====================== -----BEGIN CERTIFICATE----- @@ -178,54 +154,6 @@ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- @@ -273,27 +201,6 @@ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm Mw== -----END CERTIFICATE----- -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - GeoTrust Universal CA ===================== -----BEGIN CERTIFICATE----- @@ -376,25 +283,6 @@ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt 398znM/jra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- @@ -419,56 +307,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - QuoVadis Root CA ================ -----BEGIN CERTIFICATE----- @@ -608,86 +446,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH llpwrN9M -----END CERTIFICATE----- -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- @@ -760,47 +518,6 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - Taiwan GRCA =========== -----BEGIN CERTIFICATE----- @@ -831,38 +548,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 -MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM -MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF -NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe -AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC -b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn -7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN -cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp -WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 -haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY -MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 -MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn -jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ -MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H -VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl -vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl -OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 -1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq -nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy -x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- @@ -971,30 +656,6 @@ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -1237,27 +898,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE -BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl -Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO -/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX -WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z -ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 -bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK -9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm -iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG -Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW -mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW -T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - OISTE WISeKey Global Root GA CA =============================== -----BEGIN CERTIFICATE----- @@ -1378,34 +1018,6 @@ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- -T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 -============================================================================================================================= ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH -DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q -aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry -b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV -BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg -S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 -MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl -IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF -n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl -IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft -dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl -cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO -Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 -xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR -6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd -BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 -N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT -y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh -LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M -dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= ------END CERTIFICATE----- - certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- @@ -1426,27 +1038,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE -ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw -OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD -o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz -VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT -VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or -czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK -y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC -wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S -lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 -Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM -O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 -BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 -G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m -mxE= ------END CERTIFICATE----- - GeoTrust Primary Certification Authority - G3 ============================================= -----BEGIN CERTIFICATE----- @@ -1674,37 +1265,6 @@ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD -T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 -MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG -A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk -WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD -YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew -MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb -m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk -HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT -xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 -3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 -2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq -TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz -4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU -9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg -aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP -eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk -zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 -ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI -KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq -nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE -I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp -MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o -tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- @@ -2065,37 +1625,6 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- -Certinomis - Autorité Racine -============================ ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg -LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG -A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw -JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa -wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly -Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw -2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N -jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q -c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC -lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb -xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g -530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna -4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x -WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva -R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 -nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B -CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv -JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE -qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b -WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE -wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ -vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -2244,75 +1773,6 @@ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl iB6XzCGcKQENZetX2fNXlrtIzYE= -----END CERTIFICATE----- -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ -Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 -dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu -c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv -bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 -aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 -fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm -N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN -Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T -tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX -e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA -2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs -HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib -D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE -ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O -o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG -4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi -Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul -Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs -O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H -vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L -nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS -FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa -z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ -KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk -J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ -JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG -/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc -nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld -blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc -l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm -7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm -obp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- @@ -2419,31 +1879,6 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU dcGWxZ0= -----END CERTIFICATE----- -TURKTRUST Certificate Services Provider Root 2007 -================================================= ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X -DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl -a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N -YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv -KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya -KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT -rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC -AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s -Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO -Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb -BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK -poRq0Tl9 ------END CERTIFICATE----- - D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- @@ -2493,171 +1928,6 @@ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv w9y4AyHqnxbxLFS1 -----END CERTIFICATE----- -PSCProcert -========== ------BEGIN CERTIFICATE----- -MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk -ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ -MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz -dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl -cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw -IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw -MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w -DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD -ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp -Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC -wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA -3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh -RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO -EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 -0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH -0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU -td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw -Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp -r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ -AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz -Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId -xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp -ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH -EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h -Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k -ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG -9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG -MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG -LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 -ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy -YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v -Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o -dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq -T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN -g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q -uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 -n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn -FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo -5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq -3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 -poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y -eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km ------END CERTIFICATE----- - -China Internet Network Information Center EV Certificates Root -============================================================== ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D -aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg -Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG -A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM -PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl -cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y -jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV -98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H -klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 -KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC -7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD -glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 -0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM -7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws -ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 -5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= ------END CERTIFICATE----- - -Swisscom Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG -EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy -dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 -MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln -aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC -IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM -LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo -ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ -wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH -Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a -SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS -NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab -mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY -Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 -qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw -HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O -BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu -MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO -v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ -82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz -o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs -a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx -OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW -mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o -+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC -rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX -5OfNeOI5wSsSnqaeG8XmDtkx2Q== ------END CERTIFICATE----- - -Swisscom Root EV CA 2 -===================== ------BEGIN CERTIFICATE----- -MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE -BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl -cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN -MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT -HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg -Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz -o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy -Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti -GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li -qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH -Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG -alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa -m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox -bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi -xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED -MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB -bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL -j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU -wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 -XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH -59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ -23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq -J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA -HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi -uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW -l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= ------END CERTIFICATE----- - -CA Disig Root R1 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy -3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 -u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 -m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk -CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa -YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 -vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL -LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX -ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is -XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ -04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR -xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B -LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM -CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb -VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 -YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS -ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix -lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N -UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ -a7+h89n07eLw4+1knj0vllJPgFOL ------END CERTIFICATE----- - CA Disig Root R2 ================ -----BEGIN CERTIFICATE----- @@ -3061,66 +2331,6 @@ G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP 82Z+ -----END CERTIFICATE----- -WoSign -====== ------BEGIN CERTIFICATE----- -MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g -QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ -BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA -vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO -CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX -2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 -KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR -+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez -EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk -lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 -8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY -yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C -AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R -8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 -LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq -T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj -y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC -2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes -5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ -EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh -mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx -kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi -kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== ------END CERTIFICATE----- - -WoSign China -============ ------BEGIN CERTIFICATE----- -MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv -geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD -VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k -8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 -uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 -dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 -Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy -b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc -76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m -+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 -yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX -GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA -A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 -yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY -r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 -j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A -kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 -qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y -jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB -ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv -T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO -kI26oQ== ------END CERTIFICATE----- - COMODO RSA Certification Authority ================================== -----BEGIN CERTIFICATE----- @@ -3425,30 +2635,6 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- -TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 -==================================================== ------BEGIN CERTIFICATE----- -MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg -RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw -ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w -SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE -n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp -ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 -jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m -ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP -9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV -4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH -HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI -hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo -BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq -URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl -lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 -B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= ------END CERTIFICATE----- - Certinomis - Root CA ==================== -----BEGIN CERTIFICATE----- @@ -3502,42 +2688,6 @@ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= -----END CERTIFICATE----- -Certification Authority of WoSign G2 -==================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g -QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx -CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai -XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du -W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 -5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK -v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI -hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY -P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 -TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu -+sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ -7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= ------END CERTIFICATE----- - -CA WoSign ECC Root -================== ------BEGIN CERTIFICATE----- -MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD -TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v -dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK -ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU -t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw -QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R -MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 -Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu -a/GRspBl9JrmkO5K ------END CERTIFICATE----- - SZAFIR ROOT CA2 =============== -----BEGIN CERTIFICATE----- @@ -3953,3 +3103,212 @@ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= -----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM +BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x +MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw +MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM +LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C +Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 +P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge +oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp +k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z +fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ +gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 +UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 +1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s +bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr +dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf +ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl +u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq +erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj +MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ +vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI +Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y +wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- -- cgit v1.2.3 From 238551b02459ab976f4be8683c1b73306770f719 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 2 Aug 2018 18:16:25 +0000 Subject: Merge branch 'fixactivityorderwithfilters' into 'master' Add GET for filtered forums See merge request hubzilla/core!1251 (cherry picked from commit 4e6539efec70027facb70233254e9b47f8e86c6d) ee1fde42 Add GET for filtered forums --- Zotlabs/Widget/Activity_order.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Zotlabs/Widget/Activity_order.php b/Zotlabs/Widget/Activity_order.php index 0e660afc3..7cb08b9e4 100644 --- a/Zotlabs/Widget/Activity_order.php +++ b/Zotlabs/Widget/Activity_order.php @@ -78,6 +78,9 @@ class Activity_order { if(x($_GET,'file')) $filter .= '&file=' . $_GET['file']; + if(x($_GET,'pf')) + $filter .= '&pf=' . $_GET['pf']; + // tabs $tabs = []; -- cgit v1.2.3 From d908f53607512b8bfa3fbf65cb6fc9623fab5c63 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 2 Aug 2018 22:49:30 -0700 Subject: add app_options field --- Zotlabs/Lib/Apps.php | 13 ++++++++++--- Zotlabs/Module/Probe.php | 7 +++---- Zotlabs/Module/Zfinger.php | 4 ---- Zotlabs/Update/_1217.php | 22 ++++++++++++++++++++++ boot.php | 2 +- install/schema_mysql.sql | 1 + install/schema_postgres.sql | 1 + 7 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 Zotlabs/Update/_1217.php diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index f7aff1722..9027b13bc 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -927,10 +927,11 @@ class Apps { $darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : ''); $darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0); $darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0); + $darray['app_options'] = ((x($arr,'options')) ? intval($arr['options']) : 0); $created = datetime_convert(); - $r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_plugin, app_deleted ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d )", + $r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_plugin, app_deleted, app_options ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, %d )", dbesc($darray['app_id']), dbesc($darray['app_sig']), dbesc($darray['app_author']), @@ -948,7 +949,8 @@ class Apps { dbesc($created), intval($darray['app_system']), dbesc($darray['app_plugin']), - intval($darray['app_deleted']) + intval($darray['app_deleted']), + intval($darray['app_options']) ); if($r) { @@ -1009,10 +1011,11 @@ class Apps { $darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : ''); $darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0); $darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0); + $darray['app_options'] = ((x($arr,'options')) ? intval($arr['options']) : 0); $edited = datetime_convert(); - $r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_plugin = '%s', app_deleted = %d where app_id = '%s' and app_channel = %d", + $r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_plugin = '%s', app_deleted = %d, app_options = %d where app_id = '%s' and app_channel = %d", dbesc($darray['app_sig']), dbesc($darray['app_author']), dbesc($darray['app_name']), @@ -1028,6 +1031,7 @@ class Apps { intval($darray['app_system']), dbesc($darray['app_plugin']), intval($darray['app_deleted']), + intval($darray['app_options']), dbesc($darray['app_id']), intval($darray['app_channel']) ); @@ -1117,6 +1121,9 @@ class Apps { if($app['app_system']) $ret['system'] = $app['app_system']; + if($app['app_options']) + $ret['options'] = $app['app_options']; + if($app['app_plugin']) $ret['plugin'] = trim($app['app_plugin']); diff --git a/Zotlabs/Module/Probe.php b/Zotlabs/Module/Probe.php index 2e65f107c..2c67c6aae 100644 --- a/Zotlabs/Module/Probe.php +++ b/Zotlabs/Module/Probe.php @@ -27,12 +27,11 @@ class Probe extends \Zotlabs\Web\Controller { $o .= '

';
 			if(! $j['success']) {
-				$o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n");
 				$o .= "https connection failed. Trying again with auto failover to http.\r\n\r\n";
 				$j = \Zotlabs\Zot\Finger::run($addr,$channel,true);
-				if(! $j['success']) 
-					$o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n");
-	
+				if(! $j['success']) {
+					return $o;	
+				}
 			}
 			if($do_import && $j)
 				$x = import_xchan($j);
diff --git a/Zotlabs/Module/Zfinger.php b/Zotlabs/Module/Zfinger.php
index 0f7f6a64b..6ed001df5 100644
--- a/Zotlabs/Module/Zfinger.php
+++ b/Zotlabs/Module/Zfinger.php
@@ -36,10 +36,6 @@ class Zfinger extends \Zotlabs\Web\Controller {
 
 		echo $ret;
 		killme();
-
-
-
-		json_return_and_die($x);
 	
 	}
 	
diff --git a/Zotlabs/Update/_1217.php b/Zotlabs/Update/_1217.php
new file mode 100644
index 000000000..15d2d06b3
--- /dev/null
+++ b/Zotlabs/Update/_1217.php
@@ -0,0 +1,22 @@
+
Date: Fri, 3 Aug 2018 19:32:51 +0200
Subject: Add XMLreader in PHP requirements

---
 install/INSTALL.txt | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/install/INSTALL.txt b/install/INSTALL.txt
index c39c8ad8b..3671d95ac 100644
--- a/install/INSTALL.txt
+++ b/install/INSTALL.txt
@@ -89,9 +89,10 @@ web server platforms.
     php.ini file - and with no hosting provider restrictions on the use of 
     exec() and proc_open().
 
-    - curl, gd (with at least jpeg and png support), mysqli, mbstring, xml, zip
-    and openssl extensions. The imagick extension MAY be used instead of gd,
-	but is not required and MAY also be disabled via configuration option. 
+    - curl, gd (with at least jpeg and png support), mysqli, mbstring, xml, 
+    xmlreader, zip and openssl extensions. The imagick extension MAY be used 
+    instead of gd, but is not required and MAY also be disabled via 
+    configuration option. 
 
     - some form of email server or email gateway such that PHP mail() works.
 
-- 
cgit v1.2.3


From 8e9d076216a364beecf57574134fb36c12be6e6f Mon Sep 17 00:00:00 2001
From: zotlabs 
Date: Sat, 4 Aug 2018 13:50:49 -0700
Subject: ability for addons to create .pdl files and load them automatically

---
 boot.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/boot.php b/boot.php
index 6f34717b8..316e86758 100755
--- a/boot.php
+++ b/boot.php
@@ -2093,6 +2093,8 @@ function load_pdl() {
 
 		if((! $s) && (($p = theme_include($n)) != ''))
 			$s = @file_get_contents($p);
+		elseif(file_exists('addon/'. App::$module . '/' . $n))
+			$s = @file_get_contents('addon/'. App::$module . '/' . $n);
 		if($s) {
 			App::$comanche->parse($s);
 			App::$pdl = $s;
-- 
cgit v1.2.3


From aeb9d5cd90a3bcb79c8d0b1645ece47e8756f422 Mon Sep 17 00:00:00 2001
From: zotlabs 
Date: Sun, 5 Aug 2018 23:19:33 -0700
Subject: create alter_pdl hook

---
 boot.php | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/boot.php b/boot.php
index 316e86758..fca184555 100755
--- a/boot.php
+++ b/boot.php
@@ -2072,8 +2072,8 @@ function load_pdl() {
 	if (! count(App::$layout)) {
 
 		$arr = [
-				'module' => App::$module,
-				'layout' => ''
+			'module' => App::$module,
+			'layout' => ''
 		];
 		/**
 		 * @hooks load_pdl
@@ -2095,6 +2095,14 @@ function load_pdl() {
 			$s = @file_get_contents($p);
 		elseif(file_exists('addon/'. App::$module . '/' . $n))
 			$s = @file_get_contents('addon/'. App::$module . '/' . $n);
+
+		$arr = [
+			'module' => App::$module,
+			'layout' => $s
+		];
+		call_hooks('alter_pdl',$arr);
+		$s = $arr['layout'];
+
 		if($s) {
 			App::$comanche->parse($s);
 			App::$pdl = $s;
-- 
cgit v1.2.3


From 166879b8b04f8656a0ef105c319b8b4a82626bd9 Mon Sep 17 00:00:00 2001
From: zotlabs 
Date: Mon, 6 Aug 2018 17:43:22 -0700
Subject: bring some Zot6 libraries and interfaces to red/hubzilla

---
 Zotlabs/Lib/Activity.php     | 1725 +++++++++++++++++++++++++
 Zotlabs/Lib/Group.php        |  405 ++++++
 Zotlabs/Lib/Libsync.php      | 1019 +++++++++++++++
 Zotlabs/Lib/Libzot.php       | 2849 ++++++++++++++++++++++++++++++++++++++++++
 Zotlabs/Lib/Libzotdir.php    |  654 ++++++++++
 Zotlabs/Lib/Queue.php        |  278 +++++
 Zotlabs/Lib/Webfinger.php    |  109 ++
 Zotlabs/Lib/Zotfinger.php    |   50 +
 Zotlabs/Module/Zot.php       |   25 +
 Zotlabs/Zot6/Finger.php      |  146 +++
 Zotlabs/Zot6/IHandler.php    |   18 +
 Zotlabs/Zot6/Receiver.php    |  220 ++++
 Zotlabs/Zot6/Zot6Handler.php |  266 ++++
 13 files changed, 7764 insertions(+)
 create mode 100644 Zotlabs/Lib/Activity.php
 create mode 100644 Zotlabs/Lib/Group.php
 create mode 100644 Zotlabs/Lib/Libsync.php
 create mode 100644 Zotlabs/Lib/Libzot.php
 create mode 100644 Zotlabs/Lib/Libzotdir.php
 create mode 100644 Zotlabs/Lib/Queue.php
 create mode 100644 Zotlabs/Lib/Webfinger.php
 create mode 100644 Zotlabs/Lib/Zotfinger.php
 create mode 100644 Zotlabs/Module/Zot.php
 create mode 100644 Zotlabs/Zot6/Finger.php
 create mode 100644 Zotlabs/Zot6/IHandler.php
 create mode 100644 Zotlabs/Zot6/Receiver.php
 create mode 100644 Zotlabs/Zot6/Zot6Handler.php

diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
new file mode 100644
index 000000000..6ddbbb9db
--- /dev/null
+++ b/Zotlabs/Lib/Activity.php
@@ -0,0 +1,1725 @@
+ 'Object',
+			'id'   => z_root() . '/thing/' . $r[0]['obj_obj'],
+			'name' => $r[0]['obj_term']
+		];
+
+		if($r[0]['obj_image'])
+			$x['image'] = $r[0]['obj_image'];
+
+		return $x;
+
+	}
+
+	static function fetch_item($x) {
+
+		if (array_key_exists('source',$x)) {
+			// This item is already processed and encoded
+			return $x;
+		}
+
+		$r = q("select * from item where mid = '%s' limit 1",
+			dbesc($x['id'])
+		);
+		if($r) {
+			xchan_query($r,true);
+			$r = fetch_post_tags($r,true);
+			return self::encode_item($r[0]);
+		}
+	}
+
+	static function encode_item_collection($items,$id,$type,$extra = null) {
+
+		$ret = [
+			'id' => z_root() . '/' . $id,
+			'type' => $type,
+			'totalItems' => count($items),
+		];
+		if($extra)
+			$ret = array_merge($ret,$extra);
+
+		if($items) {
+			$x = [];
+			foreach($items as $i) {
+				$t = self::encode_activity($i);
+				if($t)
+					$x[] = $t;
+			}
+			if($type === 'OrderedCollection')
+				$ret['orderedItems'] = $x;
+			else
+				$ret['items'] = $x;
+		}
+
+		return $ret;
+	}
+
+	static function encode_follow_collection($items,$id,$type,$extra = null) {
+
+		$ret = [
+			'id' => z_root() . '/' . $id,
+			'type' => $type,
+			'totalItems' => count($items),
+		];
+		if($extra)
+			$ret = array_merge($ret,$extra);
+
+		if($items) {
+			$x = [];
+			foreach($items as $i) {
+				if($i['xchan_url']) {
+					$x[] = $i['xchan_url'];
+				}
+			}
+
+			if($type === 'OrderedCollection')
+				$ret['orderedItems'] = $x;
+			else
+				$ret['items'] = $x;
+		}
+
+		return $ret;
+	}
+
+
+
+
+	static function encode_item($i) {
+
+		$ret = [];
+
+		$objtype = self::activity_obj_mapper($i['obj_type']);
+
+		if(intval($i['item_deleted'])) {
+			$ret['type'] = 'Tombstone';
+			$ret['formerType'] = $objtype;
+			$ret['id'] = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/item/' . urlencode($i['mid']));
+			return $ret;
+		}
+
+		$ret['type'] = $objtype;
+
+		$ret['id']   = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/item/' . urlencode($i['mid']));
+
+		if($i['title'])
+			$ret['title'] = bbcode($i['title']);
+
+		$ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME);
+		if($i['created'] !== $i['edited'])
+			$ret['updated'] = datetime_convert('UTC','UTC',$i['edited'],ATOM_TIME);
+		if($i['app']) {
+			$ret['instrument'] = [ 'type' => 'Service', 'name' => $i['app'] ];
+		}
+		if($i['location'] || $i['coord']) {
+			$ret['location'] = [ 'type' => 'Place' ];
+			if($i['location']) {
+				$ret['location']['name'] = $i['location'];
+			}
+			if($i['coord']) {
+				$l = explode(' ',$i['coord']);
+				$ret['location']['latitude'] = $l[0];
+				$ret['location']['longitude'] = $l[1];
+			}
+		}
+
+		$ret['attributedTo'] = $i['author']['xchan_url'];
+
+		if($i['id'] != $i['parent']) {
+			$ret['inReplyTo'] = ((strpos($i['parent_mid'],'http') === 0) ? $i['parent_mid'] : z_root() . '/item/' . urlencode($i['parent_mid']));
+		}
+
+		if($i['mimetype'] === 'text/bbcode') {
+			if($i['title'])
+				$ret['name'] = bbcode($i['title']);
+			if($i['summary'])
+				$ret['summary'] = bbcode($i['summary']);
+			$ret['content'] = bbcode($i['body']);
+			$ret['source'] = [ 'content' => $i['body'], 'mediaType' => 'text/bbcode' ];
+		}
+
+		$actor = self::encode_person($i['author'],false);
+		if($actor)
+			$ret['actor'] = $actor;
+		else
+			return [];
+
+		$t = self::encode_taxonomy($i);
+		if($t) {
+			$ret['tag']       = $t;
+		}
+
+		$a = self::encode_attachment($i);
+		if($a) {
+			$ret['attachment'] = $a;
+		}
+
+		return $ret;
+	}
+
+	static function decode_taxonomy($item) {
+
+		$ret = [];
+
+		if($item['tag']) {
+			foreach($item['tag'] as $t) {
+				if(! array_key_exists('type',$t))
+					$t['type'] = 'Hashtag';
+
+				switch($t['type']) {
+					case 'Hashtag':
+						$ret[] = [ 'ttype' => TERM_HASHTAG, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'],0,1) === '#') ? substr($t['name'],1) : $t['name']) ];
+						break;
+
+					case 'Mention':
+						$mention_type = substr($t['name'],0,1);
+						if($mention_type === '!') {
+							$ret[] = [ 'ttype' => TERM_FORUM, 'url' => $t['href'], 'term' => escape_tags(substr($t['name'],1)) ];
+						}
+						else {
+							$ret[] = [ 'ttype' => TERM_MENTION, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'],0,1) === '@') ? substr($t['name'],1) : $t['name']) ];
+						}
+						break;
+	
+					default:
+						break;
+				}
+			}
+		}
+
+		return $ret;
+	}
+
+
+	static function encode_taxonomy($item) {
+
+		$ret = [];
+
+		if($item['term']) {
+			foreach($item['term'] as $t) {
+				switch($t['ttype']) {
+					case TERM_HASHTAG:
+						// An id is required so if we don't have a url in the taxonomy, ignore it and keep going.
+						if($t['url']) {
+							$ret[] = [ 'id' => $t['url'], 'name' => '#' . $t['term'] ];
+						}
+						break;
+
+					case TERM_FORUM:
+						$ret[] = [ 'type' => 'Mention', 'href' => $t['url'], 'name' => '!' . $t['term'] ];
+						break;
+
+					case TERM_MENTION:
+						$ret[] = [ 'type' => 'Mention', 'href' => $t['url'], 'name' => '@' . $t['term'] ];
+						break;
+	
+					default:
+						break;
+				}
+			}
+		}
+
+		return $ret;
+	}
+
+	static function encode_attachment($item) {
+
+		$ret = [];
+
+		if($item['attach']) {
+			$atts = json_decode($item['attach'],true);
+			if($atts) {
+				foreach($atts as $att) {
+					if(strpos($att['type'],'image')) {
+						$ret[] = [ 'type' => 'Image', 'url' => $att['href'] ];
+					}
+					else {
+						$ret[] = [ 'type' => 'Link', 'mediaType' => $att['type'], 'href' => $att['href'] ];
+					}
+				}
+			}
+		}
+
+		return $ret;
+	}
+
+
+	static function decode_attachment($item) {
+
+		$ret = [];
+
+		if($item['attachment']) {
+			foreach($item['attachment'] as $att) {
+				$entry = [];
+				if($att['href'])
+					$entry['href'] = $att['href'];
+				elseif($att['url'])
+					$entry['href'] = $att['url'];
+				if($att['mediaType'])
+					$entry['type'] = $att['mediaType'];
+				elseif($att['type'] === 'Image')
+					$entry['type'] = 'image/jpeg';
+				if($entry)
+					$ret[] = $entry;
+			}
+		}
+
+		return $ret;
+	}
+
+
+
+	static function encode_activity($i) {
+
+		$ret   = [];
+		$reply = false;
+
+		if(intval($i['item_deleted'])) {
+			$ret['type'] = 'Tombstone';
+			$ret['formerType'] = self::activity_obj_mapper($i['obj_type']);
+			$ret['id'] = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/item/' . urlencode($i['mid']));
+			return $ret;
+		}
+
+		$ret['type'] = self::activity_mapper($i['verb']);
+		$ret['id']   = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/activity/' . urlencode($i['mid']));
+
+		if($i['title'])
+			$ret['name'] = html2plain(bbcode($i['title']));
+
+		if($i['summary'])
+			$ret['summary'] = bbcode($i['summary']);
+
+		if($ret['type'] === 'Announce') {
+			$tmp = preg_replace('/\[share(.*?)\[\/share\]/ism',EMPTY_STR, $i['body']);
+			$ret['content'] = bbcode($tmp);
+			$ret['source'] = [
+				'content' => $i['body'],
+				'mediaType' => 'text/bbcode'
+			];
+		}
+
+		$ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME);
+		if($i['created'] !== $i['edited'])
+			$ret['updated'] = datetime_convert('UTC','UTC',$i['edited'],ATOM_TIME);
+		if($i['app']) {
+			$ret['instrument'] = [ 'type' => 'Service', 'name' => $i['app'] ];
+		}
+		if($i['location'] || $i['coord']) {
+			$ret['location'] = [ 'type' => 'Place' ];
+			if($i['location']) {
+				$ret['location']['name'] = $i['location'];
+			}
+			if($i['coord']) {
+				$l = explode(' ',$i['coord']);
+				$ret['location']['latitude'] = $l[0];
+				$ret['location']['longitude'] = $l[1];
+			}
+		}
+
+		if($i['id'] != $i['parent']) {
+			$ret['inReplyTo'] = ((strpos($i['parent_mid'],'http') === 0) ? $i['parent_mid'] : z_root() . '/item/' . urlencode($i['parent_mid']));
+			$reply = true;
+
+			if($i['item_private']) {
+				$d = q("select xchan_url, xchan_addr, xchan_name from item left join xchan on xchan_hash = author_xchan where id = %d limit 1",
+					intval($i['parent'])
+				);
+				if($d) {
+					$is_directmessage = false;
+					$recips = get_iconfig($i['parent'], 'activitypub', 'recips');
+
+					if(in_array($i['author']['xchan_url'], $recips['to'])) {
+						$reply_url = $d[0]['xchan_url'];
+						$is_directmessage = true;
+					}
+					else {
+						$reply_url = z_root() . '/followers/' . substr($i['author']['xchan_addr'],0,strpos($i['author']['xchan_addr'],'@'));
+					}
+
+					$reply_addr = (($d[0]['xchan_addr']) ? $d[0]['xchan_addr'] : $d[0]['xchan_name']);
+				}
+			}
+
+		}
+
+		$actor = self::encode_person($i['author'],false);
+		if($actor)
+			$ret['actor'] = $actor;
+		else
+			return []; 
+
+		if($i['obj']) {
+			if(! is_array($i['obj'])) {
+				$i['obj'] = json_decode($i['obj'],true);
+			}
+			$obj = self::encode_object($i['obj']);
+			if($obj)
+				$ret['object'] = $obj;
+			else
+				return [];
+		}
+		else {
+			$obj = self::encode_item($i);
+			if($obj)
+				$ret['object'] = $obj;
+			else
+				return [];
+		}
+
+		if($i['target']) {
+			if(! is_array($i['target'])) {
+				$i['target'] = json_decode($i['target'],true);
+			}
+			$tgt = self::encode_object($i['target']);
+			if($tgt)
+				$ret['target'] = $tgt;
+			else
+				return [];
+		}
+
+		return $ret;
+	}
+
+	static function map_mentions($i) {
+		if(! $i['term']) {
+			return [];
+		}
+
+		$list = [];
+
+		foreach ($i['term'] as $t) {
+			if($t['ttype'] == TERM_MENTION) {
+				$list[] = $t['url'];
+			}
+		}
+
+		return $list;
+	}
+
+	static function map_acl($i,$mentions = false) {
+
+		$private = false;
+		$list = [];
+		$x = collect_recipients($i,$private);
+		if($x) {
+			stringify_array_elms($x);
+			if(! $x)
+				return;
+
+			$strict = (($mentions) ? true : get_config('activitypub','compliance'));
+
+			$sql_extra = (($strict) ? " and xchan_network = 'activitypub' " : '');
+
+			$details = q("select xchan_url, xchan_addr, xchan_name from xchan where xchan_hash in (" . implode(',',$x) . ") $sql_extra");
+
+			if($details) {
+				foreach($details as $d) {
+					if($mentions) {
+						$list[] = [ 'type' => 'Mention', 'href' => $d['xchan_url'], 'name' => '@' . (($d['xchan_addr']) ? $d['xchan_addr'] : $d['xchan_name']) ];
+					}
+					else { 
+						$list[] = $d['xchan_url'];
+					}
+				}
+			}
+		}
+
+		return $list;
+
+	}
+
+
+	static function encode_person($p, $extended = true) {
+
+		if(! $p['xchan_url'])
+			return [];
+
+		if(! $extended) {
+			return $p['xchan_url'];
+		}
+		$ret = [];
+
+		$ret['type']  = 'Person';
+		$ret['id']    = $p['xchan_url'];
+		if($p['xchan_addr'] && strpos($p['xchan_addr'],'@'))
+			$ret['preferredUsername'] = substr($p['xchan_addr'],0,strpos($p['xchan_addr'],'@'));
+		$ret['name']  = $p['xchan_name'];
+		$ret['updated'] = datetime_convert('UTC','UTC',$p['xchan_name_date'],ATOM_TIME);
+		$ret['icon']  = [
+			'type'      => 'Image',
+			'mediaType' => (($p['xchan_photo_mimetype']) ? $p['xchan_photo_mimetype'] : 'image/png' ),
+			'updated'   => datetime_convert('UTC','UTC',$p['xchan_photo_date'],ATOM_TIME),
+			'url'       => $p['xchan_photo_l'],
+			'height'    => 300,
+			'width'     => 300,
+		];
+		$ret['url'] = [
+			[ 
+				'type'      => 'Link',
+				'mediaType' => 'text/html',
+				'href'      => $p['xchan_url']
+			],
+			[
+				'type'      => 'Link',
+				'mediaType' => 'text/x-zot+json',
+				'href'      => $p['xchan_url']
+			]
+		];
+
+		$arr = [ 'xchan' => $p, 'encoded' => $ret ];
+		call_hooks('encode_person', $arr);
+		$ret = $arr['encoded'];
+
+
+		return $ret;
+	}
+
+
+	static function activity_mapper($verb) {
+
+		if(strpos($verb,'/') === false) {
+			return $verb;
+		}
+
+		$acts = [
+			'http://activitystrea.ms/schema/1.0/post'      => 'Create',
+			'http://activitystrea.ms/schema/1.0/share'     => 'Announce',
+			'http://activitystrea.ms/schema/1.0/update'    => 'Update',
+			'http://activitystrea.ms/schema/1.0/like'      => 'Like',
+			'http://activitystrea.ms/schema/1.0/favorite'  => 'Like',
+			'http://purl.org/zot/activity/dislike'         => 'Dislike',
+			'http://activitystrea.ms/schema/1.0/tag'       => 'Add',
+			'http://activitystrea.ms/schema/1.0/follow'    => 'Follow',
+			'http://activitystrea.ms/schema/1.0/unfollow'  => 'Unfollow',
+		];
+
+
+		if(array_key_exists($verb,$acts) && $acts[$verb]) {
+			return $acts[$verb];
+		}
+
+		// Reactions will just map to normal activities
+
+		if(strpos($verb,ACTIVITY_REACT) !== false)
+			return 'Create';
+		if(strpos($verb,ACTIVITY_MOOD) !== false)
+			return 'Create';
+
+		if(strpos($verb,ACTIVITY_POKE) !== false)
+			return 'Activity';
+
+		// We should return false, however this will trigger an uncaught execption  and crash 
+		// the delivery system if encountered by the JSON-LDSignature library
+ 
+		logger('Unmapped activity: ' . $verb);
+		return 'Create';
+	//	return false;
+}
+
+
+	static function activity_obj_mapper($obj) {
+
+		if(strpos($obj,'/') === false) {
+			return $obj;
+		}
+
+		$objs = [
+			'http://activitystrea.ms/schema/1.0/note'           => 'Note',
+			'http://activitystrea.ms/schema/1.0/comment'        => 'Note',
+			'http://activitystrea.ms/schema/1.0/person'         => 'Person',
+			'http://purl.org/zot/activity/profile'              => 'Profile',
+			'http://activitystrea.ms/schema/1.0/photo'          => 'Image',
+			'http://activitystrea.ms/schema/1.0/profile-photo'  => 'Icon',
+			'http://activitystrea.ms/schema/1.0/event'          => 'Event',
+			'http://activitystrea.ms/schema/1.0/wiki'           => 'Document',
+			'http://purl.org/zot/activity/location'             => 'Place',
+			'http://purl.org/zot/activity/chessgame'            => 'Game',
+			'http://purl.org/zot/activity/tagterm'              => 'zot:Tag',
+			'http://purl.org/zot/activity/thing'                => 'Object',
+			'http://purl.org/zot/activity/file'                 => 'zot:File',
+			'http://purl.org/zot/activity/mood'                 => 'zot:Mood',
+		
+		];
+
+		if(array_key_exists($obj,$objs)) {
+			return $objs[$obj];
+		}
+
+		logger('Unmapped activity object: ' . $obj);
+		return 'Note';
+
+		//	return false;
+
+	}
+
+
+	static function follow($channel,$act) {
+
+		$contact = null;
+		$their_follow_id = null;
+
+		/*
+		 * 
+		 * if $act->type === 'Follow', actor is now following $channel 
+		 * if $act->type === 'Accept', actor has approved a follow request from $channel 
+		 *	 
+		 */
+
+		$person_obj = $act->actor;
+
+		if($act->type === 'Follow') {
+			$their_follow_id  = $act->id;
+		}
+		elseif($act->type === 'Accept') {
+			$my_follow_id = z_root() . '/follow/' . $contact['id'];
+		}
+	
+		if(is_array($person_obj)) {
+
+			// store their xchan and hubloc
+
+			self::actor_store($person_obj['id'],$person_obj);
+
+			// Find any existing abook record 
+
+			$r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1",
+				dbesc($person_obj['id']),
+				intval($channel['channel_id'])
+			);
+			if($r) {
+				$contact = $r[0];
+			}
+		}
+
+		$x = \Zotlabs\Access\PermissionRoles::role_perms('social');
+		$p = \Zotlabs\Access\Permissions::FilledPerms($x['perms_connect']);
+		$their_perms = \Zotlabs\Access\Permissions::serialise($p);
+
+		if($contact && $contact['abook_id']) {
+
+			// A relationship of some form already exists on this site. 
+
+			switch($act->type) {
+
+				case 'Follow':
+
+					// A second Follow request, but we haven't approved the first one
+
+					if($contact['abook_pending']) {
+						return;
+					}
+
+					// We've already approved them or followed them first
+					// Send an Accept back to them
+
+					set_abconfig($channel['channel_id'],$person_obj['id'],'pubcrawl','their_follow_id', $their_follow_id);
+					\Zotlabs\Daemon\Master::Summon([ 'Notifier', 'permissions_accept', $contact['abook_id'] ]);
+					return;
+
+				case 'Accept':
+
+					// They accepted our Follow request - set default permissions
+	
+					set_abconfig($channel['channel_id'],$contact['abook_xchan'],'system','their_perms',$their_perms);
+
+					$abook_instance = $contact['abook_instance'];
+	
+					if(strpos($abook_instance,z_root()) === false) {
+						if($abook_instance) 
+							$abook_instance .= ',';
+						$abook_instance .= z_root();
+
+						$r = q("update abook set abook_instance = '%s', abook_not_here = 0 
+							where abook_id = %d and abook_channel = %d",
+							dbesc($abook_instance),
+							intval($contact['abook_id']),
+							intval($channel['channel_id'])
+						);
+					}
+		
+					return;
+				default:
+					return;
+	
+			}
+		}
+
+		// No previous relationship exists.
+
+		if($act->type === 'Accept') {
+			// This should not happen unless we deleted the connection before it was accepted.
+			return;
+		}
+
+		// From here on out we assume a Follow activity to somebody we have no existing relationship with
+
+		set_abconfig($channel['channel_id'],$person_obj['id'],'pubcrawl','their_follow_id', $their_follow_id);
+
+		// The xchan should have been created by actor_store() above
+
+		$r = q("select * from xchan where xchan_hash = '%s' and xchan_network = 'activitypub' limit 1",
+			dbesc($person_obj['id'])
+		);
+
+		if(! $r) {
+			logger('xchan not found for ' . $person_obj['id']);
+			return;
+		}
+		$ret = $r[0];
+
+		$p = \Zotlabs\Access\Permissions::connect_perms($channel['channel_id']);
+		$my_perms  = \Zotlabs\Access\Permissions::serialise($p['perms']);
+		$automatic = $p['automatic'];
+
+		$closeness = get_pconfig($channel['channel_id'],'system','new_abook_closeness',80);
+
+		$r = abook_store_lowlevel(
+			[
+				'abook_account'   => intval($channel['channel_account_id']),
+				'abook_channel'   => intval($channel['channel_id']),
+				'abook_xchan'     => $ret['xchan_hash'],
+				'abook_closeness' => intval($closeness),
+				'abook_created'   => datetime_convert(),
+				'abook_updated'   => datetime_convert(),
+				'abook_connected' => datetime_convert(),
+				'abook_dob'       => NULL_DATE,
+				'abook_pending'   => intval(($automatic) ? 0 : 1),
+				'abook_instance'  => z_root()
+			]
+		);
+		
+		if($my_perms)
+			set_abconfig($channel['channel_id'],$ret['xchan_hash'],'system','my_perms',$my_perms);
+
+		if($their_perms)
+			set_abconfig($channel['channel_id'],$ret['xchan_hash'],'system','their_perms',$their_perms);
+
+
+		if($r) {
+			logger("New ActivityPub follower for {$channel['channel_name']}");
+
+			$new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash left join hubloc on hubloc_hash = xchan_hash where abook_channel = %d and abook_xchan = '%s' order by abook_created desc limit 1",
+				intval($channel['channel_id']),
+				dbesc($ret['xchan_hash'])
+			);
+			if($new_connection) {
+				\Zotlabs\Lib\Enotify::submit(
+					[
+						'type'	       => NOTIFY_INTRO,
+						'from_xchan'   => $ret['xchan_hash'],
+						'to_xchan'     => $channel['channel_hash'],
+						'link'         => z_root() . '/connedit/' . $new_connection[0]['abook_id'],
+					]
+				);
+
+				if($my_perms && $automatic) {
+					// send an Accept for this Follow activity
+					\Zotlabs\Daemon\Master::Summon([ 'Notifier', 'permissions_accept', $new_connection[0]['abook_id'] ]);
+					// Send back a Follow notification to them
+					\Zotlabs\Daemon\Master::Summon([ 'Notifier', 'permissions_create', $new_connection[0]['abook_id'] ]);
+				}
+
+				$clone = array();
+				foreach($new_connection[0] as $k => $v) {
+					if(strpos($k,'abook_') === 0) {
+						$clone[$k] = $v;
+					}
+				}
+				unset($clone['abook_id']);
+				unset($clone['abook_account']);
+				unset($clone['abook_channel']);
+		
+				$abconfig = load_abconfig($channel['channel_id'],$clone['abook_xchan']);
+
+				if($abconfig)
+					$clone['abconfig'] = $abconfig;
+
+				Libsync::build_sync_packet($channel['channel_id'], [ 'abook' => array($clone) ] );
+			}
+		}
+
+
+		/* If there is a default group for this channel and permissions are automatic, add this member to it */
+
+		if($channel['channel_default_group'] && $automatic) {
+			$g = Group::rec_byhash($channel['channel_id'],$channel['channel_default_group']);
+			if($g)
+				Group::member_add($channel['channel_id'],'',$ret['xchan_hash'],$g['id']);
+		}
+
+
+		return;
+
+	}
+
+
+	static function unfollow($channel,$act) {
+
+		$contact = null;
+
+		/* @FIXME This really needs to be a signed request. */
+
+		/* actor is unfollowing $channel */
+
+		$person_obj = $act->actor;
+
+		if(is_array($person_obj)) {
+
+			$r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1",
+				dbesc($person_obj['id']),
+				intval($channel['channel_id'])
+			);
+			if($r) {
+				// remove all permissions they provided
+				del_abconfig($channel['channel_id'],$r[0]['xchan_hash'],'system','their_perms',EMPTY_STR);
+			}
+		}
+
+		return;
+	}
+
+
+
+
+	static function actor_store($url,$person_obj) {
+
+		if(! is_array($person_obj))
+			return;
+
+		$name = $person_obj['name'];
+		if(! $name)
+			$name = $person_obj['preferredUsername'];
+		if(! $name)
+			$name = t('Unknown');
+
+		if($person_obj['icon']) {
+			if(is_array($person_obj['icon'])) {
+				if(array_key_exists('url',$person_obj['icon']))
+					$icon = $person_obj['icon']['url'];
+				else
+					$icon = $person_obj['icon'][0]['url'];
+			}
+			else
+				$icon = $person_obj['icon'];
+		}
+
+		if(is_array($person_obj['url']) && array_key_exists('href', $person_obj['url']))
+			$profile = $person_obj['url']['href'];
+		else
+			$profile = $url;
+
+
+		$inbox = $person_obj['inbox'];
+
+		$collections = [];
+
+		if($inbox) {
+			$collections['inbox'] = $inbox;
+			if($person_obj['outbox'])
+				$collections['outbox'] = $person_obj['outbox'];
+			if($person_obj['followers'])
+				$collections['followers'] = $person_obj['followers'];
+			if($person_obj['following'])
+				$collections['following'] = $person_obj['following'];
+			if($person_obj['endpoints'] && $person_obj['endpoints']['sharedInbox'])
+				$collections['sharedInbox'] = $person_obj['endpoints']['sharedInbox'];
+		}
+
+		if(array_key_exists('publicKey',$person_obj) && array_key_exists('publicKeyPem',$person_obj['publicKey'])) {
+			if($person_obj['id'] === $person_obj['publicKey']['owner']) {
+				$pubkey = $person_obj['publicKey']['publicKeyPem'];
+				if(strstr($pubkey,'RSA ')) {
+					$pubkey = rsatopem($pubkey);
+				}
+			}
+		}
+
+		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
+			dbesc($url)
+		);
+		if(! $r) {
+			// create a new record
+			$r = xchan_store_lowlevel(
+				[
+					'xchan_hash'         => $url,
+					'xchan_guid'         => $url,
+					'xchan_pubkey'       => $pubkey,
+					'xchan_addr'         => '',
+					'xchan_url'          => $profile,
+					'xchan_name'         => $name,
+					'xchan_name_date'    => datetime_convert(),
+					'xchan_network'      => 'activitypub'
+				]
+			);
+		}
+		else {
+
+			// Record exists. Cache existing records for one week at most
+			// then refetch to catch updated profile photos, names, etc. 
+
+			$d = datetime_convert('UTC','UTC','now - 1 week');
+			if($r[0]['xchan_name_date'] > $d)
+				return;
+
+			// update existing record
+			$r = q("update xchan set xchan_name = '%s', xchan_pubkey = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s'",
+				dbesc($name),
+				dbesc($pubkey),
+				dbesc('activitypub'),
+				dbesc(datetime_convert()),
+				dbesc($url)
+			);
+		}
+
+		if($collections) {
+			set_xconfig($url,'activitypub','collections',$collections);
+		}
+
+		$r = q("select * from hubloc where hubloc_hash = '%s' limit 1",
+			dbesc($url)
+		);
+
+
+		$m = parse_url($url);
+		if($m) {
+			$hostname = $m['host'];
+			$baseurl = $m['scheme'] . '://' . $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
+		}
+
+		if(! $r) {
+			$r = hubloc_store_lowlevel(
+				[
+					'hubloc_guid'     => $url,
+					'hubloc_hash'     => $url,
+					'hubloc_addr'     => '',
+					'hubloc_network'  => 'activitypub',
+					'hubloc_url'      => $baseurl,
+					'hubloc_host'     => $hostname,
+					'hubloc_callback' => $inbox,
+					'hubloc_updated'  => datetime_convert(),
+					'hubloc_primary'  => 1
+				]
+			);
+		}
+
+		if(! $icon)
+			$icon = z_root() . '/' . get_default_profile_photo(300);
+
+		$photos = import_xchan_photo($icon,$url);
+		$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
+			dbescdate(datetime_convert('UTC','UTC',$arr['photo_updated'])),
+			dbesc($photos[0]),
+			dbesc($photos[1]),
+			dbesc($photos[2]),
+			dbesc($photos[3]),
+			dbesc($url)
+		);
+
+	}
+
+
+	static function create_action($channel,$observer_hash,$act) {
+
+		if(in_array($act->obj['type'], [ 'Note', 'Article', 'Video' ])) {
+			self::create_note($channel,$observer_hash,$act);
+		}
+
+
+	}
+
+	static function announce_action($channel,$observer_hash,$act) {
+
+		if(in_array($act->type, [ 'Announce' ])) {
+			self::announce_note($channel,$observer_hash,$act);
+		}
+
+	}
+
+
+	static function like_action($channel,$observer_hash,$act) {
+
+		if(in_array($act->obj['type'], [ 'Note', 'Article', 'Video' ])) {
+			self::like_note($channel,$observer_hash,$act);
+		}
+
+
+	}
+
+	// sort function width decreasing
+
+	static function as_vid_sort($a,$b) {
+		if($a['width'] === $b['width'])
+			return 0;
+		return (($a['width'] > $b['width']) ? -1 : 1);
+	}
+
+	static function create_note($channel,$observer_hash,$act) {
+
+		$s = [];
+
+		// Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field.
+		// They are hidden in the public timeline if the public inbox is listed in the 'cc' field.
+		// This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point.
+		$pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false);
+		$is_sys_channel = is_sys_channel($channel['channel_id']);
+
+		$parent = ((array_key_exists('inReplyTo',$act->obj)) ? urldecode($act->obj['inReplyTo']) : '');
+		if($parent) {
+
+			$r = q("select * from item where uid = %d and ( mid = '%s' or  mid = '%s' ) limit 1",
+				intval($channel['channel_id']),
+				dbesc($parent),
+				dbesc(basename($parent))
+			);
+
+			if(! $r) {
+				logger('parent not found.');
+				return;
+			}
+
+			if($r[0]['owner_xchan'] === $channel['channel_hash']) {
+				if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) {
+					logger('no comment permission.');
+					return;
+				}
+			}
+
+			$s['parent_mid'] = $r[0]['mid'];
+			$s['owner_xchan'] = $r[0]['owner_xchan'];
+			$s['author_xchan'] = $observer_hash;
+
+		}
+		else {
+			if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) {
+				logger('no permission');
+				return;
+			}
+			$s['owner_xchan'] = $s['author_xchan'] = $observer_hash;
+		}
+	
+		$abook = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
+			dbesc($observer_hash),
+			intval($channel['channel_id'])
+		);
+	
+		$content = self::get_content($act->obj);
+
+		if(! $content) {
+			logger('no content');
+			return;
+		}
+
+		$s['aid'] = $channel['channel_account_id'];
+		$s['uid'] = $channel['channel_id'];
+		$s['mid'] = urldecode($act->obj['id']);
+		$s['plink'] = urldecode($act->obj['id']);
+
+
+		if($act->data['published']) {
+			$s['created'] = datetime_convert('UTC','UTC',$act->data['published']);
+		}
+		elseif($act->obj['published']) {
+			$s['created'] = datetime_convert('UTC','UTC',$act->obj['published']);
+		}
+		if($act->data['updated']) {
+			$s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']);
+		}
+		elseif($act->obj['updated']) {
+			$s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']);
+		}
+
+		if(! $s['created'])
+			$s['created'] = datetime_convert();
+
+		if(! $s['edited'])
+			$s['edited'] = $s['created'];
+
+
+		if(! $s['parent_mid'])
+			$s['parent_mid'] = $s['mid'];
+
+	
+		$s['title']    = self::bb_content($content,'name');
+		$s['summary']  = self::bb_content($content,'summary'); 
+		$s['body']     = self::bb_content($content,'content');
+		$s['verb']     = ACTIVITY_POST;
+		$s['obj_type'] = ACTIVITY_OBJ_NOTE;
+
+		$instrument = $act->get_property_obj('instrument');
+		if(! $instrument)
+			$instrument = $act->get_property_obj('instrument',$act->obj);
+
+		if($instrument && array_key_exists('type',$instrument) 
+			&& $instrument['type'] === 'Service' && array_key_exists('name',$instrument)) {
+			$s['app'] = escape_tags($instrument['name']);
+		}
+
+		if($channel['channel_system']) {
+			if(! \Zotlabs\Lib\MessageFilter::evaluate($s,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) {
+				logger('post is filtered');
+				return;
+			}
+		}
+
+
+		if($abook) {
+			if(! post_is_importable($s,$abook[0])) {
+				logger('post is filtered');
+				return;
+			}
+		}
+
+		if($act->obj['conversation']) {
+			set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1);
+		}
+
+		$a = self::decode_taxonomy($act->obj);
+		if($a) {
+			$s['term'] = $a;
+		}
+
+		$a = self::decode_attachment($act->obj);
+		if($a) {
+			$s['attach'] = $a;
+		}
+
+		if($act->obj['type'] === 'Note' && $s['attach']) {
+			$s['body'] .= self::bb_attach($s['attach']);
+		}
+
+		// we will need a hook here to extract magnet links e.g. peertube
+		// right now just link to the largest mp4 we find that will fit in our
+		// standard content region
+
+		if($act->obj['type'] === 'Video') {
+
+			$vtypes = [
+				'video/mp4',
+				'video/ogg',
+				'video/webm'
+			];
+
+			$mps = [];
+			if(array_key_exists('url',$act->obj) && is_array($act->obj['url'])) {
+				foreach($act->obj['url'] as $vurl) {
+					if(in_array($vurl['mimeType'], $vtypes)) {
+						if(! array_key_exists('width',$vurl)) {
+							$vurl['width'] = 0;
+						}
+						$mps[] = $vurl;
+					}
+				}
+			}
+			if($mps) {
+				usort($mps,'as_vid_sort');
+				foreach($mps as $m) {
+					if(intval($m['width']) < 500) {
+						$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]';
+						break;
+					}
+				}
+			}
+		}
+
+		if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips)))
+			$s['item_private'] = 1;
+
+		set_iconfig($s,'activitypub','recips',$act->raw_recips);
+		if($parent) {
+			set_iconfig($s,'activitypub','rawmsg',$act->raw,1);
+		}
+
+		$x = null;
+
+		$r = q("select created, edited from item where mid = '%s' and uid = %d limit 1",
+			dbesc($s['mid']),
+			intval($s['uid'])
+		);
+		if($r) {
+			if($s['edited'] > $r[0]['edited']) {
+				$x = item_store_update($s);
+			}
+			else {
+				return;
+			}
+		}
+		else {
+			$x = item_store($s);
+		}
+
+		if(is_array($x) && $x['item_id']) {
+			if($parent) {
+				if($s['owner_xchan'] === $channel['channel_hash']) {
+					// We are the owner of this conversation, so send all received comments back downstream
+					Zotlabs\Daemon\Master::Summon(array('Notifier','comment-import',$x['item_id']));
+				}
+				$r = q("select * from item where id = %d limit 1",
+					intval($x['item_id'])
+				);
+				if($r) {
+					send_status_notifications($x['item_id'],$r[0]);
+				}
+			}
+			sync_an_item($channel['channel_id'],$x['item_id']);
+		}
+
+	}
+
+
+	static function decode_note($act) {
+
+		$s = [];
+
+
+
+		$content = self::get_content($act->obj);
+
+		$s['owner_xchan']  = $act->actor['id'];
+		$s['author_xchan'] = $act->actor['id'];
+
+		$s['mid']        = $act->id;
+		$s['parent_mid'] = $act->parent_id;
+
+
+		if($act->data['published']) {
+			$s['created'] = datetime_convert('UTC','UTC',$act->data['published']);
+		}
+		elseif($act->obj['published']) {
+			$s['created'] = datetime_convert('UTC','UTC',$act->obj['published']);
+		}
+		if($act->data['updated']) {
+			$s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']);
+		}
+		elseif($act->obj['updated']) {
+			$s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']);
+		}
+
+		if(! $s['created'])
+			$s['created'] = datetime_convert();
+
+		if(! $s['edited'])
+			$s['edited'] = $s['created'];
+
+		if(in_array($act->type,['Announce'])) {
+			$root_content = self::get_content($act->raw);
+
+			$s['title']    = self::bb_content($root_content,'name');
+			$s['summary']  = self::bb_content($root_content,'summary');
+			$s['body']     = (self::bb_content($root_content,'bbcode') ? : self::bb_content($root_content,'content'));
+
+			if(strpos($s['body'],'[share') === false) {
+
+				// @fixme - error check and set defaults
+
+				$name = urlencode($act->obj['actor']['name']);
+				$profile = $act->obj['actor']['id'];
+				$photo = $act->obj['icon']['url'];
+
+				$s['body'] .= "\r\n[share author='" . $name .
+					"' profile='" . $profile .
+					"' avatar='" . $photo . 
+					"' link='" . $act->obj['id'] .
+					"' auth='" . ((is_matrix_url($act->obj['id'])) ? 'true' : 'false' ) . 
+					"' posted='" . $act->obj['published'] . 
+					"' message_id='" . $act->obj['id'] . 
+				"']";
+			}
+		}
+		else {
+			$s['title']    = self::bb_content($content,'name');
+			$s['summary']  = self::bb_content($content,'summary');
+			$s['body']     = (self::bb_content($content,'bbcode') ? : self::bb_content($content,'content'));
+		}
+
+		$s['verb']     = self::activity_mapper($act->type);
+
+		if($act->type === 'Tombstone') {
+			$s['item_deleted'] = 1;
+		}
+
+		$s['obj_type'] = self::activity_obj_mapper($act->obj['type']);
+		$s['obj']      = $act->obj;
+
+		$instrument = $act->get_property_obj('instrument');
+		if(! $instrument)
+			$instrument = $act->get_property_obj('instrument',$act->obj);
+
+		if($instrument && array_key_exists('type',$instrument) 
+			&& $instrument['type'] === 'Service' && array_key_exists('name',$instrument)) {
+			$s['app'] = escape_tags($instrument['name']);
+		}
+
+		$a = self::decode_taxonomy($act->obj);
+		if($a) {
+			$s['term'] = $a;
+		}
+
+		$a = self::decode_attachment($act->obj);
+		if($a) {
+			$s['attach'] = $a;
+		}
+
+		// we will need a hook here to extract magnet links e.g. peertube
+		// right now just link to the largest mp4 we find that will fit in our
+		// standard content region
+
+		if($act->obj['type'] === 'Video') {
+
+			$vtypes = [
+				'video/mp4',
+				'video/ogg',
+				'video/webm'
+			];
+
+			$mps = [];
+			if(array_key_exists('url',$act->obj) && is_array($act->obj['url'])) {
+				foreach($act->obj['url'] as $vurl) {
+					if(in_array($vurl['mimeType'], $vtypes)) {
+						if(! array_key_exists('width',$vurl)) {
+							$vurl['width'] = 0;
+						}
+						$mps[] = $vurl;
+					}
+				}
+			}
+			if($mps) {
+				usort($mps,'as_vid_sort');
+				foreach($mps as $m) {
+					if(intval($m['width']) < 500) {
+						$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]';
+						break;
+					}
+				}
+			}
+		}
+
+		if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips)))
+			$s['item_private'] = 1;
+
+		set_iconfig($s,'activitypub','recips',$act->raw_recips);
+
+		if($parent) {
+			set_iconfig($s,'activitypub','rawmsg',$act->raw,1);
+		}
+
+		return $s;
+
+	}
+
+
+
+	static function announce_note($channel,$observer_hash,$act) {
+
+		$s = [];
+
+		$is_sys_channel = is_sys_channel($channel['channel_id']);
+
+		// Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field.
+		// They are hidden in the public timeline if the public inbox is listed in the 'cc' field.
+		// This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point.
+		$pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false);
+
+		if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) {
+			logger('no permission');
+			return;
+		}
+
+		$content = self::get_content($act->obj);
+
+		if(! $content) {
+			logger('no content');
+			return;
+		}
+
+		$s['owner_xchan'] = $s['author_xchan'] = $observer_hash;
+
+		$s['aid'] = $channel['channel_account_id'];
+		$s['uid'] = $channel['channel_id'];
+		$s['mid'] = urldecode($act->obj['id']);
+		$s['plink'] = urldecode($act->obj['id']);
+
+		if(! $s['created'])
+			$s['created'] = datetime_convert();
+
+		if(! $s['edited'])
+			$s['edited'] = $s['created'];
+
+
+		$s['parent_mid'] = $s['mid'];
+
+		$s['verb']     = ACTIVITY_POST;
+		$s['obj_type'] = ACTIVITY_OBJ_NOTE;
+		$s['app']      = t('ActivityPub');
+
+		if($channel['channel_system']) {
+			if(! \Zotlabs\Lib\MessageFilter::evaluate($s,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) {
+				logger('post is filtered');
+				return;
+			}
+		}
+
+		$abook = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
+			dbesc($observer_hash),
+			intval($channel['channel_id'])
+		);
+
+		if($abook) {
+			if(! post_is_importable($s,$abook[0])) {
+				logger('post is filtered');
+				return;
+			}
+		}
+
+		if($act->obj['conversation']) {
+			set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1);
+		}
+
+		$a = self::decode_taxonomy($act->obj);
+		if($a) {
+			$s['term'] = $a;
+		}
+
+		$a = self::decode_attachment($act->obj);
+		if($a) {
+			$s['attach'] = $a;
+		}
+
+		$body = "[share author='" . urlencode($act->sharee['name']) . 
+			"' profile='" . $act->sharee['url'] . 
+			"' avatar='" . $act->sharee['photo_s'] . 
+			"' link='" . ((is_array($act->obj['url'])) ? $act->obj['url']['href'] : $act->obj['url']) . 
+			"' auth='" . ((is_matrix_url($act->obj['url'])) ? 'true' : 'false' ) . 
+			"' posted='" . $act->obj['published'] . 
+			"' message_id='" . $act->obj['id'] . 
+		"']";
+
+		if($content['name'])
+			$body .= self::bb_content($content,'name') . "\r\n";
+
+		$body .= self::bb_content($content,'content');
+
+		if($act->obj['type'] === 'Note' && $s['attach']) {
+			$body .= self::bb_attach($s['attach']);
+		}
+
+		$body .= "[/share]";
+
+		$s['title']    = self::bb_content($content,'name');
+		$s['body']     = $body;
+
+		if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips)))
+			$s['item_private'] = 1;
+
+		set_iconfig($s,'activitypub','recips',$act->raw_recips);
+
+		$r = q("select created, edited from item where mid = '%s' and uid = %d limit 1",
+			dbesc($s['mid']),
+			intval($s['uid'])
+		);
+		if($r) {
+			if($s['edited'] > $r[0]['edited']) {
+				$x = item_store_update($s);
+			}
+			else {
+				return;
+			}
+		}
+		else {
+			$x = item_store($s);
+		}
+
+
+		if(is_array($x) && $x['item_id']) {
+			if($parent) {
+				if($s['owner_xchan'] === $channel['channel_hash']) {
+					// We are the owner of this conversation, so send all received comments back downstream
+					Zotlabs\Daemon\Master::Summon(array('Notifier','comment-import',$x['item_id']));
+				}
+				$r = q("select * from item where id = %d limit 1",
+					intval($x['item_id'])
+				);
+				if($r) {
+					send_status_notifications($x['item_id'],$r[0]);
+				}
+			}
+			sync_an_item($channel['channel_id'],$x['item_id']);
+		}
+
+
+	}
+
+	static function like_note($channel,$observer_hash,$act) {
+
+		$s = [];
+
+		$parent = $act->obj['id'];
+	
+		if($act->type === 'Like')
+			$s['verb'] = ACTIVITY_LIKE;
+		if($act->type === 'Dislike')
+			$s['verb'] = ACTIVITY_DISLIKE;
+
+		if(! $parent)
+			return;
+
+		$r = q("select * from item where uid = %d and ( mid = '%s' or  mid = '%s' ) limit 1",
+			intval($channel['channel_id']),
+			dbesc($parent),
+			dbesc(urldecode(basename($parent)))
+		);
+
+		if(! $r) {
+			logger('parent not found.');
+			return;
+		}
+
+		xchan_query($r);
+		$parent_item = $r[0];
+
+		if($parent_item['owner_xchan'] === $channel['channel_hash']) {
+			if(! perm_is_allowed($channel['channel_id'],$observer_hash,'post_comments')) {
+				logger('no comment permission.');
+				return;
+			}
+		}
+
+		if($parent_item['mid'] === $parent_item['parent_mid']) {
+			$s['parent_mid'] = $parent_item['mid'];
+		}
+		else {
+			$s['thr_parent'] = $parent_item['mid'];
+			$s['parent_mid'] = $parent_item['parent_mid'];
+		}
+
+		$s['owner_xchan'] = $parent_item['owner_xchan'];
+		$s['author_xchan'] = $observer_hash;
+	
+		$s['aid'] = $channel['channel_account_id'];
+		$s['uid'] = $channel['channel_id'];
+		$s['mid'] = $act->id;
+
+		if(! $s['parent_mid'])
+			$s['parent_mid'] = $s['mid'];
+	
+
+		$post_type = (($parent_item['resource_type'] === 'photo') ? t('photo') : t('status'));
+
+		$links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $parent_item['plink']));
+		$objtype = (($parent_item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE );
+
+		$body = $parent_item['body'];
+
+		$z = q("select * from xchan where xchan_hash = '%s' limit 1",
+			dbesc($parent_item['author_xchan'])
+		);
+		if($z)
+			$item_author = $z[0];		
+
+		$object = json_encode(array(
+			'type'    => $post_type,
+			'id'      => $parent_item['mid'],
+			'parent'  => (($parent_item['thr_parent']) ? $parent_item['thr_parent'] : $parent_item['parent_mid']),
+			'link'    => $links,
+			'title'   => $parent_item['title'],
+			'content' => $parent_item['body'],
+			'created' => $parent_item['created'],
+			'edited'  => $parent_item['edited'],
+			'author'  => array(
+				'name'     => $item_author['xchan_name'],
+				'address'  => $item_author['xchan_addr'],
+				'guid'     => $item_author['xchan_guid'],
+				'guid_sig' => $item_author['xchan_guid_sig'],
+				'link'     => array(
+					array('rel' => 'alternate', 'type' => 'text/html', 'href' => $item_author['xchan_url']),
+					array('rel' => 'photo', 'type' => $item_author['xchan_photo_mimetype'], 'href' => $item_author['xchan_photo_m'])),
+				),
+			), JSON_UNESCAPED_SLASHES
+		);
+
+		if($act->type === 'Like')
+			$bodyverb = t('%1$s likes %2$s\'s %3$s');
+		if($act->type === 'Dislike')
+			$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
+
+		$ulink = '[url=' . $item_author['xchan_url'] . ']' . $item_author['xchan_name'] . '[/url]';
+		$alink = '[url=' . $parent_item['author']['xchan_url'] . ']' . $parent_item['author']['xchan_name'] . '[/url]';
+		$plink = '[url='. z_root() . '/display/' . urlencode($act->id) . ']' . $post_type . '[/url]';
+		$s['body'] =  sprintf( $bodyverb, $ulink, $alink, $plink );
+
+		$s['app']  = t('ActivityPub');
+
+		// set the route to that of the parent so downstream hubs won't reject it.
+
+		$s['route'] = $parent_item['route'];
+		$s['item_private'] = $parent_item['item_private'];
+		$s['obj_type'] = $objtype;
+		$s['obj'] = $object;
+
+		if($act->obj['conversation']) {
+			set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1);
+		}
+
+		if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips)))
+			$s['item_private'] = 1;
+
+		set_iconfig($s,'activitypub','recips',$act->raw_recips);
+
+		$result = item_store($s);
+
+		if($result['success']) {
+			// if the message isn't already being relayed, notify others
+			if(intval($parent_item['item_origin']))
+					Zotlabs\Daemon\Master::Summon(array('Notifier','comment-import',$result['item_id']));
+				sync_an_item($channel['channel_id'],$result['item_id']);
+		}
+
+		return;
+	}
+
+
+	static function bb_attach($attach) {
+
+		$ret = false;
+
+		foreach($attach as $a) {
+			if(strpos($a['type'],'image') !== false) {
+				$ret .= "\n\n" . '[img]' . $a['href'] . '[/img]';
+			}
+			if(array_key_exists('type',$a) && strpos($a['type'], 'video') === 0) {
+				$ret .= "\n\n" . '[video]' . $a['href'] . '[/video]';
+			}
+			if(array_key_exists('type',$a) && strpos($a['type'], 'audio') === 0) {
+				$ret .= "\n\n" . '[audio]' . $a['href'] . '[/audio]';
+			}
+		}
+
+		return $ret;
+	}
+
+
+
+	static function bb_content($content,$field) {
+
+		require_once('include/html2bbcode.php');
+
+		$ret = false;
+
+		if(is_array($content[$field])) {
+			foreach($content[$field] as $k => $v) {
+				$ret .= '[language=' . $k . ']' . html2bbcode($v) . '[/language]';
+			}
+		}
+		else {
+			if($field === 'bbcode' && array_key_exists('bbcode',$content)) {
+				$ret = $content[$field];
+			}
+			else {
+				$ret = html2bbcode($content[$field]);
+			}
+		}
+
+		return $ret;
+	}
+
+
+	static function get_content($act) {
+
+		$content = [];
+		if (! $act) {
+			return $content;
+		}
+
+		foreach ([ 'name', 'summary', 'content' ] as $a) {
+			if (($x = self::get_textfield($act,$a)) !== false) {
+				$content[$a] = $x;
+			}
+		}
+		if (array_key_exists('source',$act) && array_key_exists('mediaType',$act['source'])) {
+			if ($act['source']['mediaType'] === 'text/bbcode') {
+				$content['bbcode'] = purify_html($act['source']['content']);
+			}
+		}
+
+		return $content;
+	}
+
+
+	static function get_textfield($act,$field) {
+	
+		$content = false;
+
+		if(array_key_exists($field,$act) && $act[$field])
+			$content = purify_html($act[$field]);
+		elseif(array_key_exists($field . 'Map',$act) && $act[$field . 'Map']) {
+			foreach($act[$field . 'Map'] as $k => $v) {
+				$content[escape_tags($k)] = purify_html($v);
+			}
+		}
+		return $content;
+	}
+}
\ No newline at end of file
diff --git a/Zotlabs/Lib/Group.php b/Zotlabs/Lib/Group.php
new file mode 100644
index 000000000..f136a3614
--- /dev/null
+++ b/Zotlabs/Lib/Group.php
@@ -0,0 +1,405 @@
+may apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); 
+				}
+				return true;
+			}
+
+			do {
+				$dups = false;
+				$hash = random_string(32) . str_replace(['<','>'],['.','.'], $name);
+
+				$r = q("SELECT id FROM groups WHERE hash = '%s' LIMIT 1", dbesc($hash));
+				if($r)
+					$dups = true;
+			} while($dups == true);
+
+
+			$r = q("INSERT INTO groups ( hash, uid, visible, gname )
+				VALUES( '%s', %d, %d, '%s' ) ",
+				dbesc($hash),
+				intval($uid),
+				intval($public),
+				dbesc($name)
+			);
+			$ret = $r;
+		}
+
+		Libsync::build_sync_packet($uid,null,true);
+		return $ret;
+	}
+
+
+	static function remove($uid,$name) {
+		$ret = false;
+		if(x($uid) && x($name)) {
+			$r = q("SELECT id, hash FROM groups WHERE uid = %d AND gname = '%s' LIMIT 1",
+				intval($uid),
+				dbesc($name)
+			);
+			if($r) {
+				$group_id = $r[0]['id'];
+				$group_hash = $r[0]['hash'];
+			}
+
+			if(! $group_id)
+				return false;
+
+			// remove group from default posting lists
+			$r = q("SELECT channel_default_group, channel_allow_gid, channel_deny_gid FROM channel WHERE channel_id = %d LIMIT 1",
+			       intval($uid)
+			);
+			if($r) {
+				$user_info = $r[0];
+				$change = false;
+
+				if($user_info['channel_default_group'] == $group_hash) {
+					$user_info['channel_default_group'] = '';
+					$change = true;
+				}
+				if(strpos($user_info['channel_allow_gid'], '<' . $group_hash . '>') !== false) {
+					$user_info['channel_allow_gid'] = str_replace('<' . $group_hash . '>', '', $user_info['channel_allow_gid']);
+					$change = true;
+				}
+				if(strpos($user_info['channel_deny_gid'], '<' . $group_hash . '>') !== false) {
+					$user_info['channel_deny_gid'] = str_replace('<' . $group_hash . '>', '', $user_info['channel_deny_gid']);
+					$change = true;
+				}
+
+				if($change) {
+					q("UPDATE channel SET channel_default_group = '%s', channel_allow_gid = '%s', channel_deny_gid = '%s' 
+						WHERE channel_id = %d",
+						intval($user_info['channel_default_group']),
+						dbesc($user_info['channel_allow_gid']),
+						dbesc($user_info['channel_deny_gid']),
+						intval($uid)
+					);
+				}
+			}
+
+			// remove all members
+			$r = q("DELETE FROM group_member WHERE uid = %d AND gid = %d ",
+				intval($uid),
+				intval($group_id)
+			);
+
+			// remove group
+			$r = q("UPDATE groups SET deleted = 1 WHERE uid = %d AND gname = '%s'",
+				intval($uid),
+				dbesc($name)
+			);
+
+			$ret = $r;
+
+		}
+
+		Libsync::build_sync_packet($uid,null,true);
+
+		return $ret;
+	}
+
+
+	static function byname($uid,$name) {
+		if((! $uid) || (! strlen($name)))
+			return false;
+		$r = q("SELECT * FROM groups WHERE uid = %d AND gname = '%s' LIMIT 1",
+			intval($uid),
+			dbesc($name)
+		);
+		if($r)
+			return $r[0]['id'];
+		return false;
+	}
+
+
+	static function rec_byhash($uid,$hash) {
+		if((! $uid) || (! strlen($hash)))
+			return false;
+		$r = q("SELECT * FROM groups WHERE uid = %d AND hash = '%s' LIMIT 1",
+			intval($uid),
+			dbesc($hash)
+		);
+		if($r)
+			return $r[0];
+		return false;
+	}
+
+
+	static function member_remove($uid,$name,$member) {
+		$gid = self::byname($uid,$name);
+		if(! $gid)
+			return false;
+		if(! ( $uid && $gid && $member))
+			return false;
+		$r = q("DELETE FROM group_member WHERE uid = %d AND gid = %d AND xchan = '%s' ",
+			intval($uid),
+			intval($gid),
+			dbesc($member)
+		);
+
+		Libsync::build_sync_packet($uid,null,true);
+
+		return $r;
+	}
+
+
+	static function member_add($uid,$name,$member,$gid = 0) {
+		if(! $gid)
+			$gid = self::byname($uid,$name);
+		if((! $gid) || (! $uid) || (! $member))
+			return false;
+
+		$r = q("SELECT * FROM group_member WHERE uid = %d AND gid = %d AND xchan = '%s' LIMIT 1",	
+			intval($uid),
+			intval($gid),
+			dbesc($member)
+		);
+		if($r)
+			return true;	// You might question this, but 
+				// we indicate success because the group member was in fact created
+				// -- It was just created at another time
+	 	if(! $r)
+			$r = q("INSERT INTO group_member (uid, gid, xchan)
+				VALUES( %d, %d, '%s' ) ",
+				intval($uid),
+				intval($gid),
+				dbesc($member)
+		);
+
+		Libsync::build_sync_packet($uid,null,true);
+
+		return $r;
+	}
+
+
+	static function members($gid) {
+		$ret = array();
+		if(intval($gid)) {
+			$r = q("SELECT * FROM group_member 
+				LEFT JOIN abook ON abook_xchan = group_member.xchan left join xchan on xchan_hash = abook_xchan
+				WHERE gid = %d AND abook_channel = %d and group_member.uid = %d and xchan_deleted = 0 and abook_self = 0 and abook_blocked = 0 and abook_pending = 0 ORDER BY xchan_name ASC ",
+				intval($gid),
+				intval(local_channel()),
+				intval(local_channel())
+			);
+			if($r)
+				$ret = $r;
+		}
+		return $ret;
+	}
+
+	static function members_xchan($gid) {
+		$ret = [];
+		if(intval($gid)) {
+			$r = q("SELECT xchan FROM group_member WHERE gid = %d AND uid = %d",
+				intval($gid),
+				intval(local_channel())
+			);
+			if($r) {
+				foreach($r as $rr) {
+					$ret[] = $rr['xchan'];
+				}
+			}
+		}
+		return $ret;
+	}
+
+	static function members_profile_xchan($uid,$gid) {
+		$ret = [];
+
+		if(intval($gid)) {
+			$r = q("SELECT abook_xchan as xchan from abook left join profile on abook_profile = profile_guid where profile.id = %d and profile.uid = %d",
+				intval($gid),
+				intval($uid)
+			);
+			if($r) {
+				foreach($r as $rr) {
+					$ret[] = $rr['xchan'];
+				}
+			}
+		}
+		return $ret;
+	}
+
+
+
+
+	static function select($uid,$group = '') {
+	
+		$grps = [];
+		$o = '';
+
+		$r = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
+			intval($uid)
+		);
+		$grps[] = array('name' => '', 'hash' => '0', 'selected' => '');
+		if($r) {
+			foreach($r as $rr) {
+				$grps[] = array('name' => $rr['gname'], 'id' => $rr['hash'], 'selected' => (($group == $rr['hash']) ? 'true' : ''));
+			}
+
+		}
+		logger('select: ' . print_r($grps,true), LOGGER_DATA);
+
+		$o = replace_macros(get_markup_template('group_selection.tpl'), array(
+			'$label' => t('Add new connections to this privacy group'),
+			'$groups' => $grps 
+		));
+		return $o;
+	}
+
+
+
+
+	static function widget($every="connections",$each="group",$edit = false, $group_id = 0, $cid = '',$mode = 1) {
+
+		$o = '';
+
+		if(! (local_channel() && feature_enabled(local_channel(),'groups'))) {
+			return '';
+		}
+
+		$groups = array();
+
+		$r = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC",
+			intval($_SESSION['uid'])
+		);
+		$member_of = array();
+		if($cid) {
+			$member_of = self::containing(local_channel(),$cid);
+		} 
+
+		if($r) {
+			foreach($r as $rr) {
+				$selected = (($group_id == $rr['id']) ? ' group-selected' : '');
+			
+				if ($edit) {
+					$groupedit = [ 'href' => "group/".$rr['id'], 'title' => t('edit') ];
+				} 
+				else {
+					$groupedit = null;
+				}
+			
+				$groups[] = [
+					'id'		=> $rr['id'],
+					'enc_cid'   => base64url_encode($cid),
+					'cid'		=> $cid,
+					'text' 		=> $rr['gname'],
+					'selected' 	=> $selected,
+					'href'		=> (($mode == 0) ? $each.'?f=&gid='.$rr['id'] : $each."/".$rr['id']) . ((x($_GET,'new')) ? '&new=' . $_GET['new'] : '') . ((x($_GET,'order')) ? '&order=' . $_GET['order'] : ''),
+					'edit'		=> $groupedit,
+					'ismember'	=> in_array($rr['id'],$member_of),
+				];
+			}
+		}
+	
+	
+		$tpl = get_markup_template("group_side.tpl");
+		$o = replace_macros($tpl, array(
+			'$title'		=> t('Privacy Groups'),
+			'$edittext'     => t('Edit group'),
+			'$createtext' 	=> t('Add privacy group'),
+			'$ungrouped'    => (($every === 'contacts') ? t('Channels not in any privacy group') : ''),
+			'$groups'		=> $groups,
+			'$add'			=> t('add'),
+		));
+		
+	
+		return $o;
+	}
+
+
+	static function expand($g) {
+		if(! (is_array($g) && count($g)))
+			return array();
+
+		$ret = [];
+		$x   = [];
+
+		// private profile linked virtual groups
+
+		foreach($g as $gv) {
+			if(substr($gv,0,3) === 'vp.') {
+				$profile_hash = substr($gv,3);
+				if($profile_hash) {
+					$r = q("select abook_xchan from abook where abook_profile = '%s'",
+						dbesc($profile_hash)
+					);
+					if($r) {
+						foreach($r as $rv) {
+							$ret[] = $rv['abook_xchan'];
+						}
+					}
+				}
+			}
+			else {
+				$x[] = $gv;
+			}
+		}								 
+
+		if($x) {
+			stringify_array_elms($x,true);
+			$groups = implode(',', $x);
+			if($groups) {
+				$r = q("SELECT xchan FROM group_member WHERE gid IN ( select id from groups where hash in ( $groups ))");
+				if($r) {
+					foreach($r as $rr) {
+						$ret[] = $rr['xchan'];
+					}
+				}
+			}
+		}
+		return $ret;
+	}
+
+
+	static function member_of($c) {
+		$r = q("SELECT groups.gname, groups.id FROM groups LEFT JOIN group_member ON group_member.gid = groups.id WHERE group_member.xchan = '%s' AND groups.deleted = 0 ORDER BY groups.gname  ASC ",
+			dbesc($c)
+		);
+
+		return $r;
+
+	}
+
+	static function containing($uid,$c) {
+
+		$r = q("SELECT gid FROM group_member WHERE uid = %d AND group_member.xchan = '%s' ",
+			intval($uid),
+			dbesc($c)
+		);
+
+		$ret = array();
+		if($r) {
+			foreach($r as $rr)
+				$ret[] = $rr['gid'];
+		}
+	
+		return $ret;
+	}
+}
\ No newline at end of file
diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php
new file mode 100644
index 000000000..938d484b7
--- /dev/null
+++ b/Zotlabs/Lib/Libsync.php
@@ -0,0 +1,1019 @@
+ $channel['channel_address'], 'url' => z_root() ];
+
+		if(array_key_exists($uid,\App::$config) && array_key_exists('transient',\App::$config[$uid])) {
+			$settings = \App::$config[$uid]['transient'];
+			if($settings) {
+				$info['config'] = $settings;
+			}
+		}
+
+		if($channel) {
+			$info['channel'] = array();
+			foreach($channel as $k => $v) {
+
+				// filter out any joined tables like xchan
+
+				if(strpos($k,'channel_') !== 0)
+					continue;
+
+				// don't pass these elements, they should not be synchronised
+
+
+				$disallowed = [
+					'channel_id','channel_account_id','channel_primary','channel_address',
+					'channel_deleted','channel_removed','channel_system'
+				];
+
+				if(! $keychange) {
+					$disallowed[] = 'channel_prvkey';
+				}
+
+				if(in_array($k,$disallowed))
+					continue;
+
+				$info['channel'][$k] = $v;
+			}
+		}
+
+		if($groups_changed) {
+			$r = q("select hash as collection, visible, deleted, gname as name from groups where uid = %d",
+				intval($uid)
+			);
+			if($r)
+				$info['collections'] = $r;
+
+			$r = q("select groups.hash as collection, group_member.xchan as member from groups left join group_member on groups.id = group_member.gid where group_member.uid = %d",
+				intval($uid)
+			);
+			if($r)
+				$info['collection_members'] = $r;
+		}
+
+		$interval = ((get_config('system','delivery_interval') !== false)
+			? intval(get_config('system','delivery_interval')) : 2 );
+
+		logger('Packet: ' . print_r($info,true), LOGGER_DATA, LOG_DEBUG);
+
+		$total = count($synchubs);
+
+		foreach($synchubs as $hub) {
+			$hash = random_string();
+			$n = Libzot::build_packet($channel,'sync',$env_recips,json_encode($info),'red',$hub['hubloc_sitekey'],$hub['site_crypto']);
+			Queue::insert(array(
+				'hash'       => $hash,
+				'account_id' => $channel['channel_account_id'],
+				'channel_id' => $channel['channel_id'],
+				'posturl'    => $hub['hubloc_callback'],
+				'notify'     => $n,
+				'msg'        => EMPTY_STR
+			));
+
+
+			$x = q("select count(outq_hash) as total from outq where outq_delivered = 0");
+			if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',3000))) {
+				logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO);
+				Queue::update($hash);
+				continue;
+			}
+
+
+			\Zotlabs\Daemon\Master::Summon(array('Deliver', $hash));
+			$total = $total - 1;
+
+			if($interval && $total)
+				@time_sleep_until(microtime(true) + (float) $interval);
+		}
+	}
+
+	/**
+	 * @brief
+	 *
+	 * @param array $sender
+	 * @param array $arr
+	 * @param array $deliveries
+	 * @return array
+	 */
+
+	static function process_channel_sync_delivery($sender, $arr, $deliveries) {
+
+		require_once('include/import.php');
+
+		$result = [];
+
+		$keychange = ((array_key_exists('keychange',$arr)) ? true : false);
+
+		foreach ($deliveries as $d) {
+			$r = q("select * from channel where channel_hash = '%s' limit 1",
+				dbesc($sender)
+			);
+
+			$DR = new \Zotlabs\Lib\DReport(z_root(),$sender,$d,'sync');
+
+			if (! $r) {
+				$DR->update('recipient not found');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			$channel = $r[0];
+
+			$DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>');
+
+			$max_friends = service_class_fetch($channel['channel_id'],'total_channels');
+			$max_feeds = account_service_class_fetch($channel['channel_account_id'],'total_feeds');
+
+			if($channel['channel_hash'] != $sender) {
+				logger('Possible forgery. Sender ' . $sender . ' is not ' . $channel['channel_hash']);
+				$DR->update('channel mismatch');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			if($keychange) {
+				self::keychange($channel,$arr);
+				continue;
+			}
+
+			// if the clone is active, so are we
+
+			if(substr($channel['channel_active'],0,10) !== substr(datetime_convert(),0,10)) {
+				q("UPDATE channel set channel_active = '%s' where channel_id = %d",
+					dbesc(datetime_convert()),
+					intval($channel['channel_id'])
+				);
+			}
+
+			if(array_key_exists('config',$arr) && is_array($arr['config']) && count($arr['config'])) {
+				foreach($arr['config'] as $cat => $k) {
+					foreach($arr['config'][$cat] as $k => $v)
+						set_pconfig($channel['channel_id'],$cat,$k,$v);
+				}
+			}
+
+			if(array_key_exists('obj',$arr) && $arr['obj'])
+				sync_objs($channel,$arr['obj']);
+
+			if(array_key_exists('likes',$arr) && $arr['likes'])
+				import_likes($channel,$arr['likes']);
+
+			if(array_key_exists('app',$arr) && $arr['app'])
+				sync_apps($channel,$arr['app']);
+	
+			if(array_key_exists('chatroom',$arr) && $arr['chatroom'])
+				sync_chatrooms($channel,$arr['chatroom']);
+
+			if(array_key_exists('conv',$arr) && $arr['conv'])
+				import_conv($channel,$arr['conv']);
+
+			if(array_key_exists('mail',$arr) && $arr['mail'])
+				sync_mail($channel,$arr['mail']);
+	
+			if(array_key_exists('event',$arr) && $arr['event'])
+				sync_events($channel,$arr['event']);
+
+			if(array_key_exists('event_item',$arr) && $arr['event_item'])
+				sync_items($channel,$arr['event_item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null));
+
+			if(array_key_exists('item',$arr) && $arr['item'])
+				sync_items($channel,$arr['item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null));
+	
+			// deprecated, maintaining for a few months for upward compatibility
+			// this should sync webpages, but the logic is a bit subtle
+
+			if(array_key_exists('item_id',$arr) && $arr['item_id'])
+				sync_items($channel,$arr['item_id']);
+
+			if(array_key_exists('menu',$arr) && $arr['menu'])
+				sync_menus($channel,$arr['menu']);
+	
+			if(array_key_exists('file',$arr) && $arr['file'])
+				sync_files($channel,$arr['file']);
+
+			if(array_key_exists('wiki',$arr) && $arr['wiki'])
+				sync_items($channel,$arr['wiki'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null));
+
+			if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) {
+
+				$remote_channel = $arr['channel'];
+				$remote_channel['channel_id'] = $channel['channel_id'];
+
+				if(array_key_exists('channel_pageflags',$arr['channel']) && intval($arr['channel']['channel_pageflags'])) {
+
+					// Several pageflags are site-specific and cannot be sync'd.
+					// Only allow those bits which are shareable from the remote and then 
+					// logically OR with the local flags
+
+					$arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] & (PAGE_HIDDEN|PAGE_AUTOCONNECT|PAGE_APPLICATION|PAGE_PREMIUM|PAGE_ADULT);
+					$arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] | $channel['channel_pageflags'];
+
+				}
+
+				$disallowed = [
+					'channel_id',        'channel_account_id',  'channel_primary',   'channel_prvkey',
+					'channel_address',   'channel_notifyflags', 'channel_removed',   'channel_deleted',
+					'channel_system',    'channel_r_stream',    'channel_r_profile', 'channel_r_abook',
+					'channel_r_storage', 'channel_r_pages',     'channel_w_stream',  'channel_w_wall',
+					'channel_w_comment', 'channel_w_mail',      'channel_w_like',    'channel_w_tagwall',
+					'channel_w_chat',    'channel_w_storage',   'channel_w_pages',   'channel_a_republish',
+					'channel_a_delegate'
+				];
+
+				$clean = array();
+				foreach($arr['channel'] as $k => $v) {
+					if(in_array($k,$disallowed))
+						continue;
+					$clean[$k] = $v;
+				}
+				if(count($clean)) {
+					foreach($clean as $k => $v) {
+						$r = dbq("UPDATE channel set " . dbesc($k) . " = '" . dbesc($v)
+							. "' where channel_id = " . intval($channel['channel_id']) );
+					}
+				}
+			}
+
+			if(array_key_exists('abook',$arr) && is_array($arr['abook']) && count($arr['abook'])) {
+				$total_friends = 0;
+				$total_feeds = 0;
+
+				$r = q("select abook_id, abook_feed from abook where abook_channel = %d",
+					intval($channel['channel_id'])
+				);
+				if($r) {
+					// don't count yourself
+					$total_friends = ((count($r) > 0) ? count($r) - 1 : 0);
+					foreach($r as $rr)
+						if(intval($rr['abook_feed']))
+							$total_feeds ++;
+				}
+
+
+				$disallowed = array('abook_id','abook_account','abook_channel','abook_rating','abook_rating_text','abook_not_here');
+
+				$fields = db_columns($abook);
+
+				foreach($arr['abook'] as $abook) {
+
+					$abconfig = null;
+
+					if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig']))
+						$abconfig = $abook['abconfig'];
+
+					if(! array_key_exists('abook_blocked',$abook)) {
+						// convert from redmatrix
+						$abook['abook_blocked']     = (($abook['abook_flags'] & 0x0001) ? 1 : 0);
+						$abook['abook_ignored']     = (($abook['abook_flags'] & 0x0002) ? 1 : 0);
+						$abook['abook_hidden']      = (($abook['abook_flags'] & 0x0004) ? 1 : 0);
+						$abook['abook_archived']    = (($abook['abook_flags'] & 0x0008) ? 1 : 0);
+						$abook['abook_pending']     = (($abook['abook_flags'] & 0x0010) ? 1 : 0);
+						$abook['abook_unconnected'] = (($abook['abook_flags'] & 0x0020) ? 1 : 0);
+						$abook['abook_self']        = (($abook['abook_flags'] & 0x0080) ? 1 : 0);
+						$abook['abook_feed']        = (($abook['abook_flags'] & 0x0100) ? 1 : 0);
+					}
+
+					$clean = array();
+					if($abook['abook_xchan'] && $abook['entry_deleted']) {
+						logger('Removing abook entry for ' . $abook['abook_xchan']);
+
+						$r = q("select abook_id, abook_feed from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1",
+							dbesc($abook['abook_xchan']),
+							intval($channel['channel_id'])
+						);
+						if($r) {
+							contact_remove($channel['channel_id'],$r[0]['abook_id']);
+							if($total_friends)
+								$total_friends --;
+							if(intval($r[0]['abook_feed']))
+								$total_feeds --;
+						}
+						continue;
+					}
+
+					// Perform discovery if the referenced xchan hasn't ever been seen on this hub.
+					// This relies on the undocumented behaviour that red sites send xchan info with the abook
+					// and import_author_xchan will look them up on all federated networks
+
+					if($abook['abook_xchan'] && $abook['xchan_addr']) {
+						$h = Libzot::get_hublocs($abook['abook_xchan']);
+						if(! $h) {
+							$xhash = import_author_xchan(encode_item_xchan($abook));
+							if(! $xhash) {
+								logger('Import of ' . $abook['xchan_addr'] . ' failed.');
+								continue;
+							}
+						}
+					}
+
+					foreach($abook as $k => $v) {
+						if(in_array($k,$disallowed) || (strpos($k,'abook') !== 0)) {
+							continue;
+						}
+						if(! in_array($k,$fields)) {
+							continue;
+						}
+						$clean[$k] = $v;
+					}
+
+					if(! array_key_exists('abook_xchan',$clean))
+						continue;
+
+					if(array_key_exists('abook_instance',$clean) && $clean['abook_instance'] && strpos($clean['abook_instance'],z_root()) === false) {
+						$clean['abook_not_here'] = 1;
+					}
+
+
+					$r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
+						dbesc($clean['abook_xchan']),
+						intval($channel['channel_id'])
+					);
+
+					// make sure we have an abook entry for this xchan on this system
+
+					if(! $r) {
+						if($max_friends !== false && $total_friends > $max_friends) {
+							logger('total_channels service class limit exceeded');
+							continue;
+						}
+						if($max_feeds !== false && intval($clean['abook_feed']) && $total_feeds > $max_feeds) {
+							logger('total_feeds service class limit exceeded');
+							continue;
+						}
+						abook_store_lowlevel(
+							[
+								'abook_xchan'   => $clean['abook_xchan'],
+								'abook_account' => $channel['channel_account_id'],
+								'abook_channel' => $channel['channel_id']
+							]
+						);
+						$total_friends ++;
+						if(intval($clean['abook_feed']))
+							$total_feeds ++;
+					}
+
+					if(count($clean)) {
+						foreach($clean as $k => $v) {
+							if($k == 'abook_dob')
+								$v = dbescdate($v);
+
+							$r = dbq("UPDATE abook set " . dbesc($k) . " = '" . dbesc($v)
+							. "' where abook_xchan = '" . dbesc($clean['abook_xchan']) . "' and abook_channel = " . intval($channel['channel_id']));
+						}
+					}
+
+					// This will set abconfig vars if the sender is using old-style fixed permissions
+					// using the raw abook record as passed to us. New-style permissions will fall through
+					// and be set using abconfig
+
+					// translate_abook_perms_inbound($channel,$abook);
+
+					if($abconfig) {
+						/// @fixme does not handle sync of del_abconfig
+						foreach($abconfig as $abc) {
+							set_abconfig($channel['channel_id'],$abc['xchan'],$abc['cat'],$abc['k'],$abc['v']);
+						}
+					}
+				}
+			}
+
+			// sync collections (privacy groups) oh joy...
+
+			if(array_key_exists('collections',$arr) && is_array($arr['collections']) && count($arr['collections'])) {
+				$x = q("select * from groups where uid = %d",
+					intval($channel['channel_id'])
+				);
+				foreach($arr['collections'] as $cl) {
+					$found = false;
+					if($x) {
+						foreach($x as $y) {
+							if($cl['collection'] == $y['hash']) {
+								$found = true;
+								break;
+							}
+						}
+						if($found) {
+							if(($y['gname'] != $cl['name'])
+								|| ($y['visible'] != $cl['visible'])
+								|| ($y['deleted'] != $cl['deleted'])) {
+								q("update groups set gname = '%s', visible = %d, deleted = %d where hash = '%s' and uid = %d",
+									dbesc($cl['name']),
+									intval($cl['visible']),
+									intval($cl['deleted']),
+									dbesc($cl['collection']),
+									intval($channel['channel_id'])
+								);
+							}
+							if(intval($cl['deleted']) && (! intval($y['deleted']))) {
+								q("delete from group_member where gid = %d",
+									intval($y['id'])
+								);
+							}
+						}
+					}
+					if(! $found) {
+						$r = q("INSERT INTO groups ( hash, uid, visible, deleted, gname )
+							VALUES( '%s', %d, %d, %d, '%s' ) ",
+							dbesc($cl['collection']),
+							intval($channel['channel_id']),
+							intval($cl['visible']),
+							intval($cl['deleted']),
+							dbesc($cl['name'])
+						);
+					}
+
+					// now look for any collections locally which weren't in the list we just received.
+					// They need to be removed by marking deleted and removing the members.
+					// This shouldn't happen except for clones created before this function was written.
+
+					if($x) {
+						$found_local = false;
+						foreach($x as $y) {
+							foreach($arr['collections'] as $cl) {
+								if($cl['collection'] == $y['hash']) {
+									$found_local = true;
+									break;
+								}
+							}
+							if(! $found_local) {
+								q("delete from group_member where gid = %d",
+									intval($y['id'])
+								);
+								q("update groups set deleted = 1 where id = %d and uid = %d",
+									intval($y['id']),
+									intval($channel['channel_id'])
+								);
+							}
+						}
+					}
+				}
+
+				// reload the group list with any updates
+				$x = q("select * from groups where uid = %d",
+					intval($channel['channel_id'])
+				);
+
+				// now sync the members
+
+				if(array_key_exists('collection_members', $arr)
+					&& is_array($arr['collection_members'])
+					&& count($arr['collection_members'])) {
+
+					// first sort into groups keyed by the group hash
+					$members = array();
+					foreach($arr['collection_members'] as $cm) {
+						if(! array_key_exists($cm['collection'],$members))
+							$members[$cm['collection']] = array();
+
+						$members[$cm['collection']][] = $cm['member'];
+					}
+
+					// our group list is already synchronised
+					if($x) {
+						foreach($x as $y) {
+	
+							// for each group, loop on members list we just received
+							if(isset($y['hash']) && isset($members[$y['hash']])) {
+								foreach($members[$y['hash']] as $member) {
+									$found = false;
+									$z = q("select xchan from group_member where gid = %d and uid = %d and xchan = '%s' limit 1",
+										intval($y['id']),
+										intval($channel['channel_id']),
+										dbesc($member)
+									);
+									if($z)
+										$found = true;
+	
+									// if somebody is in the group that wasn't before - add them
+	
+									if(! $found) {
+										q("INSERT INTO group_member (uid, gid, xchan)
+											VALUES( %d, %d, '%s' ) ",
+											intval($channel['channel_id']),
+											intval($y['id']),
+											dbesc($member)
+										);
+									}
+								}
+							}
+	
+							// now retrieve a list of members we have on this site
+							$m = q("select xchan from group_member where gid = %d and uid = %d",
+								intval($y['id']),
+								intval($channel['channel_id'])
+							);
+							if($m) {
+								foreach($m as $mm) {
+									// if the local existing member isn't in the list we just received - remove them
+									if(! in_array($mm['xchan'],$members[$y['hash']])) {
+										q("delete from group_member where xchan = '%s' and gid = %d and uid = %d",
+											dbesc($mm['xchan']),
+											intval($y['id']),
+											intval($channel['channel_id'])
+										);
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+
+			if(array_key_exists('profile',$arr) && is_array($arr['profile']) && count($arr['profile'])) {
+
+				$disallowed = array('id','aid','uid','guid');
+
+				foreach($arr['profile'] as $profile) {
+	
+					$x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1",
+						dbesc($profile['profile_guid']),
+						intval($channel['channel_id'])
+					);
+					if(! $x) {
+						profile_store_lowlevel(
+							[
+								'aid'          => $channel['channel_account_id'],
+								'uid'          => $channel['channel_id'],
+								'profile_guid' => $profile['profile_guid'],
+							]
+						);
+	
+						$x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1",
+							dbesc($profile['profile_guid']),
+							intval($channel['channel_id'])
+						);
+						if(! $x)
+							continue;
+					}
+					$clean = array();
+					foreach($profile as $k => $v) {
+						if(in_array($k,$disallowed))
+							continue;
+
+						if($profile['is_default'] && in_array($k,['photo','thumb']))
+							continue;
+
+						if($k === 'name')
+							$clean['fullname'] = $v;
+						elseif($k === 'with')
+							$clean['partner'] = $v;
+						elseif($k === 'work')
+							$clean['employment'] = $v;
+						elseif(array_key_exists($k,$x[0]))
+							$clean[$k] = $v;
+
+						/**
+						 * @TODO
+						 * We also need to import local photos if a custom photo is selected
+						 */
+
+						if((strpos($profile['thumb'],'/photo/profile/l/') !== false) || intval($profile['is_default'])) {
+							$profile['photo'] = z_root() . '/photo/profile/l/' . $channel['channel_id'];
+							$profile['thumb'] = z_root() . '/photo/profile/m/' . $channel['channel_id'];
+						}
+						else {
+							$profile['photo'] = z_root() . '/photo/' . basename($profile['photo']);
+							$profile['thumb'] = z_root() . '/photo/' . basename($profile['thumb']);
+						}
+					}
+
+					if(count($clean)) {
+						foreach($clean as $k => $v) {
+							$r = dbq("UPDATE profile set " . TQUOT . dbesc($k) . TQUOT . " = '" . dbesc($v)
+							. "' where profile_guid = '" . dbesc($profile['profile_guid'])
+							. "' and uid = " . intval($channel['channel_id']));
+						}
+					}
+				}
+			}
+
+			$addon = ['channel' => $channel, 'data' => $arr];
+			/**
+			 * @hooks process_channel_sync_delivery
+			 *   Called when accepting delivery of a 'sync packet' containing structure and table updates from a channel clone.
+			 *   * \e array \b channel
+			 *   * \e array \b data
+			 */
+			call_hooks('process_channel_sync_delivery', $addon);
+
+			$DR = new \Zotlabs\Lib\DReport(z_root(),$d,$d,'sync','channel sync delivered');
+
+			$DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>');
+
+			$result[] = $DR->get();
+		}
+
+		return $result;
+	}
+
+	/**
+	 * @brief Synchronises locations.
+	 *
+	 * @param array $sender
+	 * @param array $arr
+	 * @param boolean $absolute (optional) default false
+	 * @return array
+	 */
+
+	static function sync_locations($sender, $arr, $absolute = false) {
+
+		$ret = array();
+
+		if($arr['locations']) {
+
+			if($absolute)
+				self::check_location_move($sender['hash'],$arr['locations']);
+
+			$xisting = q("select * from hubloc where hubloc_hash = '%s'",
+				dbesc($sender['hash'])
+			);
+
+			// See if a primary is specified
+
+			$has_primary = false;
+			foreach($arr['locations'] as $location) {
+				if($location['primary']) {
+					$has_primary = true;
+					break;
+				}
+			}
+
+			// Ensure that they have one primary hub
+
+			if(! $has_primary)
+				$arr['locations'][0]['primary'] = true;
+
+			foreach($arr['locations'] as $location) {
+				if(! Libzot::verify($location['url'],$location['url_sig'],$sender['public_key'])) {
+					logger('Unable to verify site signature for ' . $location['url']);
+					$ret['message'] .= sprintf( t('Unable to verify site signature for %s'), $location['url']) . EOL;
+					continue;
+				}
+
+				for($x = 0; $x < count($xisting); $x ++) {
+					if(($xisting[$x]['hubloc_url'] === $location['url'])
+						&& ($xisting[$x]['hubloc_sitekey'] === $location['sitekey'])) {
+						$xisting[$x]['updated'] = true;
+					}
+				}
+
+				if(! $location['sitekey']) {
+					logger('Empty hubloc sitekey. ' . print_r($location,true));
+					continue;
+				}
+
+				// Catch some malformed entries from the past which still exist
+
+				if(strpos($location['address'],'/') !== false)
+					$location['address'] = substr($location['address'],0,strpos($location['address'],'/'));
+
+				// match as many fields as possible in case anything at all changed.
+
+				$r = q("select * from hubloc where hubloc_hash = '%s' and hubloc_guid = '%s' and hubloc_guid_sig = '%s' and hubloc_id_url = '%s' and hubloc_url = '%s' and hubloc_url_sig = '%s' and hubloc_site_id = '%s' and hubloc_host = '%s' and hubloc_addr = '%s' and hubloc_callback = '%s' and hubloc_sitekey = '%s' ",
+					dbesc($sender['hash']),
+					dbesc($sender['id']),
+					dbesc($sender['id_sig']),
+					dbesc($location['id_url']),
+					dbesc($location['url']),
+					dbesc($location['url_sig']),
+					dbesc($location['site_id']),
+					dbesc($location['host']),
+					dbesc($location['address']),
+					dbesc($location['callback']),
+					dbesc($location['sitekey'])
+				);
+				if($r) {
+					logger('Hub exists: ' . $location['url'], LOGGER_DEBUG);
+	
+					// update connection timestamp if this is the site we're talking to
+					// This only happens when called from import_xchan
+
+					$current_site = false;
+
+					$t = datetime_convert('UTC','UTC','now - 15 minutes');
+	
+					if(array_key_exists('site',$arr) && $location['url'] == $arr['site']['url']) {
+						q("update hubloc set hubloc_connected = '%s', hubloc_updated = '%s' where hubloc_id = %d and hubloc_connected < '%s'",
+							dbesc(datetime_convert()),
+							dbesc(datetime_convert()),
+							intval($r[0]['hubloc_id']),
+							dbesc($t)
+						);
+						$current_site = true;
+					}
+
+					if($current_site && intval($r[0]['hubloc_error'])) {
+						q("update hubloc set hubloc_error = 0 where hubloc_id = %d",
+							intval($r[0]['hubloc_id'])
+						);
+						if(intval($r[0]['hubloc_orphancheck'])) {
+							q("update hubloc set hubloc_orphancheck = 0 where hubloc_id = %d",
+								intval($r[0]['hubloc_id'])
+							);
+						}
+						q("update xchan set xchan_orphan = 0 where xchan_orphan = 1 and xchan_hash = '%s'",
+							dbesc($sender['hash'])
+						);
+					}
+
+					// Remove pure duplicates
+					if(count($r) > 1) {
+						for($h = 1; $h < count($r); $h ++) {
+							q("delete from hubloc where hubloc_id = %d",
+								intval($r[$h]['hubloc_id'])
+							);
+							$what .= 'duplicate_hubloc_removed ';
+							$changed = true;
+						}
+					}
+
+					if(intval($r[0]['hubloc_primary']) && (! $location['primary'])) {
+						$m = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_id = %d",
+							dbesc(datetime_convert()),
+							intval($r[0]['hubloc_id'])
+						);
+						$r[0]['hubloc_primary'] = intval($location['primary']);
+						hubloc_change_primary($r[0]);
+						$what .= 'primary_hub ';
+						$changed = true;
+					}
+					elseif((! intval($r[0]['hubloc_primary'])) && ($location['primary'])) {
+						$m = q("update hubloc set hubloc_primary = 1, hubloc_updated = '%s' where hubloc_id = %d",
+							dbesc(datetime_convert()),
+							intval($r[0]['hubloc_id'])
+						);
+						// make sure hubloc_change_primary() has current data
+						$r[0]['hubloc_primary'] = intval($location['primary']);
+						hubloc_change_primary($r[0]);
+						$what .= 'primary_hub ';
+						$changed = true;
+					}
+					elseif($absolute) {
+						// Absolute sync - make sure the current primary is correctly reflected in the xchan
+						$pr = hubloc_change_primary($r[0]);
+						if($pr) {
+							$what .= 'xchan_primary ';
+							$changed = true;
+						}
+					}
+					if(intval($r[0]['hubloc_deleted']) && (! intval($location['deleted']))) {
+						$n = q("update hubloc set hubloc_deleted = 0, hubloc_updated = '%s' where hubloc_id = %d",
+							dbesc(datetime_convert()),
+							intval($r[0]['hubloc_id'])
+						);
+						$what .= 'undelete_hub ';
+						$changed = true;
+					}
+					elseif((! intval($r[0]['hubloc_deleted'])) && (intval($location['deleted']))) {
+						logger('deleting hubloc: ' . $r[0]['hubloc_addr']);
+						$n = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id = %d",
+							dbesc(datetime_convert()),
+							intval($r[0]['hubloc_id'])
+						);
+						$what .= 'delete_hub ';
+						$changed = true;
+					}
+					continue;
+				}
+
+				// Existing hubs are dealt with. Now let's process any new ones.
+				// New hub claiming to be primary. Make it so by removing any existing primaries.
+
+				if(intval($location['primary'])) {
+					$r = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_hash = '%s' and hubloc_primary = 1",
+						dbesc(datetime_convert()),
+						dbesc($sender['hash'])
+					);
+				}
+
+				logger('New hub: ' . $location['url']);
+
+				$r = hubloc_store_lowlevel(
+					[
+						'hubloc_guid'      => $sender['id'],
+						'hubloc_guid_sig'  => $sender['id_sig'],
+						'hubloc_id_url'    => $location['id_url'],
+						'hubloc_hash'      => $sender['hash'],
+						'hubloc_addr'      => $location['address'],
+						'hubloc_network'   => 'zot6',
+						'hubloc_primary'   => intval($location['primary']),
+						'hubloc_url'       => $location['url'],
+						'hubloc_url_sig'   => $location['url_sig'],
+						'hubloc_site_id'   => Libzot::make_xchan_hash($location['url'],$location['sitekey']),
+						'hubloc_host'      => $location['host'],
+						'hubloc_callback'  => $location['callback'],
+						'hubloc_sitekey'   => $location['sitekey'],
+						'hubloc_updated'   => datetime_convert(),
+						'hubloc_connected' => datetime_convert()
+					]
+				);
+
+				$what .= 'newhub ';
+				$changed = true;
+
+				if($location['primary']) {
+					$r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_sitekey = '%s' limit 1",
+						dbesc($location['address']),
+						dbesc($location['sitekey'])
+					);
+					if($r)
+						hubloc_change_primary($r[0]);
+				}
+			}
+
+			// get rid of any hubs we have for this channel which weren't reported.
+
+			if($absolute && $xisting) {
+				foreach($xisting as $x) {
+					if(! array_key_exists('updated',$x)) {
+						logger('Deleting unreferenced hub location ' . $x['hubloc_addr']);
+						$r = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id = %d",
+							dbesc(datetime_convert()),
+							intval($x['hubloc_id'])
+						);
+						$what .= 'removed_hub ';
+						$changed = true;
+					}
+				}
+			}
+		}
+		else {
+			logger('No locations to sync!');
+		}
+
+		$ret['change_message'] = $what;
+		$ret['changed'] = $changed;
+
+		return $ret;
+	}
+
+
+	static function keychange($channel,$arr) {
+
+		// verify the keychange operation
+		if(! Libzot::verify($arr['channel']['channel_pubkey'],$arr['keychange']['new_sig'],$channel['channel_prvkey'])) {
+			logger('sync keychange: verification failed');
+			return;
+		}
+
+		$sig = Libzot::sign($channel['channel_guid'],$arr['channel']['channel_prvkey']);
+		$hash = Libzot::make_xchan_hash($channel['channel_guid'],$arr['channel']['channel_pubkey']);
+
+
+		$r = q("update channel set channel_prvkey = '%s', channel_pubkey = '%s', channel_guid_sig = '%s',
+			channel_hash = '%s' where channel_id = %d",
+			dbesc($arr['channel']['channel_prvkey']),
+			dbesc($arr['channel']['channel_pubkey']),
+			dbesc($sig),
+			dbesc($hash),
+			intval($channel['channel_id'])
+		);
+		if(! $r) {
+			logger('keychange sync: channel update failed');
+			return;
+ 		}
+
+		$r = q("select * from channel where channel_id = %d",
+			intval($channel['channel_id'])
+		);
+
+		if(! $r) {
+			logger('keychange sync: channel retrieve failed');
+			return;
+		}
+
+		$channel = $r[0];
+
+		$h = q("select * from hubloc where hubloc_hash = '%s' and hubloc_url = '%s' ",
+			dbesc($arr['keychange']['old_hash']),
+			dbesc(z_root())
+		);
+
+		if($h) {
+			foreach($h as $hv) {
+				$hv['hubloc_guid_sig'] = $sig;
+				$hv['hubloc_hash']     = $hash;
+				$hv['hubloc_url_sig']  = Libzot::sign(z_root(),$channel['channel_prvkey']);
+				hubloc_store_lowlevel($hv);
+			}
+		}
+
+		$x = q("select * from xchan where xchan_hash = '%s' ",
+			dbesc($arr['keychange']['old_hash'])
+		);
+
+		$check = q("select * from xchan where xchan_hash = '%s'",
+			dbesc($hash)
+		);
+
+		if(($x) && (! $check)) {
+			$oldxchan = $x[0];
+			foreach($x as $xv) {
+				$xv['xchan_guid_sig']  = $sig;
+				$xv['xchan_hash']      = $hash;
+				$xv['xchan_pubkey']    = $channel['channel_pubkey'];
+				xchan_store_lowlevel($xv);
+				$newxchan = $xv;
+			}
+		}
+
+		$a = q("select * from abook where abook_xchan = '%s' and abook_self = 1",
+			dbesc($arr['keychange']['old_hash'])
+		);
+
+		if($a) {
+			q("update abook set abook_xchan = '%s' where abook_id = %d",
+				dbesc($hash),
+				intval($a[0]['abook_id'])
+			);
+		}
+
+		xchan_change_key($oldxchan,$newxchan,$arr['keychange']);
+
+	}
+
+}
\ No newline at end of file
diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php
new file mode 100644
index 000000000..ec9db4ce1
--- /dev/null
+++ b/Zotlabs/Lib/Libzot.php
@@ -0,0 +1,2849 @@
+ $type,
+			'encoding' => $encoding,
+			'sender'   => $channel['channel_hash'],
+			'site_id'  => self::make_xchan_hash(z_root(), get_config('system','pubkey')),
+			'version'  => System::get_zot_revision(),
+		];
+
+		if ($recipients) {
+			$data['recipients'] = $recipients;
+		}
+
+		if ($msg) {
+			$actor = channel_url($channel);
+			if ($encoding === 'activitystreams' && array_key_exists('actor',$msg) && is_string($msg['actor']) && $actor === $msg['actor']) {
+				$msg = JSalmon::sign($msg,$actor,$channel['channel_prvkey']);
+			}
+			$data['data'] = $msg;
+		}
+		else {
+			unset($data['encoding']);
+		}
+
+		logger('packet: ' . print_r($data,true), LOGGER_DATA, LOG_DEBUG);
+
+		if ($remote_key) {
+			$algorithm = self::best_algorithm($methods);
+			if ($algorithm) {
+				$data = crypto_encapsulate(json_encode($data),$remote_key, $algorithm);
+			}
+		}
+
+		return json_encode($data);
+	}
+
+
+	/**
+	 * @brief Choose best encryption function from those available on both sites.
+	 *
+	 * @param string $methods
+	 *   comma separated list of encryption methods
+	 * @return string first match from our site method preferences crypto_methods() array
+	 * of a method which is common to both sites; or 'aes256cbc' if no matches are found.
+	 */
+
+	static function best_algorithm($methods) {
+
+		$x = [
+			'methods' => $methods,
+			'result' => ''
+		];
+
+		/**
+		 * @hooks zot_best_algorithm
+		 *   Called when negotiating crypto algorithms with remote sites.
+		 *   * \e string \b methods - comma separated list of encryption methods
+		 *   * \e string \b result - the algorithm to return
+		 */
+	
+		call_hooks('zot_best_algorithm', $x);
+
+		if($x['result'])
+			return $x['result'];
+
+		if($methods) {
+			$x = explode(',', $methods);
+			if($x) {
+				$y = crypto_methods();
+				if($y) {
+					foreach($y as $yv) {
+						$yv = trim($yv);
+						if(in_array($yv, $x)) {
+							return($yv);
+						}
+					}
+				}
+			}
+		}
+
+		return '';
+	}
+
+
+	/**
+	 * @brief send a zot message
+	 *
+	 * @see z_post_url()
+	 *
+	 * @param string $url
+	 * @param array $data
+	 * @param array $channel (required if using zot6 delivery)
+	 * @param array $crypto (required if encrypted httpsig, requires hubloc_sitekey and site_crypto elements)
+	 * @return array see z_post_url() for returned data format
+	 */
+
+	static function zot($url, $data, $channel = null,$crypto = null) {
+
+		if($channel) {
+			$headers = [ 
+				'X-Zot-Token'  => random_string(), 
+				'Digest'       => HTTPSig::generate_digest_header($data), 
+				'Content-type' => 'application/x-zot+json'
+			];
+
+			$h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false,'sha512', 
+				(($crypto) ? [ 'key' => $crypto['hubloc_sitekey'], 'algorithm' => self::best_algorithm($crypto['site_crypto']) ] : false));
+		}
+		else {
+			$h = [];
+		}
+
+		$redirects = 0;
+
+		return z_post_url($url,$data,$redirects,((empty($h)) ? [] : [ 'headers' => $h ]));
+	}
+
+
+	/**
+	 * @brief Refreshes after permission changed or friending, etc.
+	 *
+	 *
+	 * refresh is typically invoked when somebody has changed permissions of a channel and they are notified
+	 * to fetch new permissions via a finger/discovery operation. This may result in a new connection
+	 * (abook entry) being added to a local channel and it may result in auto-permissions being granted.
+	 *
+	 * Friending in zot is accomplished by sending a refresh packet to a specific channel which indicates a
+	 * permission change has been made by the sender which affects the target channel. The hub controlling
+	 * the target channel does targetted discovery (a zot-finger request requesting permissions for the local
+	 * channel). These are decoded here, and if necessary and abook structure (addressbook) is created to store
+	 * the permissions assigned to this channel.
+	 *
+	 * Initially these abook structures are created with a 'pending' flag, so that no reverse permissions are
+	 * implied until this is approved by the owner channel. A channel can also auto-populate permissions in
+	 * return and send back a refresh packet of its own. This is used by forum and group communication channels
+	 * so that friending and membership in the channel's "club" is automatic.
+	 *
+	 * @param array $them => xchan structure of sender
+	 * @param array $channel => local channel structure of target recipient, required for "friending" operations
+	 * @param array $force (optional) default false
+	 *
+	 * @return boolean
+	 *   * \b true if successful
+	 *   * otherwise \b false
+	 */
+
+	static function refresh($them, $channel = null, $force = false) {
+
+		logger('them: ' . print_r($them,true), LOGGER_DATA, LOG_DEBUG);
+		if ($channel)
+			logger('channel: ' . print_r($channel,true), LOGGER_DATA, LOG_DEBUG);
+
+		$url = null;
+
+		if ($them['hubloc_id_url']) {
+			$url = $them['hubloc_id_url'];
+		}
+		else {
+			$r = null;
+	
+			// if they re-installed the server we could end up with the wrong record - pointing to the old install.
+			// We'll order by reverse id to try and pick off the newest one first and hopefully end up with the
+			// correct hubloc. If this doesn't work we may have to re-write this section to try them all.
+
+			if(array_key_exists('xchan_addr',$them) && $them['xchan_addr']) {
+				$r = q("select hubloc_id_url, hubloc_primary from hubloc where hubloc_addr = '%s' order by hubloc_id desc",
+					dbesc($them['xchan_addr'])
+				);
+			}
+			if(! $r) {
+				$r = q("select hubloc_id_url, hubloc_primary from hubloc where hubloc_hash = '%s' order by hubloc_id desc",
+					dbesc($them['xchan_hash'])
+				);
+			}
+
+			if ($r) {
+				foreach ($r as $rr) {
+					if (intval($rr['hubloc_primary'])) {
+						$url = $rr['hubloc_id_url'];
+						$record = $rr;
+					}
+				}
+				if (! $url) {
+					$url = $r[0]['hubloc_id_url'];
+				}
+			}
+		}
+		if (! $url) {
+			logger('zot_refresh: no url');
+			return false;
+		}
+
+		$s = q("select site_dead from site where site_url = '%s' limit 1",
+			dbesc($url)
+		);
+
+		if($s && intval($s[0]['site_dead']) && (! $force)) {
+			logger('zot_refresh: site ' . $url . ' is marked dead and force flag is not set. Cancelling operation.');
+			return false;
+		}
+
+		$record = Zotfinger::exec($url,$channel);
+
+		// Check the HTTP signature
+
+		$hsig = $record['signature'];
+		if($hsig && $hsig['signer'] === $url && $hsig['header_valid'] === true && $hsig['content_valid'] === true)
+			$hsig_valid = true;
+
+		if(! $hsig_valid) {
+			logger('http signature not valid: ' . print_r($hsig,true));
+			return $result;
+		}
+
+
+		logger('zot-info: ' . print_r($record,true), LOGGER_DATA, LOG_DEBUG);
+
+		$x = self::import_xchan($record['data'], (($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED));
+
+		if(! $x['success'])
+			return false;
+
+		if($channel && $record['data']['permissions']) {
+			$old_read_stream_perm = their_perms_contains($channel['channel_id'],$x['hash'],'view_stream');
+			set_abconfig($channel['channel_id'],$x['hash'],'system','their_perms',$record['data']['permissions']);
+
+			if(array_key_exists('profile',$record['data']) && array_key_exists('next_birthday',$record['data']['profile'])) {
+				$next_birthday = datetime_convert('UTC','UTC',$record['data']['profile']['next_birthday']);
+			}
+			else {
+				$next_birthday = NULL_DATE;
+			}
+
+			$profile_assign = get_pconfig($channel['channel_id'],'system','profile_assign','');
+
+			// Keep original perms to check if we need to notify them
+			$previous_perms = get_all_perms($channel['channel_id'],$x['hash']);
+
+			$r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1",
+				dbesc($x['hash']),
+				intval($channel['channel_id'])
+			);
+
+			if($r) {
+
+				// connection exists
+
+				// if the dob is the same as what we have stored (disregarding the year), keep the one
+				// we have as we may have updated the year after sending a notification; and resetting
+				// to the one we just received would cause us to create duplicated events.
+
+				if(substr($r[0]['abook_dob'],5) == substr($next_birthday,5))
+					$next_birthday = $r[0]['abook_dob'];
+
+				$y = q("update abook set abook_dob = '%s'
+					where abook_xchan = '%s' and abook_channel = %d
+					and abook_self = 0 ",
+					dbescdate($next_birthday),
+					dbesc($x['hash']),
+					intval($channel['channel_id'])
+				);
+
+				if(! $y)
+					logger('abook update failed');
+				else {
+					// if we were just granted read stream permission and didn't have it before, try to pull in some posts
+					if((! $old_read_stream_perm) && (intval($permissions['view_stream'])))
+						\Zotlabs\Daemon\Master::Summon(array('Onepoll',$r[0]['abook_id']));
+				}
+			}
+			else {
+
+				$p = \Zotlabs\Access\Permissions::connect_perms($channel['channel_id']);
+				$my_perms = \Zotlabs\Access\Permissions::serialise($p['perms']);
+
+				$automatic = $p['automatic'];
+
+				// new connection
+
+				if($my_perms) {
+					set_abconfig($channel['channel_id'],$x['hash'],'system','my_perms',$my_perms);
+				}
+
+				$closeness = get_pconfig($channel['channel_id'],'system','new_abook_closeness');
+				if($closeness === false)
+					$closeness = 80;
+
+				$y = abook_store_lowlevel(
+					[
+						'abook_account'   => intval($channel['channel_account_id']),
+						'abook_channel'   => intval($channel['channel_id']),
+						'abook_closeness' => intval($closeness),
+						'abook_xchan'     => $x['hash'],
+						'abook_profile'   => $profile_assign,
+						'abook_created'   => datetime_convert(),
+						'abook_updated'   => datetime_convert(),
+						'abook_dob'       => $next_birthday,
+						'abook_pending'   => intval(($automatic) ? 0 : 1)
+					]
+				);
+
+				if($y) {
+					logger("New introduction received for {$channel['channel_name']}");
+					$new_perms = get_all_perms($channel['channel_id'],$x['hash']);
+	
+					// Send a clone sync packet and a permissions update if permissions have changed
+
+					$new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 order by abook_created desc limit 1",
+						dbesc($x['hash']),
+						intval($channel['channel_id'])
+					);
+
+					if($new_connection) {
+						if(! \Zotlabs\Access\Permissions::PermsCompare($new_perms,$previous_perms))
+							\Zotlabs\Daemon\Master::Summon(array('Notifier','permissions_create',$new_connection[0]['abook_id']));
+						Enotify::submit(
+							[
+							'type'       => NOTIFY_INTRO,
+							'from_xchan' => $x['hash'],
+							'to_xchan'   => $channel['channel_hash'],
+							'link'       => z_root() . '/connedit/' . $new_connection[0]['abook_id']
+							]
+						);
+
+						if(intval($permissions['view_stream'])) {
+							if(intval(get_pconfig($channel['channel_id'],'perm_limits','send_stream') & PERMS_PENDING)
+								|| (! intval($new_connection[0]['abook_pending'])))
+								\Zotlabs\Daemon\Master::Summon(array('Onepoll',$new_connection[0]['abook_id']));
+						}
+
+
+						// If there is a default group for this channel, add this connection to it
+						// for pending connections this will happens at acceptance time.
+
+						if(! intval($new_connection[0]['abook_pending'])) {
+							$default_group = $channel['channel_default_group'];
+							if($default_group) {
+								$g = Group::rec_byhash($channel['channel_id'],$default_group);
+								if($g)
+									Group::member_add($channel['channel_id'],'',$x['hash'],$g['id']);
+							}
+						}
+
+						unset($new_connection[0]['abook_id']);
+						unset($new_connection[0]['abook_account']);
+						unset($new_connection[0]['abook_channel']);
+						$abconfig = load_abconfig($channel['channel_id'],$new_connection['abook_xchan']);
+						if($abconfig)
+							$new_connection['abconfig'] = $abconfig;
+
+						Libsync::build_sync_packet($channel['channel_id'], array('abook' => $new_connection));
+					}
+				}
+
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @brief Look up if channel is known and previously verified.
+	 *
+	 * A guid and a url, both signed by the sender, distinguish a known sender at a
+	 * known location.
+	 * This function looks these up to see if the channel is known and therefore
+	 * previously verified. If not, we will need to verify it.
+	 *
+	 * @param array $arr an associative array which must contain:
+	 *  * \e string \b id => id of conversant
+	 *  * \e string \b id_sig => id signed with conversant's private key
+	 *  * \e string \b location => URL of the origination hub of this communication
+	 *  * \e string \b location_sig => URL signed with conversant's private key
+	 * @param boolean $multiple (optional) default false
+	 *
+	 * @return array|null
+	 *   * null if site is blacklisted or not found
+	 *   * otherwise an array with an hubloc record
+	 */
+
+	static function gethub($arr, $multiple = false) {
+
+		if($arr['id'] && $arr['id_sig'] && $arr['location'] && $arr['location_sig']) {
+
+			if(! check_siteallowed($arr['location'])) {
+				logger('blacklisted site: ' . $arr['location']);
+				return null;
+			}
+
+			$limit = (($multiple) ? '' : ' limit 1 ');
+
+			$r = q("select hubloc.*, site.site_crypto from hubloc left join site on hubloc_url = site_url
+					where hubloc_guid = '%s' and hubloc_guid_sig = '%s'
+					and hubloc_url = '%s' and hubloc_url_sig = '%s'
+					and hubloc_site_id = '%s' $limit",
+				dbesc($arr['id']),
+				dbesc($arr['id_sig']),
+				dbesc($arr['location']),
+				dbesc($arr['location_sig']),
+				dbesc($arr['site_id'])
+			);
+			if($r) {
+				logger('Found', LOGGER_DEBUG);
+				return (($multiple) ? $r : $r[0]);
+			}
+		}
+		logger('Not found: ' . print_r($arr,true), LOGGER_DEBUG);
+
+		return false;
+	}
+
+
+
+
+	static function valid_hub($sender,$site_id) {
+
+		$r = q("select hubloc.*, site.site_crypto from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s' and hubloc_site_id = '%s' limit 1",
+			dbesc($sender),
+			dbesc($site_id)
+		);
+		if(! $r) {
+			return null;
+		}
+
+		if(! check_siteallowed($r[0]['hubloc_url'])) {
+			logger('blacklisted site: ' . $r[0]['hubloc_url']);
+			return null;
+		}
+
+		if(! check_channelallowed($r[0]['hubloc_hash'])) {
+			logger('blacklisted channel: ' . $r[0]['hubloc_hash']);
+			return null;
+		}
+
+		return $r[0];
+
+	}
+
+	/**
+	 * @brief Registers an unknown hub.
+	 *
+	 * A communication has been received which has an unknown (to us) sender.
+	 * Perform discovery based on our calculated hash of the sender at the
+	 * origination address. This will fetch the discovery packet of the sender,
+	 * which contains the public key we need to verify our guid and url signatures.
+	 *
+	 * @param array $arr an associative array which must contain:
+	 *  * \e string \b guid => guid of conversant
+	 *  * \e string \b guid_sig => guid signed with conversant's private key
+	 *  * \e string \b url => URL of the origination hub of this communication
+	 *  * \e string \b url_sig => URL signed with conversant's private key
+	 *
+	 * @return array An associative array with
+	 *  * \b success boolean true or false
+	 *  * \b message (optional) error string only if success is false
+	 */
+
+	static function register_hub($id) {
+
+		$id_hash = false;
+		$valid   = false;
+		$hsig_valid = false;
+
+		$result  = [ 'success' => false ];
+
+		if(! $id) {
+			return $result;
+		}
+
+		$record = Zotfinger::exec($id);
+
+		// Check the HTTP signature
+
+		$hsig = $record['signature'];
+		if($hsig['signer'] === $id && $hsig['header_valid'] === true && $hsig['content_valid'] === true) {
+			$hsig_valid = true;
+		}
+		if(! $hsig_valid) {
+			logger('http signature not valid: ' . print_r($hsig,true));
+			return $result;
+		}
+
+		$c = self::import_xchan($record['data']);
+		if($c['success']) {
+			$result['success'] = true;
+		}
+		else {
+			logger('Failure to verify zot packet');
+		}
+
+		return $result;
+	}
+
+	/**
+	 * @brief Takes an associative array of a fetch discovery packet and updates
+	 *   all internal data structures which need to be updated as a result.
+	 *
+	 * @param array $arr => json_decoded discovery packet
+	 * @param int $ud_flags
+	 *    Determines whether to create a directory update record if any changes occur, default is UPDATE_FLAGS_UPDATED
+	 *    $ud_flags = UPDATE_FLAGS_FORCED indicates a forced refresh where we unconditionally create a directory update record
+	 *      this typically occurs once a month for each channel as part of a scheduled ping to notify the directory
+	 *      that the channel still exists
+	 * @param array $ud_arr
+	 *    If set [typically by update_directory_entry()] indicates a specific update table row and more particularly
+	 *    contains a particular address (ud_addr) which needs to be updated in that table.
+	 *
+	 * @return array An associative array with:
+	 *   * \e boolean \b success boolean true or false
+	 *   * \e string \b message (optional) error string only if success is false
+	 */
+
+	static function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) {
+
+		/**
+		 * @hooks import_xchan
+		 *   Called when processing the result of zot_finger() to store the result
+		 *   * \e array
+		 */
+		call_hooks('import_xchan', $arr);
+
+		$ret = array('success' => false);
+		$dirmode = intval(get_config('system','directory_mode'));
+
+		$changed = false;
+		$what = '';
+
+		if(! ($arr['id'] && $arr['id_sig'])) {
+			logger('No identity information provided. ' . print_r($arr,true));
+			return $ret;
+		}
+
+		$xchan_hash = self::make_xchan_hash($arr['id'],$arr['public_key']);
+		$arr['hash'] = $xchan_hash;
+
+		$import_photos = false;
+
+		$sig_methods = ((array_key_exists('signing',$arr) && is_array($arr['signing'])) ? $arr['signing'] : [ 'sha256' ]);
+		$verified = false;
+
+		if(! self::verify($arr['id'],$arr['id_sig'],$arr['public_key'])) {
+			logger('Unable to verify channel signature for ' . $arr['address']);
+			return $ret;
+		}
+		else {
+			$verified = true;
+		}
+
+		if(! $verified) {
+			$ret['message'] = t('Unable to verify channel signature');
+			return $ret;
+		}
+
+		logger('import_xchan: ' . $xchan_hash, LOGGER_DEBUG);
+
+		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
+			dbesc($xchan_hash)
+		);
+
+		if(! array_key_exists('connect_url', $arr))
+			$arr['connect_url'] = '';
+
+		if($r) {
+			if($arr['photo'] && array_key_exists('updated',$arr['photo']) && $r[0]['xchan_photo_date'] != $arr['photo']['updated']) {
+				$import_photos = true;
+			}
+
+			// if we import an entry from a site that's not ours and either or both of us is off the grid - hide the entry.
+			/** @TODO: check if we're the same directory realm, which would mean we are allowed to see it */
+
+			$dirmode = get_config('system','directory_mode');
+
+			if((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root()))
+				$arr['searchable'] = false;
+
+			$hidden = (1 - intval($arr['searchable']));
+
+			$hidden_changed = $adult_changed = $deleted_changed = $pubforum_changed = 0;
+
+			if(intval($r[0]['xchan_hidden']) != (1 - intval($arr['searchable'])))
+				$hidden_changed = 1;
+			if(intval($r[0]['xchan_selfcensored']) != intval($arr['adult_content']))
+				$adult_changed = 1;
+			if(intval($r[0]['xchan_deleted']) != intval($arr['deleted']))
+				$deleted_changed = 1;
+			if(intval($r[0]['xchan_pubforum']) != intval($arr['public_forum']))
+				$pubforum_changed = 1;
+
+			if($arr['protocols']) {
+				$protocols = implode(',',$arr['protocols']);
+				if($protocols !== 'zot6') {
+					set_xconfig($xchan_hash,'system','protocols',$protocols);
+				}
+				else {
+					del_xconfig($xchan_hash,'system','protocols');
+				}
+			}
+
+			if(($r[0]['xchan_name_date'] != $arr['name_updated'])
+				|| ($r[0]['xchan_connurl'] != $arr['primary_location']['connections_url'])
+				|| ($r[0]['xchan_addr'] != $arr['primary_location']['address'])
+				|| ($r[0]['xchan_follow'] != $arr['primary_location']['follow_url'])
+				|| ($r[0]['xchan_connpage'] != $arr['connect_url'])
+				|| ($r[0]['xchan_url'] != $arr['primary_location']['url'])
+				|| $hidden_changed || $adult_changed || $deleted_changed || $pubforum_changed ) {
+				$rup = q("update xchan set xchan_name = '%s', xchan_name_date = '%s', xchan_connurl = '%s', xchan_follow = '%s',
+					xchan_connpage = '%s', xchan_hidden = %d, xchan_selfcensored = %d, xchan_deleted = %d, xchan_pubforum = %d,
+					xchan_addr = '%s', xchan_url = '%s' where xchan_hash = '%s'",
+					dbesc(($arr['name']) ? escape_tags($arr['name']) : '-'),
+					dbesc($arr['name_updated']),
+					dbesc($arr['primary_location']['connections_url']),
+					dbesc($arr['primary_location']['follow_url']),
+					dbesc($arr['primary_location']['connect_url']),
+					intval(1 - intval($arr['searchable'])),
+					intval($arr['adult_content']),
+					intval($arr['deleted']),
+					intval($arr['public_forum']),
+					dbesc(escape_tags($arr['primary_location']['address'])),
+					dbesc(escape_tags($arr['primary_location']['url'])),
+					dbesc($xchan_hash)
+				);
+
+				logger('Update: existing: ' . print_r($r[0],true), LOGGER_DATA, LOG_DEBUG);
+				logger('Update: new: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
+				$what .= 'xchan ';
+				$changed = true;
+			}
+		}
+		else {
+			$import_photos = true;
+
+			if((($arr['site']['directory_mode'] === 'standalone')
+					|| ($dirmode & DIRECTORY_MODE_STANDALONE))
+					&& ($arr['site']['url'] != z_root()))
+				$arr['searchable'] = false;
+
+			$x = xchan_store_lowlevel(
+				[
+					'xchan_hash'           => $xchan_hash,
+					'xchan_guid'           => $arr['id'],
+					'xchan_guid_sig'       => $arr['id_sig'],
+					'xchan_pubkey'         => $arr['public_key'],
+					'xchan_photo_mimetype' => $arr['photo_mimetype'],
+					'xchan_photo_l'        => $arr['photo'],
+					'xchan_addr'           => escape_tags($arr['primary_location']['address']),
+					'xchan_url'            => escape_tags($arr['primary_location']['url']),
+					'xchan_connurl'        => $arr['primary_location']['connections_url'],
+					'xchan_follow'         => $arr['primary_location']['follow_url'],
+					'xchan_connpage'       => $arr['connect_url'],
+					'xchan_name'           => (($arr['name']) ? escape_tags($arr['name']) : '-'),
+					'xchan_network'        => 'zot6',
+					'xchan_photo_date'     => $arr['photo_updated'],
+					'xchan_name_date'      => $arr['name_updated'],
+					'xchan_hidden'         => intval(1 - intval($arr['searchable'])),
+					'xchan_selfcensored'   => $arr['adult_content'],
+					'xchan_deleted'        => $arr['deleted'],
+					'xchan_pubforum'       => $arr['public_forum']
+				]
+			);
+
+			$what .= 'new_xchan';
+			$changed = true;
+		}
+
+		if($import_photos) {
+
+			require_once('include/photo/photo_driver.php');
+
+			// see if this is a channel clone that's hosted locally - which we treat different from other xchans/connections
+
+			$local = q("select channel_account_id, channel_id from channel where channel_hash = '%s' limit 1",
+				dbesc($xchan_hash)
+			);
+			if($local) {
+				$ph = z_fetch_url($arr['photo']['url'], true);
+				if($ph['success']) {
+
+					$hash = import_channel_photo($ph['body'], $arr['photo']['type'], $local[0]['channel_account_id'], $local[0]['channel_id']);
+
+					if($hash) {
+						// unless proven otherwise
+						$is_default_profile = 1;
+
+						$profile = q("select is_default from profile where aid = %d and uid = %d limit 1",
+							intval($local[0]['channel_account_id']),
+							intval($local[0]['channel_id'])
+						);
+						if($profile) {
+							if(! intval($profile[0]['is_default']))
+								$is_default_profile = 0;
+						}
+
+						// If setting for the default profile, unset the profile photo flag from any other photos I own
+						if($is_default_profile) {
+							q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d",	
+								intval(PHOTO_NORMAL),
+								intval(PHOTO_PROFILE),
+								dbesc($hash),
+								intval($local[0]['channel_account_id']),
+								intval($local[0]['channel_id'])
+							);
+						}
+					}
+
+					// reset the names in case they got messed up when we had a bug in this function
+					$photos = array(
+						z_root() . '/photo/profile/l/' . $local[0]['channel_id'],
+						z_root() . '/photo/profile/m/' . $local[0]['channel_id'],
+						z_root() . '/photo/profile/s/' . $local[0]['channel_id'],
+						$arr['photo_mimetype'],
+						false
+					);
+				}
+			}
+			else {
+				$photos = import_xchan_photo($arr['photo']['url'], $xchan_hash);
+			}
+			if($photos) {
+				if($photos[4]) {
+					// importing the photo failed somehow. Leave the photo_date alone so we can try again at a later date.
+					// This often happens when somebody joins the matrix with a bad cert.
+					$r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s'
+						where xchan_hash = '%s'",
+						dbesc($photos[0]),
+						dbesc($photos[1]),
+						dbesc($photos[2]),
+						dbesc($photos[3]),
+						dbesc($xchan_hash)
+					);
+				}
+				else {
+					$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s'
+						where xchan_hash = '%s'",
+						dbescdate(datetime_convert('UTC','UTC',$arr['photo_updated'])),
+						dbesc($photos[0]),
+						dbesc($photos[1]),
+						dbesc($photos[2]),
+						dbesc($photos[3]),
+						dbesc($xchan_hash)
+					);
+				}
+				$what .= 'photo ';
+				$changed = true;
+			}
+		}
+
+		// what we are missing for true hub independence is for any changes in the primary hub to
+		// get reflected not only in the hublocs, but also to update the URLs and addr in the appropriate xchan
+
+		$s = Libsync::sync_locations($arr, $arr);
+
+		if($s) {
+			if($s['change_message'])
+				$what .= $s['change_message'];
+			if($s['changed'])
+				$changed = $s['changed'];
+			if($s['message'])
+				$ret['message'] .= $s['message'];
+		}
+
+		// Which entries in the update table are we interested in updating?
+
+		$address = (($ud_arr && $ud_arr['ud_addr']) ? $ud_arr['ud_addr'] : $arr['address']);
+
+
+		// Are we a directory server of some kind?
+
+		$other_realm = false;
+		$realm = get_directory_realm();
+		if(array_key_exists('site',$arr)
+			&& array_key_exists('realm',$arr['site'])
+			&& (strpos($arr['site']['realm'],$realm) === false))
+			$other_realm = true;
+
+
+		if($dirmode != DIRECTORY_MODE_NORMAL) {
+
+			// We're some kind of directory server. However we can only add directory information
+			// if the entry is in the same realm (or is a sub-realm). Sub-realms are denoted by
+			// including the parent realm in the name. e.g. 'RED_GLOBAL:foo' would allow an entry to
+			// be in directories for the local realm (foo) and also the RED_GLOBAL realm.
+
+			if(array_key_exists('profile',$arr) && is_array($arr['profile']) && (! $other_realm)) {
+				$profile_changed = Libzotdir::import_directory_profile($xchan_hash,$arr['profile'],$address,$ud_flags, 1);
+				if($profile_changed) {
+					$what .= 'profile ';
+					$changed = true;
+				}
+			}
+			else {
+				logger('Profile not available - hiding');
+				// they may have made it private
+				$r = q("delete from xprof where xprof_hash = '%s'",
+					dbesc($xchan_hash)
+				);
+				$r = q("delete from xtag where xtag_hash = '%s' and xtag_flags = 0",
+					dbesc($xchan_hash)
+				);
+			}
+		}
+
+		if(array_key_exists('site',$arr) && is_array($arr['site'])) {
+			$profile_changed = self::import_site($arr['site']);
+			if($profile_changed) {
+				$what .= 'site ';
+				$changed = true;
+			}
+		}
+
+		if(($changed) || ($ud_flags == UPDATE_FLAGS_FORCED)) {
+			$guid = random_string() . '@' . \App::get_hostname();
+			Libzotdir::update_modtime($xchan_hash,$guid,$address,$ud_flags);
+			logger('Changed: ' . $what,LOGGER_DEBUG);
+		}
+		elseif(! $ud_flags) {
+			// nothing changed but we still need to update the updates record
+			q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and not (ud_flags & %d) > 0 ",
+				intval(UPDATE_FLAGS_UPDATED),
+				dbesc($address),
+				intval(UPDATE_FLAGS_UPDATED)
+			);
+		}
+
+		if(! x($ret,'message')) {
+			$ret['success'] = true;
+			$ret['hash'] = $xchan_hash;
+		}
+
+		logger('Result: ' . print_r($ret,true), LOGGER_DATA, LOG_DEBUG);
+		return $ret;
+	}
+
+	/**
+	 * @brief Called immediately after sending a zot message which is using queue processing.
+	 *
+	 * Updates the queue item according to the response result and logs any information
+	 * returned to aid communications troubleshooting.
+	 *
+	 * @param string $hub - url of site we just contacted
+	 * @param array $arr - output of z_post_url()
+	 * @param array $outq - The queue structure attached to this request
+	 */
+
+	static function process_response($hub, $arr, $outq) {
+
+		logger('remote: ' . print_r($arr,true),LOGGER_DATA);
+
+		if(! $arr['success']) {
+			logger('Failed: ' . $hub);
+			return;
+		}
+
+		$x = json_decode($arr['body'], true);
+
+		if(! $x) {
+			logger('No json from ' . $hub);
+			logger('Headers: ' . print_r($arr['header'], true), LOGGER_DATA, LOG_DEBUG);
+		}
+
+		$x = crypto_unencapsulate($x, get_config('system','prvkey'));
+		if(! is_array($x)) {
+			$x = json_decode($x,true);
+		}
+
+		if(! $x['success']) {
+
+			// handle remote validation issues
+
+			$b = q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s'",
+				dbesc(($x['message']) ? $x['message'] : 'unknown delivery error'),
+				dbesc(datetime_convert()),
+				dbesc($outq['outq_hash'])
+			);
+		}
+
+		if(array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) { 
+			foreach($x['delivery_report'] as $xx) {
+				if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) {
+					q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s', '%s','%s','%s','%s','%s' ) ",
+						dbesc($xx['message_id']),
+						dbesc($xx['location']),
+						dbesc($xx['recipient']),
+						dbesc($xx['name']),
+						dbesc($xx['status']),
+						dbesc(datetime_convert($xx['date'])),
+						dbesc($xx['sender'])
+					);
+				}
+			}
+
+			// we have a more descriptive delivery report, so discard the per hub 'queue' report.
+
+			q("delete from dreport where dreport_queue = '%s' ",
+				dbesc($outq['outq_hash'])
+			);
+		}
+
+		// update the timestamp for this site
+
+		q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'",
+			dbesc(datetime_convert()),
+			dbesc(dirname($hub))
+		);
+
+		// synchronous message types are handled immediately
+		// async messages remain in the queue until processed.
+
+		if(intval($outq['outq_async']))
+			Queue::remove($outq['outq_hash'],$outq['outq_channel']);
+
+		logger('zot_process_response: ' . print_r($x,true), LOGGER_DEBUG);
+	}
+
+	/**
+	 * @brief
+	 *
+	 * We received a notification packet (in mod_post) that a message is waiting for us, and we've verified the sender.
+	 * Check if the site is using zot6 delivery and includes a verified HTTP Signature, signed content, and a 'msg' field,
+	 * and also that the signer and the sender match.
+	 * If that happens, we do not need to fetch/pickup the message - we have it already and it is verified.
+	 * Translate it into the form we need for zot_import() and import it.
+	 *
+	 * Otherwise send back a pickup message, using our message tracking ID ($arr['secret']), which we will sign with our site
+	 * private key.
+	 * The entire pickup message is encrypted with the remote site's public key.
+	 * If everything checks out on the remote end, we will receive back a packet containing one or more messages,
+	 * which will be processed and delivered before this function ultimately returns.
+	 *
+	 * @see zot_import()
+	 *
+	 * @param array $arr
+	 *     decrypted and json decoded notify packet from remote site
+	 * @return array from zot_import()
+	 */
+
+	static function fetch($arr) {
+
+		logger('zot_fetch: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
+
+		return self::import($arr);
+
+	}
+
+	/**
+	 * @brief Process incoming array of messages.
+	 *
+	 * Process an incoming array of messages which were obtained via pickup, and
+	 * import, update, delete as directed.
+	 *
+	 * The message types handled here are 'activity' (e.g. posts), and 'sync'.
+	 *
+	 * @param array $arr
+	 *  'pickup' structure returned from remote site
+	 * @param string $sender_url
+	 *  the url specified by the sender in the initial communication.
+	 *  We will verify the sender and url in each returned message structure and
+	 *  also verify that all the messages returned match the site url that we are
+	 *  currently processing.
+	 *
+	 * @returns array
+	 *   Suitable for logging remotely, enumerating the processing results of each message/recipient combination
+	 *   * [0] => \e string $channel_hash
+	 *   * [1] => \e string $delivery_status
+	 *   * [2] => \e string $address
+	 */
+
+	static function import($arr) {
+
+		$env = $arr;
+		$private = false;
+		$return = [];
+
+		$result = null;
+
+		logger('Notify: ' . print_r($env,true), LOGGER_DATA, LOG_DEBUG);
+
+		if(! is_array($env)) {
+			logger('decode error');
+			return;
+		}
+
+		$message_request = ((array_key_exists('message_id',$env)) ? true : false);
+		if($message_request)
+			logger('processing message request');
+
+		$has_data = array_key_exists('data',$env) && $env['data'];
+		$data = (($has_data) ? $env['data'] : false);
+		
+		$deliveries = null;
+
+		if(array_key_exists('recipients',$env) && count($env['recipients'])) {
+			logger('specific recipients');
+			logger('recipients: ' . print_r($env['recipients'],true),LOGGER_DEBUG);
+
+			$recip_arr = [];
+			foreach($env['recipients'] as $recip) {
+				$recip_arr[] =  $recip;
+			}
+
+			$r = false;
+			if($recip_arr) {
+				stringify_array_elms($recip_arr,true);
+				$recips = implode(',',$recip_arr);
+				$r = q("select channel_hash as hash from channel where channel_hash in ( " . $recips . " ) and channel_removed = 0 ");
+			}
+
+			if(! $r) {
+				logger('recips: no recipients on this site');
+				return;
+			}
+
+			// Response messages will inherit the privacy of the parent
+
+			if($env['type'] !== 'response')
+				$private = true;
+
+			$deliveries = ids_to_array($r,'hash');
+
+			// We found somebody on this site that's in the recipient list.
+		}
+		else {
+
+			logger('public post');
+
+
+			// Public post. look for any site members who are or may be accepting posts from this sender
+			// and who are allowed to see them based on the sender's permissions
+			// @fixme;
+
+			$deliveries = self::public_recips($env);
+
+
+		}
+
+		$deliveries = array_unique($deliveries);
+
+		if(! $deliveries) {
+			logger('No deliveries on this site');
+			return;
+		}
+
+
+		if($has_data) {
+
+			if(in_array($env['type'],['activity','response'])) {
+
+				if($env['encoding'] === 'zot') {
+					$arr = get_item_elements($data);
+	
+					$v = validate_item_elements($data,$arr);
+					
+					if(! $v['success']) {
+						logger('Activity rejected: ' . $v['message'] . ' ' . print_r($data,true));
+						return;
+					}
+				}
+				elseif($env['encoding'] === 'activitystreams') {
+
+					$AS = new \Zotlabs\Lib\ActivityStreams($data);
+					if(! $AS->is_valid()) {
+						logger('Activity rejected: ' . print_r($data,true));
+						return;
+					}
+					$arr = \Zotlabs\Lib\Activity::decode_note($AS);
+
+					logger($AS->debug());
+
+					$r = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' limit 1",
+						dbesc($AS->actor['id'])
+					); 
+
+					if($r) {
+						$arr['author_xchan'] = $r[0]['hubloc_hash'];
+					}
+					// @fixme (in individual delivery, change owner if needed)
+					$arr['owner_xchan'] = $env['sender'];						
+					if($private) {
+						$arr['item_private'] = true;
+					}
+					// @fixme - spoofable
+					if($AS->data['hubloc']) {
+						$arr['item_verified'] = true;
+					}
+					if($AS->data['signed_data']) {
+						IConfig::Set($arr,'activitystreams','signed_data',$AS->data['signed_data'],false);
+					}
+
+				}
+
+				logger('Activity received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
+				logger('Activity recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG);
+
+				$relay = (($env['type'] === 'response') ? true : false );
+
+				$result = self::process_delivery($env['sender'],$arr,$deliveries,$relay,false,$message_request);
+			}
+			elseif($env['type'] === 'sync') {
+				// $arr = get_channelsync_elements($data);
+
+				$arr = json_decode($data,true);
+
+				logger('Channel sync received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
+				logger('Channel sync recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG);
+
+				$result = Libsync::process_channel_sync_delivery($env['sender'],$arr,$deliveries);
+			}
+		}
+		if ($result) {
+			$return = array_merge($return, $result);
+		}		
+		return $return;
+	}
+
+
+	static function is_top_level($env) {
+		if($env['encoding'] === 'zot' && array_key_exists('flags',$env) && in_array('thread_parent', $env['flags'])) {
+			return true;
+		}
+		if($env['encoding'] === 'activitystreams') {
+			if(array_key_exists('inReplyTo',$env['data']) && $env['data']['inReplyTo']) {
+				return false;
+			}
+			return true;
+		}
+		return false;
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * A public message with no listed recipients can be delivered to anybody who
+	 * has PERMS_NETWORK for that type of post, PERMS_AUTHED (in-network senders are
+	 * by definition authenticated) or PERMS_SITE and is one the same site,
+	 * or PERMS_SPECIFIC and the sender is a contact who is granted permissions via
+	 * their connection permissions in the address book.
+	 * Here we take a given message and construct a list of hashes of everybody
+	 * on the site that we should try and deliver to.
+	 * Some of these will be rejected, but this gives us a place to start.
+	 *
+	 * @param array $msg
+	 * @return NULL|array
+	 */
+
+	static function public_recips($msg) {
+
+		require_once('include/channel.php');
+
+		$check_mentions = false;
+		$include_sys = false;
+
+		if($msg['type'] === 'activity') {
+			$disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false;
+			if(! $disable_discover_tab)
+				$include_sys = true;
+
+			$perm = 'send_stream';
+
+			if(self::is_top_level($msg)) {
+				$check_mentions = true;
+			}
+		}
+		elseif($msg['type'] === 'mail')
+			$perm = 'post_mail';
+
+		$r = [];
+
+		$c = q("select channel_id, channel_hash from channel where channel_removed = 0");
+
+		if($c) {
+			foreach($c as $cc) {
+				if(perm_is_allowed($cc['channel_id'],$msg['sender'],$perm)) {
+					$r[] = $cc['channel_hash'];
+				}
+			}
+		}
+
+		if($include_sys) {
+			$sys = get_sys_channel();
+			if($sys)
+				$r[] = $sys['channel_hash'];
+		}
+
+
+
+		// look for any public mentions on this site
+		// They will get filtered by tgroup_check() so we don't need to check permissions now
+
+		if($check_mentions) {
+			// It's a top level post. Look at the tags. See if any of them are mentions and are on this hub.
+			if(array_path_exists('data/object/tag',$msg)) {
+				if(is_array($msg['data']['object']['tag']) && $msg['data']['object']['tag']) {
+					foreach($msg['data']['object']['tag'] as $tag) {
+						if($tag['type'] === 'Mention' && (strpos($tag['href'],z_root()) !== false)) {
+							$address = basename($tag['href']);
+							if($address) {
+								$z = q("select channel_hash as hash from channel where channel_address = '%s'
+									and channel_removed = 0 limit 1",
+									dbesc($address)
+								);
+								if($z) {
+									$r[] = $z[0]['hash'];
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		else {
+			// This is a comment. We need to find any parent with ITEM_UPLINK set. But in fact, let's just return
+			// everybody that stored a copy of the parent. This way we know we're covered. We'll check the
+			// comment permissions when we deliver them.
+
+			if(array_path_exists('data/inReplyTo',$msg)) {
+				$z = q("select owner_xchan as hash from item where parent_mid = '%s' ",
+					dbesc($msg['data']['inReplyTo'])
+				);
+				if($z) {
+					foreach($z as $zv) {
+						$r[] = $zv['hash'];
+					}
+				}
+			}
+		}
+
+		// There are probably a lot of duplicates in $r at this point. We need to filter those out.
+		// It's a bit of work since it's a multi-dimensional array
+
+		if($r) {
+			$r = array_unique($r);
+		}
+
+		logger('public_recips: ' . print_r($r,true), LOGGER_DATA, LOG_DEBUG);
+		return $r;
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * @param array $sender
+	 * @param array $arr
+	 * @param array $deliveries
+	 * @param boolean $relay
+	 * @param boolean $public (optional) default false
+	 * @param boolean $request (optional) default false
+	 * @return array
+	 */
+
+	static function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $request = false) {
+
+		$result = [];
+
+		// We've validated the sender. Now make sure that the sender is the owner or author
+
+		if(! $public) {
+			if($sender != $arr['owner_xchan'] && $sender != $arr['author_xchan']) {
+				logger("Sender $sender is not owner {$arr['owner_xchan']} or author {$arr['author_xchan']} - mid {$arr['mid']}");
+				return;
+			}
+		}
+
+		foreach($deliveries as $d) {
+
+			$local_public = $public;
+
+			$DR = new \Zotlabs\Lib\DReport(z_root(),$sender,$d,$arr['mid']);
+
+			$channel = channelx_by_hash($d);
+
+			if (! $channel) {
+				$DR->update('recipient not found');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			$DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>');
+
+			/**
+			 * We need to block normal top-level message delivery from our clones, as the delivered
+			 * message doesn't have ACL information in it as the cloned copy does. That copy
+			 * will normally arrive first via sync delivery, but this isn't guaranteed.
+			 * There's a chance the current delivery could take place before the cloned copy arrives
+			 * hence the item could have the wrong ACL and *could* be used in subsequent deliveries or
+			 * access checks. 
+			 */
+
+			if($sender === $channel['channel_hash'] && $arr['author_xchan'] === $channel['channel_hash'] && $arr['mid'] === $arr['parent_mid']) {
+				$DR->update('self delivery ignored');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			// allow public postings to the sys channel regardless of permissions, but not
+			// for comments travelling upstream. Wait and catch them on the way down.
+			// They may have been blocked by the owner.
+
+			if(intval($channel['channel_system']) && (! $arr['item_private']) && (! $relay)) {
+				$local_public = true;
+
+				$r = q("select xchan_selfcensored from xchan where xchan_hash = '%s' limit 1",
+					dbesc($sender['hash'])
+				);
+				// don't import sys channel posts from selfcensored authors
+				if($r && (intval($r[0]['xchan_selfcensored']))) {
+					$local_public = false;
+					continue;
+				}
+				if(! MessageFilter::evaluate($arr,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) {
+					$local_public = false;
+					continue;
+				}
+			}
+
+			$tag_delivery = tgroup_check($channel['channel_id'],$arr);
+
+			$perm = 'send_stream';
+			if(($arr['mid'] !== $arr['parent_mid']) && ($relay))
+				$perm = 'post_comments';
+
+			// This is our own post, possibly coming from a channel clone
+
+			if($arr['owner_xchan'] == $d) {
+				$arr['item_wall'] = 1;
+			}
+			else {
+				$arr['item_wall'] = 0;
+			}
+
+			if((! perm_is_allowed($channel['channel_id'],$sender,$perm)) && (! $tag_delivery) && (! $local_public)) {
+				logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}");
+				$DR->update('permission denied');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			if($arr['mid'] != $arr['parent_mid']) {
+
+				// check source route.
+				// We are only going to accept comments from this sender if the comment has the same route as the top-level-post,
+				// this is so that permissions mismatches between senders apply to the entire conversation
+				// As a side effect we will also do a preliminary check that we have the top-level-post, otherwise
+				// processing it is pointless.
+	
+				$r = q("select route, id from item where mid = '%s' and uid = %d limit 1",
+					dbesc($arr['parent_mid']),
+					intval($channel['channel_id'])
+				);
+				if(! $r) {
+					$DR->update('comment parent not found');
+					$result[] = $DR->get();
+
+					// We don't seem to have a copy of this conversation or at least the parent
+					// - so request a copy of the entire conversation to date.
+					// Don't do this if it's a relay post as we're the ones who are supposed to
+					// have the copy and we don't want the request to loop.
+					// Also don't do this if this comment came from a conversation request packet.
+					// It's possible that comments are allowed but posting isn't and that could
+					// cause a conversation fetch loop. We can detect these packets since they are
+					// delivered via a 'notify' packet type that has a message_id element in the
+					// initial zot packet (just like the corresponding 'request' packet type which
+					// makes the request).
+					// We'll also check the send_stream permission - because if it isn't allowed,
+					// the top level post is unlikely to be imported and
+					// this is just an exercise in futility.
+
+					if((! $relay) && (! $request) && (! $local_public)
+						&& perm_is_allowed($channel['channel_id'],$sender,'send_stream')) {
+						\Zotlabs\Daemon\Master::Summon(array('Notifier', 'request', $channel['channel_id'], $sender, $arr['parent_mid']));
+					}
+					continue;
+				}
+				if($relay) {
+					// reset the route in case it travelled a great distance upstream
+					// use our parent's route so when we go back downstream we'll match
+					// with whatever route our parent has.
+					$arr['route'] = $r[0]['route'];
+				}
+				else {
+
+					// going downstream check that we have the same upstream provider that
+					// sent it to us originally. Ignore it if it came from another source
+					// (with potentially different permissions).
+					// only compare the last hop since it could have arrived at the last location any number of ways.
+					// Always accept empty routes and firehose items (route contains 'undefined') .
+
+					$existing_route = explode(',', $r[0]['route']);
+					$routes = count($existing_route);
+					if($routes) {
+						$last_hop = array_pop($existing_route);
+						$last_prior_route = implode(',',$existing_route);
+					}
+					else {
+						$last_hop = '';
+						$last_prior_route = '';
+					}
+
+					if(in_array('undefined',$existing_route) || $last_hop == 'undefined' || $sender == 'undefined')
+						$last_hop = '';
+
+					$current_route = (($arr['route']) ? $arr['route'] . ',' : '') . $sender;
+
+					if($last_hop && $last_hop != $sender) {
+						logger('comment route mismatch: parent route = ' . $r[0]['route'] . ' expected = ' . $current_route, LOGGER_DEBUG);
+						logger('comment route mismatch: parent msg = ' . $r[0]['id'],LOGGER_DEBUG);
+						$DR->update('comment route mismatch');
+						$result[] = $DR->get();
+						continue;
+					}
+
+					// we'll add sender onto this when we deliver it. $last_prior_route now has the previously stored route
+					// *except* for the sender which would've been the last hop before it got to us.
+
+					$arr['route'] = $last_prior_route;
+				}
+			}
+
+			$ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'",
+				intval($channel['channel_id']),
+				dbesc($arr['owner_xchan'])
+			);
+			$abook = (($ab) ? $ab[0] : null);
+
+			if(intval($arr['item_deleted'])) {
+
+				// remove_community_tag is a no-op if this isn't a community tag activity
+				self::remove_community_tag($sender,$arr,$channel['channel_id']);
+	
+				// set these just in case we need to store a fresh copy of the deleted post.
+				// This could happen if the delete got here before the original post did.
+
+				$arr['aid'] = $channel['channel_account_id'];
+				$arr['uid'] = $channel['channel_id'];
+	
+				$item_id = delete_imported_item($sender,$arr,$channel['channel_id'],$relay);
+				$DR->update(($item_id) ? 'deleted' : 'delete_failed');
+				$result[] = $DR->get();
+
+				if($relay && $item_id) {
+					logger('process_delivery: invoking relay');
+					\Zotlabs\Daemon\Master::Summon(array('Notifier','relay',intval($item_id)));
+					$DR->update('relayed');
+					$result[] = $DR->get();
+				}
+
+				continue;
+			}
+
+
+			$r = q("select * from item where mid = '%s' and uid = %d limit 1",
+				dbesc($arr['mid']),
+				intval($channel['channel_id'])
+			);
+			if($r) {
+				// We already have this post.
+				$item_id = $r[0]['id'];
+
+				if(intval($r[0]['item_deleted'])) {
+					// It was deleted locally.
+					$DR->update('update ignored');
+					$result[] = $DR->get();
+
+					continue;
+				}
+				// Maybe it has been edited?
+				elseif($arr['edited'] > $r[0]['edited']) {
+					$arr['id'] = $r[0]['id'];
+					$arr['uid'] = $channel['channel_id'];
+					if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) {
+						$DR->update('update ignored');
+						$result[] = $DR->get();
+					}
+					else {
+						$item_result = self::update_imported_item($sender,$arr,$r[0],$channel['channel_id'],$tag_delivery);
+						$DR->update('updated');
+						$result[] = $DR->get();
+						if(! $relay)
+							add_source_route($item_id,$sender);
+					}
+				}
+				else {
+					$DR->update('update ignored');
+					$result[] = $DR->get();
+
+					// We need this line to ensure wall-to-wall comments are relayed (by falling through to the relay bit),
+					// and at the same time not relay any other relayable posts more than once, because to do so is very wasteful.
+					if(! intval($r[0]['item_origin']))
+						continue;
+				}
+			}
+			else {
+				$arr['aid'] = $channel['channel_account_id'];
+				$arr['uid'] = $channel['channel_id'];
+
+				// if it's a sourced post, call the post_local hooks as if it were
+				// posted locally so that crosspost connectors will be triggered.
+
+				if(check_item_source($arr['uid'], $arr)) {
+					/**
+					 * @hooks post_local
+					 *   Called when an item has been posted on this machine via mod/item.php (also via API).
+					 *   * \e array with an item
+					 */
+					call_hooks('post_local', $arr);
+				}
+
+				$item_id = 0;
+
+				if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) {
+					$DR->update('post ignored');
+					$result[] = $DR->get();
+				}
+				else {
+					$item_result = item_store($arr);
+					if($item_result['success']) {
+						$item_id = $item_result['item_id'];
+						$parr = [
+								'item_id' => $item_id,
+								'item' => $arr,
+								'sender' => $sender,
+								'channel' => $channel
+						];
+						/**
+						 * @hooks activity_received
+						 *   Called when an activity (post, comment, like, etc.) has been received from a zot source.
+						 *   * \e int \b item_id
+						 *   * \e array \b item
+						 *   * \e array \b sender
+						 *   * \e array \b channel
+						 */	
+						call_hooks('activity_received', $parr);
+						// don't add a source route if it's a relay or later recipients will get a route mismatch
+						if(! $relay)
+							add_source_route($item_id,$sender);
+					}
+					$DR->update(($item_id) ? 'posted' : 'storage failed: ' . $item_result['message']);
+					$result[] = $DR->get();
+				}
+			}
+
+			// preserve conversations with which you are involved from expiration
+
+			$stored = (($item_result && $item_result['item']) ? $item_result['item'] : false);
+			if((is_array($stored)) && ($stored['id'] != $stored['parent'])
+				&& ($stored['author_xchan'] === $channel['channel_hash'])) {
+				retain_item($stored['item']['parent']);
+			}
+
+			if($relay && $item_id) {
+				logger('Invoking relay');
+				\Zotlabs\Daemon\Master::Summon(array('Notifier','relay',intval($item_id)));
+				$DR->addto_update('relayed');
+				$result[] = $DR->get();
+			}
+		}
+
+		if(! $deliveries)
+			$result[] = array('', 'no recipients', '', $arr['mid']);
+
+		logger('Local results: ' . print_r($result, true), LOGGER_DEBUG);
+
+		return $result;
+	}
+
+	/**
+	 * @brief Remove community tag.
+	 *
+	 * @param array $sender an associative array with
+	 *   * \e string \b hash a xchan_hash
+	 * @param array $arr an associative array
+	 *   * \e int \b verb
+	 *   * \e int \b obj_type
+	 *   * \e int \b mid
+	 * @param int $uid
+	 */
+
+	static function remove_community_tag($sender, $arr, $uid) {
+
+		if(! (activity_match($arr['verb'], ACTIVITY_TAG) && ($arr['obj_type'] == ACTIVITY_OBJ_TAGTERM)))
+			return;
+
+		logger('remove_community_tag: invoked');
+
+		if(! get_pconfig($uid,'system','blocktags')) {
+			logger('Permission denied.');
+			return;
+		}
+
+		$r = q("select * from item where mid = '%s' and uid = %d limit 1",
+			dbesc($arr['mid']),
+			intval($uid)
+		);
+		if(! $r) {
+			logger('No item');
+			return;
+		}
+
+		if(($sender != $r[0]['owner_xchan']) && ($sender != $r[0]['author_xchan'])) {
+			logger('Sender not authorised.');
+			return;
+		}
+
+		$i = $r[0];
+	
+		if($i['target'])
+			$i['target'] = json_decode($i['target'],true);
+		if($i['object'])
+			$i['object'] = json_decode($i['object'],true);
+
+		if(! ($i['target'] && $i['object'])) {
+			logger('No target/object');
+			return;
+		}
+
+		$message_id = $i['target']['id'];
+
+		$r = q("select id from item where mid = '%s' and uid = %d limit 1",
+			dbesc($message_id),
+			intval($uid)
+		);
+		if(! $r) {
+			logger('No parent message');
+			return;
+		}
+
+		q("delete from term where uid = %d and oid = %d and otype = %d and ttype in  ( %d, %d ) and term = '%s' and url = '%s'",
+			intval($uid),
+			intval($r[0]['id']),
+			intval(TERM_OBJ_POST),
+			intval(TERM_HASHTAG),
+			intval(TERM_COMMUNITYTAG),
+			dbesc($i['object']['title']),
+			dbesc(get_rel_link($i['object']['link'],'alternate'))
+		);
+	}
+
+	/**
+	 * @brief Updates an imported item.
+	 *
+	 * @see item_store_update()
+	 *
+	 * @param array $sender
+	 * @param array $item
+	 * @param array $orig
+	 * @param int $uid
+	 * @param boolean $tag_delivery
+	 */
+	
+	static function update_imported_item($sender, $item, $orig, $uid, $tag_delivery) {
+
+		// If this is a comment being updated, remove any privacy information
+		// so that item_store_update will set it from the original.
+
+		if($item['mid'] !== $item['parent_mid']) {
+			unset($item['allow_cid']);
+			unset($item['allow_gid']);
+			unset($item['deny_cid']);
+			unset($item['deny_gid']);
+			unset($item['item_private']);
+		}
+
+		// we need the tag_delivery check for downstream flowing posts as the stored post
+		// may have a different owner than the one being transmitted.
+
+		if(($sender != $orig['owner_xchan'] && $sender != $orig['author_xchan']) && (! $tag_delivery)) {
+			logger('sender is not owner or author');
+			return;
+		}
+
+
+		$x = item_store_update($item);
+
+		// If we're updating an event that we've saved locally, we store the item info first
+		// because event_addtocal will parse the body to get the 'new' event details
+
+		if($orig['resource_type'] === 'event') {
+			$res = event_addtocal($orig['id'], $uid);
+			if(! $res)
+				logger('update event: failed');
+		}
+
+		if(! $x['item_id'])
+			logger('update_imported_item: failed: ' . $x['message']);
+		else
+			logger('update_imported_item');
+
+		return $x;
+	}
+
+	/**
+	 * @brief Deletes an imported item.
+	 *
+	 * @param array $sender
+	 *   * \e string \b hash a xchan_hash
+	 * @param array $item
+	 * @param int $uid
+	 * @param boolean $relay
+	 * @return boolean|int post_id
+	 */
+
+	static function delete_imported_item($sender, $item, $uid, $relay) {
+
+		logger('invoked', LOGGER_DEBUG);
+
+		$ownership_valid = false;
+		$item_found = false;
+		$post_id = 0;
+
+		$r = q("select id, author_xchan, owner_xchan, source_xchan, item_deleted from item where ( author_xchan = '%s' or owner_xchan = '%s' or source_xchan = '%s' )
+			and mid = '%s' and uid = %d limit 1",
+			dbesc($sender['hash']),
+			dbesc($sender['hash']),
+			dbesc($sender['hash']),
+			dbesc($item['mid']),
+			intval($uid)
+		);
+
+		if($r) {
+			if($r[0]['author_xchan'] === $sender || $r[0]['owner_xchan'] === $sender || $r[0]['source_xchan'] === $sender)
+				$ownership_valid = true;
+
+			$post_id = $r[0]['id'];
+			$item_found = true;
+		}
+		else {
+
+			// perhaps the item is still in transit and the delete notification got here before the actual item did. Store it with the deleted flag set.
+			// item_store() won't try to deliver any notifications or start delivery chains if this flag is set.
+			// This means we won't end up with potentially even more delivery threads trying to push this delete notification.
+			// But this will ensure that if the (undeleted) original post comes in at a later date, we'll reject it because it will have an older timestamp.
+
+			logger('delete received for non-existent item - storing item data.');
+
+			if($item['author_xchan'] === $sender || $item['owner_xchan'] === $sender || $item['source_xchan'] === $sender) {
+				$ownership_valid = true;
+				$item_result = item_store($item);
+				$post_id = $item_result['item_id'];
+			}
+		}
+
+		if($ownership_valid === false) {
+			logger('delete_imported_item: failed: ownership issue');
+			return false;
+		}
+
+		if($item_found) {
+			if(intval($r[0]['item_deleted'])) {
+				logger('delete_imported_item: item was already deleted');
+				if(! $relay)
+					return false;
+
+				// This is a bit hackish, but may have to suffice until the notification/delivery loop is optimised
+				// a bit further. We're going to strip the ITEM_ORIGIN on this item if it's a comment, because
+				// it was already deleted, and we're already relaying, and this ensures that no other process or
+				// code path downstream can relay it again (causing a loop). Since it's already gone it's not coming
+				// back, and we aren't going to (or shouldn't at any rate) delete it again in the future - so losing
+				// this information from the metadata should have no other discernible impact.
+
+				if (($r[0]['id'] != $r[0]['parent']) && intval($r[0]['item_origin'])) {
+					q("update item set item_origin = 0 where id = %d and uid = %d",
+						intval($r[0]['id']),
+						intval($r[0]['uid'])
+					);
+				}
+			}
+
+
+			// Use phased deletion to set the deleted flag, call both tag_deliver and the notifier to notify downstream channels
+			// and then clean up after ourselves with a cron job after several days to do the delete_item_lowlevel() (DROPITEM_PHASE2).
+
+			drop_item($post_id, false, DROPITEM_PHASE1);
+			tag_deliver($uid, $post_id);
+		}
+
+		return $post_id;
+	}
+
+	static function process_mail_delivery($sender, $arr, $deliveries) {
+
+		$result = array();
+
+		if($sender != $arr['from_xchan']) {
+			logger('process_mail_delivery: sender is not mail author');
+			return;
+		}
+
+		foreach($deliveries as $d) {
+	
+			$DR = new \Zotlabs\Lib\DReport(z_root(),$sender,$d,$arr['mid']);
+
+			$r = q("select * from channel where channel_hash = '%s' limit 1",
+				dbesc($d['hash'])
+			);
+
+			if(! $r) {
+				$DR->update('recipient not found');
+				$result[] = $DR->get();
+				continue;
+			}
+
+			$channel = $r[0];
+			$DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>');
+
+
+			if(! perm_is_allowed($channel['channel_id'],$sender,'post_mail')) {
+
+				/* 
+				 * Always allow somebody to reply if you initiated the conversation. It's anti-social
+				 * and a bit rude to send a private message to somebody and block their ability to respond.
+				 * If you are being harrassed and want to put an end to it, delete the conversation.
+				 */
+
+				$return = false;
+				if($arr['parent_mid']) {
+					$return = q("select * from mail where mid = '%s' and channel_id = %d limit 1",
+						dbesc($arr['parent_mid']),
+						intval($channel['channel_id'])
+					);
+				}
+				if(! $return) {
+					logger("permission denied for mail delivery {$channel['channel_id']}");
+					$DR->update('permission denied');
+					$result[] = $DR->get();
+					continue;
+				}
+			}
+
+
+			$r = q("select id from mail where mid = '%s' and channel_id = %d limit 1",
+				dbesc($arr['mid']),
+				intval($channel['channel_id'])
+			);
+			if($r) {
+				if(intval($arr['mail_recalled'])) {
+					$x = q("delete from mail where id = %d and channel_id = %d",
+						intval($r[0]['id']),
+						intval($channel['channel_id'])
+					);
+					$DR->update('mail recalled');
+					$result[] = $DR->get();
+					logger('mail_recalled');
+				}
+				else {
+					$DR->update('duplicate mail received');
+					$result[] = $DR->get();
+					logger('duplicate mail received');
+				}
+				continue;
+			}
+			else {
+				$arr['account_id'] = $channel['channel_account_id'];
+				$arr['channel_id'] = $channel['channel_id'];
+				$item_id = mail_store($arr);
+				$DR->update('mail delivered');
+				$result[] = $DR->get();
+			}
+		}
+
+		return $result;
+	}
+
+
+	/**
+	 * @brief Processes delivery of profile.
+	 *
+	 * @see import_directory_profile()
+	 * @param array $sender an associative array
+	 *   * \e string \b hash a xchan_hash
+	 * @param array $arr
+	 * @param array $deliveries (unused)
+	 */
+
+	static function process_profile_delivery($sender, $arr, $deliveries) {
+
+		logger('process_profile_delivery', LOGGER_DEBUG);
+
+		$r = q("select xchan_addr from xchan where xchan_hash = '%s' limit 1",
+				dbesc($sender['hash'])
+		);
+		if($r) {
+			Libzotdir::import_directory_profile($sender, $arr, $r[0]['xchan_addr'], UPDATE_FLAGS_UPDATED, 0);
+		}
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * @param array $sender an associative array
+	 *   * \e string \b hash a xchan_hash
+	 * @param array $arr
+	 * @param array $deliveries (unused) deliveries is irrelevant
+	 */
+	static function process_location_delivery($sender, $arr, $deliveries) {
+
+		// deliveries is irrelevant
+		logger('process_location_delivery', LOGGER_DEBUG);
+
+		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
+			dbesc($sender)
+		);
+		if($r) {
+			$xchan = [ 'id' => $r[0]['xchan_guid'], 'id_sig' => $r[0]['xchan_guid_sig'],
+				'hash' => $r[0]['xchan_hash'], 'public_key' => $r[0]['xchan_pubkey'] ];
+		}
+		if(array_key_exists('locations',$arr) && $arr['locations']) {
+			$x = Libsync::sync_locations($xchan,$arr,true);
+			logger('results: ' . print_r($x,true), LOGGER_DEBUG);
+			if($x['changed']) {
+				$guid = random_string() . '@' . App::get_hostname();
+				Libzotdir::update_modtime($sender,$r[0]['xchan_guid'],$arr['locations'][0]['address'],UPDATE_FLAGS_UPDATED);
+			}
+		}
+	}
+
+	/**
+	 * @brief Checks for a moved channel and sets the channel_moved flag.
+	 *
+	 * Currently the effect of this flag is to turn the channel into 'read-only' mode.
+	 * New content will not be processed (there was still an issue with blocking the
+	 * ability to post comments as of 10-Mar-2016).
+	 * We do not physically remove the channel at this time. The hub admin may choose
+	 * to do so, but is encouraged to allow a grace period of several days in case there
+	 * are any issues migrating content. This packet will generally be received by the
+	 * original site when the basic channel import has been processed.
+	 *
+	 * This will only be executed on the old location
+	 * if a new location is reported and there is only one location record.
+	 * The rest of the hubloc syncronisation will be handled within
+	 * sync_locations
+	 *
+	 * @param string $sender_hash A channel hash
+	 * @param array $locations
+	 */
+
+	static function check_location_move($sender_hash, $locations) {
+
+		if(! $locations)
+			return;
+
+		if(count($locations) != 1)
+			return;
+
+		$loc = $locations[0];
+
+		$r = q("select * from channel where channel_hash = '%s' limit 1",
+			dbesc($sender_hash)
+		);
+
+		if(! $r)
+			return;
+
+		if($loc['url'] !== z_root()) {
+			$x = q("update channel set channel_moved = '%s' where channel_hash = '%s' limit 1",
+				dbesc($loc['url']),
+				dbesc($sender_hash)
+			);
+
+			// federation plugins may wish to notify connections
+			// of the move on singleton networks
+
+			$arr = [
+				'channel' => $r[0],
+				'locations' => $locations
+			];
+			/**
+			 * @hooks location_move
+			 *   Called when a new location has been provided to a UNO channel (indicating a move rather than a clone).
+			 *   * \e array \b channel
+			 *   * \e array \b locations
+			 */
+			call_hooks('location_move', $arr);
+		}
+	}
+
+
+
+	/**
+	 * @brief Returns an array with all known distinct hubs for this channel.
+	 *
+	 * @see self::get_hublocs()
+	 * @param array $channel an associative array which must contain
+	 *  * \e string \b channel_hash the hash of the channel
+	 * @return array an array with associative arrays
+	 */
+
+	static function encode_locations($channel) {
+		$ret = [];
+
+		$x = self::get_hublocs($channel['channel_hash']);
+
+		if($x && count($x)) {
+			foreach($x as $hub) {
+
+				// if this is a local channel that has been deleted, the hubloc is no good - make sure it is marked deleted
+				// so that nobody tries to use it.
+
+				if(intval($channel['channel_removed']) && $hub['hubloc_url'] === z_root())
+					$hub['hubloc_deleted'] = 1;
+
+				$ret[] = [
+					'host'     => $hub['hubloc_host'],
+					'address'  => $hub['hubloc_addr'],
+					'id_url'   => $hub['hubloc_id_url'],
+					'primary'  => (intval($hub['hubloc_primary']) ? true : false),
+					'url'      => $hub['hubloc_url'],
+					'url_sig'  => $hub['hubloc_url_sig'],
+					'site_id'  => $hub['hubloc_site_id'],
+					'callback' => $hub['hubloc_callback'],
+					'sitekey'  => $hub['hubloc_sitekey'],
+					'deleted'  => (intval($hub['hubloc_deleted']) ? true : false)
+				];
+			}
+		}
+
+		return $ret;
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * @param array $arr
+	 * @param string $pubkey
+	 * @return boolean true if updated or inserted
+	 */
+	
+	static function import_site($arr) {
+
+		if( (! is_array($arr)) || (! $arr['url']) || (! $arr['site_sig']))
+			return false;
+
+		if(! self::verify($arr['url'], $arr['site_sig'], $arr['sitekey'])) {
+			logger('Bad url_sig');
+			return false;
+		}
+
+		$update = false;
+		$exists = false;
+
+		$r = q("select * from site where site_url = '%s' limit 1",
+			dbesc($arr['url'])
+		);
+		if($r) {
+			$exists = true;
+			$siterecord = $r[0];
+		}
+
+		$site_directory = 0;
+		if($arr['directory_mode'] == 'normal')
+			$site_directory = DIRECTORY_MODE_NORMAL;
+		if($arr['directory_mode'] == 'primary')
+			$site_directory = DIRECTORY_MODE_PRIMARY;
+		if($arr['directory_mode'] == 'secondary')
+			$site_directory = DIRECTORY_MODE_SECONDARY;
+		if($arr['directory_mode'] == 'standalone')
+			$site_directory = DIRECTORY_MODE_STANDALONE;
+
+		$register_policy = 0;
+		if($arr['register_policy'] == 'closed')
+			$register_policy = REGISTER_CLOSED;
+		if($arr['register_policy'] == 'open')
+			$register_policy = REGISTER_OPEN;
+		if($arr['register_policy'] == 'approve')
+			$register_policy = REGISTER_APPROVE;
+
+		$access_policy = 0;
+		if(array_key_exists('access_policy',$arr)) {
+			if($arr['access_policy'] === 'private')
+				$access_policy = ACCESS_PRIVATE;
+			if($arr['access_policy'] === 'paid')
+				$access_policy = ACCESS_PAID;
+			if($arr['access_policy'] === 'free')
+				$access_policy = ACCESS_FREE;
+			if($arr['access_policy'] === 'tiered')
+				$access_policy = ACCESS_TIERED;
+		}
+
+		// don't let insecure sites register as public hubs
+
+		if(strpos($arr['url'],'https://') === false)
+			$access_policy = ACCESS_PRIVATE;
+
+		if($access_policy != ACCESS_PRIVATE) {
+			$x = z_fetch_url($arr['url'] . '/siteinfo.json');
+			if(! $x['success'])
+				$access_policy = ACCESS_PRIVATE;
+		}
+
+		$directory_url = htmlspecialchars($arr['directory_url'],ENT_COMPAT,'UTF-8',false);
+		$url = htmlspecialchars(strtolower($arr['url']),ENT_COMPAT,'UTF-8',false);
+		$sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false);
+		$site_location = htmlspecialchars($arr['location'],ENT_COMPAT,'UTF-8',false);
+		$site_realm = htmlspecialchars($arr['realm'],ENT_COMPAT,'UTF-8',false);
+		$site_project = htmlspecialchars($arr['project'],ENT_COMPAT,'UTF-8',false);
+		$site_crypto = ((array_key_exists('encryption',$arr) && is_array($arr['encryption'])) ? htmlspecialchars(implode(',',$arr['encryption']),ENT_COMPAT,'UTF-8',false) : '');
+		$site_version = ((array_key_exists('version',$arr)) ? htmlspecialchars($arr['version'],ENT_COMPAT,'UTF-8',false) : '');
+
+		// You can have one and only one primary directory per realm.
+		// Downgrade any others claiming to be primary. As they have
+		// flubbed up this badly already, don't let them be directory servers at all.
+
+		if(($site_directory === DIRECTORY_MODE_PRIMARY)
+			&& ($site_realm === get_directory_realm())
+			&& ($arr['url'] != get_directory_primary())) {
+			$site_directory = DIRECTORY_MODE_NORMAL;
+		}
+
+		$site_flags = $site_directory;
+
+		if(array_key_exists('zot',$arr)) {
+			set_sconfig($arr['url'],'system','zot_version',$arr['zot']);
+		}
+
+		if($exists) {
+			if(($siterecord['site_flags'] != $site_flags)
+				|| ($siterecord['site_access'] != $access_policy)
+				|| ($siterecord['site_directory'] != $directory_url)
+				|| ($siterecord['site_sellpage'] != $sellpage)
+				|| ($siterecord['site_location'] != $site_location)
+				|| ($siterecord['site_register'] != $register_policy)
+				|| ($siterecord['site_project'] != $site_project)
+				|| ($siterecord['site_realm'] != $site_realm)
+				|| ($siterecord['site_crypto'] != $site_crypto)
+				|| ($siterecord['site_version'] != $site_version)   ) {
+
+				$update = true;
+
+	//			logger('import_site: input: ' . print_r($arr,true));
+	//			logger('import_site: stored: ' . print_r($siterecord,true));
+
+				$r = q("update site set site_dead = 0, site_location = '%s', site_flags = %d, site_access = %d, site_directory = '%s', site_register = %d, site_update = '%s', site_sellpage = '%s', site_realm = '%s', site_type = %d, site_project = '%s', site_version = '%s', site_crypto = '%s'
+					where site_url = '%s'",
+					dbesc($site_location),
+					intval($site_flags),
+					intval($access_policy),
+					dbesc($directory_url),
+					intval($register_policy),
+					dbesc(datetime_convert()),
+					dbesc($sellpage),
+					dbesc($site_realm),
+					intval(SITE_TYPE_ZOT),
+					dbesc($site_project),
+					dbesc($site_version),
+					dbesc($site_crypto),
+					dbesc($url)
+				);
+				if(! $r) {
+					logger('Update failed. ' . print_r($arr,true));
+				}
+			}
+			else {
+				// update the timestamp to indicate we communicated with this site
+				q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'",
+					dbesc(datetime_convert()),
+					dbesc($url)
+				);
+			}
+		}
+		else {
+			$update = true;
+
+			$r = site_store_lowlevel(
+				[
+					'site_location'  => $site_location,
+					'site_url'       => $url,
+					'site_access'    => intval($access_policy),
+					'site_flags'     => intval($site_flags),
+					'site_update'    => datetime_convert(),
+					'site_directory' => $directory_url,
+					'site_register'  => intval($register_policy),
+					'site_sellpage'  => $sellpage,
+					'site_realm'     => $site_realm,
+					'site_type'      => intval(SITE_TYPE_ZOT),
+					'site_project'   => $site_project,
+					'site_version'   => $site_version,
+					'site_crypto'    => $site_crypto
+				]
+			);
+
+			if(! $r) {
+				logger('Record create failed. ' . print_r($arr,true));
+			}
+		}
+
+		return $update;
+	}
+
+	/**
+	 * @brief Returns path to /rpost
+	 *
+	 * @todo We probably should make rpost discoverable.
+	 *
+	 * @param array $observer
+	 *   * \e string \b xchan_url
+	 * @return string
+	 */
+	static function get_rpost_path($observer) {
+		if(! $observer)
+			return '';
+
+		$parsed = parse_url($observer['xchan_url']);
+
+		return $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f=';
+	}
+
+	/**
+	 * @brief
+	 *
+	 * @param array $x
+	 * @return boolean|string return false or a hash
+	 */
+
+	static function import_author_zot($x) {
+
+		// Check that we have both a hubloc and xchan record - as occasionally storage calls will fail and
+		// we may only end up with one; which results in posts with no author name or photo and are a bit
+		// of a hassle to repair. If either or both are missing, do a full discovery probe.
+
+		$hash = self::make_xchan_hash($x['id'],$x['key']);
+
+		$desturl = $x['url'];
+
+		$r1 = q("select hubloc_url, hubloc_updated, site_dead from hubloc left join site on
+			hubloc_url = site_url where hubloc_guid = '%s' and hubloc_guid_sig = '%s' and hubloc_primary = 1 limit 1",
+			dbesc($x['id']),
+			dbesc($x['id_sig'])
+		);
+
+		$r2 = q("select xchan_hash from xchan where xchan_guid = '%s' and xchan_guid_sig = '%s' limit 1",
+			dbesc($x['id']),
+			dbesc($x['id_sig'])
+		);
+
+		$site_dead = false;
+
+		if($r1 && intval($r1[0]['site_dead'])) {
+			$site_dead = true;
+		}
+
+		// We have valid and somewhat fresh information. Always true if it is our own site.
+
+		if($r1 && $r2 && ( $r1[0]['hubloc_updated'] > datetime_convert('UTC','UTC','now - 1 week') || $r1[0]['hubloc_url'] === z_root() ) ) {
+			logger('in cache', LOGGER_DEBUG);
+			return $hash;
+		}
+
+		logger('not in cache or cache stale - probing: ' . print_r($x,true), LOGGER_DEBUG,LOG_INFO);
+
+		// The primary hub may be dead. Try to find another one associated with this identity that is
+		// still alive. If we find one, use that url for the discovery/refresh probe. Otherwise, the dead site
+		// is all we have and there is no point probing it. Just return the hash indicating we have a
+		// cached entry and the identity is valid. It's just unreachable until they bring back their
+		// server from the grave or create another clone elsewhere.
+
+		if($site_dead) {
+			logger('dead site - ignoring', LOGGER_DEBUG,LOG_INFO);
+
+			$r = q("select hubloc_id_url from hubloc left join site on hubloc_url = site_url
+				where hubloc_hash = '%s' and site_dead = 0",
+				dbesc($hash)
+			);
+			if($r) {
+				logger('found another site that is not dead: ' . $r[0]['hubloc_url'], LOGGER_DEBUG,LOG_INFO);
+				$desturl = $r[0]['hubloc_url'];
+			}
+			else {
+				return $hash;
+			}
+		}
+
+		$them = [ 'hubloc_id_url' => $desturl ];
+		if(self::refresh($them))
+			return $hash;
+
+		return false;
+	}
+
+	static function zotinfo($arr) {
+
+		$ret = [];
+
+		$zhash     = ((x($arr,'guid_hash'))  ? $arr['guid_hash']   : '');
+		$zguid     = ((x($arr,'guid'))       ? $arr['guid']        : '');
+		$zguid_sig = ((x($arr,'guid_sig'))   ? $arr['guid_sig']    : '');
+		$zaddr     = ((x($arr,'address'))    ? $arr['address']     : '');
+		$ztarget   = ((x($arr,'target_url')) ? $arr['target_url']  : '');
+		$zsig      = ((x($arr,'target_sig')) ? $arr['target_sig']  : '');
+		$zkey      = ((x($arr,'key'))        ? $arr['key']         : '');
+		$mindate   = ((x($arr,'mindate'))    ? $arr['mindate']     : '');
+		$token     = ((x($arr,'token'))      ? $arr['token']   : '');
+		$feed      = ((x($arr,'feed'))       ? intval($arr['feed']) : 0);
+
+		if($ztarget) {
+			$t = q("select * from hubloc where hubloc_id_url = '%s' limit 1",
+				dbesc($ztarget)
+			);
+			if($t) {
+	
+				$ztarget_hash = $t[0]['hubloc_hash'];
+
+			}
+			else {
+			
+				// should probably perform discovery of the requestor (target) but if they actually had
+				// permissions we would know about them and we only want to know who they are to 
+				// enumerate their specific permissions
+		
+				$ztarget_hash = EMPTY_STR;
+			}
+		}
+
+
+		$r = null;
+
+		if(strlen($zhash)) {
+			$r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+				where channel_hash = '%s' limit 1",
+				dbesc($zhash)
+			);
+		}
+		elseif(strlen($zguid) && strlen($zguid_sig)) {
+			$r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+				where channel_guid = '%s' and channel_guid_sig = '%s' limit 1",
+				dbesc($zguid),
+				dbesc($zguid_sig)
+			);
+		}
+		elseif(strlen($zaddr)) {
+			if(strpos($zaddr,'[system]') === false) {       /* normal address lookup */
+				$r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+					where ( channel_address = '%s' or xchan_addr = '%s' ) limit 1",
+					dbesc($zaddr),
+					dbesc($zaddr)
+				);
+			}
+
+			else {
+
+				/**
+				 * The special address '[system]' will return a system channel if one has been defined,
+				 * Or the first valid channel we find if there are no system channels.
+				 *
+				 * This is used by magic-auth if we have no prior communications with this site - and
+				 * returns an identity on this site which we can use to create a valid hub record so that
+				 * we can exchange signed messages. The precise identity is irrelevant. It's the hub
+				 * information that we really need at the other end - and this will return it.
+				 *
+				 */
+
+				$r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+					where channel_system = 1 order by channel_id limit 1");
+				if(! $r) {
+					$r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+						where channel_removed = 0 order by channel_id limit 1");
+				}
+			}
+		}
+		else {
+			$ret['message'] = 'Invalid request';
+			return($ret);
+		}
+
+		if(! $r) {
+			$ret['message'] = 'Item not found.';
+			return($ret);
+		}
+
+		$e = $r[0];
+
+		$id = $e['channel_id'];
+
+		$sys_channel     = (intval($e['channel_system'])   ? true : false);
+		$special_channel = (($e['channel_pageflags'] & PAGE_PREMIUM)  ? true : false);
+		$adult_channel   = (($e['channel_pageflags'] & PAGE_ADULT)    ? true : false);
+		$censored        = (($e['channel_pageflags'] & PAGE_CENSORED) ? true : false);
+		$searchable      = (($e['channel_pageflags'] & PAGE_HIDDEN)   ? false : true);
+		$deleted         = (intval($e['xchan_deleted']) ? true : false);
+
+		if($deleted || $censored || $sys_channel)
+			$searchable = false;
+
+		$public_forum = false;
+
+		$role = get_pconfig($e['channel_id'],'system','permissions_role');
+		if($role === 'forum' || $role === 'repository') {
+			$public_forum = true;
+		}
+		else {
+			// check if it has characteristics of a public forum based on custom permissions.
+			$m = \Zotlabs\Access\Permissions::FilledAutoperms($e['channel_id']);
+			if($m) {
+				foreach($m as $k => $v) {
+					if($k == 'tag_deliver' && intval($v) == 1)
+						$ch ++;
+					if($k == 'send_stream' && intval($v) == 0)
+						$ch ++;
+				}
+				if($ch == 2)
+					$public_forum = true;
+			}
+		}
+
+
+		//  This is for birthdays and keywords, but must check access permissions
+		$p = q("select * from profile where uid = %d and is_default = 1",
+			intval($e['channel_id'])
+		);
+
+		$profile = array();
+
+		if($p) {
+
+			if(! intval($p[0]['publish']))
+				$searchable = false;
+
+			$profile['description']   = $p[0]['pdesc'];
+			$profile['birthday']      = $p[0]['dob'];
+			if(($profile['birthday'] != '0000-00-00') && (($bd = z_birthday($p[0]['dob'],$e['channel_timezone'])) !== ''))
+				$profile['next_birthday'] = $bd;
+
+			if($age = age($p[0]['dob'],$e['channel_timezone'],''))
+				$profile['age'] = $age;
+			$profile['gender']        = $p[0]['gender'];
+			$profile['marital']       = $p[0]['marital'];
+			$profile['sexual']        = $p[0]['sexual'];
+			$profile['locale']        = $p[0]['locality'];
+			$profile['region']        = $p[0]['region'];
+			$profile['postcode']      = $p[0]['postal_code'];
+			$profile['country']       = $p[0]['country_name'];
+			$profile['about']         = $p[0]['about'];
+			$profile['homepage']      = $p[0]['homepage'];
+			$profile['hometown']      = $p[0]['hometown'];
+
+			if($p[0]['keywords']) {
+				$tags = array();
+				$k = explode(' ',$p[0]['keywords']);
+				if($k) {
+					foreach($k as $kk) {
+						if(trim($kk," \t\n\r\0\x0B,")) {
+							$tags[] = trim($kk," \t\n\r\0\x0B,");
+						}
+					}
+				}
+				if($tags)
+					$profile['keywords'] = $tags;
+			}
+		}
+
+		// Communication details
+
+		$ret['id']             = $e['xchan_guid'];
+		$ret['id_sig']         = self::sign($e['xchan_guid'], $e['channel_prvkey']);
+
+		$ret['primary_location'] = [ 
+			'address'            =>  $e['xchan_addr'],
+			'url'                =>  $e['xchan_url'],
+			'connections_url'    =>  $e['xchan_connurl'],
+			'follow_url'         =>  $e['xchan_follow'],
+		];
+
+		$ret['public_key']     = $e['xchan_pubkey'];
+		$ret['username']       = $e['channel_address'];
+		$ret['name']           = $e['xchan_name'];
+		$ret['name_updated']   = $e['xchan_name_date'];
+		$ret['photo'] = [
+			'url'     => $e['xchan_photo_l'],
+			'type'    => $e['xchan_photo_mimetype'],
+			'updated' => $e['xchan_photo_date']
+		];
+
+		$ret['channel_role'] = get_pconfig($e['channel_id'],'system','permissions_role','custom');
+
+		$ret['searchable']     = $searchable;
+		$ret['adult_content']  = $adult_channel;
+		$ret['public_forum']   = $public_forum;
+		
+		$ret['comments']       = map_scope(\Zotlabs\Access\PermissionLimits::Get($e['channel_id'],'post_comments'));
+		$ret['mail']           = map_scope(\Zotlabs\Access\PermissionLimits::Get($e['channel_id'],'post_mail'));
+
+		if($deleted)
+			$ret['deleted']        = $deleted;
+
+		if(intval($e['channel_removed']))
+			$ret['deleted_locally'] = true;
+
+		// premium or other channel desiring some contact with potential followers before connecting.
+		// This is a template - %s will be replaced with the follow_url we discover for the return channel.
+
+		if($special_channel) {
+			$ret['connect_url'] = (($e['xchan_connpage']) ? $e['xchan_connpage'] : z_root() . '/connect/' . $e['channel_address']);
+		}
+
+		// This is a template for our follow url, %s will be replaced with a webbie
+		if(! $ret['follow_url'])
+			$ret['follow_url'] = z_root() . '/follow?f=&url=%s';
+
+		$permissions = get_all_perms($e['channel_id'],$ztarget_hash,false);
+
+		if($ztarget_hash) {
+			$permissions['connected'] = false;
+			$b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
+				dbesc($ztarget_hash),
+				intval($e['channel_id'])
+			);
+			if($b)
+				$permissions['connected'] = true;
+		}
+
+		if($permissions['view_profile'])
+			$ret['profile']  = $profile;
+
+
+		$concise_perms = [];
+		if($permissions) {
+			foreach($permissions as $k => $v) {
+				if($v) {
+					$concise_perms[] = $k;
+				}
+			}
+			$permissions = implode(',',$concise_perms);
+		}
+
+		$ret['permissions'] = $permissions;
+		$ret['permissions_for']         = $ztarget;
+
+
+		// array of (verified) hubs this channel uses
+
+		$x = self::encode_locations($e);
+		if($x)
+			$ret['locations'] = $x;
+
+		$ret['site'] = self::site_info();
+
+		call_hooks('zotinfo',$ret);
+
+		return($ret);
+
+	}
+
+
+	static function site_info() {
+
+		$signing_key = get_config('system','prvkey');
+		$sig_method  = get_config('system','signature_algorithm','sha256');
+
+		$ret = [];
+		$ret['site'] = [];
+		$ret['site']['url'] = z_root();
+		$ret['site']['site_sig'] = self::sign(z_root(), $signing_key);
+		$ret['site']['post'] = z_root() . '/zot';
+		$ret['site']['openWebAuth']  = z_root() . '/owa';
+		$ret['site']['authRedirect'] = z_root() . '/magic';
+		$ret['site']['sitekey'] = get_config('system','pubkey');
+
+		$dirmode = get_config('system','directory_mode');
+		if(($dirmode === false) || ($dirmode == DIRECTORY_MODE_NORMAL))
+			$ret['site']['directory_mode'] = 'normal';
+
+		if($dirmode == DIRECTORY_MODE_PRIMARY)
+			$ret['site']['directory_mode'] = 'primary';
+		elseif($dirmode == DIRECTORY_MODE_SECONDARY)
+			$ret['site']['directory_mode'] = 'secondary';
+		elseif($dirmode == DIRECTORY_MODE_STANDALONE)
+			$ret['site']['directory_mode'] = 'standalone';
+		if($dirmode != DIRECTORY_MODE_NORMAL)
+			$ret['site']['directory_url'] = z_root() . '/dirsearch';
+
+
+		$ret['site']['encryption'] = crypto_methods();
+		$ret['site']['zot'] = System::get_zot_revision();
+
+		// hide detailed site information if you're off the grid
+
+		if($dirmode != DIRECTORY_MODE_STANDALONE) {
+
+			$register_policy = intval(get_config('system','register_policy'));
+	
+			if($register_policy == REGISTER_CLOSED)
+				$ret['site']['register_policy'] = 'closed';
+			if($register_policy == REGISTER_APPROVE)
+				$ret['site']['register_policy'] = 'approve';
+			if($register_policy == REGISTER_OPEN)
+				$ret['site']['register_policy'] = 'open';
+
+
+			$access_policy = intval(get_config('system','access_policy'));
+
+			if($access_policy == ACCESS_PRIVATE)
+				$ret['site']['access_policy'] = 'private';
+			if($access_policy == ACCESS_PAID)
+				$ret['site']['access_policy'] = 'paid';
+			if($access_policy == ACCESS_FREE)
+				$ret['site']['access_policy'] = 'free';
+			if($access_policy == ACCESS_TIERED)
+				$ret['site']['access_policy'] = 'tiered';
+
+			$ret['site']['accounts'] = account_total();
+
+			require_once('include/channel.php');
+			$ret['site']['channels'] = channel_total();
+
+			$ret['site']['admin'] = get_config('system','admin_email');
+
+			$visible_plugins = array();
+			if(is_array(\App::$plugins) && count(\App::$plugins)) {
+				$r = q("select * from addon where hidden = 0");
+				if($r)
+					foreach($r as $rr)
+						$visible_plugins[] = $rr['aname'];
+			}
+
+			$ret['site']['plugins']    = $visible_plugins;
+			$ret['site']['sitehash']   = get_config('system','location_hash');
+			$ret['site']['sitename']   = get_config('system','sitename');
+			$ret['site']['sellpage']   = get_config('system','sellpage');
+			$ret['site']['location']   = get_config('system','site_location');
+			$ret['site']['realm']      = get_directory_realm();
+			$ret['site']['project']    = System::get_platform_name();
+			$ret['site']['version']    = System::get_project_version();
+
+		}
+
+		return $ret['site'];
+
+	}
+
+	/**
+	 * @brief
+	 *
+	 * @param array $hub
+	 * @param string $sitekey (optional, default empty)
+	 *
+	 * @return string hubloc_url
+	 */
+
+	static function update_hub_connected($hub, $site_id = '') {
+
+		if ($site_id) {
+
+			/*
+			 * This hub has now been proven to be valid.
+			 * Any hub with the same URL and a different sitekey cannot be valid.
+			 * Get rid of them (mark them deleted). There's a good chance they were re-installs.
+			 */
+
+			q("update hubloc set hubloc_deleted = 1, hubloc_error = 1 where hubloc_hash = '%s' and hubloc_url = '%s' and hubloc_site_id != '%s' ",
+				dbesc($hub['hubloc_hash']),
+				dbesc($hub['hubloc_url']),
+				dbesc($site_id)
+			);
+
+		}
+		else {
+			$site_id = $hub['hubloc_site_id'];
+		}
+
+		// $sender['sitekey'] is a new addition to the protocol to distinguish
+		// hublocs coming from re-installed sites. Older sites will not provide
+		// this field and we have to still mark them valid, since we can't tell
+		// if this hubloc has the same sitekey as the packet we received.
+		// Update our DB to show when we last communicated successfully with this hub
+		// This will allow us to prune dead hubs from using up resources
+
+		$t = datetime_convert('UTC', 'UTC', 'now - 15 minutes');
+
+		$r = q("update hubloc set hubloc_connected = '%s' where hubloc_id = %d and hubloc_site_id = '%s' and hubloc_connected < '%s' ",
+			dbesc(datetime_convert()),
+			intval($hub['hubloc_id']),
+			dbesc($site_id),
+			dbesc($t)
+		);
+
+		// a dead hub came back to life - reset any tombstones we might have
+
+		if (intval($hub['hubloc_error'])) {
+			q("update hubloc set hubloc_error = 0 where hubloc_id = %d and hubloc_site_id = '%s' ",
+				intval($hub['hubloc_id']),
+				dbesc($site_id)
+			);
+			if (intval($hub['hubloc_orphancheck'])) {
+				q("update hubloc set hubloc_orphancheck = 0 where hubloc_id = %d and hubloc_site_id = '%s' ",
+					intval($hub['hubloc_id']),
+					dbesc($site_id)
+				);
+			}
+			q("update xchan set xchan_orphan = 0 where xchan_orphan = 1 and xchan_hash = '%s'",
+				dbesc($hub['hubloc_hash'])
+			);
+		}
+
+		return $hub['hubloc_url'];
+	}
+
+
+	static function sign($data,$key,$alg = 'sha256') {
+		if(! $key)
+			return 'no key';
+		$sig = '';
+		openssl_sign($data,$sig,$key,$alg);
+		return $alg . '.' . base64url_encode($sig);
+	}
+
+	static function verify($data,$sig,$key) {
+
+		$verify = 0;
+
+		$x = explode('.',$sig,2);
+
+		if ($key && count($x) === 2) {
+			$alg = $x[0];
+			$signature = base64url_decode($x[1]);
+	
+			$verify = @openssl_verify($data,$signature,$key,$alg);
+
+			if ($verify === (-1)) {
+				while ($msg = openssl_error_string()) {
+					logger('openssl_verify: ' . $msg,LOGGER_NORMAL,LOG_ERR);
+				}
+				btlogger('openssl_verify: key: ' . $key, LOGGER_DEBUG, LOG_ERR); 
+			}
+		}
+		return(($verify > 0) ? true : false);
+	}
+
+
+
+	static function is_zot_request() {
+
+		$x = getBestSupportedMimeType([ 'application/x-zot+json' ]);
+		return(($x) ? true : false);
+	}
+
+}
diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php
new file mode 100644
index 000000000..91d089c86
--- /dev/null
+++ b/Zotlabs/Lib/Libzotdir.php
@@ -0,0 +1,654 @@
+ $preferred ];
+		}
+		else {
+			return [];
+		}
+	}
+
+
+	/**
+	 * Directories may come and go over time. We will need to check that our
+	 * directory server is still valid occasionally, and reset to something that
+	 * is if our directory has gone offline for any reason
+	 */
+
+	static function check_upstream_directory() {
+
+		$directory = get_config('system', 'directory_server');
+
+		// it's possible there is no directory server configured and the local hub is being used.
+		// If so, default to preserving the absence of a specific server setting.
+
+		$isadir = true;
+
+		if ($directory) {
+			$j = Zotfinger::exec($directory);
+			if(array_path_exists('data/directory_mode',$j)) {
+				if ($j['data']['directory_mode'] === 'normal') {
+					$isadir = false;
+				}
+			}
+		}
+
+		if (! $isadir)
+			set_config('system', 'directory_server', '');
+	}
+
+
+	static function get_directory_setting($observer, $setting) {
+
+		if ($observer)
+			$ret = get_xconfig($observer, 'directory', $setting);
+		else
+			$ret = ((array_key_exists($setting,$_SESSION)) ? intval($_SESSION[$setting]) : false);
+
+		if($ret === false)
+			$ret = get_config('directory', $setting);
+
+
+		// 'safemode' is the default if there is no observer or no established preference. 
+
+		if($setting === 'safemode' && $ret === false)
+			$ret = 1;
+
+		if($setting === 'globaldir' && intval(get_config('system','localdir_hide')))
+			$ret = 1;
+
+		return $ret;
+	}
+
+	/**
+	 * @brief Called by the directory_sort widget.
+	 */
+	static function dir_sort_links() {
+
+		$safe_mode = 1;
+
+		$observer = get_observer_hash();
+
+		$safe_mode = self::get_directory_setting($observer, 'safemode');
+		$globaldir = self::get_directory_setting($observer, 'globaldir');
+		$pubforums = self::get_directory_setting($observer, 'pubforums');
+
+		$hide_local = intval(get_config('system','localdir_hide'));
+		if($hide_local)
+			$globaldir = 1;
+
+
+		// Build urls without order and pubforums so it's easy to tack on the changed value
+		// Probably there's an easier way to do this
+
+		$directory_sort_order = get_config('system','directory_sort_order');
+		if(! $directory_sort_order)
+			$directory_sort_order = 'date';
+
+		$current_order = (($_REQUEST['order']) ? $_REQUEST['order'] : $directory_sort_order);
+		$suggest = (($_REQUEST['suggest']) ? '&suggest=' . $_REQUEST['suggest'] : '');
+
+		$url = 'directory?f=';
+
+		$tmp = array_merge($_GET,$_POST);
+		unset($tmp['suggest']);
+		unset($tmp['pubforums']);
+		unset($tmp['global']);
+		unset($tmp['safe']);
+		unset($tmp['q']);
+		unset($tmp['f']);
+		$forumsurl = $url . http_build_query($tmp) . $suggest;
+
+		$o = replace_macros(get_markup_template('dir_sort_links.tpl'), [
+			'$header'    => t('Directory Options'),
+			'$forumsurl' => $forumsurl,
+			'$safemode'  => array('safemode', t('Safe Mode'),$safe_mode,'',array(t('No'), t('Yes')),' onchange=\'window.location.href="' . $forumsurl . '&safe="+(this.checked ? 1 : 0)\''),
+			'$pubforums' => array('pubforums', t('Public Forums Only'),$pubforums,'',array(t('No'), t('Yes')),' onchange=\'window.location.href="' . $forumsurl . '&pubforums="+(this.checked ? 1 : 0)\''),
+			'$hide_local' => $hide_local,
+			'$globaldir' => array('globaldir', t('This Website Only'), 1-intval($globaldir),'',array(t('No'), t('Yes')),' onchange=\'window.location.href="' . $forumsurl . '&global="+(this.checked ? 0 : 1)\''),
+		]);
+
+		return $o;
+	}
+
+	/**
+	 * @brief Checks the directory mode of this hub.
+	 *
+	 * Checks the directory mode of this hub to see if it is some form of directory server. If it is,
+	 * get the directory realm of this hub. Fetch a list of all other directory servers in this realm and request
+	 * a directory sync packet. This will contain both directory updates and new ratings. Store these all in the DB. 
+	 * In the case of updates, we will query each of them asynchronously from a poller task. Ratings are stored 
+	 * directly if the rater's signature matches.
+	 *
+	 * @param int $dirmode;
+	 */
+
+	static function sync_directories($dirmode) {
+
+		if ($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_NORMAL)
+			return;
+
+		$realm = get_directory_realm();
+		if ($realm == DIRECTORY_REALM) {
+			$r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and site_type = %d and ( site_realm = '%s' or site_realm = '') ",
+				intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY),
+				dbesc(z_root()),
+				intval(SITE_TYPE_ZOT),
+				dbesc($realm)
+			);
+		} 
+		else {
+			$r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and site_realm like '%s' and site_type = %d ",
+				intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY),
+				dbesc(z_root()),
+				dbesc(protect_sprintf('%' . $realm . '%')),
+				intval(SITE_TYPE_ZOT)
+			);
+		}
+
+		// If there are no directory servers, setup the fallback master
+		/** @FIXME What to do if we're in a different realm? */
+
+		if ((! $r) && (z_root() != DIRECTORY_FALLBACK_MASTER)) {
+
+			$x = site_store_lowlevel(
+				[
+					'site_url'       => DIRECTORY_FALLBACK_MASTER,
+					'site_flags'     => DIRECTORY_MODE_PRIMARY,
+					'site_update'    => NULL_DATE, 
+					'site_directory' => DIRECTORY_FALLBACK_MASTER . '/dirsearch',
+					'site_realm'     => DIRECTORY_REALM,
+					'site_valid'     => 1,
+				]
+			);
+
+			$r = q("select * from site where site_flags in (%d, %d) and site_url != '%s' and site_type = %d ",
+				intval(DIRECTORY_MODE_PRIMARY),
+				intval(DIRECTORY_MODE_SECONDARY),
+				dbesc(z_root()),
+				intval(SITE_TYPE_ZOT)
+			);
+		}
+		if (! $r)
+			return;
+
+		foreach ($r as $rr) {
+			if (! $rr['site_directory'])
+				continue;
+
+			logger('sync directories: ' . $rr['site_directory']);
+
+			// for brand new directory servers, only load the last couple of days.
+			// It will take about a month for a new directory to obtain the full current repertoire of channels.
+			/** @FIXME Go back and pick up earlier ratings if this is a new directory server. These do not get refreshed. */
+
+			$token = get_config('system','realm_token');
+
+			$syncdate = (($rr['site_sync'] <= NULL_DATE) ? datetime_convert('UTC','UTC','now - 2 days') : $rr['site_sync']);
+			$x = z_fetch_url($rr['site_directory'] . '?f=&sync=' . urlencode($syncdate) . (($token) ? '&t=' . $token : ''));
+
+			if (! $x['success'])
+				continue;
+
+			$j = json_decode($x['body'],true);
+			if (!($j['transactions']) || ($j['ratings']))
+				continue;
+
+			q("update site set site_sync = '%s' where site_url = '%s'",
+				dbesc(datetime_convert()),
+				dbesc($rr['site_url'])
+			);
+
+			logger('sync_directories: ' . $rr['site_url'] . ': ' . print_r($j,true), LOGGER_DATA);
+
+			if (is_array($j['transactions']) && count($j['transactions'])) {
+				foreach ($j['transactions'] as $t) {
+					$r = q("select * from updates where ud_guid = '%s' limit 1",
+						dbesc($t['transaction_id'])
+					);
+					if($r)
+						continue;
+
+					$ud_flags = 0;
+					if (is_array($t['flags']) && in_array('deleted',$t['flags']))
+						$ud_flags |= UPDATE_FLAGS_DELETED;
+					if (is_array($t['flags']) && in_array('forced',$t['flags']))
+						$ud_flags |= UPDATE_FLAGS_FORCED;
+	
+					$z = q("insert into updates ( ud_hash, ud_guid, ud_date, ud_flags, ud_addr )
+						values ( '%s', '%s', '%s', %d, '%s' ) ",
+						dbesc($t['hash']),
+						dbesc($t['transaction_id']),
+						dbesc($t['timestamp']),
+						intval($ud_flags),
+						dbesc($t['address'])
+					);
+				}
+			}
+		}
+	}
+
+
+
+	/**
+	 * @brief
+	 *
+	 * Given an update record, probe the channel, grab a zot-info packet and refresh/sync the data.
+	 *
+	 * Ignore updating records marked as deleted.
+	 *
+	 * If successful, sets ud_last in the DB to the current datetime for this
+	 * reddress/webbie.
+	 *
+	 * @param array $ud Entry from update table
+	 */
+
+	static function update_directory_entry($ud) {
+
+		logger('update_directory_entry: ' . print_r($ud,true), LOGGER_DATA);
+
+		if ($ud['ud_addr'] && (! ($ud['ud_flags'] & UPDATE_FLAGS_DELETED))) {
+			$success = false;
+
+			$href = \Zotlabs\Lib\Webfinger::zot_url(punify($url));
+			if($href) {
+				$zf = \Zotlabs\Lib\Zotfinger::exec($href);
+			}
+			if(is_array($zf) && array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) {
+				$xc = Libzot::import_xchan($zf['data'], 0, $ud);
+			}
+			else {
+				q("update updates set ud_last = '%s' where ud_addr = '%s'",
+					dbesc(datetime_convert()),
+					dbesc($ud['ud_addr'])
+				);
+			}
+		}
+	}
+
+
+	/**
+	 * @brief Push local channel updates to a local directory server.
+	 *
+	 * This is called from include/directory.php if a profile is to be pushed to the
+	 * directory and the local hub in this case is any kind of directory server.
+	 *
+	 * @param int $uid
+	 * @param boolean $force
+	 */
+
+	static function local_dir_update($uid, $force) {
+
+	
+		logger('local_dir_update: uid: ' . $uid, LOGGER_DEBUG);
+
+		$p = q("select channel.channel_hash, channel_address, channel_timezone, profile.* from profile left join channel on channel_id = uid where uid = %d and is_default = 1",
+			intval($uid)
+		);
+
+		$profile = array();
+		$profile['encoding'] = 'zot';
+
+		if ($p) {
+			$hash = $p[0]['channel_hash'];
+
+			$profile['description'] = $p[0]['pdesc'];
+			$profile['birthday']    = $p[0]['dob'];
+			if ($age = age($p[0]['dob'],$p[0]['channel_timezone'],''))  
+				$profile['age'] = $age;
+
+			$profile['gender']      = $p[0]['gender'];
+			$profile['marital']     = $p[0]['marital'];
+			$profile['sexual']      = $p[0]['sexual'];
+			$profile['locale']      = $p[0]['locality'];
+			$profile['region']      = $p[0]['region'];
+			$profile['postcode']    = $p[0]['postal_code'];
+			$profile['country']     = $p[0]['country_name'];
+			$profile['about']       = $p[0]['about'];
+			$profile['homepage']    = $p[0]['homepage'];
+			$profile['hometown']    = $p[0]['hometown'];
+
+			if ($p[0]['keywords']) {
+				$tags = array();
+				$k = explode(' ', $p[0]['keywords']);
+				if ($k)
+					foreach ($k as $kk)
+						if (trim($kk))
+							$tags[] = trim($kk);
+
+				if ($tags)
+					$profile['keywords'] = $tags;
+			}
+
+			$hidden = (1 - intval($p[0]['publish']));
+
+			logger('hidden: ' . $hidden);
+
+			$r = q("select xchan_hidden from xchan where xchan_hash = '%s' limit 1",
+				dbesc($p[0]['channel_hash'])
+			);
+
+			if(intval($r[0]['xchan_hidden']) != $hidden) {
+				$r = q("update xchan set xchan_hidden = %d where xchan_hash = '%s'",
+					intval($hidden),
+					dbesc($p[0]['channel_hash'])
+				);
+			}
+
+			$arr = [ 'channel_id' => $uid, 'hash' => $hash, 'profile' => $profile ];
+			call_hooks('local_dir_update', $arr);
+
+			$address = channel_reddress($p[0]);
+
+			if (perm_is_allowed($uid, '', 'view_profile')) {
+				self::import_directory_profile($hash, $arr['profile'], $address, 0);
+			}
+			else {
+				// they may have made it private
+				$r = q("delete from xprof where xprof_hash = '%s'",
+					dbesc($hash)
+				);
+				$r = q("delete from xtag where xtag_hash = '%s'",
+					dbesc($hash)
+				);
+			}
+	
+		}
+
+		$ud_hash = random_string() . '@' . \App::get_hostname();
+		self::update_modtime($hash, $ud_hash, channel_reddress($p[0]),(($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED));
+	}
+
+
+
+	/**
+	 * @brief Imports a directory profile.
+	 *
+	 * @param string $hash
+	 * @param array $profile
+	 * @param string $addr
+	 * @param number $ud_flags (optional) UPDATE_FLAGS_UPDATED
+	 * @param number $suppress_update (optional) default 0
+	 * @return boolean $updated if something changed
+	 */
+
+	static function import_directory_profile($hash, $profile, $addr, $ud_flags = UPDATE_FLAGS_UPDATED, $suppress_update = 0) {
+
+		logger('import_directory_profile', LOGGER_DEBUG);
+		if (! $hash)
+			return false;
+
+		$arr = array();
+
+		$arr['xprof_hash']         = $hash;
+		$arr['xprof_dob']          = (($profile['birthday'] === '0000-00-00') ? $profile['birthday'] : datetime_convert('','',$profile['birthday'],'Y-m-d')); // !!!! check this for 0000 year
+		$arr['xprof_age']          = (($profile['age'])         ? intval($profile['age']) : 0);
+		$arr['xprof_desc']         = (($profile['description']) ? htmlspecialchars($profile['description'], ENT_COMPAT,'UTF-8',false) : '');	
+		$arr['xprof_gender']       = (($profile['gender'])      ? htmlspecialchars($profile['gender'],      ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_marital']      = (($profile['marital'])     ? htmlspecialchars($profile['marital'],     ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_sexual']       = (($profile['sexual'])      ? htmlspecialchars($profile['sexual'],      ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_locale']       = (($profile['locale'])      ? htmlspecialchars($profile['locale'],      ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_region']       = (($profile['region'])      ? htmlspecialchars($profile['region'],      ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_postcode']     = (($profile['postcode'])    ? htmlspecialchars($profile['postcode'],    ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_country']      = (($profile['country'])     ? htmlspecialchars($profile['country'],     ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_about']        = (($profile['about'])       ? htmlspecialchars($profile['about'],       ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_homepage']     = (($profile['homepage'])    ? htmlspecialchars($profile['homepage'],    ENT_COMPAT,'UTF-8',false) : '');
+		$arr['xprof_hometown']     = (($profile['hometown'])    ? htmlspecialchars($profile['hometown'],    ENT_COMPAT,'UTF-8',false) : '');
+
+		$clean = array();
+		if (array_key_exists('keywords', $profile) and is_array($profile['keywords'])) {
+			self::import_directory_keywords($hash,$profile['keywords']);
+			foreach ($profile['keywords'] as $kw) {
+				$kw = trim(htmlspecialchars($kw,ENT_COMPAT, 'UTF-8', false));
+				$kw = trim($kw, ',');
+				$clean[] = $kw;
+			}
+		}
+
+		$arr['xprof_keywords'] = implode(' ',$clean);
+
+		// Self censored, make it so
+		// These are not translated, so the German "erwachsenen" keyword will not censor the directory profile. Only the English form - "adult".
+
+
+		if(in_arrayi('nsfw',$clean) || in_arrayi('adult',$clean)) {
+			q("update xchan set xchan_selfcensored = 1 where xchan_hash = '%s'",
+				dbesc($hash)
+			);
+		}
+
+		$r = q("select * from xprof where xprof_hash = '%s' limit 1",
+			dbesc($hash)
+		);
+
+		if ($arr['xprof_age'] > 150)
+			$arr['xprof_age'] = 150;
+		if ($arr['xprof_age'] < 0)
+			$arr['xprof_age'] = 0;
+
+		if ($r) {
+			$update = false;
+			foreach ($r[0] as $k => $v) {
+				if ((array_key_exists($k,$arr)) && ($arr[$k] != $v)) {
+					logger('import_directory_profile: update ' . $k . ' => ' . $arr[$k]);
+					$update = true;
+					break;
+				}
+			}
+			if ($update) {
+				q("update xprof set
+					xprof_desc = '%s',
+					xprof_dob = '%s',
+					xprof_age = %d,
+					xprof_gender = '%s',
+					xprof_marital = '%s',
+					xprof_sexual = '%s',
+					xprof_locale = '%s',
+					xprof_region = '%s',
+					xprof_postcode = '%s',
+					xprof_country = '%s',
+					xprof_about = '%s',
+					xprof_homepage = '%s',
+					xprof_hometown = '%s',
+					xprof_keywords = '%s'
+					where xprof_hash = '%s'",
+					dbesc($arr['xprof_desc']),
+					dbesc($arr['xprof_dob']),
+					intval($arr['xprof_age']),
+					dbesc($arr['xprof_gender']),
+					dbesc($arr['xprof_marital']),
+					dbesc($arr['xprof_sexual']),
+					dbesc($arr['xprof_locale']),
+					dbesc($arr['xprof_region']),
+					dbesc($arr['xprof_postcode']),
+					dbesc($arr['xprof_country']),
+					dbesc($arr['xprof_about']),
+					dbesc($arr['xprof_homepage']),
+					dbesc($arr['xprof_hometown']),
+					dbesc($arr['xprof_keywords']),
+					dbesc($arr['xprof_hash'])
+				);
+			}
+		} else {
+			$update = true;
+			logger('New profile');
+			q("insert into xprof (xprof_hash, xprof_desc, xprof_dob, xprof_age, xprof_gender, xprof_marital, xprof_sexual, xprof_locale, xprof_region, xprof_postcode, xprof_country, xprof_about, xprof_homepage, xprof_hometown, xprof_keywords) values ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
+				dbesc($arr['xprof_hash']),
+				dbesc($arr['xprof_desc']),
+				dbesc($arr['xprof_dob']),
+				intval($arr['xprof_age']),
+				dbesc($arr['xprof_gender']),
+				dbesc($arr['xprof_marital']),
+				dbesc($arr['xprof_sexual']),
+				dbesc($arr['xprof_locale']),
+				dbesc($arr['xprof_region']),
+				dbesc($arr['xprof_postcode']),
+				dbesc($arr['xprof_country']),
+				dbesc($arr['xprof_about']),
+				dbesc($arr['xprof_homepage']),
+				dbesc($arr['xprof_hometown']),
+				dbesc($arr['xprof_keywords'])
+			);
+		}
+
+		$d = [
+			'xprof' => $arr,
+			'profile' => $profile,
+			'update' => $update
+		];
+		/**
+		 * @hooks import_directory_profile
+		 *   Called when processing delivery of a profile structure from an external source (usually for directory storage).
+		 *   * \e array \b xprof
+		 *   * \e array \b profile
+		 *   * \e boolean \b update
+		 */
+		call_hooks('import_directory_profile', $d);
+
+		if (($d['update']) && (! $suppress_update))
+			self::update_modtime($arr['xprof_hash'],random_string() . '@' . \App::get_hostname(), $addr, $ud_flags);
+
+		return $d['update'];
+	}
+
+	/**
+	 * @brief
+	 *
+	 * @param string $hash An xtag_hash
+	 * @param array $keywords
+	 */
+
+	static function import_directory_keywords($hash, $keywords) {
+
+		$existing = array();
+		$r = q("select * from xtag where xtag_hash = '%s' and xtag_flags = 0",
+			dbesc($hash)
+		);
+
+		if($r) {
+			foreach($r as $rr)
+				$existing[] = $rr['xtag_term'];
+		}
+
+		$clean = array();
+		foreach($keywords as $kw) {
+			$kw = trim(htmlspecialchars($kw,ENT_COMPAT, 'UTF-8', false));
+			$kw = trim($kw, ',');
+			$clean[] = $kw;
+		}
+
+		foreach($existing as $x) {
+			if(! in_array($x, $clean))
+				$r = q("delete from xtag where xtag_hash = '%s' and xtag_term = '%s' and xtag_flags = 0",
+					dbesc($hash),
+					dbesc($x)
+				);
+		}
+		foreach($clean as $x) {
+			if(! in_array($x, $existing)) {
+				$r = q("insert into xtag ( xtag_hash, xtag_term, xtag_flags) values ( '%s' ,'%s', 0 )",
+					dbesc($hash),
+					dbesc($x)
+				);
+			}
+		}
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * @param string $hash
+	 * @param string $guid
+	 * @param string $addr
+	 * @param int $flags (optional) default 0
+	 */
+
+	static function update_modtime($hash, $guid, $addr, $flags = 0) {
+
+		$dirmode = intval(get_config('system', 'directory_mode'));
+
+		if($dirmode == DIRECTORY_MODE_NORMAL)
+			return;
+
+		if($flags) {
+			q("insert into updates (ud_hash, ud_guid, ud_date, ud_flags, ud_addr ) values ( '%s', '%s', '%s', %d, '%s' )",
+				dbesc($hash),
+				dbesc($guid),
+				dbesc(datetime_convert()),
+				intval($flags),
+				dbesc($addr)
+			);	
+		}
+		else {
+			q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and not (ud_flags & %d)>0 ",
+				intval(UPDATE_FLAGS_UPDATED),
+				dbesc($addr),
+				intval(UPDATE_FLAGS_UPDATED)
+			);
+		}
+	}
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php
new file mode 100644
index 000000000..baa1da70d
--- /dev/null
+++ b/Zotlabs/Lib/Queue.php
@@ -0,0 +1,278 @@
+ $base,
+						'site_update' => datetime_convert(),
+						'site_dead'   => 0,
+						'site_type'   => intval(($outq['outq_driver'] === 'post') ? SITE_TYPE_NOTZOT : SITE_TYPE_UNKNOWN),
+						'site_crypto' => ''
+					]
+				);
+			}
+		}
+
+		$arr = array('outq' => $outq, 'base' => $base, 'handled' => false, 'immediate' => $immediate);
+		call_hooks('queue_deliver',$arr);
+		if($arr['handled'])
+			return;
+
+		// "post" queue driver - used for diaspora and friendica-over-diaspora communications.
+
+		if($outq['outq_driver'] === 'post') {
+			$result = z_post_url($outq['outq_posturl'],$outq['outq_msg']);
+			if($result['success'] && $result['return_code'] < 300) {
+				logger('deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG);
+				if($base) {
+					q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ",
+						dbesc(datetime_convert()),
+						dbesc($base)
+					);
+				}
+				q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s'",
+					dbesc('accepted for delivery'),
+					dbesc(datetime_convert()),
+					dbesc($outq['outq_hash'])
+				);
+				self::remove($outq['outq_hash']);
+
+				// server is responding - see if anything else is going to this destination and is piled up 
+				// and try to send some more. We're relying on the fact that do_delivery() results in an 
+				// immediate delivery otherwise we could get into a queue loop. 
+
+				if(! $immediate) {
+					$x = q("select outq_hash from outq where outq_posturl = '%s' and outq_delivered = 0",
+						dbesc($outq['outq_posturl'])
+					);
+	
+					$piled_up = array();
+					if($x) {
+						foreach($x as $xx) {
+							 $piled_up[] = $xx['outq_hash'];
+						}
+					}
+					if($piled_up) {
+						// call do_delivery() with the force flag
+						do_delivery($piled_up, true);
+					}
+				}
+			}
+			else {
+				logger('deliver: queue post returned ' . $result['return_code'] 
+					. ' from ' . $outq['outq_posturl'],LOGGER_DEBUG);
+					self::update($outq['outq_hash'],10);
+			}
+			return;
+		}
+
+		// normal zot delivery
+
+		logger('deliver: dest: ' . $outq['outq_posturl'], LOGGER_DEBUG);
+
+
+		if($outq['outq_posturl'] === z_root() . '/zot') {
+			// local delivery
+			$zot = new \Zotlabs\Zot6\Receiver(new \Zotlabs\Zot6\Zot6Handler(),$outq['outq_notify']);
+			$result = $zot->run(true);
+			logger('returned_json: ' . json_encode($result,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES), LOGGER_DATA);
+			logger('deliver: local zot delivery succeeded to ' . $outq['outq_posturl']);
+			Libzot::process_response($outq['outq_posturl'],[ 'success' => true, 'body' => json_encode($result) ], $outq);
+		}
+		else {
+			logger('remote');
+			$channel = null;
+
+			if($outq['outq_channel']) {
+				$channel = channelx_by_n($outq['outq_channel']);
+			}
+
+			$host_crypto = null;
+
+			if($channel && $base) {
+				$h = q("select hubloc_sitekey, site_crypto from hubloc left join site on hubloc_url = site_url where site_url = '%s' order by hubloc_id desc limit 1",
+					dbesc($base)
+				);
+				if($h) {
+					$host_crypto = $h[0];
+				}
+			}
+
+			$msg = $outq['outq_notify'];
+
+			$result = Libzot::zot($outq['outq_posturl'],$msg,$channel,$host_crypto);
+
+			if($result['success']) {
+				logger('deliver: remote zot delivery succeeded to ' . $outq['outq_posturl']);
+				Libzot::process_response($outq['outq_posturl'],$result, $outq);
+			}
+			else {
+				logger('deliver: remote zot delivery failed to ' . $outq['outq_posturl']);
+				logger('deliver: remote zot delivery fail data: ' . print_r($result,true), LOGGER_DATA);
+				self::update($outq['outq_hash'],10);
+			}
+		}
+		return;
+	}
+}
+
diff --git a/Zotlabs/Lib/Webfinger.php b/Zotlabs/Lib/Webfinger.php
new file mode 100644
index 000000000..c2364ac4d
--- /dev/null
+++ b/Zotlabs/Lib/Webfinger.php
@@ -0,0 +1,109 @@
+ [ 'Accept: application/jrd+json, */*' ] ]);
+
+		if($s['success']) {
+			$j = json_decode($s['body'], true);
+			return($j);
+		}
+
+		return false;
+	}
+
+	static function parse_resource($resource) {
+
+		self::$resource = urlencode($resource);
+
+		if(strpos($resource,'http') === 0) {
+			$m = parse_url($resource);
+			if($m) {
+				if($m['scheme'] !== 'https') {
+					return false;
+				}
+				self::$server = $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
+			}
+			else {
+				return false;
+			}
+		}
+		elseif(strpos($resource,'tag:') === 0) {
+			$arr = explode(':',$resource); // split the tag
+			$h = explode(',',$arr[1]); // split the host,date
+			self::$server = $h[0];
+		}
+		else {
+			$x = explode('@',$resource);
+			$username = $x[0];
+			if(count($x) > 1) {
+				self::$server = $x[1];
+			}
+			else {
+				return false;
+			}
+			if(strpos($resource,'acct:') !== 0) {
+				self::$resource = urlencode('acct:' . $resource);
+			}
+		}
+
+	}
+
+	/**
+	 * @brief fetch a webfinger resource and return a zot6 discovery url if present
+	 *
+	 */ 
+
+	static function zot_url($resource) {
+
+		$arr = self::exec($resource);
+
+		if(is_array($arr) && array_key_exists('links',$arr)) {
+			foreach($arr['links'] as $link) {
+				if(array_key_exists('rel',$link) && $link['rel'] === PROTOCOL_ZOT6) {
+					if(array_key_exists('href',$link) && $link['href'] !== EMPTY_STR) {
+						return $link['href'];
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+
+
+}
\ No newline at end of file
diff --git a/Zotlabs/Lib/Zotfinger.php b/Zotlabs/Lib/Zotfinger.php
new file mode 100644
index 000000000..537e440d4
--- /dev/null
+++ b/Zotlabs/Lib/Zotfinger.php
@@ -0,0 +1,50 @@
+ 'application/x-zot+json', 
+				'X-Zot-Token' => random_string(),
+			];
+			$h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false);
+		}
+		else {
+			$h = [ 'Accept: application/x-zot+json' ]; 
+		}
+				
+		$result = [];
+
+
+		$redirects = 0;
+		$x = z_fetch_url($resource,false,$redirects, [ 'headers' => $h  ] );
+
+		if($x['success']) {
+			
+			$result['signature'] = HTTPSig::verify($x);
+    
+			$result['data'] = json_decode($x['body'],true);
+
+			if($result['data'] && is_array($result['data']) && array_key_exists('encrypted',$result['data']) && $result['data']['encrypted']) {
+				$result['data'] = json_decode(crypto_unencapsulate($result['data'],get_config('system','prvkey')),true);
+			}
+
+			return $result;
+		}
+
+		return false;
+	}
+
+
+
+}
\ No newline at end of file
diff --git a/Zotlabs/Module/Zot.php b/Zotlabs/Module/Zot.php
new file mode 100644
index 000000000..8c34dced1
--- /dev/null
+++ b/Zotlabs/Module/Zot.php
@@ -0,0 +1,25 @@
+run(),'application/x-zot+jzon');
+	}
+
+}
diff --git a/Zotlabs/Zot6/Finger.php b/Zotlabs/Zot6/Finger.php
new file mode 100644
index 000000000..f1fe41352
--- /dev/null
+++ b/Zotlabs/Zot6/Finger.php
@@ -0,0 +1,146 @@
+ true) or array('success' => false);
+	 */
+
+	static public function run($webbie, $channel = null, $autofallback = true) {
+
+		$ret = array('success' => false);
+
+		self::$token = random_string();
+
+		if (strpos($webbie, '@') === false) {
+			$address = $webbie;
+			$host = \App::get_hostname();
+		} else {
+			$address = substr($webbie,0,strpos($webbie,'@'));
+			$host = substr($webbie,strpos($webbie,'@')+1);
+			if(strpos($host,'/'))
+				$host = substr($host,0,strpos($host,'/'));
+		}
+
+		$xchan_addr = $address . '@' . $host;
+
+		if ((! $address) || (! $xchan_addr)) {
+			logger('zot_finger: no address :' . $webbie);
+
+			return $ret;
+		}
+
+		logger('using xchan_addr: ' . $xchan_addr, LOGGER_DATA, LOG_DEBUG);
+
+		// potential issue here; the xchan_addr points to the primary hub.
+		// The webbie we were called with may not, so it might not be found
+		// unless we query for hubloc_addr instead of xchan_addr
+
+		$r = q("select xchan.*, hubloc.* from xchan
+			left join hubloc on xchan_hash = hubloc_hash
+			where xchan_addr = '%s' and hubloc_primary = 1 limit 1",
+			dbesc($xchan_addr)
+		);
+
+		if($r) {
+			$url = $r[0]['hubloc_url'];
+
+			if($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') {
+				logger('zot_finger: alternate network: ' . $webbie);
+				logger('url: ' . $url . ', net: ' . var_export($r[0]['hubloc_network'],true), LOGGER_DATA, LOG_DEBUG);
+				return $ret;
+			}
+		} else {
+			$url = 'https://' . $host;
+		}
+
+		$rhs = '/.well-known/zot-info';
+		$https = ((strpos($url,'https://') === 0) ? true : false);
+
+		logger('zot_finger: ' . $address . ' at ' . $url, LOGGER_DEBUG);
+
+		if ($channel) {
+			$postvars = array(
+				'address'    => $address,
+				'target'     => $channel['channel_guid'],
+				'target_sig' => $channel['channel_guid_sig'],
+				'key'        => $channel['channel_pubkey'],
+				'token'      => self::$token
+			);
+
+			$headers = [];
+			$headers['X-Zot-Channel'] = $channel['channel_address'] . '@' . \App::get_hostname();
+			$headers['X-Zot-Nonce']   = random_string();
+			$xhead = \Zotlabs\Web\HTTPSig::create_sig('',$headers,$channel['channel_prvkey'],
+				'acct:' . $channel['channel_address'] . '@' . \App::get_hostname(),false);
+
+			$retries = 0;
+
+			$result = z_post_url($url . $rhs,$postvars,$retries, [ 'headers' => $xhead ]);
+
+			if ((! $result['success']) && ($autofallback)) {
+				if ($https) {
+					logger('zot_finger: https failed. falling back to http');
+					$result = z_post_url('http://' . $host . $rhs,$postvars, $retries, [ 'headers' => $xhead ]);
+				}
+			}
+		} 
+		else {
+			$rhs .= '?f=&address=' . urlencode($address) . '&token=' . self::$token;
+
+			$result = z_fetch_url($url . $rhs);
+			if((! $result['success']) && ($autofallback)) {
+				if($https) {
+					logger('zot_finger: https failed. falling back to http');
+					$result = z_fetch_url('http://' . $host . $rhs);
+				}
+			}
+		}
+
+		if(! $result['success']) {
+			logger('zot_finger: no results');
+
+			return $ret;
+		}
+
+		$x = json_decode($result['body'], true);
+
+		$verify = \Zotlabs\Web\HTTPSig::verify($result,(($x) ? $x['key'] : ''));
+
+		if($x && (! $verify['header_valid'])) {
+			$signed_token = ((is_array($x) && array_key_exists('signed_token', $x)) ? $x['signed_token'] : null);
+			if($signed_token) {
+				$valid = zot_verify('token.' . self::$token, base64url_decode($signed_token), $x['key']);
+				if(! $valid) {
+					logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR);
+
+					return $ret;
+				}
+			}
+			else {
+				logger('No signed token from '  . $url . $rhs, LOGGER_NORMAL, LOG_WARNING);
+				return $ret;
+			}
+		}
+
+		return $x;
+	}
+
+}
diff --git a/Zotlabs/Zot6/IHandler.php b/Zotlabs/Zot6/IHandler.php
new file mode 100644
index 000000000..53b6caa89
--- /dev/null
+++ b/Zotlabs/Zot6/IHandler.php
@@ -0,0 +1,18 @@
+error       = false;
+		$this->validated   = false;
+		$this->messagetype = '';
+		$this->response    = [ 'success' => false ];
+		$this->handler     = $handler;
+		$this->data        = null;
+		$this->rawdata     = null;
+		$this->site_id     = null;
+		$this->prvkey      = Config::get('system','prvkey');
+
+		if($localdata) {
+			$this->rawdata = $localdata;
+		}
+		else {
+			$this->rawdata = file_get_contents('php://input');
+
+			// All access to the zot endpoint must use http signatures
+
+			if (! $this->Valid_Httpsig()) {
+				logger('signature failed');
+				$this->error = true;
+				$this->response['message'] = 'signature invalid';
+				return;
+			}
+		}
+
+		logger('received raw: ' . print_r($this->rawdata,true), LOGGER_DATA);
+
+
+		if ($this->rawdata) {
+			$this->data = json_decode($this->rawdata,true);
+		}
+		else {
+			$this->error = true;
+			$this->response['message'] = 'no data';
+		}
+
+		logger('received_json: ' . json_encode($this->data,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES), LOGGER_DATA);
+
+		logger('received: ' . print_r($this->data,true), LOGGER_DATA);
+
+		if ($this->data && is_array($this->data)) {
+			$this->encrypted = ((array_key_exists('encrypted',$this->data) && intval($this->data['encrypted'])) ? true : false);
+
+			if ($this->encrypted && $this->prvkey) {
+				$uncrypted = crypto_unencapsulate($this->data,$this->prvkey);
+				if ($uncrypted) {
+					$this->data = json_decode($uncrypted,true);
+				}
+				else {
+					$this->error = true;
+					$this->response['message'] = 'no data';
+				}
+			}
+		}
+	}
+
+
+	function run() {
+
+		if ($this->error) {
+			// make timing attacks on the decryption engine a bit more difficult
+			usleep(mt_rand(10000,100000));
+			return($this->response); 
+		}
+
+		if ($this->data) {
+			if (array_key_exists('type',$this->data)) {
+				$this->messagetype = $this->data['type'];
+			}
+
+			if (! $this->messagetype) {
+				$this->error = true;
+				$this->response['message'] = 'no datatype';
+				return $this->response;
+			}
+
+			$this->sender     = ((array_key_exists('sender',$this->data))     ? $this->data['sender'] : null);
+			$this->recipients = ((array_key_exists('recipients',$this->data)) ? $this->data['recipients'] : null);
+			$this->site_id    = ((array_key_exists('site_id',$this->data))    ? $this->data['site_id'] : null);
+		}
+
+		if ($this->sender) {
+			$result = $this->ValidateSender();
+			if (! $result) {
+				$this->error = true;
+				return $this->response;
+			}
+		}
+
+		return $this->Dispatch();
+	}
+
+	function ValidateSender() {
+
+		$hub = Libzot::valid_hub($this->sender,$this->site_id);
+
+		if (! $hub) {
+			$x = Libzot::register_hub($this->sigdata['signer']);
+			if($x['success']) {
+				$hub = Libzot::valid_hub($this->sender,$this->site_id);
+			}	
+			if(! $hub) {
+	           	$this->response['message'] = 'sender unknown';
+				return false;
+			}
+		}
+
+		if (! check_siteallowed($hub['hubloc_url'])) {
+			$this->response['message'] = 'forbidden';
+			return false;
+		}
+
+		if (! check_channelallowed($this->sender)) {
+			$this->response['message'] = 'forbidden';
+			return false;
+		}
+
+		Libzot::update_hub_connected($hub,$this->site_id);
+
+		$this->validated = true;
+		$this->hub = $hub;
+		return true;
+    }
+
+
+	function Valid_Httpsig() {
+
+		$result = false;
+
+		$this->sigdata = HTTPSig::verify($this->rawdata);
+
+		if ($this->sigdata && $this->sigdata['header_signed'] && $this->sigdata['header_valid']) {
+			$result = true;
+
+			// It is OK to not have signed content - not all messages provide content.
+			// But if it is signed, it has to be valid
+
+			if (($this->sigdata['content_signed']) && (! $this->sigdata['content_valid'])) {
+					$result = false;
+			}
+		}
+		return $result;
+	}	
+		
+	function Dispatch() {
+
+		switch ($this->messagetype) {
+
+			case 'request':
+				$this->response = $this->handler->Request($this->data,$this->hub);
+				break;
+
+			case 'purge':
+				$this->response = $this->handler->Purge($this->sender,$this->recipients,$this->hub);
+				break;
+
+			case 'refresh':
+				$this->response = $this->handler->Refresh($this->sender,$this->recipients,$this->hub);
+				break;
+
+			case 'rekey':
+				$this->response = $this->handler->Rekey($this->sender, $this->data,$this->hub);
+				break;
+
+			case 'activity':
+			case 'response': // upstream message
+			case 'sync':
+			default:
+				$this->response = $this->handler->Notify($this->data,$this->hub);
+				break;
+
+		}
+
+		logger('response_to_return: ' . print_r($this->response,true),LOGGER_DATA);
+
+		if ($this->encrypted) {
+			$this->EncryptResponse();
+		}
+
+		return($this->response); 
+	}
+
+	function EncryptResponse() {
+		$algorithm = Libzot::best_algorithm($this->hub['site_crypto']);
+		if ($algorithm) {
+			$this->response = crypto_encapsulate(json_encode($this->response),$this->hub['hubloc_sitekey'], $algorithm);
+		}
+	}
+
+}
+
+
+
diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php
new file mode 100644
index 000000000..5597921cc
--- /dev/null
+++ b/Zotlabs/Zot6/Zot6Handler.php
@@ -0,0 +1,266 @@
+ false ];
+
+		logger('notify received from ' . $hub['hubloc_url']);
+
+		$x = Libzot::fetch($data);
+		$ret['delivery_report'] = $x;
+	
+
+		$ret['success'] = true;
+		return $ret;
+	}
+
+
+
+	/**
+	 * @brief Remote channel info (such as permissions or photo or something)
+	 * has been updated. Grab a fresh copy and sync it.
+	 *
+	 * The difference between refresh and force_refresh is that force_refresh
+	 * unconditionally creates a directory update record, even if no changes were
+	 * detected upon processing.
+	 *
+	 * @param array $sender
+	 * @param array $recipients
+	 *
+	 * @return json_return_and_die()
+	 */
+
+	static function reply_refresh($sender, $recipients,$hub) {
+		$ret = array('success' => false);
+
+		if($recipients) {
+
+			// This would be a permissions update, typically for one connection
+
+			foreach ($recipients as $recip) {
+				$r = q("select channel.*,xchan.* from channel
+					left join xchan on channel_hash = xchan_hash
+					where channel_hash ='%s' limit 1",
+					dbesc($recip)
+				);
+
+				$x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], $r[0], (($msgtype === 'force_refresh') ? true : false));
+			}
+		}
+		else {
+			// system wide refresh
+
+			$x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], null, (($msgtype === 'force_refresh') ? true : false));
+		}
+
+		$ret['success'] = true;
+		return $ret;
+	}
+
+
+
+	/**
+	 * @brief Process a message request.
+	 *
+	 * If a site receives a comment to a post but finds they have no parent to attach it with, they
+	 * may send a 'request' packet containing the message_id of the missing parent. This is the handler
+	 * for that packet. We will create a message_list array of the entire conversation starting with
+	 * the missing parent and invoke delivery to the sender of the packet.
+	 *
+	 * Zotlabs/Daemon/Deliver.php (for local delivery) and 
+	 * mod/post.php???? @fixme (for web delivery) detect the existence of
+	 * this 'message_list' at the destination and split it into individual messages which are
+	 * processed/delivered in order.
+	 *
+	 *
+	 * @param array $data
+	 * @return array
+	 */
+	
+	static function reply_message_request($data,$hub) {
+		$ret = [ 'success' => false ];
+
+		$message_id = EMPTY_STR;
+
+		if(array_key_exists('data',$data))
+		$ptr = $data['data'];
+		if(is_array($ptr) && array_key_exists(0,$ptr)) {
+			$ptr = $ptr[0];
+		}
+		if(is_string($ptr)) {
+			$message_id = $ptr;
+		}
+		if(is_array($ptr) && array_key_exists('id',$ptr)) {
+			$message_id = $ptr['id'];
+		}
+
+		if (! $message_id) {
+			$ret['message'] = 'no message_id';
+			logger('no message_id');
+			return $ret;
+		}
+
+		$sender = $hub['hubloc_hash'];
+
+		/*
+		 * Find the local channel in charge of this post (the first and only recipient of the request packet)
+		 */
+
+		$arr = $data['recipients'][0];
+
+		$c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1",
+			dbesc($arr['portable_id'])
+		);
+		if (! $c) {
+			logger('recipient channel not found.');
+			$ret['message'] .= 'recipient not found.' . EOL;
+			return $ret;
+		}
+
+		/*
+		 * fetch the requested conversation
+		 */
+
+		$messages = zot_feed($c[0]['channel_id'],$sender_hash, [ 'message_id' => $data['message_id'], 'encoding' => 'activitystreams' ]);
+
+		return (($messages) ? : [] );
+
+	}
+
+	static function rekey_request($sender,$data,$hub) {
+
+		$ret = array('success' => false);
+
+		//	newsig is newkey signed with oldkey
+
+		// The original xchan will remain. In Zot/Receiver we will have imported the new xchan and hubloc to verify
+		// the packet authenticity. What we will do now is verify that the keychange operation was signed by the
+		// oldkey, and if so change all the abook, abconfig, group, and permission elements which reference the
+		// old xchan_hash.
+
+		if((! $data['old_key']) && (! $data['new_key']) && (! $data['new_sig']))
+			return $ret;
+
+
+		$old = null;
+
+		if(Libzot::verify($data['old_guid'],$data['old_guid_sig'],$data['old_key'])) {
+			$oldhash = make_xchan_hash($data['old_guid'],$data['old_key']);
+			$old = q("select * from xchan where xchan_hash = '%s' limit 1",
+				dbesc($oldhash)
+			);
+		}
+		else 
+			return $ret;
+
+
+		if(! $old) {
+			return $ret;
+		}
+
+		$xchan = $old[0];
+
+		if(! Libzot::verify($data['new_key'],$data['new_sig'],$xchan['xchan_pubkey'])) {
+			return $ret;
+		}
+
+		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
+			dbesc($sender)
+		);
+
+		$newxchan = $r[0];
+
+		// @todo
+		// if ! $update create a linked identity
+
+
+		xchan_change_key($xchan,$newxchan,$data);
+
+		$ret['success'] = true;
+		return $ret;
+	}
+
+
+	/**
+	 * @brief
+	 *
+	 * @param array $sender
+	 * @param array $recipients
+	 *
+	 * return json_return_and_die()
+	 */
+
+	static function reply_purge($sender, $recipients, $hub) {
+
+		$ret = array('success' => false);
+
+		if ($recipients) {
+			// basically this means "unfriend"
+			foreach ($recipients as $recip) {
+				$r = q("select channel.*,xchan.* from channel
+					left join xchan on channel_hash = xchan_hash
+					where channel_hash = '%s' and channel_guid_sig = '%s' limit 1",
+					dbesc($recip)
+				);
+				if ($r) {
+					$r = q("select abook_id from abook where uid = %d and abook_xchan = '%s' limit 1",
+						intval($r[0]['channel_id']),
+						dbesc($sender)
+					);
+					if ($r) {
+						contact_remove($r[0]['channel_id'],$r[0]['abook_id']);
+					}
+				}
+			}
+			$ret['success'] = true;
+		}
+		else {
+
+			// Unfriend everybody - basically this means the channel has committed suicide
+
+			remove_all_xchan_resources($sender);
+
+			$ret['success'] = true;
+		}
+
+		return $ret;
+	}
+
+
+
+
+
+
+}
-- 
cgit v1.2.3


From 5c30b2f27133d4fe20e509f095951e1fb36e77ba Mon Sep 17 00:00:00 2001
From: Mario Vavti 
Date: Wed, 8 Aug 2018 09:10:03 +0200
Subject: update install.txt

---
 install/INSTALL.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/INSTALL.txt b/install/INSTALL.txt
index 3671d95ac..421656023 100644
--- a/install/INSTALL.txt
+++ b/install/INSTALL.txt
@@ -90,7 +90,7 @@ web server platforms.
     exec() and proc_open().
 
     - curl, gd (with at least jpeg and png support), mysqli, mbstring, xml, 
-    xmlreader, zip and openssl extensions. The imagick extension MAY be used 
+    xmlreader (FreeBSD), zip and openssl extensions. The imagick extension MAY be used 
     instead of gd, but is not required and MAY also be disabled via 
     configuration option. 
 
-- 
cgit v1.2.3


From 054c5da294b5254cde2b0ff3dabff713c5eedb46 Mon Sep 17 00:00:00 2001
From: Mario Vavti 
Date: Thu, 9 Aug 2018 15:47:57 +0200
Subject: search form action for channel search needs the channel address

---
 include/nav.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/nav.php b/include/nav.php
index 05d2d199f..56fe9b901 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -175,7 +175,7 @@ function nav($template = 'default') {
 			$search_form_action = 'network';
 			break;
 		case 'channel':
-			$search_form_action = 'channel';
+			$search_form_action = 'channel/' . App::$profile['channel_address'];
 			break;
 		default:
 			$search_form_action = 'search';
-- 
cgit v1.2.3


From b3d1ea4cd5d4ba3fd951b23e536fc2681c12f957 Mon Sep 17 00:00:00 2001
From: Mario Vavti 
Date: Thu, 9 Aug 2018 17:03:20 +0200
Subject: fix zid leaking to nonzot sites if markdown is enabled

---
 include/markdown.php | 44 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/include/markdown.php b/include/markdown.php
index de9862801..18ccbd411 100644
--- a/include/markdown.php
+++ b/include/markdown.php
@@ -74,8 +74,11 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) {
 
 	// Convert everything that looks like a link to a link
 	if($use_zrl) {
-		$s = str_replace(['[img', '/img]'], ['[zmg', '/zmg]'], $s);
-		$s = preg_replace("/([^\]\=\{]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[zrl=$2$3]$2$3[/zrl]',$s);
+		if (strpos($s,'[/img]') !== false) {
+			$s = preg_replace_callback("/\[img\](.*?)\[\/img\]/ism", 'use_zrl_cb_img', $s);
+			$s = preg_replace_callback("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", 'use_zrl_cb_img_x', $s);
+		}
+		$s = preg_replace_callback("/([^\]\=\{]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", 'use_zrl_cb_link',$s);
 	}
 	else {
 		$s = preg_replace("/([^\]\=\{]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[url=$2$3]$2$3[/url]',$s);
@@ -85,7 +88,7 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) {
 	$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
 
 	// Don't show link to full picture (until it is fixed)
-	$s = scale_external_images($s, false);
+	//$s = scale_external_images($s, false);
 
 	/**
 	 * @hooks markdown_to_bb
@@ -96,6 +99,41 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) {
 	return $s;
 }
 
+function use_zrl_cb_link($match) {
+	$res = '';
+	$is_zid = is_matrix_url(trim($match[0]));
+
+	if($is_zid)
+		$res = $match[1] . '[zrl=' . $match[2] . $match[3] . ']' . $match[2] . $match[3] . '[/zrl]';
+	else
+		$res = $match[1] . '[url=' . $match[2] . $match[3] . ']' . $match[2] . $match[3] . '[/url]';
+
+	return $res;
+}
+
+function use_zrl_cb_img($match) {
+	$res = '';
+	$is_zid = is_matrix_url(trim($match[1]));
+
+	if($is_zid)
+		$res = '[zmg]' . $match[1] . '[/zmg]';
+	else
+		$res = $match[0];
+
+	return $res;
+}
+
+function use_zrl_cb_img_x($match) {
+	$res = '';
+	$is_zid = is_matrix_url(trim($match[3]));
+
+	if($is_zid)
+		$res = '[zmg=' . $match[1] . 'x' . $match[2] . ']' . $match[3] . '[/zmg]';
+	else
+		$res = $match[0];
+
+	return $res;
+}
 
 /**
  * @brief
-- 
cgit v1.2.3


From 7890157f52378ec7a643e76e3b5c88fa23795d32 Mon Sep 17 00:00:00 2001
From: Mario Vavti 
Date: Thu, 9 Aug 2018 23:07:50 +0200
Subject: revert debug comment from the last commit

---
 include/markdown.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/markdown.php b/include/markdown.php
index 18ccbd411..058b79909 100644
--- a/include/markdown.php
+++ b/include/markdown.php
@@ -88,7 +88,7 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) {
 	$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
 
 	// Don't show link to full picture (until it is fixed)
-	//$s = scale_external_images($s, false);
+	$s = scale_external_images($s, false);
 
 	/**
 	 * @hooks markdown_to_bb
-- 
cgit v1.2.3


From d3362dfa0c7e1cbd76342e83c480effc1b8765f8 Mon Sep 17 00:00:00 2001
From: Max Kostikov 
Date: Fri, 10 Aug 2018 16:56:22 +0200
Subject: Add translation for missed string

---
 Zotlabs/Module/Admin/Site.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php
index 292de4c3a..5912a7c97 100644
--- a/Zotlabs/Module/Admin/Site.php
+++ b/Zotlabs/Module/Admin/Site.php
@@ -332,7 +332,7 @@ class Site {
 			'$register_policy'	=> array('register_policy', t("Does this site allow new member registration?"), get_config('system','register_policy'), "", $register_choices),
 			'$invite_only'		=> array('invite_only', t("Invitation only"), get_config('system','invitation_only'), t("Only allow new member registrations with an invitation code. Above register policy must be set to Yes.")),
 			'$minimum_age'		=> array('minimum_age', t("Minimum age"), (x(get_config('system','minimum_age'))?get_config('system','minimum_age'):13), t("Minimum age (in years) for who may register on this site.")),
-			'$access_policy'	=> array('access_policy', t("Which best describes the types of account offered by this hub?"), get_config('system','access_policy'), "This is displayed on the public server site list.", $access_choices),
+			'$access_policy'	=> array('access_policy', t("Which best describes the types of account offered by this hub?"), get_config('system','access_policy'), t("This is displayed on the public server site list."), $access_choices),
 			'$register_text'	=> array('register_text', t("Register text"), htmlspecialchars(get_config('system','register_text'), ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")),
 			'$role'         => $role,
 			'$frontpage'	=> array('frontpage', t("Site homepage to show visitors (default: login box)"), get_config('system','frontpage'), t("example: 'public' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file.")),
-- 
cgit v1.2.3


From 0b31c677f253907ee9a36e12ae51763b2d69a574 Mon Sep 17 00:00:00 2001
From: "M.Dent" 
Date: Thu, 9 Aug 2018 22:35:12 -0400
Subject: Fixes to OAuth2 connect-with-openid.  Add zothash Claim.  Add
 zotwebbie Claim.

---
 Zotlabs/Identity/OAuth2Server.php  |  5 ++--
 Zotlabs/Identity/OAuth2Storage.php | 51 ++++++++++++++++++++++++++++++++++++--
 Zotlabs/Module/Authorize.php       | 12 ++++++---
 Zotlabs/Module/Token.php           |  8 +++---
 Zotlabs/Module/Userinfo.php        | 17 +++++++++++++
 5 files changed, 81 insertions(+), 12 deletions(-)
 create mode 100644 Zotlabs/Module/Userinfo.php

diff --git a/Zotlabs/Identity/OAuth2Server.php b/Zotlabs/Identity/OAuth2Server.php
index cbb4748fe..b747b95db 100644
--- a/Zotlabs/Identity/OAuth2Server.php
+++ b/Zotlabs/Identity/OAuth2Server.php
@@ -4,7 +4,7 @@ namespace Zotlabs\Identity;
 
 class OAuth2Server extends \OAuth2\Server {
 
-	public function __construct(OAuth2Storage $storage, $config = []) {
+	public function __construct(OAuth2Storage $storage, $config = null) {
 
 		if(! is_array($config)) {
 			$config = [
@@ -19,7 +19,8 @@ class OAuth2Server extends \OAuth2\Server {
 		$this->addGrantType(new \OAuth2\GrantType\ClientCredentials($storage));
 
 		// Add the "Authorization Code" grant type (this is where the oauth magic happens)
-		$this->addGrantType(new \OAuth2\GrantType\AuthorizationCode($storage));
+                // Need to use OpenID\GrantType to return id_token (see:https://github.com/bshaffer/oauth2-server-php/issues/443)
+		$this->addGrantType(new \OAuth2\OpenID\GrantType\AuthorizationCode($storage));
 
 		$keyStorage = new \OAuth2\Storage\Memory( [
 			'keys' => [
diff --git a/Zotlabs/Identity/OAuth2Storage.php b/Zotlabs/Identity/OAuth2Storage.php
index bc6db565c..a50b21a70 100644
--- a/Zotlabs/Identity/OAuth2Storage.php
+++ b/Zotlabs/Identity/OAuth2Storage.php
@@ -50,20 +50,67 @@ class OAuth2Storage extends \OAuth2\Storage\Pdo {
     public function getUser($username)
     {
 
-		$x = channelx_by_nick($username);
+		$x = channelx_by_n($username);
 		if(! $x) {
 			return false;
 		}
 
 		return( [
+                        'webbie'    => $x['channel_address'].'@'.\App::get_hostname(),
+                        'zothash'   => $x['channel_hash'],
 			'username'  => $x['channel_address'],
 			'user_id'   => $x['channel_id'],
+			'name'      => $x['channel_name'],
 			'firstName' => $x['channel_name'],
 			'lastName'  => '',
 			'password'  => 'NotARealPassword'
 		] );
     }
 
+    public function scopeExists($scope) {
+      // Report that the scope is valid even if it's not.
+      // We will only return a very small subset no matter what.
+      // @TODO: Truly validate the scope
+      //    see vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php and
+      //        vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php
+      //    for more info.
+      return true;
+    }
+
+    public function getDefaultScope($client_id=null) {
+      // Do not REQUIRE a scope
+      //    see vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php and
+      //    for more info.
+      return null;
+    }
+
+    public function getUserClaims ($user_id, $claims) {
+      // Populate the CLAIMS requested (if any).
+      // @TODO: create a more reasonable/comprehensive list.
+      // @TODO: present claims on the AUTHORIZATION screen
+
+        $userClaims = Array();
+        $claims = explode (' ', trim($claims));
+        $validclaims = Array ("name","preferred_username","zothash");
+        $claimsmap = Array (
+                            "zotwebbie" => 'webbie',
+                            "zothash" => 'zothash',
+                            "name" => 'name',
+                            "preferred_username" => "username"
+                           );
+        $userinfo = $this->getUser($user_id);
+        foreach ($validclaims as $validclaim) {
+            if (in_array($validclaim,$claims)) {
+              $claimkey = $claimsmap[$validclaim];
+              $userClaims[$validclaim] = $userinfo[$claimkey];
+            } else {
+              $userClaims[$validclaim] = $validclaim;
+            }
+        }
+        $userClaims["sub"]=$user_id;
+        return $userClaims; 
+    }
+
     /**
      * plaintext passwords are bad!  Override this for your application
      *
@@ -78,4 +125,4 @@ class OAuth2Storage extends \OAuth2\Storage\Pdo {
         return true;
     }
 
-}
\ No newline at end of file
+}
diff --git a/Zotlabs/Module/Authorize.php b/Zotlabs/Module/Authorize.php
index bfb76150f..e042848d8 100644
--- a/Zotlabs/Module/Authorize.php
+++ b/Zotlabs/Module/Authorize.php
@@ -60,12 +60,16 @@ class Authorize extends \Zotlabs\Web\Controller {
 		$request = \OAuth2\Request::createFromGlobals();
 		$response = new \OAuth2\Response();
 
+                // Note, "sub" field must match type and content. $user_id is used to populate - make sure it's a string. 
+                $channel = channelx_by_n(local_channel());
+		$user_id = $channel["channel_id"];
+
 		// If the client is not registered, add to the database
 		if (!$client = $storage->getClientDetails($client_id)) {
-			$client_secret = random_string(16);
+                        // Until "Dynamic Client Registration" is pursued - allow new clients to assign their own secret in the REQUEST
+			$client_secret = (isset($_REQUEST["client_secret"])) ? $_REQUEST["client_secret"] : random_string(16);
 			// Client apps are registered per channel
-			$user_id = local_channel();
-			$storage->setClientDetails($client_id, $client_secret, $redirect_uri, 'authorization_code', null, $user_id);
+			$storage->setClientDetails($client_id, $client_secret, $redirect_uri, 'authorization_code', urldecode($_REQUEST["scope"]), $user_id);
 			
 		}
 		if (!$client = $storage->getClientDetails($client_id)) {
@@ -83,7 +87,7 @@ class Authorize extends \Zotlabs\Web\Controller {
 
 		// print the authorization code if the user has authorized your client
 		$is_authorized = ($_POST['authorize'] === 'allow');
-		$s->handleAuthorizeRequest($request, $response, $is_authorized, local_channel());
+		$s->handleAuthorizeRequest($request, $response, $is_authorized, $user_id);
 		if ($is_authorized) {
 			$code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=') + 5, 40);
 			logger('Authorization Code: ' .  $code);
diff --git a/Zotlabs/Module/Token.php b/Zotlabs/Module/Token.php
index 32cf95c61..2bd33c761 100644
--- a/Zotlabs/Module/Token.php
+++ b/Zotlabs/Module/Token.php
@@ -27,11 +27,11 @@ class Token extends \Zotlabs\Web\Controller {
 				$_SERVER['PHP_AUTH_PW'] = $password;
 			}
 		}
-
-		$s = new \Zotlabs\Identity\OAuth2Server(new OAuth2Storage(\DBA::$dba->db));
+                $storage = new OAuth2Storage(\DBA::$dba->db);
+		$s = new \Zotlabs\Identity\OAuth2Server($storage);
 		$request = \OAuth2\Request::createFromGlobals();
-		$s->handleTokenRequest($request)->send();
-
+		$response = $s->handleTokenRequest($request);
+                $response->send();
 		killme();
 	}
 
diff --git a/Zotlabs/Module/Userinfo.php b/Zotlabs/Module/Userinfo.php
new file mode 100644
index 000000000..6c881f078
--- /dev/null
+++ b/Zotlabs/Module/Userinfo.php
@@ -0,0 +1,17 @@
+db));
+		$request = \OAuth2\Request::createFromGlobals();
+		$s->handleUserInfoRequest($request)->send();
+		killme();
+	}
+
+}
-- 
cgit v1.2.3


From e587fe5ce84ed5c248287eb55c6ae193ebd3222b Mon Sep 17 00:00:00 2001
From: "M.Dent" 
Date: Fri, 10 Aug 2018 12:44:57 -0400
Subject: Add user_id = local_channel() to the where clause of updates

---
 Zotlabs/Module/Settings/Oauth2.php | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/Zotlabs/Module/Settings/Oauth2.php b/Zotlabs/Module/Settings/Oauth2.php
index 985095115..52da20598 100644
--- a/Zotlabs/Module/Settings/Oauth2.php
+++ b/Zotlabs/Module/Settings/Oauth2.php
@@ -45,14 +45,15 @@ class Oauth2 {
 								grant_types = '%s',
 								scope = '%s', 
 								user_id = %d
-							WHERE client_id='%s'",
+							WHERE client_id='%s' and user_id = %s",
 							dbesc($name),
 							dbesc($secret),
 							dbesc($redirect),
 							dbesc($grant),
 							dbesc($scope),
 							intval(local_channel()),
-							dbesc($name));
+							dbesc($name),
+                                                        intval(local_channel()));
 				} else {
 					$r = q("INSERT INTO oauth_clients (client_id, client_secret, redirect_uri, grant_types, scope, user_id)
 						VALUES ('%s','%s','%s','%s','%s',%d)",
-- 
cgit v1.2.3


From af042ccf07b00af70b5e7844747dde9a263c697c Mon Sep 17 00:00:00 2001
From: "M.Dent" 
Date: Fri, 10 Aug 2018 13:51:45 -0400
Subject: OAuth2 UI and settings updates

---
 Zotlabs/Module/Settings/Oauth2.php | 30 ++++++++++++++++++++++++++----
 view/tpl/settings_oauth2.tpl       |  7 ++++---
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/Zotlabs/Module/Settings/Oauth2.php b/Zotlabs/Module/Settings/Oauth2.php
index 52da20598..91abd1de3 100644
--- a/Zotlabs/Module/Settings/Oauth2.php
+++ b/Zotlabs/Module/Settings/Oauth2.php
@@ -10,10 +10,19 @@ class Oauth2 {
 	
 		if(x($_POST,'remove')){
 			check_form_security_token_redirectOnErr('/settings/oauth2', 'settings_oauth2');
-			
+			$name   	= ((x($_POST,'name')) ? escape_tags(trim($_POST['name'])) : '');
+		logger("REMOVE! ".$name." uid: ".local_channel());	
 			$key = $_POST['remove'];
-			q("DELETE FROM tokens WHERE id='%s' AND uid=%d",
-				dbesc($key),
+			q("DELETE FROM oauth_authorization_codes WHERE client_id='%s' AND user_id=%d",
+				dbesc($name),
+				intval(local_channel())
+			);
+			q("DELETE FROM oauth_access_tokens WHERE client_id='%s' AND user_id=%d",
+				dbesc($name),
+				intval(local_channel())
+			);
+			q("DELETE FROM oauth_refresh_tokens WHERE client_id='%s' AND user_id=%d",
+				dbesc($name),
 				intval(local_channel())
 			);
 			goaway(z_root()."/settings/oauth2/");
@@ -129,6 +138,18 @@ class Oauth2 {
 					dbesc(argv(3)),
 					intval(local_channel())
 			);
+			$r = q("DELETE FROM oauth_access_tokens WHERE client_id = '%s' AND user_id = %d",
+					dbesc(argv(3)),
+					intval(local_channel())
+			);
+			$r = q("DELETE FROM oauth_authorization_codes WHERE client_id = '%s' AND user_id = %d",
+					dbesc(argv(3)),
+					intval(local_channel())
+			);
+			$r = q("DELETE FROM oauth_refresh_tokens WHERE client_id = '%s' AND user_id = %d",
+					dbesc(argv(3)),
+					intval(local_channel())
+			);
 			goaway(z_root()."/settings/oauth2/");
 			return;			
 		}
@@ -136,7 +157,8 @@ class Oauth2 {
 
 		$r = q("SELECT oauth_clients.*, oauth_access_tokens.access_token as oauth_token, (oauth_clients.user_id = %d) AS my 
 				FROM oauth_clients
-				LEFT JOIN oauth_access_tokens ON oauth_clients.client_id=oauth_access_tokens.client_id
+				LEFT JOIN oauth_access_tokens ON oauth_clients.client_id=oauth_access_tokens.client_id AND
+                                                                 oauth_clients.user_id=oauth_access_tokens.user_id
 				WHERE oauth_clients.user_id IN (%d,0)",
 				intval(local_channel()),
 				intval(local_channel())
diff --git a/view/tpl/settings_oauth2.tpl b/view/tpl/settings_oauth2.tpl
index 882d34ea9..f3bf59a12 100755
--- a/view/tpl/settings_oauth2.tpl
+++ b/view/tpl/settings_oauth2.tpl
@@ -4,8 +4,6 @@
 
 
 
-
- {{foreach $apps as $app}} + + +
{{if $app.client_id}}

{{$app.client_id}}

{{else}}

{{$noname}}

{{/if}} {{if $app.my}} @@ -28,8 +29,8 @@ {{/if}}
+
{{/foreach}} -
-- cgit v1.2.3 From 5afe779ffc69bc5889a83a6fcbc4bcefc7c40a5c Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sat, 11 Aug 2018 16:16:54 -0700 Subject: prevent json-ld bombing, turn off browser autocomplete on channel sources creation --- Zotlabs/Module/Sources.php | 2 +- include/network.php | 16 ++++++++++++++++ view/tpl/sources_new.tpl | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Sources.php b/Zotlabs/Module/Sources.php index 91e2efa60..2a2fa1835 100644 --- a/Zotlabs/Module/Sources.php +++ b/Zotlabs/Module/Sources.php @@ -111,7 +111,7 @@ class Sources extends \Zotlabs\Web\Controller { '$title' => t('New Source'), '$desc' => t('Import all or selected content from the following channel into this channel and distribute it according to your channel settings.'), '$words' => array( 'words', t('Only import content with these words (one per line)'),'',t('Leave blank to import all public content')), - '$name' => array( 'name', t('Channel Name'), '', ''), + '$name' => array( 'name', t('Channel Name'), '', '', '', 'autocomplete="off"'), '$tags' => array('tags', t('Add the following categories to posts imported from this source (comma separated)'),'',t('Optional')), '$resend' => [ 'resend', t('Resend posts with this channel as author'), 0, t('Copyrights may apply'), [ t('No'), t('Yes') ]], '$submit' => t('Submit') diff --git a/include/network.php b/include/network.php index 6961bf0ba..d4f4f27c6 100644 --- a/include/network.php +++ b/include/network.php @@ -2042,6 +2042,22 @@ function jsonld_document_loader($url) { require_once('library/jsonld/jsonld.php'); + $recursion = 0; + + $x = debug_backtrace(); + if($x) { + foreach($x as $n) { + if($n['function'] === __FUNCTION__) { + $recursion ++; + } + } + } + if($recursion > 5) { + logger('jsonld bomb detected at: ' . $url); + killme(); + } + + $cachepath = 'store/[data]/ldcache'; if(! is_dir($cachepath)) os_mkdir($cachepath, STORAGE_DEFAULT_PERMISSIONS, true); diff --git a/view/tpl/sources_new.tpl b/view/tpl/sources_new.tpl index 7cda9998d..9d320b5e2 100644 --- a/view/tpl/sources_new.tpl +++ b/view/tpl/sources_new.tpl @@ -3,7 +3,7 @@
{{$desc}}
-
+ {{include file="field_input.tpl" field=$name}} {{include file="field_input.tpl" field=$tags}} -- cgit v1.2.3 From ac03b4ccd74e52d8f1c78ad6393e8d90171516ce Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 12 Aug 2018 15:09:02 -0700 Subject: make channel_remove less memory hungry --- include/channel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/channel.php b/include/channel.php index d7c5a2511..2d0231bba 100644 --- a/include/channel.php +++ b/include/channel.php @@ -2549,7 +2549,7 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { } - $r = q("select * from iconfig left join item on item.id = iconfig.iid + $r = q("select iid from iconfig left join item on item.id = iconfig.iid where item.uid = %d", intval($channel_id) ); -- cgit v1.2.3 From 9402f537b62e80939d09ad602f96460e8ab66b1c Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Sun, 12 Aug 2018 19:02:11 -0400 Subject: Fix root not added to internationalized template search --- Zotlabs/Render/SmartyTemplate.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Zotlabs/Render/SmartyTemplate.php b/Zotlabs/Render/SmartyTemplate.php index ffe58e286..f14d63064 100755 --- a/Zotlabs/Render/SmartyTemplate.php +++ b/Zotlabs/Render/SmartyTemplate.php @@ -64,17 +64,20 @@ class SmartyTemplate implements TemplateEngine { public function get_intltext_template($file, $root='') { $lang = \App::$language; - - if(file_exists("view/$lang/$file")) - $template_file = "view/$lang/$file"; - elseif(file_exists("view/en/$file")) - $template_file = "view/en/$file"; - else - $template_file = theme_include($file,$root); + if ($root != '' && substr($root,-1) != '/' ) { + $root .= '/'; + } + foreach (Array( + $root."view/$lang/$file", + $root."view/en/$file", + '' + ) as $template_file) { + if (is_file($template_file)) { break; } + } + if ($template_file=='') {$template_file = theme_include($file,$root);} if($template_file) { $template = new SmartyInterface(); $template->filename = $template_file; - return $template; } return ""; -- cgit v1.2.3 From db1a546abaa82472bd9c8b402db6752e2a3869d0 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 12 Aug 2018 16:25:14 -0700 Subject: add table support to markdown --- include/markdown.php | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/include/markdown.php b/include/markdown.php index 058b79909..1b3538306 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -5,7 +5,11 @@ */ use Michelf\MarkdownExtra; + use League\HTMLToMarkdown\HtmlConverter; +use League\HTMLToMarkdown\Environment; +use League\HTMLToMarkdown\Converter\ConverterInterface; +use League\HTMLToMarkdown\ElementInterface; require_once("include/oembed.php"); require_once("include/event.php"); @@ -286,9 +290,12 @@ function bb_to_markdown($Text, $options = []) { * @param string $html The HTML code to convert * @return string Markdown representation of the given HTML text, empty on error */ -function html2markdown($html) { +function html2markdown($html,$options = []) { $markdown = ''; - $converter = new HtmlConverter(); + + $environment = Environment::createDefaultEnvironment($options); + $environment->addConverter(new TableConverter()); + $converter = new HtmlConverter($environment); try { $markdown = $converter->convert($html); @@ -298,3 +305,73 @@ function html2markdown($html) { return $markdown; } + +// Tables are not an official part of the markdown specification. +// This interface was suggested as a workaround. +// author: Mark Hamstra +// https://github.com/Mark-H/Docs + + +class TableConverter implements ConverterInterface +{ + /** + * @param ElementInterface $element + * + * @return string + */ + public function convert(ElementInterface $element) + { + switch ($element->getTagName()) { + case 'tr': + $line = []; + $i = 1; + foreach ($element->getChildren() as $td) { + $i++; + $v = $td->getValue(); + $v = trim($v); + if ($i % 2 === 0 || $v !== '') { + $line[] = $v; + } + } + return '| ' . implode(' | ', $line) . " |\n"; + case 'td': + case 'th': + return trim($element->getValue()); + case 'tbody': + return trim($element->getValue()); + case 'thead': + $headerLine = reset($element->getChildren())->getValue(); + $headers = explode(' | ', trim(trim($headerLine, "\n"), '|')); + $hr = []; + foreach ($headers as $td) { + $length = strlen(trim($td)) + 2; + $hr[] = str_repeat('-', $length > 3 ? $length : 3); + } + $hr = '|' . implode('|', $hr) . '|'; + return $headerLine . $hr . "\n"; + case 'table': + $inner = $element->getValue(); + if (strpos($inner, '-----') === false) { + $inner = explode("\n", $inner); + $single = explode(' | ', trim($inner[0], '|')); + $hr = []; + foreach ($single as $td) { + $length = strlen(trim($td)) + 2; + $hr[] = str_repeat('-', $length > 3 ? $length : 3); + } + $hr = '|' . implode('|', $hr) . '|'; + array_splice($inner, 1, 0, $hr); + $inner = implode("\n", $inner); + } + return trim($inner) . "\n\n"; + } + return $element->getValue(); + } + /** + * @return string[] + */ + public function getSupportedTags() + { + return array('table', 'tr', 'thead', 'td', 'tbody'); + } +} \ No newline at end of file -- cgit v1.2.3 From b436c4a94c86a7b346872b4c92f3c803b1582ed0 Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Sun, 12 Aug 2018 19:47:10 -0400 Subject: Add support for overriding the default template location and individual templates via .htconfig.php --- boot.php | 3 +++ include/plugin.php | 55 +++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/boot.php b/boot.php index fca184555..6816187cb 100755 --- a/boot.php +++ b/boot.php @@ -728,6 +728,9 @@ class App { private static $perms = null; // observer permissions private static $widgets = array(); // widgets for this page public static $config = array(); // config cache + public static $override_intltext_templates = array(); + public static $override_markup_templates = array(); + public static $override_templateroot = null; public static $session = null; public static $groups; diff --git a/include/plugin.php b/include/plugin.php index 13652c620..23cb2b5f6 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -959,9 +959,8 @@ function format_js_if_exists($source) { function theme_include($file, $root = '') { // Make sure $root ends with a slash / if it's not blank - if($root !== '' && $root[strlen($root)-1] !== '/') + if($root !== '' && substr($root,-1) !== '/') $root = $root . '/'; - $theme_info = App::$theme_info; if(array_key_exists('extends',$theme_info)) @@ -992,21 +991,51 @@ function theme_include($file, $root = '') { return ''; } - function get_intltext_template($s, $root = '') { - - $t = App::template_engine(); - - $template = $t->get_intltext_template($s, $root); - return $template; + $testroot = ($root=='') ? $testroot = "ROOT" : $root; + $t = App::template_engine(); + + if (isset(\App::$override_intltext_templates[$testroot][$s]["content"])) { + return \App::$override_intltext_templates[$testroot][$s]["content"]; + } else { + if (isset(\App::$override_intltext_templates[$testroot][$s]["root"]) && + isset(\App::$override_intltext_templates[$testroot][$s]["file"])) { + $s = \App::$override_intltext_templates[$testroot][$s]["file"]; + $root = \App::$override_intltext_templates[$testroot][$s]["root"]; + } elseif (\App::$override_templateroot) { + $newroot = \App::$override_templateroot.$root; + if ($newroot != '' && substr($newroot,-1) != '/' ) { + $newroot .= '/'; + } + $template = $t->get_intltext_template($s, $newroot); + } + $template = $t->get_intltext_template($s, $root); + return $template; + } } - function get_markup_template($s, $root = '') { - - $t = App::template_engine(); - $template = $t->get_markup_template($s, $root); - return $template; + $testroot = ($root=='') ? $testroot = "ROOT" : $root; + + $t = App::template_engine(); + + if (isset(\App::$override_markup_templates[$testroot][$s]["content"])) { + return \App::$override_markup_templates[$testroot][$s]["content"]; + } else { + if (isset(\App::$override_markup_templates[$testroot][$s]["root"]) && + isset(\App::$override_markup_templates[$testroot][$s]["file"])) { + $s = \App::$override_markup_templates[$testroot][$s]["file"]; + $root = \App::$override_markup_templates[$testroot][$s]["root"]; + } elseif (\App::$override_templateroot) { + $newroot = \App::$override_templateroot.$root; + if ($newroot != '' && substr($newroot,-1) != '/' ) { + $newroot .= '/'; + } + $template = $t->get_markup_template($s, $newroot); + } + $template = $t->get_markup_template($s, $root); + return $template; + } } /** -- cgit v1.2.3 From 4fdf5d28caa5d4af2bc6dfc088fdd51111baf390 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 13 Aug 2018 17:24:48 -0700 Subject: minor oauth2 updates - renamed zot webbie to 'webfinger' and zothash to 'portable_id', fixed/simplified cgi auth mode --- Zotlabs/Identity/OAuth2Storage.php | 35 +++++++++++++++--------- Zotlabs/Module/Authorize.php | 6 ++--- include/api_auth.php | 37 ++++++++++---------------- library/certs/lets-encrypt-x3-cross-signed.pem | 28 +++++++++++++++++++ 4 files changed, 68 insertions(+), 38 deletions(-) diff --git a/Zotlabs/Identity/OAuth2Storage.php b/Zotlabs/Identity/OAuth2Storage.php index a50b21a70..bbf61cf2b 100644 --- a/Zotlabs/Identity/OAuth2Storage.php +++ b/Zotlabs/Identity/OAuth2Storage.php @@ -55,15 +55,22 @@ class OAuth2Storage extends \OAuth2\Storage\Pdo { return false; } + $a = q("select * from account where account_id = %d", + intval($x['channel_account_id']) + ); + + $n = explode(' ', $x['channel_name']); + return( [ - 'webbie' => $x['channel_address'].'@'.\App::get_hostname(), - 'zothash' => $x['channel_hash'], - 'username' => $x['channel_address'], - 'user_id' => $x['channel_id'], - 'name' => $x['channel_name'], - 'firstName' => $x['channel_name'], - 'lastName' => '', - 'password' => 'NotARealPassword' + 'webfinger' => channel_reddress($x), + 'portable_id' => $x['channel_hash'], + 'email' => $a['account_email'], + 'username' => $x['channel_address'], + 'user_id' => $x['channel_id'], + 'name' => $x['channel_name'], + 'firstName' => ((count($n) > 1) ? $n[1] : $n[0]), + 'lastName' => ((count($n) > 2) ? $n[count($n) - 1] : ''), + 'picture' => $x['xchan_photo_l'] ] ); } @@ -91,12 +98,16 @@ class OAuth2Storage extends \OAuth2\Storage\Pdo { $userClaims = Array(); $claims = explode (' ', trim($claims)); - $validclaims = Array ("name","preferred_username","zothash"); + $validclaims = Array ("name","preferred_username","webfinger","portable_id","email","picture","firstName","lastName"); $claimsmap = Array ( - "zotwebbie" => 'webbie', - "zothash" => 'zothash', + "webfinger" => 'webfinger', + "portable_id" => 'portable_id', "name" => 'name', - "preferred_username" => "username" + "email" => 'email', + "preferred_username" => 'username', + "picture" => 'picture', + "given_name" => 'firstName', + "family_name" => 'lastName' ); $userinfo = $this->getUser($user_id); foreach ($validclaims as $validclaim) { diff --git a/Zotlabs/Module/Authorize.php b/Zotlabs/Module/Authorize.php index e042848d8..265dea661 100644 --- a/Zotlabs/Module/Authorize.php +++ b/Zotlabs/Module/Authorize.php @@ -14,9 +14,9 @@ class Authorize extends \Zotlabs\Web\Controller { // OpenID Connect Dynamic Client Registration 1.0 Client Metadata // http://openid.net/specs/openid-connect-registration-1_0.html $app = array( - 'name' => (x($_REQUEST, 'client_name') ? urldecode($_REQUEST['client_name']) : t('Unknown App')), - 'icon' => (x($_REQUEST, 'logo_uri') ? urldecode($_REQUEST['logo_uri']) : z_root() . '/images/icons/plugin.png'), - 'url' => (x($_REQUEST, 'client_uri') ? urldecode($_REQUEST['client_uri']) : ''), + 'name' => (x($_REQUEST, 'client_id') ? $_REQUEST['client_id'] : t('Unknown App')), + 'icon' => (x($_REQUEST, 'logo_uri') ? $_REQUEST['logo_uri'] : z_root() . '/images/icons/plugin.png'), + 'url' => (x($_REQUEST, 'client_uri') ? $_REQUEST['client_uri'] : ''), ); $o .= replace_macros(get_markup_template('oauth_authorize.tpl'), array( '$title' => t('Authorize'), diff --git a/include/api_auth.php b/include/api_auth.php index e2f7ab155..23ab9c946 100644 --- a/include/api_auth.php +++ b/include/api_auth.php @@ -12,7 +12,13 @@ function api_login(&$a){ require_once('include/oauth.php'); + + if(array_key_exists('REDIRECT_REMOTE_USER',$_SERVER) && (! array_key_exists('HTTP_AUTHORIZATION',$_SERVER))) { + $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_REMOTE_USER']; + } + // login with oauth + try { // OAuth 2.0 $storage = new \Zotlabs\Identity\OAuth2Storage(\DBA::$dba->db); @@ -66,32 +72,27 @@ function api_login(&$a){ logger($e->getMessage()); } - // workarounds for HTTP-auth in CGI mode - foreach([ 'REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION' ] as $head) { + if(array_key_exists('HTTP_AUTHORIZATION',$_SERVER)) { /* Basic authentication */ - if(array_key_exists($head,$_SERVER) && substr(trim($_SERVER[$head]),0,5) === 'Basic') { - $userpass = @base64_decode(substr(trim($_SERVER[$head]),6)) ; + if (substr(trim($_SERVER['HTTP_AUTHORIZATION']),0,5) === 'Basic') { + $userpass = @base64_decode(substr(trim($_SERVER['HTTP_AUTHORIZATION']),6)) ; if(strlen($userpass)) { list($name, $password) = explode(':', $userpass); $_SERVER['PHP_AUTH_USER'] = $name; $_SERVER['PHP_AUTH_PW'] = $password; } - break; } - /* Signature authentication */ + /* OpenWebAuth */ - if(array_key_exists($head,$_SERVER) && substr(trim($_SERVER[$head]),0,9) === 'Signature') { + if(substr(trim($_SERVER['HTTP_AUTHORIZATION']),0,9) === 'Signature') { - if($head !== 'HTTP_AUTHORIZATION') { - $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER[$head]; - continue; - } + $record = null; - $sigblock = \Zotlabs\Web\HTTPSig::parse_sigheader($_SERVER[$head]); + $sigblock = \Zotlabs\Web\HTTPSig::parse_sigheader($_SERVER['HTTP_AUTHORIZATION']); if($sigblock) { $keyId = str_replace('acct:','',$sigblock['keyId']); if($keyId) { @@ -108,16 +109,7 @@ function api_login(&$a){ $record = [ 'channel' => $c, 'account' => $a[0] ]; $channel_login = $c['channel_id']; } - else { - continue; - } } - else { - continue; - } - } - else { - continue; } if($record) { @@ -125,7 +117,6 @@ function api_login(&$a){ if(! ($verified && $verified['header_signed'] && $verified['header_valid'])) { $record = null; } - break; } } } @@ -137,7 +128,7 @@ function api_login(&$a){ // process normal login request - if(isset($_SERVER['PHP_AUTH_USER'])) { + if(isset($_SERVER['PHP_AUTH_USER']) && (! $record)) { $channel_login = 0; $record = account_verify_password($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']); if($record && $record['channel']) { diff --git a/library/certs/lets-encrypt-x3-cross-signed.pem b/library/certs/lets-encrypt-x3-cross-signed.pem index 0002462ce..6e5176f1e 100644 --- a/library/certs/lets-encrypt-x3-cross-signed.pem +++ b/library/certs/lets-encrypt-x3-cross-signed.pem @@ -25,3 +25,31 @@ X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- -- cgit v1.2.3 From 62925c4c3f0fb184c194f0cb177c1525ccdb72cb Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 13 Aug 2018 20:24:04 -0700 Subject: oidc cleanup and discovery --- Zotlabs/Module/Authorize.php | 56 ++++++++++++++++++++++++------------------- Zotlabs/Module/Oauthinfo.php | 6 ++--- Zotlabs/Module/Well_known.php | 1 + Zotlabs/Module/Wfinger.php | 5 ++++ 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/Zotlabs/Module/Authorize.php b/Zotlabs/Module/Authorize.php index 265dea661..c6709f602 100644 --- a/Zotlabs/Module/Authorize.php +++ b/Zotlabs/Module/Authorize.php @@ -7,27 +7,34 @@ use Zotlabs\Identity\OAuth2Storage; class Authorize extends \Zotlabs\Web\Controller { function get() { - if (!local_channel()) { + if (! local_channel()) { return login(); - } else { - // TODO: Fully implement the dynamic client registration protocol: - // OpenID Connect Dynamic Client Registration 1.0 Client Metadata - // http://openid.net/specs/openid-connect-registration-1_0.html - $app = array( - 'name' => (x($_REQUEST, 'client_id') ? $_REQUEST['client_id'] : t('Unknown App')), - 'icon' => (x($_REQUEST, 'logo_uri') ? $_REQUEST['logo_uri'] : z_root() . '/images/icons/plugin.png'), + } + else { + + $name = $_REQUEST['client_name']; + if(! $name) { + $name = (($_REQUEST['client_id']) ?: t('Unknown App')); + } + + $app = [ + 'name' => $name, + 'icon' => (x($_REQUEST, 'logo_uri') ? $_REQUEST['logo_uri'] : z_root() . '/images/icons/plugin.png'), 'url' => (x($_REQUEST, 'client_uri') ? $_REQUEST['client_uri'] : ''), - ); - $o .= replace_macros(get_markup_template('oauth_authorize.tpl'), array( - '$title' => t('Authorize'), - '$authorize' => sprintf( t('Do you authorize the app %s to access your channel data?'), '' . $app['name'] . ' '), - '$app' => $app, - '$yes' => t('Allow'), - '$no' => t('Deny'), - '$client_id' => (x($_REQUEST, 'client_id') ? $_REQUEST['client_id'] : ''), + ]; + + $link = (($app['url']) ? '' . $app['name'] . ' ' : $app['name']); + + $o .= replace_macros(get_markup_template('oauth_authorize.tpl'), [ + '$title' => t('Authorize'), + '$authorize' => sprintf( t('Do you authorize the app %s to access your channel data?'), $link ), + '$app' => $app, + '$yes' => t('Allow'), + '$no' => t('Deny'), + '$client_id' => (x($_REQUEST, 'client_id') ? $_REQUEST['client_id'] : ''), '$redirect_uri' => (x($_REQUEST, 'redirect_uri') ? $_REQUEST['redirect_uri'] : ''), - '$state' => (x($_REQUEST, 'state') ? $_REQUEST['state'] : ''), - )); + '$state' => (x($_REQUEST, 'state') ? $_REQUEST['state'] : ''), + ]); return $o; } } @@ -60,17 +67,16 @@ class Authorize extends \Zotlabs\Web\Controller { $request = \OAuth2\Request::createFromGlobals(); $response = new \OAuth2\Response(); - // Note, "sub" field must match type and content. $user_id is used to populate - make sure it's a string. - $channel = channelx_by_n(local_channel()); - $user_id = $channel["channel_id"]; + // Note, "sub" field must match type and content. $user_id is used to populate - make sure it's a string. + $channel = channelx_by_n(local_channel()); + $user_id = $channel['channel_id']; // If the client is not registered, add to the database if (!$client = $storage->getClientDetails($client_id)) { - // Until "Dynamic Client Registration" is pursued - allow new clients to assign their own secret in the REQUEST - $client_secret = (isset($_REQUEST["client_secret"])) ? $_REQUEST["client_secret"] : random_string(16); + // Until "Dynamic Client Registration" is pursued - allow new clients to assign their own secret in the REQUEST + $client_secret = (isset($_REQUEST['client_secret'])) ? $_REQUEST['client_secret'] : random_string(16); // Client apps are registered per channel - $storage->setClientDetails($client_id, $client_secret, $redirect_uri, 'authorization_code', urldecode($_REQUEST["scope"]), $user_id); - + $storage->setClientDetails($client_id, $client_secret, $redirect_uri, 'authorization_code', $_REQUEST['scope'], $user_id); } if (!$client = $storage->getClientDetails($client_id)) { // There was an error registering the client. diff --git a/Zotlabs/Module/Oauthinfo.php b/Zotlabs/Module/Oauthinfo.php index 2d10913c4..f380cec97 100644 --- a/Zotlabs/Module/Oauthinfo.php +++ b/Zotlabs/Module/Oauthinfo.php @@ -5,19 +5,17 @@ namespace Zotlabs\Module; class Oauthinfo extends \Zotlabs\Web\Controller { - function init() { $ret = [ 'issuer' => z_root(), 'authorization_endpoint' => z_root() . '/authorize', 'token_endpoint' => z_root() . '/token', + 'userinfo_endpoint' => z_root() . '/userinfo', + 'scopes_supported' => [ 'openid', 'profile', 'email' ], 'response_types_supported' => [ 'code', 'token', 'id_token', 'code id_token', 'token id_token' ] ]; - json_return_and_die($ret); } - - } \ No newline at end of file diff --git a/Zotlabs/Module/Well_known.php b/Zotlabs/Module/Well_known.php index 442994b54..09e743788 100644 --- a/Zotlabs/Module/Well_known.php +++ b/Zotlabs/Module/Well_known.php @@ -52,6 +52,7 @@ class Well_known extends \Zotlabs\Web\Controller { break; case 'oauth-authorization-server': + case 'openid-configuration': \App::$argc -= 1; array_shift(\App::$argv); \App::$argv[0] = 'oauthinfo'; diff --git a/Zotlabs/Module/Wfinger.php b/Zotlabs/Module/Wfinger.php index 88cb3e879..1866bce40 100644 --- a/Zotlabs/Module/Wfinger.php +++ b/Zotlabs/Module/Wfinger.php @@ -172,6 +172,11 @@ class Wfinger extends \Zotlabs\Web\Controller { 'href' => z_root() . '/hcard/' . $r[0]['channel_address'] ], + [ + 'rel' => 'http://openid.net/specs/connect/1.0/issuer', + 'href' => z_root() + ], + [ 'rel' => 'http://webfinger.net/rel/profile-page', -- cgit v1.2.3 From f15c1c4e54a49d1e76747ca5e3034ca2cef909aa Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 13 Aug 2018 21:18:20 -0700 Subject: hubloc DB changes needed for z6 --- Zotlabs/Update/_1218.php | 31 +++++++++++++++++++++++++++++++ boot.php | 2 +- include/hubloc.php | 2 ++ install/schema_mysql.sql | 6 +++++- install/schema_postgres.sql | 5 +++++ 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 Zotlabs/Update/_1218.php diff --git a/Zotlabs/Update/_1218.php b/Zotlabs/Update/_1218.php new file mode 100644 index 000000000..67d8b49a5 --- /dev/null +++ b/Zotlabs/Update/_1218.php @@ -0,0 +1,31 @@ + ((array_key_exists('hubloc_status',$arr)) ? $arr['hubloc_status'] : 0), 'hubloc_url' => ((array_key_exists('hubloc_url',$arr)) ? $arr['hubloc_url'] : ''), 'hubloc_url_sig' => ((array_key_exists('hubloc_url_sig',$arr)) ? $arr['hubloc_url_sig'] : ''), + 'hubloc_id_url' => ((array_key_exists('hubloc_id_url',$arr)) ? $arr['hubloc_id_url'] : ''), + 'hubloc_site_id' => ((array_key_exists('hubloc_site_id',$arr)) ? $arr['hubloc_site_id'] : ''), 'hubloc_host' => ((array_key_exists('hubloc_host',$arr)) ? $arr['hubloc_host'] : ''), 'hubloc_callback' => ((array_key_exists('hubloc_callback',$arr)) ? $arr['hubloc_callback'] : ''), 'hubloc_connect' => ((array_key_exists('hubloc_connect',$arr)) ? $arr['hubloc_connect'] : ''), diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index b556b15cd..7fd2cfea8 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -501,10 +501,12 @@ CREATE TABLE IF NOT EXISTS `hook` ( KEY `hook_version` (`hook_version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + CREATE TABLE IF NOT EXISTS `hubloc` ( `hubloc_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `hubloc_guid` char(191) NOT NULL DEFAULT '', `hubloc_guid_sig` text NOT NULL, + `hubloc_id_url` char(191) NOT NULL DEFAULT '0', `hubloc_hash` char(191) NOT NULL DEFAULT '', `hubloc_addr` char(191) NOT NULL DEFAULT '', `hubloc_network` char(32) NOT NULL DEFAULT '', @@ -512,6 +514,7 @@ CREATE TABLE IF NOT EXISTS `hubloc` ( `hubloc_status` int(10) unsigned NOT NULL DEFAULT 0 , `hubloc_url` char(191) NOT NULL DEFAULT '', `hubloc_url_sig` text NOT NULL, + `hubloc_site_id` char(191) NOT NULL DEFAULT '', `hubloc_host` char(191) NOT NULL DEFAULT '', `hubloc_callback` char(191) NOT NULL DEFAULT '', `hubloc_connect` char(191) NOT NULL DEFAULT '', @@ -524,7 +527,9 @@ CREATE TABLE IF NOT EXISTS `hubloc` ( `hubloc_deleted` tinyint(1) NOT NULL DEFAULT 0 , PRIMARY KEY (`hubloc_id`), KEY `hubloc_url` (`hubloc_url`), + KEY `hubloc_site_id` (`hubloc_site_id`), KEY `hubloc_guid` (`hubloc_guid`), + KEY `hubloc_id_url` (`hubloc_id_url`), KEY `hubloc_hash` (`hubloc_hash`), KEY `hubloc_flags` (`hubloc_flags`), KEY `hubloc_connect` (`hubloc_connect`), @@ -540,7 +545,6 @@ CREATE TABLE IF NOT EXISTS `hubloc` ( KEY `hubloc_error` (`hubloc_error`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE IF NOT EXISTS `iconfig` ( `id` int(11) NOT NULL AUTO_INCREMENT, `iid` int(11) NOT NULL DEFAULT 0 , diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index 8db0eb8be..68c65c830 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -474,10 +474,12 @@ create index "hook_idx" on hook ("hook"); create index "hook_version_idx" on hook ("hook_version"); create index "hook_priority_idx" on hook ("priority"); + CREATE TABLE "hubloc" ( "hubloc_id" serial NOT NULL, "hubloc_guid" text NOT NULL DEFAULT '', "hubloc_guid_sig" text NOT NULL DEFAULT '', + "hubloc_id_url" text NOT NULL DEFAULT '', "hubloc_hash" text NOT NULL, "hubloc_addr" text NOT NULL DEFAULT '', "hubloc_network" text NOT NULL DEFAULT '', @@ -485,6 +487,7 @@ CREATE TABLE "hubloc" ( "hubloc_status" bigint NOT NULL DEFAULT '0', "hubloc_url" text NOT NULL DEFAULT '', "hubloc_url_sig" text NOT NULL DEFAULT '', + "hubloc_site_id" text NOT NULL DEFAULT '', "hubloc_host" text NOT NULL DEFAULT '', "hubloc_callback" text NOT NULL DEFAULT '', "hubloc_connect" text NOT NULL DEFAULT '', @@ -498,7 +501,9 @@ CREATE TABLE "hubloc" ( PRIMARY KEY ("hubloc_id") ); create index "hubloc_url" on hubloc ("hubloc_url"); +create index "hubloc_site_id" on hubloc ("hubloc_site_id"); create index "hubloc_guid" on hubloc ("hubloc_guid"); +create index "hubloc_id_url" on hubloc ("hubloc_id_url"); create index "hubloc_flags" on hubloc ("hubloc_flags"); create index "hubloc_connect" on hubloc ("hubloc_connect"); create index "hubloc_host" on hubloc ("hubloc_host"); -- cgit v1.2.3 From 12f4787b67561be8afc78620823b81e290cddfaa Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 13 Aug 2018 23:11:10 -0700 Subject: issue with mdpost addon and archive.org links which contain a full url as a path/query component --- Zotlabs/Module/Item.php | 2 +- include/bbcode.php | 2 ++ include/markdown.php | 4 ++-- include/text.php | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index ef1eb3700..640b4fa5c 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -533,7 +533,7 @@ class Item extends \Zotlabs\Web\Controller { // Look for tags and linkify them $results = linkify_tags($a, $body, ($uid) ? $uid : $profile_uid); -logger('linkify: ' . print_r($results,true)); + if($results) { // Set permissions based on tag replacements diff --git a/include/bbcode.php b/include/bbcode.php index 345b5b025..6f22509e6 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -953,12 +953,14 @@ function bbcode($Text, $options = []) { $Text = preg_replace_callback("/[^\^]\[url\]([$URLSearchString]*)\[\/url\]/ism", 'tryoembed', $Text); } } + if (strpos($Text,'[/url]') !== false) { $Text = preg_replace("/\#\^\[url\]([$URLSearchString]*)\[\/url\]/ism", '#^$1', $Text); $Text = preg_replace("/\#\^\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '#^$2', $Text); $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '$1', $Text); $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$2', $Text); } + if (strpos($Text,'[/zrl]') !== false) { $Text = preg_replace("/\#\^\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '#^$1', $Text); $Text = preg_replace("/\#\^\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '#^$2', $Text); diff --git a/include/markdown.php b/include/markdown.php index 1b3538306..f4944e2cc 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -82,10 +82,10 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) { $s = preg_replace_callback("/\[img\](.*?)\[\/img\]/ism", 'use_zrl_cb_img', $s); $s = preg_replace_callback("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", 'use_zrl_cb_img_x', $s); } - $s = preg_replace_callback("/([^\]\=\{]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", 'use_zrl_cb_link',$s); + $s = preg_replace_callback("/([^\]\=\{\/]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", 'use_zrl_cb_link',$s); } else { - $s = preg_replace("/([^\]\=\{]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[url=$2$3]$2$3[/url]',$s); + $s = preg_replace("/([^\]\=\{\/]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[url=$2$3]$2$3[/url]',$s); } // remove duplicate adjacent code tags diff --git a/include/text.php b/include/text.php index e894c5ce5..e57450020 100644 --- a/include/text.php +++ b/include/text.php @@ -3251,17 +3251,17 @@ function cleanup_bbcode($body) { * First protect any url inside certain bbcode tags so we don't double link it. */ - $body = preg_replace_callback('/\[code(.*?)\[\/(code)\]/ism','\red_escape_codeblock',$body); $body = preg_replace_callback('/\[url(.*?)\[\/(url)\]/ism','\red_escape_codeblock',$body); $body = preg_replace_callback('/\[zrl(.*?)\[\/(zrl)\]/ism','\red_escape_codeblock',$body); - $body = preg_replace_callback("/([^\]\='".'"'."\/\{]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ +\,\(\)]+)/ismu", '\nakedoembed', $body); + $body = preg_replace_callback("/([^\]\='".'"'."\/\{]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ +\,\(\)]+)/ismu", '\red_zrl_callback', $body); + $body = preg_replace_callback('/\[\$b64zrl(.*?)\[\/(zrl)\]/ism','\red_unescape_codeblock',$body); $body = preg_replace_callback('/\[\$b64url(.*?)\[\/(url)\]/ism','\red_unescape_codeblock',$body); $body = preg_replace_callback('/\[\$b64code(.*?)\[\/(code)\]/ism','\red_unescape_codeblock',$body); -- cgit v1.2.3 From 94393d27c8f39cc409f60078af6241d9eab21fc2 Mon Sep 17 00:00:00 2001 From: "M. Dent" Date: Tue, 14 Aug 2018 13:03:26 +0200 Subject: Override helpfiles --- boot.php | 2 ++ include/help.php | 99 ++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 63 insertions(+), 38 deletions(-) diff --git a/boot.php b/boot.php index 6816187cb..e3dbbec75 100755 --- a/boot.php +++ b/boot.php @@ -731,6 +731,8 @@ class App { public static $override_intltext_templates = array(); public static $override_markup_templates = array(); public static $override_templateroot = null; + public static $override_helproot = null; + public static $override_helpfiles = array(); public static $session = null; public static $groups; diff --git a/include/help.php b/include/help.php index ce389b4db..3b56a7238 100644 --- a/include/help.php +++ b/include/help.php @@ -2,6 +2,50 @@ use \Michelf\MarkdownExtra; + +/** + * @brief + * + * @param string $path + * @return string|unknown + */ +function get_help_fullpath($path,$suffix=null) { + + $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/'; + $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot; + + // Determine the language and modify the path accordingly + $x = determine_help_language(); + $lang = $x['language']; + $url_idx = ($x['from_url'] ? 1 : 0); + // The English translation is at the root of /doc/. Other languages are in + // subfolders named by the language code such as "de", "es", etc. + if($lang !== 'en') { + $langpath = $lang . '/' . $path; + } else { + $langpath = $path; + } + + $newpath = (isset(\App::$override_helpfiles[$langpath])) ? \App::$override_helpfiles[$langpath] : $langpath; + $newpath = ($newpath == $langpath) ? $docroot . $newpath : $newpath; + + if ($suffix) { + if (file_exists($newpath . $suffix)) { + return $newpath; + } + } elseif (file_exists($newpath . '.md') || + file_exists($newpath . '.bb') || + file_exists($newpath . '.html')) { + return $newpath; + } + + $newpath = (isset(\App::$override_helpfiles[$path])) ? \App::$override_helpfiles[$path] : null; + + $newpath = (!$newpath) ? $docroot.$path : $newpath; + return $newpath; +} + + /** * @brief * @@ -9,7 +53,6 @@ use \Michelf\MarkdownExtra; * @return string|unknown */ function get_help_content($tocpath = false) { - global $lang; $doctype = 'markdown'; @@ -17,6 +60,8 @@ function get_help_content($tocpath = false) { $text = ''; $path = (($tocpath !== false) ? $tocpath : ''); + $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/'; + $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot; if($tocpath === false && argc() > 1) { $path = ''; @@ -27,8 +72,9 @@ function get_help_content($tocpath = false) { } } - if($path) { + if($path) { + $fullpath = get_help_fullpath($path); $title = basename($path); if(! $tocpath) \App::$page['title'] = t('Help:') . ' ' . ucwords(str_replace('-',' ',notags($title))); @@ -39,21 +85,22 @@ function get_help_content($tocpath = false) { // TODO: This is incompatible with the hierarchical TOC construction // defined in /Zotlabs/Widget/Helpindex.php. if($tocpath !== false && - load_doc_file('doc/' . $path . '.md') === '' && - load_doc_file('doc/' . $path . '.bb') === '' && - load_doc_file('doc/' . $path . '.html') === '' + load_doc_file($fullpath . '.md') === '' && + load_doc_file($fullpath . '.bb') === '' && + load_doc_file($fullpath . '.html') === '' ) { $path = $title; } - $text = load_doc_file('doc/' . $path . '.md'); + $fullpath = get_help_fullpath($path); + $text = load_doc_file($fullpath . '.md'); if(! $text) { - $text = load_doc_file('doc/' . $path . '.bb'); + $text = load_doc_file($fullpath . '.bb'); if($text) $doctype = 'bbcode'; } if(! $text) { - $text = load_doc_file('doc/' . $path . '.html'); + $text = load_doc_file($fullpath . '.html'); if($text) $doctype = 'html'; } @@ -64,12 +111,16 @@ function get_help_content($tocpath = false) { if($tocpath === false) { if(! $text) { - $text = load_doc_file('doc/Site.md'); + $path = 'Site'; + $fullpath = get_help_fullpath($path,'.md'); + $text = load_doc_file($fullpath . '.md'); \App::$page['title'] = t('Help'); } if(! $text) { $doctype = 'bbcode'; - $text = load_doc_file('doc/main.bb'); + $path = 'main'; + $fullpath = get_help_fullpath($path,'.md'); + $text = load_doc_file($fullpath . '.bb'); goaway('/help/about/about'); \App::$page['title'] = t('Help'); } @@ -146,35 +197,7 @@ function determine_help_language() { } function load_doc_file($s) { - $path = 'doc'; - // Determine the language and modify the path accordingly - $x = determine_help_language(); - $lang = $x['language']; - $url_idx = ($x['from_url'] ? 1 : 0); - // The English translation is at the root of /doc/. Other languages are in - // subfolders named by the language code such as "de", "es", etc. - if($lang !== 'en') { - $path .= '/' . $lang; - } - $b = basename($s); - - for($i=1+$url_idx; $i Date: Tue, 14 Aug 2018 18:19:34 -0700 Subject: more backporting for zot6 --- include/channel.php | 3 +++ include/text.php | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/channel.php b/include/channel.php index 2d0231bba..82d500e83 100644 --- a/include/channel.php +++ b/include/channel.php @@ -2797,3 +2797,6 @@ function pchan_to_chan($pchan) { return $chan; } +function channel_url($channel) { + return (($channel) ? z_root() . '/channel/' . $channel['channel_address'] : z_root()); +} diff --git a/include/text.php b/include/text.php index e57450020..c4f253a27 100644 --- a/include/text.php +++ b/include/text.php @@ -3412,3 +3412,41 @@ function get_forum_channels($uid) { return $r; } + +function print_array($arr, $level = 0) { + + $o = EMPTY_STR; + $tabs = EMPTY_STR; + + if(is_array($arr)) { + for($x = 0; $x <= $level; $x ++) { + $tabs .= "\t"; + } + $o .= '[' . "\n"; + if(count($arr)) { + foreach($arr as $k => $v) { + if(is_array($v)) { + $o .= $tabs . '[' . $k . '] => ' . print_array($v, $level + 1) . "\n"; + } + else { + $o .= $tabs . '[' . $k . '] => ' . print_val($v) . ",\n"; + } + } + } + $o .= substr($tabs,0,-1) . ']' . (($level) ? ',' : ';' ). "\n"; + return $o; + } + +} + +function print_val($v) { + if(is_bool($v)) { + if($v) return 'true'; + return 'false'; + } + if(is_string($v)) { + return "'" . $v . "'"; + } + return $v; + +} -- cgit v1.2.3 From f230c07ba5ed71c0491c6fd109c0789d2cc341c1 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 15 Aug 2018 17:00:37 -0700 Subject: possible fixes for can_comment_on_post(), provide wiki_list on wiki sidebar --- Zotlabs/Lib/ThreadStream.php | 1 - Zotlabs/Widget/Wiki_list.php | 6 +++++- include/items.php | 40 +++++++++++++++++++++++++++------------- view/pdl/mod_wiki.pdl | 1 + 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Zotlabs/Lib/ThreadStream.php b/Zotlabs/Lib/ThreadStream.php index d0c964149..020e8729b 100644 --- a/Zotlabs/Lib/ThreadStream.php +++ b/Zotlabs/Lib/ThreadStream.php @@ -196,7 +196,6 @@ class ThreadStream { $item->set_commentable(false); } - require_once('include/channel.php'); $item->set_conversation($this); $this->threads[] = $item; diff --git a/Zotlabs/Widget/Wiki_list.php b/Zotlabs/Widget/Wiki_list.php index 62f32dbf0..c8d83cbe8 100644 --- a/Zotlabs/Widget/Wiki_list.php +++ b/Zotlabs/Widget/Wiki_list.php @@ -6,13 +6,17 @@ class Wiki_list { function widget($arr) { + if(argc() < 3) { + return; + } + $channel = channelx_by_n(\App::$profile_uid); $wikis = \Zotlabs\Lib\NativeWiki::listwikis($channel,get_observer_hash()); if($wikis) { return replace_macros(get_markup_template('wikilist_widget.tpl'), array( - '$header' => t('Wiki List'), + '$header' => t('Wikis'), '$channel' => $channel['channel_address'], '$wikis' => $wikis['wikis'] )); diff --git a/include/items.php b/include/items.php index 9dd5d005b..ee7bfd5bc 100755 --- a/include/items.php +++ b/include/items.php @@ -234,10 +234,11 @@ function can_comment_on_post($observer_xchan, $item) { // logger('Comment_policy: ' . $item['comment_policy'], LOGGER_DEBUG); $x = [ - 'observer_hash' => $observer_xchan, - 'item' => $item, - 'allowed' => 'unset' + 'observer_hash' => $observer_xchan, + 'item' => $item, + 'allowed' => 'unset' ]; + /** * @hooks can_comment_on_post * Called when deciding whether or not to present a comment box for a post. @@ -245,26 +246,34 @@ function can_comment_on_post($observer_xchan, $item) { * * \e array \b item * * \e boolean \b allowed - return value */ + call_hooks('can_comment_on_post', $x); - if($x['allowed'] !== 'unset') + + if($x['allowed'] !== 'unset') { return $x['allowed']; + } - if(! $observer_xchan) + if(! $observer_xchan) { return false; + } - if($item['comment_policy'] === 'none') + if($item['comment_policy'] === 'none') { return false; + } - if(comments_are_now_closed($item)) + if(comments_are_now_closed($item)) { return false; + } - if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) + if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) { return true; + } switch($item['comment_policy']) { case 'self': - if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) + if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) { return true; + } break; case 'public': case 'authenticated': @@ -276,17 +285,22 @@ function can_comment_on_post($observer_xchan, $item) { case 'any connections': case 'contacts': case '': - if(array_key_exists('owner',$item) && get_abconfig($item['uid'],$item['owner']['abook_xchan'],'their_perms','post_comments')) { - return true; + if(local_channel() && get_abconfig(local_channel(),$item['owner_xchan'],'their_perms','post_comments')) { + return true; + } + if(intval($item['item_wall']) && perm_is_allowed($item['uid'],$observer_xchan,'post_comments')) { + return true; } break; default: break; } - if(strstr($item['comment_policy'],'network:') && strstr($item['comment_policy'],'red')) + if(strstr($item['comment_policy'],'network:') && strstr($item['comment_policy'],'red')) { return true; - if(strstr($item['comment_policy'],'site:') && strstr($item['comment_policy'],App::get_hostname())) + } + if(strstr($item['comment_policy'],'site:') && strstr($item['comment_policy'],App::get_hostname())) { return true; + } return false; } diff --git a/view/pdl/mod_wiki.pdl b/view/pdl/mod_wiki.pdl index be86be7e3..2e99ea36b 100644 --- a/view/pdl/mod_wiki.pdl +++ b/view/pdl/mod_wiki.pdl @@ -1,5 +1,6 @@ [region=aside] [widget=vcard][/widget] +[widget=wiki_list][/widget] [widget=wiki_pages][/widget] [/region] [region=right_aside] -- cgit v1.2.3 From 32acb0ff01b8fde3801fafbd7953aa36b5933f96 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 15 Aug 2018 21:33:11 -0700 Subject: missing files --- Zotlabs/Module/Zot_probe.php | 47 ++++ Zotlabs/Zot6/HTTPSig.php | 507 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 554 insertions(+) create mode 100644 Zotlabs/Module/Zot_probe.php create mode 100644 Zotlabs/Zot6/HTTPSig.php diff --git a/Zotlabs/Module/Zot_probe.php b/Zotlabs/Module/Zot_probe.php new file mode 100644 index 000000000..d0c7e688f --- /dev/null +++ b/Zotlabs/Module/Zot_probe.php @@ -0,0 +1,47 @@ +Zot6 Probe Diagnostic'; + + $o .= ''; + $o .= 'Lookup URI:
'; + $o .= ''; + + $o .= '

'; + + if(x($_GET,'addr')) { + $addr = $_GET['addr']; + + + $x = Zotfinger::exec($addr); + + $o .= '
' . htmlspecialchars(print_array($x)) . '
'; + + $headers = 'Accept: application/x-zot+json, application/jrd+json, application/json'; + + $redirects = 0; + $x = z_fetch_url($addr,true,$redirects, [ 'headers' => [ $headers ]]); + + if($x['success']) { + + $o .= '
' . htmlspecialchars($x['header']) . '
' . EOL; + + $o .= 'verify returns: ' . str_replace("\n",EOL,print_r(HTTPSig::verify($x),true)) . EOL; + + $o .= '
' . htmlspecialchars(json_encode(json_decode($x['body']),JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)) . '
' . EOL; + + } + + } + return $o; + } + +} diff --git a/Zotlabs/Zot6/HTTPSig.php b/Zotlabs/Zot6/HTTPSig.php new file mode 100644 index 000000000..a0f0d3500 --- /dev/null +++ b/Zotlabs/Zot6/HTTPSig.php @@ -0,0 +1,507 @@ +fetcharr(); + $body = $data['body']; + } + + else { + $headers = []; + $headers['(request-target)'] = strtolower($_SERVER['REQUEST_METHOD']) . ' ' . $_SERVER['REQUEST_URI']; + $headers['content-type'] = $_SERVER['CONTENT_TYPE']; + + foreach($_SERVER as $k => $v) { + if(strpos($k,'HTTP_') === 0) { + $field = str_replace('_','-',strtolower(substr($k,5))); + $headers[$field] = $v; + } + } + } + + //logger('SERVER: ' . print_r($_SERVER,true), LOGGER_ALL); + + //logger('headers: ' . print_r($headers,true), LOGGER_ALL); + + return $headers; + } + + + // See draft-cavage-http-signatures-10 + + static function verify($data,$key = '') { + + $body = $data; + $headers = null; + + $result = [ + 'signer' => '', + 'portable_id' => '', + 'header_signed' => false, + 'header_valid' => false, + 'content_signed' => false, + 'content_valid' => false + ]; + + + $headers = self::find_headers($data,$body); + + if(! $headers) + return $result; + + $sig_block = null; + + if(array_key_exists('signature',$headers)) { + $sig_block = self::parse_sigheader($headers['signature']); + } + elseif(array_key_exists('authorization',$headers)) { + $sig_block = self::parse_sigheader($headers['authorization']); + } + + if(! $sig_block) { + logger('no signature provided.', LOGGER_DEBUG); + return $result; + } + + // Warning: This log statement includes binary data + // logger('sig_block: ' . print_r($sig_block,true), LOGGER_DATA); + + $result['header_signed'] = true; + + $signed_headers = $sig_block['headers']; + if(! $signed_headers) + $signed_headers = [ 'date' ]; + + $signed_data = ''; + foreach($signed_headers as $h) { + if(array_key_exists($h,$headers)) { + $signed_data .= $h . ': ' . $headers[$h] . "\n"; + } + } + $signed_data = rtrim($signed_data,"\n"); + + $algorithm = null; + if($sig_block['algorithm'] === 'rsa-sha256') { + $algorithm = 'sha256'; + } + if($sig_block['algorithm'] === 'rsa-sha512') { + $algorithm = 'sha512'; + } + + if(! array_key_exists('keyId',$sig_block)) + return $result; + + $result['signer'] = $sig_block['keyId']; + + $key = self::get_key($key,$result['signer']); + + if(! ($key && $key['public_key'])) { + return $result; + } + + $x = rsa_verify($signed_data,$sig_block['signature'],$key['public_key'],$algorithm); + + logger('verified: ' . $x, LOGGER_DEBUG); + + if(! $x) + return $result; + + $result['portable_id'] = $key['portable_id']; + $result['header_valid'] = true; + + if(in_array('digest',$signed_headers)) { + $result['content_signed'] = true; + $digest = explode('=', $headers['digest'], 2); + if($digest[0] === 'SHA-256') + $hashalg = 'sha256'; + if($digest[0] === 'SHA-512') + $hashalg = 'sha512'; + + if(base64_encode(hash($hashalg,$body,true)) === $digest[1]) { + $result['content_valid'] = true; + } + + logger('Content_Valid: ' . (($result['content_valid']) ? 'true' : 'false')); + } + + return $result; + } + + static function get_key($key,$id) { + + if($key) { + if(function_exists($key)) { + return $key($id); + } + return [ 'public_key' => $key ]; + } + + $key = self::get_webfinger_key($id); + + if(! $key) { + $key = self::get_activitystreams_key($id); + } + + return $key; + + } + + + function convertKey($key) { + + if(strstr($key,'RSA ')) { + return rsatopem($key); + } + elseif(substr($key,0,5) === 'data:') { + return convert_salmon_key($key); + } + else { + return $key; + } + + } + + + /** + * @brief + * + * @param string $id + * @return boolean|string + * false if no pub key found, otherwise return the pub key + */ + + function get_activitystreams_key($id) { + + $x = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_addr = '%s' or hubloc_id_url = '%s' limit 1", + dbesc(str_replace('acct:','',$id)), + dbesc($id) + ); + + if($x && $x[0]['xchan_pubkey']) { + return [ 'portable_id' => $x[0]['xchan_hash'], 'public_key' => $x[0]['xchan_pubkey'] , 'hubloc' => $x[0] ]; + } + + $r = ActivityStreams::fetch_property($id); + + if($r) { + if(array_key_exists('publicKey',$j) && array_key_exists('publicKeyPem',$j['publicKey']) && array_key_exists('id',$j['publicKey'])) { + if($j['publicKey']['id'] === $id || $j['id'] === $id) { + return [ 'public_key' => self::convertKey($j['publicKey']['publicKeyPem']), 'portable_id' => '', 'hubloc' => [] ]; + } + } + } + + return false; + } + + + function get_webfinger_key($id) { + + $x = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_addr = '%s' or hubloc_id_url = '%s' limit 1", + dbesc(str_replace('acct:','',$id)), + dbesc($id) + ); + + if($x && $x[0]['xchan_pubkey']) { + return [ 'portable_id' => $x[0]['xchan_hash'], 'public_key' => $x[0]['xchan_pubkey'] , 'hubloc' => $x[0] ]; + } + + $wf = Webfinger::exec($id); + $key = [ 'portable_id' => '', 'public_key' => '', 'hubloc' => [] ]; + + if($wf) { + if(array_key_exists('properties',$wf) && array_key_exists('https://w3id.org/security/v1#publicKeyPem',$wf['properties'])) { + $key['public_key'] = self::convertKey($wf['properties']['https://w3id.org/security/v1#publicKeyPem']); + } + if(array_key_exists('links', $wf) && is_array($wf['links'])) { + foreach($wf['links'] as $l) { + if(! (is_array($l) && array_key_exists('rel',$l))) { + continue; + } + if($l['rel'] === 'magic-public-key' && array_key_exists('href',$l) && $key['public_key'] === EMPTY_STR) { + $key['public_key'] = self::convertKey($l['href']); + } + } + } + } + + return (($key['public_key']) ? $key : false); + } + + + function get_zotfinger_key($id) { + + $x = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_addr = '%s' or hubloc_id_url = '%s' limit 1", + dbesc(str_replace('acct:','',$id)), + dbesc($id) + ); + if($x && $x[0]['xchan_pubkey']) { + return [ 'portable_id' => $x[0]['xchan_hash'], 'public_key' => $x[0]['xchan_pubkey'] , 'hubloc' => $x[0] ]; + } + + $wf = Webfinger::exec($id); + $key = [ 'portable_id' => '', 'public_key' => '', 'hubloc' => [] ]; + + if($wf) { + if(array_key_exists('properties',$wf) && array_key_exists('https://w3id.org/security/v1#publicKeyPem',$wf['properties'])) { + $key['public_key'] = self::convertKey($wf['properties']['https://w3id.org/security/v1#publicKeyPem']); + } + if(array_key_exists('links', $wf) && is_array($wf['links'])) { + foreach($wf['links'] as $l) { + if(! (is_array($l) && array_key_exists('rel',$l))) { + continue; + } + if($l['rel'] === 'http://purl.org/zot/protocol/6.0' && array_key_exists('href',$l) && $l['href'] !== EMPTY_STR) { + $z = \Zotlabs\Lib\Zotfinger::exec($l['href']); + if($z) { + $i = Zotlabs\Lib\Libzot::import_xchan($z['data']); + if($i['success']) { + $key['portable_id'] = $i['hash']; + + $x = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_id_url = '%s' limit 1", + dbesc($l['href']) + ); + if($x) { + $key['hubloc'] = $x[0]; + } + } + } + } + if($l['rel'] === 'magic-public-key' && array_key_exists('href',$l) && $key['public_key'] === EMPTY_STR) { + $key['public_key'] = self::convertKey($l['href']); + } + } + } + } + + return (($key['public_key']) ? $key : false); + } + + + /** + * @brief + * + * @param array $head + * @param string $prvkey + * @param string $keyid (optional, default '') + * @param boolean $auth (optional, default false) + * @param string $alg (optional, default 'sha256') + * @param array $encryption [ 'key', 'algorithm' ] or false + * @return array + */ + static function create_sig($head, $prvkey, $keyid = EMPTY_STR, $auth = false, $alg = 'sha256', $encryption = false ) { + + $return_headers = []; + + if($alg === 'sha256') { + $algorithm = 'rsa-sha256'; + } + if($alg === 'sha512') { + $algorithm = 'rsa-sha512'; + } + + $x = self::sign($head,$prvkey,$alg); + + $headerval = 'keyId="' . $keyid . '",algorithm="' . $algorithm . '",headers="' . $x['headers'] . '",signature="' . $x['signature'] . '"'; + + if($encryption) { + $x = crypto_encapsulate($headerval,$encryption['key'],$encryption['algorithm']); + if(is_array($x)) { + $headerval = 'iv="' . $x['iv'] . '",key="' . $x['key'] . '",alg="' . $x['alg'] . '",data="' . $x['data'] . '"'; + } + } + + if($auth) { + $sighead = 'Authorization: Signature ' . $headerval; + } + else { + $sighead = 'Signature: ' . $headerval; + } + + if($head) { + foreach($head as $k => $v) { + // strip the request-target virtual header from the output headers + if($k === '(request-target)') { + continue; + } + $return_headers[] = $k . ': ' . $v; + } + } + $return_headers[] = $sighead; + + return $return_headers; + } + + /** + * @brief set headers + * + * @param array $headers + * @return void + */ + + + static function set_headers($headers) { + if($headers && is_array($headers)) { + foreach($headers as $h) { + header($h); + } + } + } + + + /** + * @brief + * + * @param array $head + * @param string $prvkey + * @param string $alg (optional) default 'sha256' + * @return array + */ + + static function sign($head, $prvkey, $alg = 'sha256') { + + $ret = []; + + $headers = ''; + $fields = ''; + + if($head) { + foreach($head as $k => $v) { + $headers .= strtolower($k) . ': ' . trim($v) . "\n"; + if($fields) + $fields .= ' '; + + $fields .= strtolower($k); + } + // strip the trailing linefeed + $headers = rtrim($headers,"\n"); + } + + $sig = base64_encode(rsa_sign($headers,$prvkey,$alg)); + + $ret['headers'] = $fields; + $ret['signature'] = $sig; + + return $ret; + } + + /** + * @brief + * + * @param string $header + * @return array associate array with + * - \e string \b keyID + * - \e string \b algorithm + * - \e array \b headers + * - \e string \b signature + */ + + static function parse_sigheader($header) { + + $ret = []; + $matches = []; + + // if the header is encrypted, decrypt with (default) site private key and continue + + if(preg_match('/iv="(.*?)"/ism',$header,$matches)) + $header = self::decrypt_sigheader($header); + + if(preg_match('/keyId="(.*?)"/ism',$header,$matches)) + $ret['keyId'] = $matches[1]; + if(preg_match('/algorithm="(.*?)"/ism',$header,$matches)) + $ret['algorithm'] = $matches[1]; + if(preg_match('/headers="(.*?)"/ism',$header,$matches)) + $ret['headers'] = explode(' ', $matches[1]); + if(preg_match('/signature="(.*?)"/ism',$header,$matches)) + $ret['signature'] = base64_decode(preg_replace('/\s+/','',$matches[1])); + + if(($ret['signature']) && ($ret['algorithm']) && (! $ret['headers'])) + $ret['headers'] = [ 'date' ]; + + return $ret; + } + + + /** + * @brief + * + * @param string $header + * @param string $prvkey (optional), if not set use site private key + * @return array|string associative array, empty string if failue + * - \e string \b iv + * - \e string \b key + * - \e string \b alg + * - \e string \b data + */ + + static function decrypt_sigheader($header, $prvkey = null) { + + $iv = $key = $alg = $data = null; + + if(! $prvkey) { + $prvkey = get_config('system', 'prvkey'); + } + + $matches = []; + + if(preg_match('/iv="(.*?)"/ism',$header,$matches)) + $iv = $matches[1]; + if(preg_match('/key="(.*?)"/ism',$header,$matches)) + $key = $matches[1]; + if(preg_match('/alg="(.*?)"/ism',$header,$matches)) + $alg = $matches[1]; + if(preg_match('/data="(.*?)"/ism',$header,$matches)) + $data = $matches[1]; + + if($iv && $key && $alg && $data) { + return crypto_unencapsulate([ 'encrypted' => true, 'iv' => $iv, 'key' => $key, 'alg' => $alg, 'data' => $data ] , $prvkey); + } + + return ''; + } + +} -- cgit v1.2.3 From e5529938ea029ac0f416f96fbdc481f66001d0eb Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 16 Aug 2018 12:35:57 -0700 Subject: Suppress duplicate info() messages. This was done long for notice(), but info() was overlooked at that time. --- boot.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/boot.php b/boot.php index 3bea050dd..955e616eb 100755 --- a/boot.php +++ b/boot.php @@ -1785,6 +1785,10 @@ function info($s) { return; if(! x($_SESSION, 'sysmsg_info')) $_SESSION['sysmsg_info'] = array(); + + if(in_array($s, $_SESSION['sysmsg_info'])) + return; + if(App::$interactive) $_SESSION['sysmsg_info'][] = $s; } -- cgit v1.2.3 From df26fec1b3eff35179543bfdbaf51b3124390fc1 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Fri, 17 Aug 2018 21:21:02 -0700 Subject: hubzilla core issue #1262 --- include/text.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/text.php b/include/text.php index c4f253a27..8a07dc113 100644 --- a/include/text.php +++ b/include/text.php @@ -2047,6 +2047,7 @@ function undo_post_tagging($s) { $cnt = preg_match_all('/([@#])(\!*)\[zrl=(.*?)\](.*?)\[\/zrl\]/ism',$s,$matches,PREG_SET_ORDER); if($cnt) { foreach($matches as $mtch) { + $x = false; if($mtch[1] === '@') { $x = q("select xchan_addr, xchan_url from xchan where xchan_url = '%s' limit 1", dbesc($mtch[3]) -- cgit v1.2.3 From 1d7d604016e6728725c4b857cec85c3d5a050268 Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Mon, 20 Aug 2018 00:15:34 -0400 Subject: Add bottom margin on aside elements and main to allow for viewport footer. --- view/theme/redbasic/css/style.css | 8 +++++++- view/theme/redbasic/php/style.php | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 970e4bc89..82d0cf761 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -33,13 +33,19 @@ aside #region_1 { } aside #left_aside_wrapper { - margin-bottom: 10px; + /*margin-bottom: 10px;*/ + margin-bottom: $bottom_margin; +} +aside #right_aside_wrapper { + /*margin-bottom: 10px;*/ + margin-bottom: $bottom_margin; } main { margin-left: auto; margin-right: auto; max-width: $main_widthpx; + margin-bottom: $bottom_margin; } #overlay { diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php index 91cc0b85b..0631fa142 100644 --- a/view/theme/redbasic/php/style.php +++ b/view/theme/redbasic/php/style.php @@ -106,6 +106,8 @@ if(! $top_photo) $top_photo = '2.3rem'; if(! $reply_photo) $reply_photo = '2.3rem'; +if(! $bottom_margin) + $bottom_margin = '200px'; // Apply the settings if(file_exists('view/theme/redbasic/css/style.css')) { @@ -150,7 +152,9 @@ if(file_exists('view/theme/redbasic/css/style.css')) { '$pmenu_top' => $pmenu_top, '$pmenu_reply' => $pmenu_reply, '$main_width' => $main_width, - '$aside_width' => $aside_width + '$aside_width' => $aside_width, + '$bottom_margin' => $bottom_margin + ); echo str_replace(array_keys($options), array_values($options), $x); -- cgit v1.2.3 From af31bbeba10258f9c6607662fdd1c27c1ef01b04 Mon Sep 17 00:00:00 2001 From: fadelkon Date: Mon, 20 Aug 2018 22:50:46 +0200 Subject: Update catalan translations for sstrings up to 18th July 2018 --- view/ca/hmessages.po | 3840 ++++++++++++++++++++++----------------- view/ca/hstrings.php | 411 +++-- view/ca/lostpass_eml.tpl | 3 + view/ca/passchanged_eml.tpl | 6 +- view/ca/register_verify_eml.tpl | 26 +- view/ca/update_fail_eml.tpl | 13 + 6 files changed, 2445 insertions(+), 1854 deletions(-) create mode 100644 view/ca/update_fail_eml.tpl diff --git a/view/ca/hmessages.po b/view/ca/hmessages.po index 24c740752..e7bbc980b 100644 --- a/view/ca/hmessages.po +++ b/view/ca/hmessages.po @@ -10,12 +10,12 @@ # Rafael Garau, 2015 msgid "" msgstr "" -"Project-Id-Version: Redmatrix\n" +"Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-23 11:34+0200\n" -"PO-Revision-Date: 2018-05-20 02:06+0000\n" +"POT-Creation-Date: 2018-07-18 11:47+0200\n" +"PO-Revision-Date: 2018-08-20 19:57+0000\n" "Last-Translator: fadelkon \n" -"Language-Team: Catalan (Spain) (http://www.transifex.com/Friendica/red-matrix/language/ca_ES/)\n" +"Language-Team: Catalan (Spain) (http://www.transifex.com/Friendica/hubzilla/language/ca_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -79,8 +79,8 @@ msgid "Can like/dislike profiles and profile things" msgstr "Pot fer m'agrada i no m'agrada als perfils i coses del perfil" #: ../../Zotlabs/Access/Permissions.php:70 -msgid "Can forward to all my channel connections via @+ mentions in posts" -msgstr "Pot reenviar a totes les connexions del meu canal fent servir @+ per mencionar" +msgid "Can forward to all my channel connections via ! mentions in posts" +msgstr "Pot fer arribar entrades a totes les meves connexions fent servir mencions amb \"!\"" #: ../../Zotlabs/Access/Permissions.php:71 msgid "Can chat with me" @@ -155,14 +155,14 @@ msgid "Special - Group Repository" msgstr "Especial - Repositori d'un Grup" #: ../../Zotlabs/Access/PermissionRoles.php:306 -#: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/New_channel.php:144 -#: ../../Zotlabs/Module/Settings/Channel.php:479 +#: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/New_channel.php:172 +#: ../../Zotlabs/Module/Settings/Channel.php:496 #: ../../Zotlabs/Module/Connedit.php:918 ../../Zotlabs/Module/Profiles.php:795 -#: ../../Zotlabs/Module/Register.php:224 ../../include/selectors.php:49 +#: ../../Zotlabs/Module/Register.php:233 ../../include/selectors.php:49 #: ../../include/selectors.php:66 ../../include/selectors.php:104 #: ../../include/selectors.php:140 ../../include/event.php:1315 -#: ../../include/event.php:1322 ../../include/connections.php:697 -#: ../../include/connections.php:704 +#: ../../include/event.php:1322 ../../include/connections.php:703 +#: ../../include/connections.php:710 msgid "Other" msgstr "Altres" @@ -174,8 +174,9 @@ msgstr "Personalitzat, mode expert" #: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Connect.php:17 #: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Hcard.php:12 #: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Profile.php:20 -#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Editwebpage.php:32 -#: ../../Zotlabs/Module/Cards.php:33 ../../Zotlabs/Module/Webpages.php:33 +#: ../../Zotlabs/Module/Menu.php:91 ../../Zotlabs/Module/Layouts.php:31 +#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Cards.php:33 +#: ../../Zotlabs/Module/Webpages.php:33 #: ../../Zotlabs/Module/Filestorage.php:51 ../../include/channel.php:1197 msgid "Requested profile is not available." msgstr "El perfil demanat no està disponible." @@ -183,14 +184,14 @@ msgstr "El perfil demanat no està disponible." #: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80 #: ../../Zotlabs/Module/Invite.php:17 ../../Zotlabs/Module/Invite.php:94 #: ../../Zotlabs/Module/Articles.php:68 ../../Zotlabs/Module/Editlayout.php:67 -#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Channel.php:110 -#: ../../Zotlabs/Module/Channel.php:248 ../../Zotlabs/Module/Channel.php:288 +#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Channel.php:115 +#: ../../Zotlabs/Module/Channel.php:281 ../../Zotlabs/Module/Channel.php:320 #: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Locs.php:87 -#: ../../Zotlabs/Module/Mitem.php:115 ../../Zotlabs/Module/Events.php:271 -#: ../../Zotlabs/Module/Appman.php:87 ../../Zotlabs/Module/Regmod.php:21 +#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Events.php:271 +#: ../../Zotlabs/Module/Appman.php:87 ../../Zotlabs/Module/Regmod.php:20 #: ../../Zotlabs/Module/Article_edit.php:51 -#: ../../Zotlabs/Module/New_channel.php:91 -#: ../../Zotlabs/Module/New_channel.php:116 +#: ../../Zotlabs/Module/New_channel.php:105 +#: ../../Zotlabs/Module/New_channel.php:130 #: ../../Zotlabs/Module/Sharedwithme.php:16 ../../Zotlabs/Module/Setup.php:209 #: ../../Zotlabs/Module/Moderate.php:13 #: ../../Zotlabs/Module/Settings/Features.php:38 @@ -207,30 +208,32 @@ msgstr "El perfil demanat no està disponible." #: ../../Zotlabs/Module/Profile_photo.php:315 #: ../../Zotlabs/Module/Authtest.php:16 ../../Zotlabs/Module/Item.php:229 #: ../../Zotlabs/Module/Item.php:246 ../../Zotlabs/Module/Item.php:256 -#: ../../Zotlabs/Module/Item.php:1106 ../../Zotlabs/Module/Page.php:34 +#: ../../Zotlabs/Module/Item.php:1108 ../../Zotlabs/Module/Page.php:34 #: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Connedit.php:389 #: ../../Zotlabs/Module/Chat.php:100 ../../Zotlabs/Module/Chat.php:105 -#: ../../Zotlabs/Module/Menu.php:78 ../../Zotlabs/Module/Layouts.php:71 -#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 -#: ../../Zotlabs/Module/Defperms.php:173 ../../Zotlabs/Module/Group.php:13 -#: ../../Zotlabs/Module/Profiles.php:198 ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Menu.php:129 ../../Zotlabs/Module/Menu.php:140 +#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 +#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Cloud.php:40 +#: ../../Zotlabs/Module/Defperms.php:173 ../../Zotlabs/Module/Group.php:12 +#: ../../Zotlabs/Module/Group.php:24 ../../Zotlabs/Module/Profiles.php:198 +#: ../../Zotlabs/Module/Profiles.php:635 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 #: ../../Zotlabs/Module/Editwebpage.php:107 #: ../../Zotlabs/Module/Editwebpage.php:121 ../../Zotlabs/Module/Manage.php:10 #: ../../Zotlabs/Module/Cards.php:72 ../../Zotlabs/Module/Webpages.php:118 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 -#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Sources.php:74 +#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Sources.php:77 #: ../../Zotlabs/Module/Like.php:185 ../../Zotlabs/Module/Suggest.php:28 #: ../../Zotlabs/Module/Message.php:18 ../../Zotlabs/Module/Mail.php:146 #: ../../Zotlabs/Module/Register.php:77 -#: ../../Zotlabs/Module/Cover_photo.php:281 -#: ../../Zotlabs/Module/Cover_photo.php:294 +#: ../../Zotlabs/Module/Cover_photo.php:313 +#: ../../Zotlabs/Module/Cover_photo.php:326 #: ../../Zotlabs/Module/Display.php:449 ../../Zotlabs/Module/Network.php:15 #: ../../Zotlabs/Module/Filestorage.php:15 #: ../../Zotlabs/Module/Filestorage.php:70 -#: ../../Zotlabs/Module/Filestorage.php:85 -#: ../../Zotlabs/Module/Filestorage.php:117 ../../Zotlabs/Module/Common.php:38 +#: ../../Zotlabs/Module/Filestorage.php:96 +#: ../../Zotlabs/Module/Filestorage.php:140 ../../Zotlabs/Module/Common.php:38 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 #: ../../Zotlabs/Module/Service_limits.php:11 @@ -240,11 +243,10 @@ msgstr "El perfil demanat no està disponible." #: ../../addon/keepout/keepout.php:36 ../../addon/openid/Mod_Id.php:53 #: ../../addon/pumpio/pumpio.php:40 ../../include/attach.php:150 #: ../../include/attach.php:197 ../../include/attach.php:270 -#: ../../include/attach.php:284 ../../include/attach.php:293 -#: ../../include/attach.php:366 ../../include/attach.php:380 -#: ../../include/attach.php:387 ../../include/attach.php:469 -#: ../../include/attach.php:1029 ../../include/attach.php:1103 -#: ../../include/attach.php:1268 ../../include/items.php:3706 +#: ../../include/attach.php:379 ../../include/attach.php:393 +#: ../../include/attach.php:400 ../../include/attach.php:482 +#: ../../include/attach.php:1042 ../../include/attach.php:1116 +#: ../../include/attach.php:1281 ../../include/items.php:3653 #: ../../include/photos.php:27 msgid "Permission denied." msgstr "S'ha denegat el permís." @@ -254,7 +256,7 @@ msgstr "S'ha denegat el permís." msgid "Block Name" msgstr "Nom del bloc" -#: ../../Zotlabs/Module/Blocks.php:154 ../../include/text.php:2422 +#: ../../Zotlabs/Module/Blocks.php:154 ../../include/text.php:2458 msgid "Blocks" msgstr "Blocs" @@ -262,22 +264,22 @@ msgstr "Blocs" msgid "Block Title" msgstr "Títol del bloc" -#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Menu.php:114 +#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Menu.php:177 #: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Module/Webpages.php:251 msgid "Created" msgstr "Creat" -#: ../../Zotlabs/Module/Blocks.php:158 ../../Zotlabs/Module/Menu.php:115 +#: ../../Zotlabs/Module/Blocks.php:158 ../../Zotlabs/Module/Menu.php:178 #: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Webpages.php:252 msgid "Edited" msgstr "Editat" #: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Articles.php:96 -#: ../../Zotlabs/Module/Cdav.php:1185 ../../Zotlabs/Module/New_channel.php:160 -#: ../../Zotlabs/Module/Connedit.php:921 ../../Zotlabs/Module/Menu.php:118 +#: ../../Zotlabs/Module/Cdav.php:1185 ../../Zotlabs/Module/New_channel.php:188 +#: ../../Zotlabs/Module/Connedit.php:921 ../../Zotlabs/Module/Menu.php:181 #: ../../Zotlabs/Module/Layouts.php:185 ../../Zotlabs/Module/Profiles.php:798 #: ../../Zotlabs/Module/Cards.php:100 ../../Zotlabs/Module/Webpages.php:239 -#: ../../Zotlabs/Storage/Browser.php:276 ../../Zotlabs/Storage/Browser.php:382 +#: ../../Zotlabs/Storage/Browser.php:276 ../../Zotlabs/Storage/Browser.php:390 #: ../../Zotlabs/Widget/Cdav.php:128 ../../Zotlabs/Widget/Cdav.php:165 msgid "Create" msgstr "Crea" @@ -285,29 +287,29 @@ msgstr "Crea" #: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editlayout.php:114 #: ../../Zotlabs/Module/Article_edit.php:99 #: ../../Zotlabs/Module/Admin/Profs.php:175 -#: ../../Zotlabs/Module/Settings/Oauth2.php:149 +#: ../../Zotlabs/Module/Settings/Oauth2.php:150 #: ../../Zotlabs/Module/Settings/Oauth.php:150 #: ../../Zotlabs/Module/Thing.php:266 ../../Zotlabs/Module/Editblock.php:114 #: ../../Zotlabs/Module/Connections.php:281 #: ../../Zotlabs/Module/Connections.php:319 #: ../../Zotlabs/Module/Connections.php:339 ../../Zotlabs/Module/Wiki.php:202 -#: ../../Zotlabs/Module/Wiki.php:362 ../../Zotlabs/Module/Menu.php:112 -#: ../../Zotlabs/Module/Layouts.php:193 +#: ../../Zotlabs/Module/Wiki.php:362 ../../Zotlabs/Module/Menu.php:175 +#: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Module/Group.php:216 #: ../../Zotlabs/Module/Editwebpage.php:142 #: ../../Zotlabs/Module/Webpages.php:240 ../../Zotlabs/Module/Card_edit.php:99 -#: ../../Zotlabs/Lib/Apps.php:409 ../../Zotlabs/Lib/ThreadItem.php:121 -#: ../../Zotlabs/Storage/Browser.php:288 ../../Zotlabs/Widget/Cdav.php:126 +#: ../../Zotlabs/Lib/Apps.php:475 ../../Zotlabs/Lib/ThreadItem.php:128 +#: ../../Zotlabs/Storage/Browser.php:290 ../../Zotlabs/Widget/Cdav.php:126 #: ../../Zotlabs/Widget/Cdav.php:162 ../../include/channel.php:1296 -#: ../../include/channel.php:1300 ../../include/menu.php:113 +#: ../../include/channel.php:1300 ../../include/menu.php:118 msgid "Edit" msgstr "Edita" -#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1102 +#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1107 #: ../../Zotlabs/Module/Wiki.php:287 ../../Zotlabs/Module/Layouts.php:194 #: ../../Zotlabs/Module/Webpages.php:241 ../../Zotlabs/Widget/Cdav.php:124 -#: ../../include/conversation.php:1366 +#: ../../include/conversation.php:1374 msgid "Share" -msgstr "Compartir" +msgstr "Comparteix" #: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editlayout.php:138 #: ../../Zotlabs/Module/Cdav.php:897 ../../Zotlabs/Module/Cdav.php:1187 @@ -315,18 +317,17 @@ msgstr "Compartir" #: ../../Zotlabs/Module/Admin/Accounts.php:175 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:176 -#: ../../Zotlabs/Module/Settings/Oauth2.php:150 +#: ../../Zotlabs/Module/Settings/Oauth2.php:151 #: ../../Zotlabs/Module/Settings/Oauth.php:151 #: ../../Zotlabs/Module/Thing.php:267 ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Connections.php:289 -#: ../../Zotlabs/Module/Photos.php:1203 ../../Zotlabs/Module/Connedit.php:654 -#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Group.php:179 -#: ../../Zotlabs/Module/Profiles.php:800 +#: ../../Zotlabs/Module/Photos.php:1208 ../../Zotlabs/Module/Connedit.php:654 +#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Profiles.php:800 #: ../../Zotlabs/Module/Editwebpage.php:167 #: ../../Zotlabs/Module/Webpages.php:242 -#: ../../Zotlabs/Module/Card_edit.php:129 ../../Zotlabs/Lib/Apps.php:410 -#: ../../Zotlabs/Lib/ThreadItem.php:141 ../../Zotlabs/Storage/Browser.php:289 -#: ../../include/conversation.php:690 ../../include/conversation.php:733 +#: ../../Zotlabs/Module/Card_edit.php:129 ../../Zotlabs/Lib/Apps.php:476 +#: ../../Zotlabs/Lib/ThreadItem.php:148 ../../Zotlabs/Storage/Browser.php:291 +#: ../../include/conversation.php:691 ../../include/conversation.php:736 msgid "Delete" msgstr "Esborra" @@ -408,50 +409,51 @@ msgid "3. Click [Connect]" msgstr "3. Clica [connecta]" #: ../../Zotlabs/Module/Invite.php:151 ../../Zotlabs/Module/Locs.php:121 -#: ../../Zotlabs/Module/Mitem.php:243 ../../Zotlabs/Module/Events.php:493 +#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Events.php:493 #: ../../Zotlabs/Module/Appman.php:153 #: ../../Zotlabs/Module/Import_items.php:129 #: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:349 #: ../../Zotlabs/Module/Connect.php:98 #: ../../Zotlabs/Module/Admin/Features.php:66 -#: ../../Zotlabs/Module/Admin/Plugins.php:438 #: ../../Zotlabs/Module/Admin/Accounts.php:168 #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Channels.php:147 #: ../../Zotlabs/Module/Admin/Themes.php:158 -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:309 +#: ../../Zotlabs/Module/Admin/Addons.php:438 #: ../../Zotlabs/Module/Admin/Profs.php:178 #: ../../Zotlabs/Module/Admin/Account_edit.php:74 -#: ../../Zotlabs/Module/Admin/Security.php:104 +#: ../../Zotlabs/Module/Admin/Security.php:112 #: ../../Zotlabs/Module/Settings/Permcats.php:115 -#: ../../Zotlabs/Module/Settings/Channel.php:495 +#: ../../Zotlabs/Module/Settings/Channel.php:516 #: ../../Zotlabs/Module/Settings/Features.php:79 #: ../../Zotlabs/Module/Settings/Tokens.php:168 -#: ../../Zotlabs/Module/Settings/Oauth2.php:84 +#: ../../Zotlabs/Module/Settings/Oauth2.php:85 #: ../../Zotlabs/Module/Settings/Account.php:118 #: ../../Zotlabs/Module/Settings/Featured.php:54 #: ../../Zotlabs/Module/Settings/Display.php:192 #: ../../Zotlabs/Module/Settings/Oauth.php:88 #: ../../Zotlabs/Module/Thing.php:326 ../../Zotlabs/Module/Thing.php:379 -#: ../../Zotlabs/Module/Import.php:530 ../../Zotlabs/Module/Cal.php:345 -#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:1082 -#: ../../Zotlabs/Module/Photos.php:1122 ../../Zotlabs/Module/Photos.php:1240 +#: ../../Zotlabs/Module/Import.php:565 ../../Zotlabs/Module/Cal.php:345 +#: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Photos.php:1087 +#: ../../Zotlabs/Module/Photos.php:1127 ../../Zotlabs/Module/Photos.php:1245 #: ../../Zotlabs/Module/Wiki.php:206 ../../Zotlabs/Module/Pdledit.php:98 #: ../../Zotlabs/Module/Poke.php:200 ../../Zotlabs/Module/Connedit.php:887 #: ../../Zotlabs/Module/Chat.php:196 ../../Zotlabs/Module/Chat.php:242 #: ../../Zotlabs/Module/Email_validation.php:40 #: ../../Zotlabs/Module/Pconfig.php:107 ../../Zotlabs/Module/Defperms.php:249 -#: ../../Zotlabs/Module/Group.php:87 ../../Zotlabs/Module/Profiles.php:723 -#: ../../Zotlabs/Module/Editpost.php:85 ../../Zotlabs/Module/Sources.php:114 -#: ../../Zotlabs/Module/Sources.php:149 ../../Zotlabs/Module/Xchan.php:15 -#: ../../Zotlabs/Module/Mail.php:431 ../../Zotlabs/Module/Filestorage.php:160 -#: ../../Zotlabs/Module/Rate.php:166 ../../Zotlabs/Lib/ThreadItem.php:752 +#: ../../Zotlabs/Module/Group.php:121 ../../Zotlabs/Module/Group.php:137 +#: ../../Zotlabs/Module/Profiles.php:723 ../../Zotlabs/Module/Editpost.php:85 +#: ../../Zotlabs/Module/Sources.php:117 ../../Zotlabs/Module/Sources.php:154 +#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Mail.php:431 +#: ../../Zotlabs/Module/Filestorage.php:183 ../../Zotlabs/Module/Rate.php:166 +#: ../../Zotlabs/Lib/ThreadItem.php:757 #: ../../Zotlabs/Widget/Eventstools.php:16 #: ../../Zotlabs/Widget/Wiki_pages.php:40 #: ../../Zotlabs/Widget/Wiki_pages.php:97 #: ../../view/theme/redbasic_c/php/config.php:95 #: ../../view/theme/redbasic/php/config.php:93 -#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:275 +#: ../../addon/skeleton/skeleton.php:65 ../../addon/gnusoc/gnusoc.php:284 #: ../../addon/planets/planets.php:153 #: ../../addon/openclipatar/openclipatar.php:53 #: ../../addon/wppost/wppost.php:113 ../../addon/nsfw/nsfw.php:92 @@ -459,7 +461,7 @@ msgstr "3. Clica [connecta]" #: ../../addon/likebanner/likebanner.php:57 #: ../../addon/redphotos/redphotos.php:136 ../../addon/irc/irc.php:53 #: ../../addon/ljpost/ljpost.php:86 ../../addon/startpage/startpage.php:113 -#: ../../addon/diaspora/diaspora.php:825 +#: ../../addon/diaspora/diaspora.php:830 #: ../../addon/rainbowtag/rainbowtag.php:85 ../../addon/hzfiles/hzfiles.php:84 #: ../../addon/visage/visage.php:170 ../../addon/nsabait/nsabait.php:161 #: ../../addon/mailtest/mailtest.php:100 @@ -468,7 +470,7 @@ msgstr "3. Clica [connecta]" #: ../../addon/jappixmini/jappixmini.php:371 #: ../../addon/superblock/superblock.php:120 ../../addon/nofed/nofed.php:80 #: ../../addon/redred/redred.php:119 ../../addon/logrot/logrot.php:35 -#: ../../addon/frphotos/frphotos.php:97 ../../addon/pubcrawl/pubcrawl.php:1072 +#: ../../addon/frphotos/frphotos.php:97 ../../addon/pubcrawl/pubcrawl.php:1159 #: ../../addon/chords/Mod_Chords.php:60 ../../addon/libertree/libertree.php:85 #: ../../addon/flattrwidget/flattrwidget.php:124 #: ../../addon/statusnet/statusnet.php:322 @@ -477,8 +479,11 @@ msgstr "3. Clica [connecta]" #: ../../addon/statusnet/statusnet.php:900 ../../addon/twitter/twitter.php:218 #: ../../addon/twitter/twitter.php:265 #: ../../addon/smileybutton/smileybutton.php:219 -#: ../../addon/cart/cart.php:1104 ../../addon/piwik/piwik.php:95 -#: ../../addon/pageheader/pageheader.php:48 +#: ../../addon/cart/cart.php:1251 +#: ../../addon/cart/submodules/paypalbutton.php:144 +#: ../../addon/cart/submodules/hzservices.php:78 +#: ../../addon/cart/submodules/hzservices.php:647 +#: ../../addon/piwik/piwik.php:95 ../../addon/pageheader/pageheader.php:48 #: ../../addon/authchoose/authchoose.php:71 ../../addon/xmpp/xmpp.php:69 #: ../../addon/pumpio/pumpio.php:237 ../../addon/redfiles/redfiles.php:124 #: ../../addon/hubwall/hubwall.php:95 ../../include/js_strings.php:22 @@ -486,8 +491,8 @@ msgid "Submit" msgstr "Envia" #: ../../Zotlabs/Module/Articles.php:38 ../../Zotlabs/Module/Articles.php:191 -#: ../../Zotlabs/Lib/Apps.php:229 ../../include/features.php:133 -#: ../../include/nav.php:469 +#: ../../Zotlabs/Lib/Apps.php:292 ../../include/features.php:133 +#: ../../include/nav.php:461 msgid "Articles" msgstr "Articles" @@ -519,14 +524,35 @@ msgstr "Descripció del disseny (opcional)" msgid "Edit Layout" msgstr "Edita el disseny" +#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Cdav.php:899 +#: ../../Zotlabs/Module/Cdav.php:1188 +#: ../../Zotlabs/Module/Article_edit.php:131 +#: ../../Zotlabs/Module/Admin/Addons.php:423 +#: ../../Zotlabs/Module/Settings/Oauth2.php:86 +#: ../../Zotlabs/Module/Settings/Oauth2.php:114 +#: ../../Zotlabs/Module/Settings/Oauth.php:89 +#: ../../Zotlabs/Module/Settings/Oauth.php:115 +#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Wiki.php:347 +#: ../../Zotlabs/Module/Wiki.php:379 +#: ../../Zotlabs/Module/Profile_photo.php:465 +#: ../../Zotlabs/Module/Connedit.php:924 ../../Zotlabs/Module/Fbrowser.php:66 +#: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:801 +#: ../../Zotlabs/Module/Editwebpage.php:169 +#: ../../Zotlabs/Module/Editpost.php:109 ../../Zotlabs/Module/Filer.php:55 +#: ../../Zotlabs/Module/Cover_photo.php:399 ../../Zotlabs/Module/Tagrm.php:15 +#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Card_edit.php:131 +#: ../../include/conversation.php:1397 ../../include/conversation.php:1446 +msgid "Cancel" +msgstr "Cancel·la" + #: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Subthread.php:86 #: ../../Zotlabs/Module/Import_items.php:120 -#: ../../Zotlabs/Module/Cloud.php:117 ../../Zotlabs/Module/Group.php:74 +#: ../../Zotlabs/Module/Cloud.php:126 ../../Zotlabs/Module/Group.php:83 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:68 #: ../../Zotlabs/Module/Like.php:296 ../../Zotlabs/Web/WebServer.php:122 #: ../../addon/redphotos/redphotos.php:119 ../../addon/hzfiles/hzfiles.php:73 #: ../../addon/frphotos/frphotos.php:82 ../../addon/redfiles/redfiles.php:109 -#: ../../include/items.php:358 +#: ../../include/items.php:364 msgid "Permission denied" msgstr "S'ha denegat el permís" @@ -565,11 +591,11 @@ msgstr "Resum:" #: ../../Zotlabs/Module/Cdav.php:786 ../../Zotlabs/Module/Cdav.php:787 #: ../../Zotlabs/Module/Cdav.php:794 ../../Zotlabs/Module/Embedphotos.php:146 -#: ../../Zotlabs/Module/Photos.php:817 ../../Zotlabs/Module/Photos.php:1273 -#: ../../Zotlabs/Lib/Apps.php:754 ../../Zotlabs/Lib/Apps.php:833 +#: ../../Zotlabs/Module/Photos.php:822 ../../Zotlabs/Module/Photos.php:1278 +#: ../../Zotlabs/Lib/Apps.php:819 ../../Zotlabs/Lib/Apps.php:898 #: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Widget/Portfolio.php:95 -#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:891 -#: ../../include/conversation.php:1160 +#: ../../Zotlabs/Widget/Album.php:84 ../../addon/pubcrawl/as.php:961 +#: ../../include/conversation.php:1165 msgid "Unknown" msgstr "Desconegut" @@ -608,6 +634,7 @@ msgstr "Data i hora de fi" #: ../../Zotlabs/Module/Cdav.php:871 ../../Zotlabs/Module/Events.php:473 #: ../../Zotlabs/Module/Appman.php:143 ../../Zotlabs/Module/Rbmark.php:101 #: ../../addon/rendezvous/rendezvous.php:173 +#: ../../addon/cart/submodules/hzservices.php:659 msgid "Description" msgstr "Descripció" @@ -620,14 +647,14 @@ msgstr "Ubicació" #: ../../Zotlabs/Module/Cdav.php:879 ../../Zotlabs/Module/Events.php:689 #: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Cal.php:339 -#: ../../Zotlabs/Module/Cal.php:346 ../../Zotlabs/Module/Photos.php:971 +#: ../../Zotlabs/Module/Cal.php:346 ../../Zotlabs/Module/Photos.php:976 msgid "Previous" msgstr "Anterior" #: ../../Zotlabs/Module/Cdav.php:880 ../../Zotlabs/Module/Events.php:690 #: ../../Zotlabs/Module/Events.php:699 ../../Zotlabs/Module/Setup.php:263 #: ../../Zotlabs/Module/Cal.php:340 ../../Zotlabs/Module/Cal.php:347 -#: ../../Zotlabs/Module/Photos.php:980 +#: ../../Zotlabs/Module/Photos.php:985 msgid "Next" msgstr "Següent" @@ -676,22 +703,6 @@ msgstr "Tria un calendari" msgid "Delete all" msgstr "Esborra'ls tots" -#: ../../Zotlabs/Module/Cdav.php:899 ../../Zotlabs/Module/Cdav.php:1188 -#: ../../Zotlabs/Module/Admin/Plugins.php:423 -#: ../../Zotlabs/Module/Settings/Oauth2.php:85 -#: ../../Zotlabs/Module/Settings/Oauth2.php:113 -#: ../../Zotlabs/Module/Settings/Oauth.php:89 -#: ../../Zotlabs/Module/Settings/Oauth.php:115 -#: ../../Zotlabs/Module/Wiki.php:347 ../../Zotlabs/Module/Wiki.php:379 -#: ../../Zotlabs/Module/Profile_photo.php:464 -#: ../../Zotlabs/Module/Connedit.php:924 ../../Zotlabs/Module/Fbrowser.php:66 -#: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:801 -#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Module/Cover_photo.php:366 -#: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 -#: ../../include/conversation.php:1389 ../../include/conversation.php:1438 -msgid "Cancel" -msgstr "Cancel·la" - #: ../../Zotlabs/Module/Cdav.php:900 msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "Malauradament encara no es poden editar esdeveniments periòdics." @@ -699,13 +710,14 @@ msgstr "Malauradament encara no es poden editar esdeveniments periòdics." #: ../../Zotlabs/Module/Cdav.php:1170 #: ../../Zotlabs/Module/Sharedwithme.php:105 #: ../../Zotlabs/Module/Admin/Channels.php:159 -#: ../../Zotlabs/Module/Settings/Oauth2.php:86 -#: ../../Zotlabs/Module/Settings/Oauth2.php:114 +#: ../../Zotlabs/Module/Settings/Oauth2.php:87 +#: ../../Zotlabs/Module/Settings/Oauth2.php:115 #: ../../Zotlabs/Module/Settings/Oauth.php:90 #: ../../Zotlabs/Module/Settings/Oauth.php:116 #: ../../Zotlabs/Module/Wiki.php:209 ../../Zotlabs/Module/Connedit.php:906 -#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Lib/NativeWikiPage.php:558 -#: ../../Zotlabs/Storage/Browser.php:283 +#: ../../Zotlabs/Module/Chat.php:251 ../../Zotlabs/Module/Group.php:125 +#: ../../Zotlabs/Lib/NativeWikiPage.php:558 +#: ../../Zotlabs/Storage/Browser.php:285 #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../addon/rendezvous/rendezvous.php:172 msgid "Name" @@ -730,7 +742,7 @@ msgstr "Telèfon" #: ../../Zotlabs/Module/Connedit.php:910 ../../Zotlabs/Module/Profiles.php:787 #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 ../../addon/rtof/rtof.php:93 -#: ../../addon/redred/redred.php:107 ../../include/network.php:1770 +#: ../../addon/redred/redred.php:107 ../../include/network.php:1769 msgid "Email" msgstr "Correu electrònic" @@ -758,19 +770,19 @@ msgstr "Nota" #: ../../Zotlabs/Module/Cdav.php:1179 ../../Zotlabs/Module/Connedit.php:915 #: ../../Zotlabs/Module/Profiles.php:792 ../../include/event.php:1308 -#: ../../include/connections.php:690 +#: ../../include/connections.php:696 msgid "Mobile" msgstr "Mòbil" #: ../../Zotlabs/Module/Cdav.php:1180 ../../Zotlabs/Module/Connedit.php:916 #: ../../Zotlabs/Module/Profiles.php:793 ../../include/event.php:1309 -#: ../../include/connections.php:691 +#: ../../include/connections.php:697 msgid "Home" msgstr "Inici" #: ../../Zotlabs/Module/Cdav.php:1181 ../../Zotlabs/Module/Connedit.php:917 #: ../../Zotlabs/Module/Profiles.php:794 ../../include/event.php:1312 -#: ../../include/connections.php:694 +#: ../../include/connections.php:700 msgid "Work" msgstr "Feina" @@ -786,13 +798,13 @@ msgid "Add Field" msgstr "Afegeix un camp" #: ../../Zotlabs/Module/Cdav.php:1186 -#: ../../Zotlabs/Module/Admin/Plugins.php:453 -#: ../../Zotlabs/Module/Settings/Oauth2.php:39 -#: ../../Zotlabs/Module/Settings/Oauth2.php:112 +#: ../../Zotlabs/Module/Admin/Addons.php:453 +#: ../../Zotlabs/Module/Settings/Oauth2.php:40 +#: ../../Zotlabs/Module/Settings/Oauth2.php:113 #: ../../Zotlabs/Module/Settings/Oauth.php:43 #: ../../Zotlabs/Module/Settings/Oauth.php:114 #: ../../Zotlabs/Module/Connedit.php:922 ../../Zotlabs/Module/Profiles.php:799 -#: ../../Zotlabs/Lib/Apps.php:393 +#: ../../Zotlabs/Lib/Apps.php:456 msgid "Update" msgstr "Actualitza" @@ -837,25 +849,35 @@ msgstr "Llibreta d'adreces per defecte" msgid "This site is not a directory server" msgstr "Aquest hub no és un servidor de directori" -#: ../../Zotlabs/Module/Channel.php:32 ../../Zotlabs/Module/Ochannel.php:32 +#: ../../Zotlabs/Module/Channel.php:35 ../../Zotlabs/Module/Ochannel.php:32 #: ../../Zotlabs/Module/Chat.php:25 ../../addon/chess/chess.php:508 msgid "You must be logged in to see this page." msgstr "Has de tenir una sessió iniciada per a veure aquesta pàgina." -#: ../../Zotlabs/Module/Channel.php:47 ../../Zotlabs/Module/Hcard.php:37 +#: ../../Zotlabs/Module/Channel.php:50 ../../Zotlabs/Module/Hcard.php:37 #: ../../Zotlabs/Module/Profile.php:45 msgid "Posts and comments" msgstr "Entrades i comentaris" -#: ../../Zotlabs/Module/Channel.php:54 ../../Zotlabs/Module/Hcard.php:44 +#: ../../Zotlabs/Module/Channel.php:57 ../../Zotlabs/Module/Hcard.php:44 #: ../../Zotlabs/Module/Profile.php:52 msgid "Only posts" msgstr "Només entrades" -#: ../../Zotlabs/Module/Channel.php:107 +#: ../../Zotlabs/Module/Channel.php:112 msgid "Insufficient permissions. Request redirected to profile page." msgstr "S'ha denegat el permís. La petició s'ha redirigit a la pàgina de perfil." +#: ../../Zotlabs/Module/Channel.php:129 ../../Zotlabs/Module/Network.php:174 +msgid "Search Results For:" +msgstr "Cerca resultats per:" + +#: ../../Zotlabs/Module/Channel.php:164 ../../Zotlabs/Module/Hq.php:134 +#: ../../Zotlabs/Module/Pubstream.php:80 ../../Zotlabs/Module/Display.php:81 +#: ../../Zotlabs/Module/Network.php:204 +msgid "Reset form" +msgstr "Esborra el formulari" + #: ../../Zotlabs/Module/Uexport.php:57 ../../Zotlabs/Module/Uexport.php:58 msgid "Export Channel" msgstr "Exporta un canal" @@ -922,7 +944,7 @@ msgstr "Benvingut/da a Hubzilla!" msgid "You have got no unseen posts..." msgstr "No tens entrades pendents de veure..." -#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:540 +#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Photos.php:545 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Directory.php:63 #: ../../Zotlabs/Module/Directory.php:68 ../../Zotlabs/Module/Display.php:30 #: ../../Zotlabs/Module/Viewconnections.php:23 @@ -930,9 +952,10 @@ msgid "Public access denied." msgstr "L'accés públic no està permès." #: ../../Zotlabs/Module/Search.php:44 ../../Zotlabs/Module/Connections.php:335 -#: ../../Zotlabs/Lib/Apps.php:256 ../../Zotlabs/Widget/Sitesearch.php:31 -#: ../../include/text.php:1051 ../../include/text.php:1063 -#: ../../include/acl_selectors.php:118 ../../include/nav.php:179 +#: ../../Zotlabs/Lib/Apps.php:318 ../../Zotlabs/Widget/Sitesearch.php:31 +#: ../../Zotlabs/Widget/Activity_filter.php:148 ../../include/text.php:1062 +#: ../../include/text.php:1074 ../../include/acl_selectors.php:118 +#: ../../include/nav.php:185 msgid "Search" msgstr "Cerca" @@ -947,7 +970,7 @@ msgid "Search results for: %s" msgstr "Resultats de cerca per: %s" #: ../../Zotlabs/Module/Pubstream.php:95 -#: ../../Zotlabs/Widget/Notifications.php:131 +#: ../../Zotlabs/Widget/Notifications.php:142 msgid "Public Stream" msgstr "Flux públic" @@ -977,11 +1000,11 @@ msgstr "No s'ha trobat cap ubicació." msgid "Manage Channel Locations" msgstr "Gestiona les ubicacions del canal" -#: ../../Zotlabs/Module/Locs.php:119 ../../Zotlabs/Module/Admin.php:111 +#: ../../Zotlabs/Module/Locs.php:119 ../../Zotlabs/Module/Admin.php:115 msgid "Primary" msgstr "Primària" -#: ../../Zotlabs/Module/Locs.php:120 ../../Zotlabs/Module/Menu.php:113 +#: ../../Zotlabs/Module/Locs.php:120 ../../Zotlabs/Module/Menu.php:176 msgid "Drop" msgstr "Esborra" @@ -1021,67 +1044,70 @@ msgstr "Fes servir les fletxes per moure l'aplicació cap a l'esquerra (amunt) o msgid "Use arrows to move the corresponding app up or down in the app tray" msgstr "Fes servir les fletxes per moure l'aplicació amunt o avall en la safata" -#: ../../Zotlabs/Module/Mitem.php:28 ../../Zotlabs/Module/Menu.php:144 +#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:208 msgid "Menu not found." msgstr "No s'ha trobat el menú." -#: ../../Zotlabs/Module/Mitem.php:52 +#: ../../Zotlabs/Module/Mitem.php:63 msgid "Unable to create element." msgstr "Incapaç de crear l'element." -#: ../../Zotlabs/Module/Mitem.php:76 +#: ../../Zotlabs/Module/Mitem.php:87 msgid "Unable to update menu element." msgstr "Incapaç d'actualitzar un element del menú." -#: ../../Zotlabs/Module/Mitem.php:92 +#: ../../Zotlabs/Module/Mitem.php:103 msgid "Unable to add menu element." msgstr "No s'ha pogut afegir l'element de menú." -#: ../../Zotlabs/Module/Mitem.php:120 ../../Zotlabs/Module/Menu.php:166 +#: ../../Zotlabs/Module/Mitem.php:134 ../../Zotlabs/Module/Menu.php:231 #: ../../Zotlabs/Module/Xchan.php:41 msgid "Not found." msgstr "No s'ha trobat." -#: ../../Zotlabs/Module/Mitem.php:153 ../../Zotlabs/Module/Mitem.php:230 +#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246 msgid "Menu Item Permissions" msgstr "Permisos dels ítems de menú" -#: ../../Zotlabs/Module/Mitem.php:154 ../../Zotlabs/Module/Mitem.php:231 -#: ../../Zotlabs/Module/Settings/Channel.php:528 +#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247 +#: ../../Zotlabs/Module/Settings/Channel.php:549 msgid "(click to open/close)" msgstr "(clica per obrir/tancar)" -#: ../../Zotlabs/Module/Mitem.php:160 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191 msgid "Link Name" msgstr "Nom de l'enllaç" -#: ../../Zotlabs/Module/Mitem.php:161 ../../Zotlabs/Module/Mitem.php:239 +#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255 msgid "Link or Submenu Target" msgstr "Destí de l'enllaç o del submenú" -#: ../../Zotlabs/Module/Mitem.php:161 +#: ../../Zotlabs/Module/Mitem.php:175 msgid "Enter URL of the link or select a menu name to create a submenu" msgstr "Introdueix la URL de l'enllaç o tria un nom de menú per crear un submenú" -#: ../../Zotlabs/Module/Mitem.php:162 ../../Zotlabs/Module/Mitem.php:240 +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256 msgid "Use magic-auth if available" msgstr "Empra la magic-auth si està disponible" -#: ../../Zotlabs/Module/Mitem.php:162 ../../Zotlabs/Module/Mitem.php:163 -#: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 +#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:259 -#: ../../Zotlabs/Module/Settings/Channel.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Settings/Channel.php:315 #: ../../Zotlabs/Module/Settings/Display.php:100 -#: ../../Zotlabs/Module/Api.php:99 ../../Zotlabs/Module/Photos.php:697 -#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 -#: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Connedit.php:779 -#: ../../Zotlabs/Module/Menu.php:100 ../../Zotlabs/Module/Menu.php:157 -#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:155 -#: ../../Zotlabs/Module/Filestorage.php:163 -#: ../../Zotlabs/Storage/Browser.php:397 ../../boot.php:1594 +#: ../../Zotlabs/Module/Import.php:554 ../../Zotlabs/Module/Import.php:558 +#: ../../Zotlabs/Module/Import.php:559 ../../Zotlabs/Module/Api.php:99 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Wiki.php:218 +#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Module/Connedit.php:396 +#: ../../Zotlabs/Module/Connedit.php:779 ../../Zotlabs/Module/Menu.php:162 +#: ../../Zotlabs/Module/Menu.php:221 ../../Zotlabs/Module/Defperms.php:180 +#: ../../Zotlabs/Module/Profiles.php:681 ../../Zotlabs/Module/Sources.php:116 +#: ../../Zotlabs/Module/Sources.php:151 +#: ../../Zotlabs/Module/Filestorage.php:178 +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Storage/Browser.php:405 ../../boot.php:1618 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1110,30 +1136,38 @@ msgstr "Empra la magic-auth si està disponible" #: ../../addon/twitter/twitter.php:252 ../../addon/twitter/twitter.php:261 #: ../../addon/smileybutton/smileybutton.php:211 #: ../../addon/smileybutton/smileybutton.php:215 -#: ../../addon/cart/cart.php:1075 ../../addon/cart/cart.php:1082 -#: ../../addon/cart/cart.php:1090 ../../addon/authchoose/authchoose.php:67 -#: ../../addon/xmpp/xmpp.php:53 ../../addon/pumpio/pumpio.php:219 -#: ../../addon/pumpio/pumpio.php:223 ../../addon/pumpio/pumpio.php:227 -#: ../../addon/pumpio/pumpio.php:231 ../../include/dir_fns.php:143 -#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../addon/cart/cart.php:1206 ../../addon/cart/cart.php:1213 +#: ../../addon/cart/cart.php:1221 +#: ../../addon/cart/submodules/paypalbutton.php:99 +#: ../../addon/cart/submodules/paypalbutton.php:104 +#: ../../addon/cart/submodules/hzservices.php:73 +#: ../../addon/cart/submodules/hzservices.php:653 +#: ../../addon/cart/submodules/hzservices.php:657 +#: ../../addon/authchoose/authchoose.php:67 ../../addon/xmpp/xmpp.php:53 +#: ../../addon/pumpio/pumpio.php:219 ../../addon/pumpio/pumpio.php:223 +#: ../../addon/pumpio/pumpio.php:227 ../../addon/pumpio/pumpio.php:231 +#: ../../include/dir_fns.php:143 ../../include/dir_fns.php:144 +#: ../../include/dir_fns.php:145 msgid "No" msgstr "No" -#: ../../Zotlabs/Module/Mitem.php:162 ../../Zotlabs/Module/Mitem.php:163 -#: ../../Zotlabs/Module/Mitem.php:240 ../../Zotlabs/Module/Mitem.php:241 +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 +#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Removeme.php:63 -#: ../../Zotlabs/Module/Admin/Site.php:261 -#: ../../Zotlabs/Module/Settings/Channel.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Settings/Channel.php:315 #: ../../Zotlabs/Module/Settings/Display.php:100 -#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Photos.php:697 -#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Wiki.php:219 -#: ../../Zotlabs/Module/Connedit.php:396 ../../Zotlabs/Module/Menu.php:100 -#: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Defperms.php:180 -#: ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Filestorage.php:155 -#: ../../Zotlabs/Module/Filestorage.php:163 -#: ../../Zotlabs/Storage/Browser.php:397 ../../boot.php:1594 +#: ../../Zotlabs/Module/Import.php:554 ../../Zotlabs/Module/Import.php:558 +#: ../../Zotlabs/Module/Import.php:559 ../../Zotlabs/Module/Api.php:98 +#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Wiki.php:218 +#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Module/Connedit.php:396 +#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:221 +#: ../../Zotlabs/Module/Defperms.php:180 ../../Zotlabs/Module/Profiles.php:681 +#: ../../Zotlabs/Module/Sources.php:116 ../../Zotlabs/Module/Sources.php:151 +#: ../../Zotlabs/Module/Filestorage.php:178 +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Storage/Browser.php:405 ../../boot.php:1618 #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic_c/php/config.php:115 #: ../../view/theme/redbasic/php/config.php:98 @@ -1162,92 +1196,98 @@ msgstr "No" #: ../../addon/twitter/twitter.php:252 ../../addon/twitter/twitter.php:261 #: ../../addon/smileybutton/smileybutton.php:211 #: ../../addon/smileybutton/smileybutton.php:215 -#: ../../addon/cart/cart.php:1075 ../../addon/cart/cart.php:1082 -#: ../../addon/cart/cart.php:1090 ../../addon/authchoose/authchoose.php:67 -#: ../../addon/xmpp/xmpp.php:53 ../../addon/pumpio/pumpio.php:219 -#: ../../addon/pumpio/pumpio.php:223 ../../addon/pumpio/pumpio.php:227 -#: ../../addon/pumpio/pumpio.php:231 ../../include/dir_fns.php:143 -#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../addon/cart/cart.php:1206 ../../addon/cart/cart.php:1213 +#: ../../addon/cart/cart.php:1221 +#: ../../addon/cart/submodules/paypalbutton.php:99 +#: ../../addon/cart/submodules/paypalbutton.php:104 +#: ../../addon/cart/submodules/hzservices.php:73 +#: ../../addon/cart/submodules/hzservices.php:653 +#: ../../addon/cart/submodules/hzservices.php:657 +#: ../../addon/authchoose/authchoose.php:67 ../../addon/xmpp/xmpp.php:53 +#: ../../addon/pumpio/pumpio.php:219 ../../addon/pumpio/pumpio.php:223 +#: ../../addon/pumpio/pumpio.php:227 ../../addon/pumpio/pumpio.php:231 +#: ../../include/dir_fns.php:143 ../../include/dir_fns.php:144 +#: ../../include/dir_fns.php:145 msgid "Yes" msgstr "Sí" -#: ../../Zotlabs/Module/Mitem.php:163 ../../Zotlabs/Module/Mitem.php:241 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257 msgid "Open link in new window" msgstr "Obre l'enllaç en una nova finestra" -#: ../../Zotlabs/Module/Mitem.php:164 ../../Zotlabs/Module/Mitem.php:242 +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 msgid "Order in list" msgstr "Ordre de la llista" -#: ../../Zotlabs/Module/Mitem.php:164 ../../Zotlabs/Module/Mitem.php:242 +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 msgid "Higher numbers will sink to bottom of listing" msgstr "Els números més alts al final de la llista" -#: ../../Zotlabs/Module/Mitem.php:165 +#: ../../Zotlabs/Module/Mitem.php:179 msgid "Submit and finish" msgstr "Envia i acaba" -#: ../../Zotlabs/Module/Mitem.php:166 +#: ../../Zotlabs/Module/Mitem.php:180 msgid "Submit and continue" msgstr "Envia i continua" -#: ../../Zotlabs/Module/Mitem.php:174 +#: ../../Zotlabs/Module/Mitem.php:189 msgid "Menu:" msgstr "Menú:" -#: ../../Zotlabs/Module/Mitem.php:177 +#: ../../Zotlabs/Module/Mitem.php:192 msgid "Link Target" msgstr "Destí de l'enllaç" -#: ../../Zotlabs/Module/Mitem.php:180 +#: ../../Zotlabs/Module/Mitem.php:195 msgid "Edit menu" msgstr "Edita el menú" -#: ../../Zotlabs/Module/Mitem.php:183 +#: ../../Zotlabs/Module/Mitem.php:198 msgid "Edit element" msgstr "Edita l'element" -#: ../../Zotlabs/Module/Mitem.php:184 +#: ../../Zotlabs/Module/Mitem.php:199 msgid "Drop element" msgstr "Esborra l'element" -#: ../../Zotlabs/Module/Mitem.php:185 +#: ../../Zotlabs/Module/Mitem.php:200 msgid "New element" msgstr "Element nou" -#: ../../Zotlabs/Module/Mitem.php:186 +#: ../../Zotlabs/Module/Mitem.php:201 msgid "Edit this menu container" msgstr "Edita el contenidor de menú" -#: ../../Zotlabs/Module/Mitem.php:187 +#: ../../Zotlabs/Module/Mitem.php:202 msgid "Add menu element" msgstr "Afegeix un element de menú" -#: ../../Zotlabs/Module/Mitem.php:188 +#: ../../Zotlabs/Module/Mitem.php:203 msgid "Delete this menu item" msgstr "Esborra aquest article del menú" -#: ../../Zotlabs/Module/Mitem.php:189 +#: ../../Zotlabs/Module/Mitem.php:204 msgid "Edit this menu item" msgstr "Edita aquest article del menú" -#: ../../Zotlabs/Module/Mitem.php:206 +#: ../../Zotlabs/Module/Mitem.php:222 msgid "Menu item not found." msgstr "No s'ha trobat l'element de menú." -#: ../../Zotlabs/Module/Mitem.php:219 +#: ../../Zotlabs/Module/Mitem.php:235 msgid "Menu item deleted." msgstr "S'ha esborrat l'element de menú." -#: ../../Zotlabs/Module/Mitem.php:221 +#: ../../Zotlabs/Module/Mitem.php:237 msgid "Menu item could not be deleted." msgstr "No s'ha pogut esborrar l'element de menú." -#: ../../Zotlabs/Module/Mitem.php:228 +#: ../../Zotlabs/Module/Mitem.php:244 msgid "Edit Menu Element" msgstr "Editar elements del menú" -#: ../../Zotlabs/Module/Mitem.php:238 +#: ../../Zotlabs/Module/Mitem.php:254 msgid "Link text" msgstr "Text de l'enllaç" @@ -1278,7 +1318,7 @@ msgstr "No s'ha trobat l'esdeveniment." #: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Tagger.php:73 #: ../../Zotlabs/Module/Like.php:386 ../../include/conversation.php:119 -#: ../../include/text.php:2008 ../../include/event.php:1153 +#: ../../include/text.php:2025 ../../include/event.php:1153 msgid "event" msgstr "esdeveniment" @@ -1339,13 +1379,13 @@ msgstr "Edita la descripció" msgid "Edit Location" msgstr "Edita la ubicació" -#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1123 -#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:762 -#: ../../include/conversation.php:1333 +#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1128 +#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/ThreadItem.php:767 +#: ../../include/conversation.php:1341 msgid "Preview" msgstr "Vista prèvia" -#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1405 +#: ../../Zotlabs/Module/Events.php:479 ../../include/conversation.php:1413 msgid "Permission settings" msgstr "Configuració de permisos" @@ -1370,7 +1410,7 @@ msgid "Delete event" msgstr "Esborra l'esdeveniment" #: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:315 -#: ../../include/text.php:1827 +#: ../../include/text.php:1844 msgid "Link to Source" msgstr "Enllaç a la font" @@ -1455,21 +1495,21 @@ msgstr "Adreça URL de compra de l'aplicació" msgid "Please login." msgstr "Inicia sessió." -#: ../../Zotlabs/Module/Magic.php:72 +#: ../../Zotlabs/Module/Magic.php:76 msgid "Hub not found." msgstr "No s'ha trobat el hub." #: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Tagger.php:69 #: ../../Zotlabs/Module/Like.php:384 #: ../../addon/redphotos/redphotohelper.php:71 -#: ../../addon/diaspora/Receiver.php:1500 ../../addon/pubcrawl/as.php:1405 -#: ../../include/conversation.php:116 ../../include/text.php:2005 +#: ../../addon/diaspora/Receiver.php:1530 ../../addon/pubcrawl/as.php:1509 +#: ../../include/conversation.php:116 ../../include/text.php:2022 msgid "photo" msgstr "foto" #: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Module/Like.php:384 -#: ../../addon/diaspora/Receiver.php:1500 ../../addon/pubcrawl/as.php:1405 -#: ../../include/conversation.php:144 ../../include/text.php:2011 +#: ../../addon/diaspora/Receiver.php:1530 ../../addon/pubcrawl/as.php:1509 +#: ../../include/conversation.php:144 ../../include/text.php:2028 msgid "status" msgstr "estat" @@ -1494,14 +1534,14 @@ msgstr "No s'ha trobat el canal." #: ../../Zotlabs/Module/Editblock.php:116 ../../Zotlabs/Module/Chat.php:207 #: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Mail.php:288 #: ../../Zotlabs/Module/Mail.php:430 ../../Zotlabs/Module/Card_edit.php:101 -#: ../../include/conversation.php:1278 +#: ../../include/conversation.php:1283 msgid "Insert web link" msgstr "Insereix un enllaç web" #: ../../Zotlabs/Module/Article_edit.php:117 -#: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:698 -#: ../../Zotlabs/Module/Photos.php:1068 ../../Zotlabs/Module/Card_edit.php:117 -#: ../../include/conversation.php:1401 +#: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:703 +#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Card_edit.php:117 +#: ../../include/conversation.php:1409 msgid "Title (optional)" msgstr "Títol (opcional)" @@ -1509,17 +1549,17 @@ msgstr "Títol (opcional)" msgid "Edit Article" msgstr "Edita l'article" -#: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:64 +#: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:66 msgid "Nothing to import." msgstr "No s'ha trobat res per importar." -#: ../../Zotlabs/Module/Import_items.php:72 ../../Zotlabs/Module/Import.php:79 -#: ../../Zotlabs/Module/Import.php:95 +#: ../../Zotlabs/Module/Import_items.php:72 ../../Zotlabs/Module/Import.php:81 +#: ../../Zotlabs/Module/Import.php:97 msgid "Unable to download data from old server" msgstr "No s'han pogut descarregar les dades del servidor antic" #: ../../Zotlabs/Module/Import_items.php:77 -#: ../../Zotlabs/Module/Import.php:102 +#: ../../Zotlabs/Module/Import.php:104 msgid "Imported file is empty." msgstr "El fitxer importat està buit." @@ -1542,80 +1582,84 @@ msgid "" msgstr "Empra aquest formulari per importar entrades existents i contingut d'un arxiu d'exportació." #: ../../Zotlabs/Module/Import_items.php:127 -#: ../../Zotlabs/Module/Import.php:517 +#: ../../Zotlabs/Module/Import.php:548 msgid "File to Upload" msgstr "Fitxer per pujar" -#: ../../Zotlabs/Module/New_channel.php:133 +#: ../../Zotlabs/Module/New_channel.php:147 #: ../../Zotlabs/Module/Manage.php:138 #, php-format msgid "You have created %1$.0f of %2$.0f allowed channels." msgstr "Has creat %1$.0f canals dels %2$.0f totals permesos." -#: ../../Zotlabs/Module/New_channel.php:146 -#: ../../Zotlabs/Module/Register.php:254 -msgid "Name or caption" -msgstr "Nom o llegenda" +#: ../../Zotlabs/Module/New_channel.php:154 +#: ../../Zotlabs/Module/New_channel.php:161 +#: ../../Zotlabs/Module/Connedit.php:852 ../../Zotlabs/Module/Defperms.php:240 +#: ../../Zotlabs/Widget/Notifications.php:162 ../../include/nav.php:276 +msgid "Loading" +msgstr "S'està carregant" -#: ../../Zotlabs/Module/New_channel.php:146 -#: ../../Zotlabs/Module/Register.php:254 +#: ../../Zotlabs/Module/New_channel.php:156 +msgid "Your real name is recommended." +msgstr "És recomanable fer servir el nom real." + +#: ../../Zotlabs/Module/New_channel.php:157 msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\"" msgstr "Exemples: \"Paula Gomila\", \"Manel i els seus cavalls\", \"Assemblea de veïnes del barri\", \"Filosofia\"" -#: ../../Zotlabs/Module/New_channel.php:148 -#: ../../Zotlabs/Module/Register.php:256 +#: ../../Zotlabs/Module/New_channel.php:162 +msgid "" +"This will be used to create a unique network address (like an email " +"address)." +msgstr "Es farà servir per crear una adreça de xarxa única, com la de email." + +#: ../../Zotlabs/Module/New_channel.php:164 +msgid "Allowed characters are a-z 0-9, - and _" +msgstr "Els caràcters permesos són lletres minúscules sense accents, números i guions: a-z, 0-9, -, _" + +#: ../../Zotlabs/Module/New_channel.php:174 +msgid "Channel name" +msgstr "Nom del canal" + +#: ../../Zotlabs/Module/New_channel.php:176 +#: ../../Zotlabs/Module/Register.php:265 msgid "Choose a short nickname" msgstr "Tria un àlies curt" -#: ../../Zotlabs/Module/New_channel.php:148 -#: ../../Zotlabs/Module/Register.php:256 -#, php-format -msgid "" -"Your nickname will be used to create an easy to remember channel address " -"e.g. nickname%s" -msgstr "El teu àlies servirà per crear un nom fàcil per recordar l'adreça del canal. Per exemple, àlies%s" - -#: ../../Zotlabs/Module/New_channel.php:149 -#: ../../Zotlabs/Module/Settings/Channel.php:539 -#: ../../Zotlabs/Module/Register.php:257 +#: ../../Zotlabs/Module/New_channel.php:177 +#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Register.php:266 msgid "Channel role and privacy" msgstr "Rol i privacitat del canal" -#: ../../Zotlabs/Module/New_channel.php:149 -#: ../../Zotlabs/Module/Register.php:257 -msgid "Select a channel role with your privacy requirements." -msgstr "Tria un rol pel canal segons les teves necessitats de privacitat." +#: ../../Zotlabs/Module/New_channel.php:177 +msgid "" +"Select a channel permission role compatible with your usage needs and " +"privacy requirements." +msgstr "Escull un rol de permisos de canal. Tingues en compte l'ús que en faràs i el nivell de privacitat que desitges." -#: ../../Zotlabs/Module/New_channel.php:149 -#: ../../Zotlabs/Module/Register.php:257 -msgid "Read more about roles" -msgstr "Llegix més sobre els rols" +#: ../../Zotlabs/Module/New_channel.php:177 +#: ../../Zotlabs/Module/Register.php:266 +msgid "Read more about channel permission roles" +msgstr "Llegeix més sobre els rols de permisos en els canals" -#: ../../Zotlabs/Module/New_channel.php:152 -msgid "Create Channel" +#: ../../Zotlabs/Module/New_channel.php:180 +msgid "Create a Channel" msgstr "Crea un canal" -#: ../../Zotlabs/Module/New_channel.php:153 +#: ../../Zotlabs/Module/New_channel.php:181 msgid "" "A channel is a unique network identity. It can represent a person (social " "network profile), a forum (group), a business or celebrity page, a newsfeed," -" and many other things. Channels can make connections with other channels to" -" share information with each other." -msgstr "Cada canal és una identitat de xarxa única. Tant pot representar una persona (el seu perfil social), com un fòrum (un grup), una associació o la pàgina d'algun personatge públic, una font de notícies, i moltes més coses. Els canals poden connectar-se entre ells per a compartir informació." +" and many other things." +msgstr "Un canal és una identitat de xarxa única. Tant pot representar una persona (el seu perfil social), com un fòrum (un grup), una associació o la pàgina d'algun personatge públic, un flux de notícies, i moltes més coses." -#: ../../Zotlabs/Module/New_channel.php:153 -msgid "" -"The type of channel you create affects the basic privacy settings, the " -"permissions that are granted to connections/friends, and also the channel's " -"visibility across the network." -msgstr "El tipus de canal que creïs determinarà els permisos de privacitat bàsics, els atorgats a les connexions i a la visibilitat del canal a la xarxa." - -#: ../../Zotlabs/Module/New_channel.php:154 +#: ../../Zotlabs/Module/New_channel.php:182 msgid "" "or import an existing channel from another location." msgstr "o bé importa un canal existent des d'una altra ubicació." -#: ../../Zotlabs/Module/New_channel.php:159 +#: ../../Zotlabs/Module/New_channel.php:187 msgid "Validate" msgstr "Valida-ho" @@ -1661,7 +1705,7 @@ msgid "" msgstr "Per defecte, només es pot esborrar la instància del canal ubicada en aquest hub." #: ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:600 +#: ../../Zotlabs/Module/Settings/Channel.php:622 msgid "Remove Channel" msgstr "Elimina el canal" @@ -1674,12 +1718,12 @@ msgid "NEW" msgstr "NOU" #: ../../Zotlabs/Module/Sharedwithme.php:107 -#: ../../Zotlabs/Storage/Browser.php:285 ../../include/text.php:1434 +#: ../../Zotlabs/Storage/Browser.php:287 ../../include/text.php:1451 msgid "Size" msgstr "Mida" #: ../../Zotlabs/Module/Sharedwithme.php:108 -#: ../../Zotlabs/Storage/Browser.php:286 +#: ../../Zotlabs/Storage/Browser.php:288 msgid "Last Modified" msgstr "Última modificació" @@ -2257,152 +2301,6 @@ msgstr "Prova a fer automàticament aquesta actualització" msgid "No failed updates." msgstr "No hi ha actualitzacions fallides." -#: ../../Zotlabs/Module/Admin/Plugins.php:259 -#: ../../Zotlabs/Module/Admin/Themes.php:72 ../../Zotlabs/Module/Thing.php:94 -#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:46 -#: ../../Zotlabs/Module/Display.php:453 -#: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Admin.php:62 -#: ../../include/items.php:3619 -msgid "Item not found." -msgstr "No s'ha trobat l'element." - -#: ../../Zotlabs/Module/Admin/Plugins.php:289 -#, php-format -msgid "Plugin %s disabled." -msgstr "S'ha desactivat l'extensió %s." - -#: ../../Zotlabs/Module/Admin/Plugins.php:294 -#, php-format -msgid "Plugin %s enabled." -msgstr "S'ha activat l'extensió %s." - -#: ../../Zotlabs/Module/Admin/Plugins.php:310 -#: ../../Zotlabs/Module/Admin/Themes.php:95 -msgid "Disable" -msgstr "Desactiva" - -#: ../../Zotlabs/Module/Admin/Plugins.php:313 -#: ../../Zotlabs/Module/Admin/Themes.php:97 -msgid "Enable" -msgstr "Activa" - -#: ../../Zotlabs/Module/Admin/Plugins.php:341 -#: ../../Zotlabs/Module/Admin/Plugins.php:436 -#: ../../Zotlabs/Module/Admin/Accounts.php:166 -#: ../../Zotlabs/Module/Admin/Logs.php:82 -#: ../../Zotlabs/Module/Admin/Channels.php:145 -#: ../../Zotlabs/Module/Admin/Themes.php:122 -#: ../../Zotlabs/Module/Admin/Themes.php:156 -#: ../../Zotlabs/Module/Admin/Site.php:294 -#: ../../Zotlabs/Module/Admin/Security.php:86 -#: ../../Zotlabs/Module/Admin.php:136 -msgid "Administration" -msgstr "Administració" - -#: ../../Zotlabs/Module/Admin/Plugins.php:342 -#: ../../Zotlabs/Module/Admin/Plugins.php:437 -#: ../../Zotlabs/Widget/Admin.php:27 -msgid "Plugins" -msgstr "Extensions" - -#: ../../Zotlabs/Module/Admin/Plugins.php:343 -#: ../../Zotlabs/Module/Admin/Themes.php:124 -msgid "Toggle" -msgstr "Commuta'n l'estat" - -#: ../../Zotlabs/Module/Admin/Plugins.php:344 -#: ../../Zotlabs/Module/Admin/Themes.php:125 ../../Zotlabs/Lib/Apps.php:242 -#: ../../Zotlabs/Widget/Newmember.php:46 -#: ../../Zotlabs/Widget/Settings_menu.php:141 ../../include/nav.php:105 -#: ../../include/nav.php:192 -msgid "Settings" -msgstr "Configuració" - -#: ../../Zotlabs/Module/Admin/Plugins.php:351 -#: ../../Zotlabs/Module/Admin/Themes.php:134 -msgid "Author: " -msgstr "Autor/a:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:352 -#: ../../Zotlabs/Module/Admin/Themes.php:135 -msgid "Maintainer: " -msgstr "Persona mantenidora:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:353 -msgid "Minimum project version: " -msgstr "Versió mínima del projecte:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:354 -msgid "Maximum project version: " -msgstr "Versió màxima del projecte:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:355 -msgid "Minimum PHP version: " -msgstr "Versió mínima de PHP:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:356 -msgid "Compatible Server Roles: " -msgstr "Rols de servidor compatibles" - -#: ../../Zotlabs/Module/Admin/Plugins.php:357 -msgid "Requires: " -msgstr "Demana:" - -#: ../../Zotlabs/Module/Admin/Plugins.php:358 -#: ../../Zotlabs/Module/Admin/Plugins.php:442 -msgid "Disabled - version incompatibility" -msgstr "Desactivada - versions incompatibles" - -#: ../../Zotlabs/Module/Admin/Plugins.php:411 -msgid "Enter the public git repository URL of the plugin repo." -msgstr "Introdueix la URL del repositori git d'extensions. Ha de ser un repositori públic." - -#: ../../Zotlabs/Module/Admin/Plugins.php:412 -msgid "Plugin repo git URL" -msgstr "Adreça URL del repositori d'extensions." - -#: ../../Zotlabs/Module/Admin/Plugins.php:413 -msgid "Custom repo name" -msgstr "Nom personalitzat pel repositori" - -#: ../../Zotlabs/Module/Admin/Plugins.php:413 -msgid "(optional)" -msgstr "(opcional)" - -#: ../../Zotlabs/Module/Admin/Plugins.php:414 -msgid "Download Plugin Repo" -msgstr "Descarrega el repositori" - -#: ../../Zotlabs/Module/Admin/Plugins.php:421 -msgid "Install new repo" -msgstr "Instal·la un nou repositori" - -#: ../../Zotlabs/Module/Admin/Plugins.php:422 ../../Zotlabs/Lib/Apps.php:393 -msgid "Install" -msgstr "Instal·la" - -#: ../../Zotlabs/Module/Admin/Plugins.php:445 -msgid "Manage Repos" -msgstr "Gestiona els repositoris" - -#: ../../Zotlabs/Module/Admin/Plugins.php:446 -msgid "Installed Plugin Repositories" -msgstr "Repositoris instaŀlats" - -#: ../../Zotlabs/Module/Admin/Plugins.php:447 -msgid "Install a New Plugin Repository" -msgstr "Instal·la un nou repositori" - -#: ../../Zotlabs/Module/Admin/Plugins.php:454 -msgid "Switch branch" -msgstr "Canvia de branca" - -#: ../../Zotlabs/Module/Admin/Plugins.php:455 -#: ../../Zotlabs/Module/Photos.php:1020 ../../Zotlabs/Module/Tagrm.php:137 -#: ../../addon/superblock/superblock.php:116 -msgid "Remove" -msgstr "Esborra" - #: ../../Zotlabs/Module/Admin/Accounts.php:37 #, php-format msgid "%s account blocked/unblocked" @@ -2421,7 +2319,7 @@ msgstr[1] "S'han esborrat %s comptes" msgid "Account not found" msgstr "No s'ha trobat el compte" -#: ../../Zotlabs/Module/Admin/Accounts.php:91 ../../include/channel.php:2473 +#: ../../Zotlabs/Module/Admin/Accounts.php:91 ../../include/channel.php:2490 #, php-format msgid "Account '%s' deleted" msgstr "S'ha esborrat el compte '%s'" @@ -2436,6 +2334,19 @@ msgstr "S'ha bloquejat el compte '%s'" msgid "Account '%s' unblocked" msgstr "S'ha desbloquejat el compte '%s'" +#: ../../Zotlabs/Module/Admin/Accounts.php:166 +#: ../../Zotlabs/Module/Admin/Logs.php:82 +#: ../../Zotlabs/Module/Admin/Channels.php:145 +#: ../../Zotlabs/Module/Admin/Themes.php:122 +#: ../../Zotlabs/Module/Admin/Themes.php:156 +#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Addons.php:341 +#: ../../Zotlabs/Module/Admin/Addons.php:436 +#: ../../Zotlabs/Module/Admin/Security.php:92 +#: ../../Zotlabs/Module/Admin.php:140 +msgid "Administration" +msgstr "Administració" + #: ../../Zotlabs/Module/Admin/Accounts.php:167 #: ../../Zotlabs/Module/Admin/Accounts.php:180 #: ../../Zotlabs/Module/Admin.php:96 ../../Zotlabs/Widget/Admin.php:23 @@ -2460,7 +2371,7 @@ msgid "No registrations." msgstr "Sense inscripcions." #: ../../Zotlabs/Module/Admin/Accounts.php:173 -#: ../../Zotlabs/Module/Connections.php:303 ../../include/conversation.php:732 +#: ../../Zotlabs/Module/Connections.php:303 ../../include/conversation.php:735 msgid "Approve" msgstr "Aprova" @@ -2483,7 +2394,7 @@ msgstr "Desbloqueja" msgid "ID" msgstr "Identificador" -#: ../../Zotlabs/Module/Admin/Accounts.php:184 ../../include/group.php:284 +#: ../../Zotlabs/Module/Admin/Accounts.php:184 msgid "All Channels" msgstr "Tots els canals" @@ -2597,7 +2508,7 @@ msgid "Channel '%s' code disallowed" msgstr "S'ha desactivat un codi pel canal «%s»" #: ../../Zotlabs/Module/Admin/Channels.php:146 -#: ../../Zotlabs/Module/Admin.php:110 ../../Zotlabs/Widget/Admin.php:24 +#: ../../Zotlabs/Module/Admin.php:114 ../../Zotlabs/Widget/Admin.php:24 msgid "Channels" msgstr "Canals" @@ -2618,7 +2529,7 @@ msgid "Disallow Code" msgstr "Desactiva el codi" #: ../../Zotlabs/Module/Admin/Channels.php:154 -#: ../../include/conversation.php:1811 ../../include/nav.php:378 +#: ../../include/conversation.php:1820 ../../include/nav.php:370 msgid "Channel" msgstr "Canal" @@ -2646,6 +2557,25 @@ msgstr "S'ha actualitzat la configuració de tema." msgid "No themes found." msgstr "No s'ha trobat cap tema." +#: ../../Zotlabs/Module/Admin/Themes.php:72 +#: ../../Zotlabs/Module/Admin/Addons.php:259 ../../Zotlabs/Module/Thing.php:94 +#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:46 +#: ../../Zotlabs/Module/Display.php:453 +#: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Admin.php:62 +#: ../../include/items.php:3566 +msgid "Item not found." +msgstr "No s'ha trobat l'element." + +#: ../../Zotlabs/Module/Admin/Themes.php:95 +#: ../../Zotlabs/Module/Admin/Addons.php:310 +msgid "Disable" +msgstr "Desactiva" + +#: ../../Zotlabs/Module/Admin/Themes.php:97 +#: ../../Zotlabs/Module/Admin/Addons.php:313 +msgid "Enable" +msgstr "Activa" + #: ../../Zotlabs/Module/Admin/Themes.php:116 msgid "Screenshot" msgstr "Captura de pantalla" @@ -2655,6 +2585,28 @@ msgstr "Captura de pantalla" msgid "Themes" msgstr "Temes" +#: ../../Zotlabs/Module/Admin/Themes.php:124 +#: ../../Zotlabs/Module/Admin/Addons.php:343 +msgid "Toggle" +msgstr "Commuta'n l'estat" + +#: ../../Zotlabs/Module/Admin/Themes.php:125 +#: ../../Zotlabs/Module/Admin/Addons.php:344 ../../Zotlabs/Lib/Apps.php:304 +#: ../../Zotlabs/Widget/Newmember.php:46 +#: ../../Zotlabs/Widget/Settings_menu.php:141 ../../include/nav.php:99 +msgid "Settings" +msgstr "Configuració" + +#: ../../Zotlabs/Module/Admin/Themes.php:134 +#: ../../Zotlabs/Module/Admin/Addons.php:351 +msgid "Author: " +msgstr "Autor/a:" + +#: ../../Zotlabs/Module/Admin/Themes.php:135 +#: ../../Zotlabs/Module/Admin/Addons.php:352 +msgid "Maintainer: " +msgstr "Persona mantenidora:" + #: ../../Zotlabs/Module/Admin/Themes.php:162 msgid "[Experimental]" msgstr "[Experimental]" @@ -2663,469 +2615,584 @@ msgstr "[Experimental]" msgid "[Unsupported]" msgstr "[Incompatible]" -#: ../../Zotlabs/Module/Admin/Site.php:165 +#: ../../Zotlabs/Module/Admin/Site.php:172 msgid "Site settings updated." msgstr "S'ha actualitzat la configuració del lloc" -#: ../../Zotlabs/Module/Admin/Site.php:191 +#: ../../Zotlabs/Module/Admin/Site.php:198 #: ../../view/theme/redbasic_c/php/config.php:15 -#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3106 +#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3078 msgid "Default" msgstr "Predeterminat" -#: ../../Zotlabs/Module/Admin/Site.php:202 +#: ../../Zotlabs/Module/Admin/Site.php:209 #: ../../Zotlabs/Module/Settings/Display.php:130 #, php-format msgid "%s - (Incompatible)" msgstr "%s - (Incompatible)" -#: ../../Zotlabs/Module/Admin/Site.php:209 +#: ../../Zotlabs/Module/Admin/Site.php:216 msgid "mobile" msgstr "mòbil" -#: ../../Zotlabs/Module/Admin/Site.php:211 +#: ../../Zotlabs/Module/Admin/Site.php:218 msgid "experimental" msgstr "experimental" -#: ../../Zotlabs/Module/Admin/Site.php:213 +#: ../../Zotlabs/Module/Admin/Site.php:220 msgid "unsupported" msgstr "incompatible" -#: ../../Zotlabs/Module/Admin/Site.php:260 +#: ../../Zotlabs/Module/Admin/Site.php:267 msgid "Yes - with approval" msgstr "Sí - amb aprovació" -#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Admin/Site.php:273 msgid "My site is not a public server" msgstr "El meu node no es un servidor públic" -#: ../../Zotlabs/Module/Admin/Site.php:267 +#: ../../Zotlabs/Module/Admin/Site.php:274 msgid "My site has paid access only" msgstr "El meu node només ofereix accés de pagament" -#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Admin/Site.php:275 msgid "My site has free access only" msgstr "El meu node només ofereix accés gratuït" -#: ../../Zotlabs/Module/Admin/Site.php:269 +#: ../../Zotlabs/Module/Admin/Site.php:276 msgid "My site offers free accounts with optional paid upgrades" msgstr "El meu node ofereix comptes gratuïts i millores de pagament" -#: ../../Zotlabs/Module/Admin/Site.php:281 +#: ../../Zotlabs/Module/Admin/Site.php:288 msgid "Beginner/Basic" msgstr "Principiant/bàsica" -#: ../../Zotlabs/Module/Admin/Site.php:282 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Novice - not skilled but willing to learn" msgstr "Aprenent - amb poca experiència però amb ganes d'aprendre" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:290 msgid "Intermediate - somewhat comfortable" msgstr "Intermedi - còmode en entorns informàtics" -#: ../../Zotlabs/Module/Admin/Site.php:284 +#: ../../Zotlabs/Module/Admin/Site.php:291 msgid "Advanced - very comfortable" msgstr "Avançat - molt còmode en entorns informàtics" -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "Expert - I can write computer code" msgstr "Expert - Sé programar" -#: ../../Zotlabs/Module/Admin/Site.php:286 +#: ../../Zotlabs/Module/Admin/Site.php:293 msgid "Wizard - I probably know more than you do" msgstr "Bruixot - Segurament en sé més que tu" -#: ../../Zotlabs/Module/Admin/Site.php:295 ../../Zotlabs/Widget/Admin.php:22 +#: ../../Zotlabs/Module/Admin/Site.php:299 +msgid "Default permission role for new accounts" +msgstr "Rol de permisos per defecte per als comptes nous." + +#: ../../Zotlabs/Module/Admin/Site.php:299 +msgid "" +"This role will be used for the first channel created after registration." +msgstr "S'aplicarà aquest rol al primer canal que es creï després del registre d'un compte." + +#: ../../Zotlabs/Module/Admin/Site.php:308 ../../Zotlabs/Widget/Admin.php:22 msgid "Site" msgstr "Node" -#: ../../Zotlabs/Module/Admin/Site.php:297 -#: ../../Zotlabs/Module/Register.php:269 +#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Register.php:278 msgid "Registration" msgstr "Inscripcions" -#: ../../Zotlabs/Module/Admin/Site.php:298 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "File upload" msgstr "Pujada d'arxius" -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "Policies" msgstr "Polítiques" -#: ../../Zotlabs/Module/Admin/Site.php:300 +#: ../../Zotlabs/Module/Admin/Site.php:313 #: ../../include/contact_widgets.php:16 msgid "Advanced" msgstr "Avançat" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:317 #: ../../addon/statusnet/statusnet.php:891 msgid "Site name" msgstr "Nom del node" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:319 msgid "Site default technical skill level" msgstr "Nivell per defecte del lloc de competències tècniques" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:319 msgid "Used to provide a member experience matched to technical comfort level" msgstr "Es fa servir per oferir una experiència ajustada al nivell tècnic de cadascú" -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:321 msgid "Lock the technical skill level setting" msgstr "Bloqueja el paràmetre de nivell tècnic" -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:321 msgid "Members can set their own technical comfort level by default" msgstr "Per defecte, els/les membres poden modificar el paràmetre de nivell tècnic" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:323 msgid "Banner/Logo" msgstr "Cartell i logotip" -#: ../../Zotlabs/Module/Admin/Site.php:310 +#: ../../Zotlabs/Module/Admin/Site.php:323 msgid "Unfiltered HTML/CSS/JS is allowed" msgstr "Es permet contingut HTML, CSS i JS, sense filtrar" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:324 msgid "Administrator Information" msgstr "Informació de l'administració" -#: ../../Zotlabs/Module/Admin/Site.php:311 +#: ../../Zotlabs/Module/Admin/Site.php:324 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Informació per contactar amb les persones administradores del node. Es mostra a la pàgina d'informació del node. S'hi pot emprar BBCode." -#: ../../Zotlabs/Module/Admin/Site.php:312 -#: ../../Zotlabs/Module/Siteinfo.php:21 +#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Siteinfo.php:24 msgid "Site Information" msgstr "Informació del node" -#: ../../Zotlabs/Module/Admin/Site.php:312 +#: ../../Zotlabs/Module/Admin/Site.php:325 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Descripció del node visible públicament. Es mostra a la pàgina d'informació del node. S'hi pot emprar BBCode." -#: ../../Zotlabs/Module/Admin/Site.php:313 +#: ../../Zotlabs/Module/Admin/Site.php:326 msgid "System language" msgstr "Llengua del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:327 msgid "System theme" msgstr "Tema del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:314 +#: ../../Zotlabs/Module/Admin/Site.php:327 msgid "" "Default system theme - may be over-ridden by user profiles - change theme settings" msgstr "Tema del sistema per defecte. Les persones usuàries poden sobreescriure'l a la configuració de perfil: canvia la configuració de tema" -#: ../../Zotlabs/Module/Admin/Site.php:317 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "Allow Feeds as Connections" msgstr "Permet connectar-se a fluxos RSS" -#: ../../Zotlabs/Module/Admin/Site.php:317 +#: ../../Zotlabs/Module/Admin/Site.php:330 msgid "(Heavy system resource usage)" msgstr "(Demana molts recursos de sistema)" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:331 msgid "Maximum image size" msgstr "Mida màxima d'imatge" -#: ../../Zotlabs/Module/Admin/Site.php:318 +#: ../../Zotlabs/Module/Admin/Site.php:331 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Mida màxima total per les imatges pujades, en bytes. Per defecte és 0, que vol dir iŀlimitada." -#: ../../Zotlabs/Module/Admin/Site.php:319 +#: ../../Zotlabs/Module/Admin/Site.php:332 msgid "Does this site allow new member registration?" msgstr "Aquest node està obert a la inscripció de nous membres?" -#: ../../Zotlabs/Module/Admin/Site.php:320 +#: ../../Zotlabs/Module/Admin/Site.php:333 msgid "Invitation only" msgstr "Només per invitació" -#: ../../Zotlabs/Module/Admin/Site.php:320 +#: ../../Zotlabs/Module/Admin/Site.php:333 msgid "" "Only allow new member registrations with an invitation code. Above register " "policy must be set to Yes." msgstr "Només permet nous membres només a través d'invitacions. Perquè tingui efecte, les inscripcions han d'estar obertes a nous membres." -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:334 msgid "Minimum age" msgstr "Edat mínima" -#: ../../Zotlabs/Module/Admin/Site.php:321 +#: ../../Zotlabs/Module/Admin/Site.php:334 msgid "Minimum age (in years) for who may register on this site." msgstr "Edat mínima en anys per a poder crear un compte en aquest lloc." -#: ../../Zotlabs/Module/Admin/Site.php:322 +#: ../../Zotlabs/Module/Admin/Site.php:335 msgid "Which best describes the types of account offered by this hub?" msgstr "Quina descripció s'acosta més al tipus de comptes oferts en aquest node?" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:336 msgid "Register text" msgstr "Text d'inscripció" -#: ../../Zotlabs/Module/Admin/Site.php:323 +#: ../../Zotlabs/Module/Admin/Site.php:336 msgid "Will be displayed prominently on the registration page." msgstr "Es mostrarà en gran a la pàgina d'inscripció" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:338 msgid "Site homepage to show visitors (default: login box)" msgstr "Pàgina d'inici a mostrar als visitants (per defecte: la pàgina d'inici de sessió)" -#: ../../Zotlabs/Module/Admin/Site.php:324 +#: ../../Zotlabs/Module/Admin/Site.php:338 msgid "" "example: 'public' to show public stream, 'page/sys/home' to show a system " "webpage called 'home' or 'include:home.html' to include a file." msgstr "exemple: 'public' per a mostrar el flux públic, 'page/sys/home' per a mostrar una pàgina web de sistema de nom 'home', o 'include:home.html' per a incloure un arxiu." -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:339 msgid "Preserve site homepage URL" msgstr "Preserva l'adreça URL de la pàgina d'inici" -#: ../../Zotlabs/Module/Admin/Site.php:325 +#: ../../Zotlabs/Module/Admin/Site.php:339 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "Presenta la pàgina d'inici del node en un marc en el lloc original enlloc de redirigir-hi" -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:340 msgid "Accounts abandoned after x days" msgstr "Els comptes es consideren abandonats després de X dies" -#: ../../Zotlabs/Module/Admin/Site.php:326 +#: ../../Zotlabs/Module/Admin/Site.php:340 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Estalviarà recursos del sistema en no sondejar nodes externs per a comptes abandonats. Un 0 vol dir \"mai\"." -#: ../../Zotlabs/Module/Admin/Site.php:327 +#: ../../Zotlabs/Module/Admin/Site.php:341 msgid "Allowed friend domains" msgstr "Dominis amb permisos de connexió" -#: ../../Zotlabs/Module/Admin/Site.php:327 +#: ../../Zotlabs/Module/Admin/Site.php:341 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Llista separada per comes de dominis en els quals està permès establir relacions d'amistat amb aquest node. S'accepten comodins (*). Deixa-ho buit per a acceptar qualsevol domini" -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:342 msgid "Verify Email Addresses" msgstr "Verifica les adreces de correu electrònic" -#: ../../Zotlabs/Module/Admin/Site.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:342 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "Activa per a comprovar l'adreça de correu emprada durant la inscripció d'un nou compte (recomanat)." -#: ../../Zotlabs/Module/Admin/Site.php:329 +#: ../../Zotlabs/Module/Admin/Site.php:343 msgid "Force publish" msgstr "Força la publicació" -#: ../../Zotlabs/Module/Admin/Site.php:329 +#: ../../Zotlabs/Module/Admin/Site.php:343 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Activa per a forçar que tots el perfils en aquest node siguin llistats en el directori del lloc." -#: ../../Zotlabs/Module/Admin/Site.php:330 +#: ../../Zotlabs/Module/Admin/Site.php:344 msgid "Import Public Streams" msgstr "Importar fluxos públics" -#: ../../Zotlabs/Module/Admin/Site.php:330 +#: ../../Zotlabs/Module/Admin/Site.php:344 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Importa i permet l'accés a contingut públic sondejat d'altres llocs. Avís: aquest contingut no estarà moderat." -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "Site only Public Streams" msgstr "Fluxos públics només locals" -#: ../../Zotlabs/Module/Admin/Site.php:331 +#: ../../Zotlabs/Module/Admin/Site.php:345 msgid "" "Allow access to public content originating only from this site if Imported " "Public Streams are disabled." msgstr "Permet accedir a aquell contingut públic que s'hagi originat en aquest lloc, suposant que no s'estan important fluxos públics d'altres nodes." -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:346 msgid "Allow anybody on the internet to access the Public streams" msgstr "Permet a qualsevol persona d'internet d'accedir els fluxos públics" -#: ../../Zotlabs/Module/Admin/Site.php:332 +#: ../../Zotlabs/Module/Admin/Site.php:346 msgid "" "Disable to require authentication before viewing. Warning: this content is " "unmoderated." msgstr "Desabilita-ho per a demanar iniciar sessió per poder-ho veure. Alerta: el contingut no estarà moderat." -#: ../../Zotlabs/Module/Admin/Site.php:333 +#: ../../Zotlabs/Module/Admin/Site.php:347 +msgid "Only import Public stream posts with this text" +msgstr "Importa només entrades del flux públics que continguin aquest text" + +#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Connedit.php:875 ../../Zotlabs/Module/Connedit.php:876 +msgid "" +"words one per line or #tags or /patterns/ or lang=xx, leave blank to import " +"all posts" +msgstr "paraules una per línia o #etiquetes o /patrons/ o idioma=xx, deixar en blanc per importar totes les entrades" + +#: ../../Zotlabs/Module/Admin/Site.php:348 +msgid "Do not import Public stream posts with this text" +msgstr "No importes entrades del flux públic que continguin aquest text" + +#: ../../Zotlabs/Module/Admin/Site.php:351 msgid "Login on Homepage" msgstr "Accés a la Pàgina d'inici" -#: ../../Zotlabs/Module/Admin/Site.php:333 +#: ../../Zotlabs/Module/Admin/Site.php:351 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "Presenta una casella d'identificació a la pàgina d'inici als visitants si no s'ha configurat altre contingut." -#: ../../Zotlabs/Module/Admin/Site.php:334 +#: ../../Zotlabs/Module/Admin/Site.php:352 msgid "Enable context help" msgstr "Activar l'ajuda contextual" -#: ../../Zotlabs/Module/Admin/Site.php:334 +#: ../../Zotlabs/Module/Admin/Site.php:352 msgid "" "Display contextual help for the current page when the help button is " "pressed." msgstr "Mostra l'ajuda contextual per la pàgina actual quan el botó d'ajuda es pressionat." -#: ../../Zotlabs/Module/Admin/Site.php:336 +#: ../../Zotlabs/Module/Admin/Site.php:354 msgid "Reply-to email address for system generated email." msgstr "Adreça de correu de resposta per als correus generats." -#: ../../Zotlabs/Module/Admin/Site.php:337 +#: ../../Zotlabs/Module/Admin/Site.php:355 msgid "Sender (From) email address for system generated email." msgstr "Adreça de correu de remitent per als correus generats." -#: ../../Zotlabs/Module/Admin/Site.php:338 +#: ../../Zotlabs/Module/Admin/Site.php:356 msgid "Name of email sender for system generated email." msgstr "Nom visible de remitent per als correus generats." -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:358 msgid "Directory Server URL" msgstr "URL del Servidor de Directoris" -#: ../../Zotlabs/Module/Admin/Site.php:340 +#: ../../Zotlabs/Module/Admin/Site.php:358 msgid "Default directory server" msgstr "Servidor de directori per defecte" -#: ../../Zotlabs/Module/Admin/Site.php:342 +#: ../../Zotlabs/Module/Admin/Site.php:360 msgid "Proxy user" msgstr "Usuari Proxy" -#: ../../Zotlabs/Module/Admin/Site.php:343 +#: ../../Zotlabs/Module/Admin/Site.php:361 msgid "Proxy URL" msgstr "URL del Proxy" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:362 msgid "Network timeout" msgstr "Temps d'espera de la xarxa" -#: ../../Zotlabs/Module/Admin/Site.php:344 +#: ../../Zotlabs/Module/Admin/Site.php:362 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Valor en segons. Ajusta a 0 per a sense límits (no recomanat)" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:363 msgid "Delivery interval" msgstr "Interval de lliurament" -#: ../../Zotlabs/Module/Admin/Site.php:345 +#: ../../Zotlabs/Module/Admin/Site.php:363 msgid "" "Delay background delivery processes by this many seconds to reduce system " "load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " "for large dedicated servers." msgstr "Retarda en segon plà l'interval de lliurament per aquests segons per reduir la càrrega del sistema. Recomanat: 4-5 per a hostes compartits, 2-3 per a servidors privats virtuals. 0-1 per a servidors dedicats." -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:364 msgid "Deliveries per process" msgstr "Entregues per processar" -#: ../../Zotlabs/Module/Admin/Site.php:346 +#: ../../Zotlabs/Module/Admin/Site.php:364 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust" " if necessary to tune system performance. Recommend: 1-5." msgstr "Nombre de entregues a intentar processar en un únic procèss del sistema operatiu. Ajustar si es necessari per millorar el rendiment. Es recomana: 1-5." -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:365 msgid "Queue Threshold" msgstr "Llindar de la cua" -#: ../../Zotlabs/Module/Admin/Site.php:347 +#: ../../Zotlabs/Module/Admin/Site.php:365 msgid "" "Always defer immediate delivery if queue contains more than this number of " "entries." msgstr "Posposa el lliurament immediat si la cua conté més d'aquest nombre d'entrades." -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:366 msgid "Poll interval" msgstr "interval de sondeig" -#: ../../Zotlabs/Module/Admin/Site.php:348 +#: ../../Zotlabs/Module/Admin/Site.php:366 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Retarda en segon pla el sondeig en aquesta quantitat de segons per a reduir la càrrega dels sistema. Si es 0 , empra l'interval de lliurament." -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:367 msgid "Path to ImageMagick convert program" msgstr "Ruta al programa de conversió d'imatges ImageMagick" -#: ../../Zotlabs/Module/Admin/Site.php:349 +#: ../../Zotlabs/Module/Admin/Site.php:367 msgid "" "If set, use this program to generate photo thumbnails for huge images ( > " "4000 pixels in either dimension), otherwise memory exhaustion may occur. " "Example: /usr/bin/convert" msgstr "Si se n'indica la ruta, es farà servir aquest programa per a generar miniatures per a imatges enormes (més de 4000 píxels d'ample o alt). En cas contrari es pot esgotar la memòria del servidor. Ruta d'exemple: /usr/bin/convert" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:368 msgid "Allow SVG thumbnails in file browser" msgstr "Permet miniatures en SVG a l'explorador de fitxers" -#: ../../Zotlabs/Module/Admin/Site.php:350 +#: ../../Zotlabs/Module/Admin/Site.php:368 msgid "WARNING: SVG images may contain malicious code." msgstr "Alerta: Les imatges SVG poden contenir codi maliciós." -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:369 msgid "Maximum Load Average" msgstr "Càrrega Mitja Màxima" -#: ../../Zotlabs/Module/Admin/Site.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:369 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Càrrega màxima del sistema, abans que els processos de lliurament i sondeig es difereixin - 50 per defecte." -#: ../../Zotlabs/Module/Admin/Site.php:352 +#: ../../Zotlabs/Module/Admin/Site.php:370 msgid "Expiration period in days for imported (grid/network) content" msgstr "Període d'expiració en dies per contingut importat (malla/xarxa)" -#: ../../Zotlabs/Module/Admin/Site.php:352 +#: ../../Zotlabs/Module/Admin/Site.php:370 msgid "0 for no expiration of imported content" msgstr "0 vol dir sense temps d'expiració pel contingut importat" -#: ../../Zotlabs/Module/Admin/Site.php:353 +#: ../../Zotlabs/Module/Admin/Site.php:371 msgid "" "Do not expire any posts which have comments less than this many days ago" msgstr "No facis caducar les entrades que tinguin comentaris més nous que aquest nombre de dies" -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:373 msgid "" "Public servers: Optional landing (marketing) webpage for new registrants" msgstr "Servidors públics: Pàgina d'arribada promocional per a nous usuaris o usuàries." -#: ../../Zotlabs/Module/Admin/Site.php:355 +#: ../../Zotlabs/Module/Admin/Site.php:373 #, php-format msgid "Create this page first. Default is %s/register" msgstr "Crea primer aquesta pàgina. Per defecte és %s/register" -#: ../../Zotlabs/Module/Admin/Site.php:356 +#: ../../Zotlabs/Module/Admin/Site.php:374 msgid "Page to display after creating a new channel" msgstr "Pàgina que es mostrarà després d'haver creat un canal nou" -#: ../../Zotlabs/Module/Admin/Site.php:356 -msgid "Recommend: profiles, go, or settings" -msgstr "Recomanat: profiles (perfils), go (mostra diverses opcions), settings (configuració)" +#: ../../Zotlabs/Module/Admin/Site.php:374 +msgid "Default: profiles" +msgstr "Per defecte: profiles" -#: ../../Zotlabs/Module/Admin/Site.php:358 +#: ../../Zotlabs/Module/Admin/Site.php:376 msgid "Optional: site location" msgstr "Opcional: ubicació del node" -#: ../../Zotlabs/Module/Admin/Site.php:358 +#: ../../Zotlabs/Module/Admin/Site.php:376 msgid "Region or country" msgstr "Regió o país" +#: ../../Zotlabs/Module/Admin/Addons.php:289 +#, php-format +msgid "Plugin %s disabled." +msgstr "S'ha desactivat l'extensió %s." + +#: ../../Zotlabs/Module/Admin/Addons.php:294 +#, php-format +msgid "Plugin %s enabled." +msgstr "S'ha activat l'extensió %s." + +#: ../../Zotlabs/Module/Admin/Addons.php:342 +#: ../../Zotlabs/Module/Admin/Addons.php:437 ../../Zotlabs/Widget/Admin.php:27 +msgid "Addons" +msgstr "Extensions" + +#: ../../Zotlabs/Module/Admin/Addons.php:353 +msgid "Minimum project version: " +msgstr "Versió mínima del projecte:" + +#: ../../Zotlabs/Module/Admin/Addons.php:354 +msgid "Maximum project version: " +msgstr "Versió màxima del projecte:" + +#: ../../Zotlabs/Module/Admin/Addons.php:355 +msgid "Minimum PHP version: " +msgstr "Versió mínima de PHP:" + +#: ../../Zotlabs/Module/Admin/Addons.php:356 +msgid "Compatible Server Roles: " +msgstr "Rols de servidor compatibles" + +#: ../../Zotlabs/Module/Admin/Addons.php:357 +msgid "Requires: " +msgstr "Demana:" + +#: ../../Zotlabs/Module/Admin/Addons.php:358 +#: ../../Zotlabs/Module/Admin/Addons.php:442 +msgid "Disabled - version incompatibility" +msgstr "Desactivada - versions incompatibles" + +#: ../../Zotlabs/Module/Admin/Addons.php:411 +msgid "Enter the public git repository URL of the addon repo." +msgstr "Introdueix la URL del repositori git d'extensions. Ha de ser un repositori públic." + +#: ../../Zotlabs/Module/Admin/Addons.php:412 +msgid "Addon repo git URL" +msgstr "Adreça URL del repositori d'extensions." + +#: ../../Zotlabs/Module/Admin/Addons.php:413 +msgid "Custom repo name" +msgstr "Nom personalitzat pel repositori" + +#: ../../Zotlabs/Module/Admin/Addons.php:413 +msgid "(optional)" +msgstr "(opcional)" + +#: ../../Zotlabs/Module/Admin/Addons.php:414 +msgid "Download Addon Repo" +msgstr "Descarrega el repositori" + +#: ../../Zotlabs/Module/Admin/Addons.php:421 +msgid "Install new repo" +msgstr "Instal·la un nou repositori" + +#: ../../Zotlabs/Module/Admin/Addons.php:422 ../../Zotlabs/Lib/Apps.php:456 +msgid "Install" +msgstr "Instal·la" + +#: ../../Zotlabs/Module/Admin/Addons.php:445 +msgid "Manage Repos" +msgstr "Gestiona els repositoris" + +#: ../../Zotlabs/Module/Admin/Addons.php:446 +msgid "Installed Addon Repositories" +msgstr "Repositoris instaŀlats" + +#: ../../Zotlabs/Module/Admin/Addons.php:447 +msgid "Install a New Addon Repository" +msgstr "Instal·la un nou repositori" + +#: ../../Zotlabs/Module/Admin/Addons.php:454 +msgid "Switch branch" +msgstr "Canvia de branca" + +#: ../../Zotlabs/Module/Admin/Addons.php:455 +#: ../../Zotlabs/Module/Photos.php:1025 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../addon/superblock/superblock.php:116 +msgid "Remove" +msgstr "Esborra" + #: ../../Zotlabs/Module/Admin/Profs.php:89 msgid "New Profile Field" msgstr "Camp de Perfil Nou" @@ -3168,8 +3235,8 @@ msgstr "Informació adicional (opcional)" #: ../../Zotlabs/Module/Admin/Profs.php:94 #: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Rbmark.php:32 #: ../../Zotlabs/Module/Rbmark.php:104 ../../Zotlabs/Module/Filer.php:53 -#: ../../Zotlabs/Widget/Notes.php:18 ../../include/text.php:1052 -#: ../../include/text.php:1064 +#: ../../Zotlabs/Widget/Notes.php:18 ../../include/text.php:1063 +#: ../../include/text.php:1075 msgid "Save" msgstr "Guardar" @@ -3179,7 +3246,7 @@ msgstr "No es troba la definició del camp" #: ../../Zotlabs/Module/Admin/Profs.php:109 msgid "Edit Profile Field" -msgstr "Camp d'Edició del Perfil" +msgstr "Modifica el camp de perfil" #: ../../Zotlabs/Module/Admin/Profs.php:168 ../../Zotlabs/Widget/Admin.php:30 msgid "Profile Fields" @@ -3246,116 +3313,129 @@ msgstr "Idioma pel compte (pels correus)" msgid "Service class" msgstr "Classe de servei" -#: ../../Zotlabs/Module/Admin/Security.php:77 +#: ../../Zotlabs/Module/Admin/Security.php:83 msgid "" "By default, unfiltered HTML is allowed in embedded media. This is inherently" " insecure." msgstr "Per defecte, HTML no filtrat està permés als media embeguts. Això es inherentment no segur." -#: ../../Zotlabs/Module/Admin/Security.php:80 +#: ../../Zotlabs/Module/Admin/Security.php:86 msgid "" "The recommended setting is to only allow unfiltered HTML from the following " "sites:" msgstr "L'ajust recomanat és només permetre HTML sense filtrar dels següents llocs:" -#: ../../Zotlabs/Module/Admin/Security.php:81 +#: ../../Zotlabs/Module/Admin/Security.php:87 msgid "" "https://youtube.com/
https://www.youtube.com/
https://youtu.be/https://vimeo.com/
https://soundcloud.com/
" msgstr "https://youtube.com/
https://www.youtube.com/
https://youtu.be/
https://vimeo.com/
https://soundcloud.com/
" -#: ../../Zotlabs/Module/Admin/Security.php:82 +#: ../../Zotlabs/Module/Admin/Security.php:88 msgid "" "All other embedded content will be filtered, unless " "embedded content from that site is explicitly blocked." msgstr "Tota la resta de contingut embegut seà filtrat, excepte contingut embegut d'aquest lloc que està blocat explícitament." -#: ../../Zotlabs/Module/Admin/Security.php:87 +#: ../../Zotlabs/Module/Admin/Security.php:93 #: ../../Zotlabs/Widget/Admin.php:25 msgid "Security" msgstr "Seguretat" -#: ../../Zotlabs/Module/Admin/Security.php:89 +#: ../../Zotlabs/Module/Admin/Security.php:95 msgid "Block public" msgstr "Bloca que sigui públic" -#: ../../Zotlabs/Module/Admin/Security.php:89 +#: ../../Zotlabs/Module/Admin/Security.php:95 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently authenticated." msgstr "activa per blocar l'accés a les pàgines personals públiques a tothom excepte aquells/es que s'hagin autenticat en aquest node." -#: ../../Zotlabs/Module/Admin/Security.php:90 +#: ../../Zotlabs/Module/Admin/Security.php:96 +msgid "Provide a cloud root directory" +msgstr "Ofereix un directori arrel de núvols" + +#: ../../Zotlabs/Module/Admin/Security.php:96 +msgid "" +"The cloud root directory lists all channel names which provide public files" +msgstr "EL directori arrel de núvols llista tots els canals que ofereixen fitxers públicament" + +#: ../../Zotlabs/Module/Admin/Security.php:97 +msgid "Show total disk space available to cloud uploads" +msgstr "Mostra l'espai disc disponible per a pujar arxius als núvols" + +#: ../../Zotlabs/Module/Admin/Security.php:98 msgid "Set \"Transport Security\" HTTP header" msgstr "Set \"Transport Security\" HTTP header" -#: ../../Zotlabs/Module/Admin/Security.php:91 +#: ../../Zotlabs/Module/Admin/Security.php:99 msgid "Set \"Content Security Policy\" HTTP header" msgstr "Set \"Content Security Policy\" HTTP header" -#: ../../Zotlabs/Module/Admin/Security.php:92 +#: ../../Zotlabs/Module/Admin/Security.php:100 msgid "Allowed email domains" msgstr "Dominis de correu electonic acceptats" -#: ../../Zotlabs/Module/Admin/Security.php:92 +#: ../../Zotlabs/Module/Admin/Security.php:100 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" msgstr "llista separada per comes de dominis d'adreces de correu electrònic permeses en aquest lloc. S'accepten comodins. Deixar buit per acceptar qualsevol domini" -#: ../../Zotlabs/Module/Admin/Security.php:93 +#: ../../Zotlabs/Module/Admin/Security.php:101 msgid "Not allowed email domains" msgstr "Dominis de correu electrònic no acceptats" -#: ../../Zotlabs/Module/Admin/Security.php:93 +#: ../../Zotlabs/Module/Admin/Security.php:101 msgid "" "Comma separated list of domains which are not allowed in email addresses for" " registrations to this site. Wildcards are accepted. Empty to allow any " "domains, unless allowed domains have been defined." msgstr "llista separada per comes de dominis d'adreces de correu electrònic no permeses en aquest lloc. S'accepten comodins. Deixar buit per no acceptar cap domini, excepte els que s'hagin definits com acceptats." -#: ../../Zotlabs/Module/Admin/Security.php:94 +#: ../../Zotlabs/Module/Admin/Security.php:102 msgid "Allow communications only from these sites" msgstr "Permetre comunicacions únicament des de aquests llocs" -#: ../../Zotlabs/Module/Admin/Security.php:94 +#: ../../Zotlabs/Module/Admin/Security.php:102 msgid "" "One site per line. Leave empty to allow communication from anywhere by " "default" msgstr "Un lloc per línia. Deixar en blanc per permetre, per defecte, la comunicació amb tothom." -#: ../../Zotlabs/Module/Admin/Security.php:95 +#: ../../Zotlabs/Module/Admin/Security.php:103 msgid "Block communications from these sites" msgstr "Bloca comunicacions que venen d'aquests llocs" -#: ../../Zotlabs/Module/Admin/Security.php:96 +#: ../../Zotlabs/Module/Admin/Security.php:104 msgid "Allow communications only from these channels" msgstr "Permet la comunicació només per aquests canals" -#: ../../Zotlabs/Module/Admin/Security.php:96 +#: ../../Zotlabs/Module/Admin/Security.php:104 msgid "" "One channel (hash) per line. Leave empty to allow from any channel by " "default" msgstr "Un canal (hash) per línia. Deixa en blanc per permetre, per defecte, la comunicació qualsevol canal." -#: ../../Zotlabs/Module/Admin/Security.php:97 +#: ../../Zotlabs/Module/Admin/Security.php:105 msgid "Block communications from these channels" msgstr "Bloca les comunicacions que venen d'aquests canals" -#: ../../Zotlabs/Module/Admin/Security.php:98 +#: ../../Zotlabs/Module/Admin/Security.php:106 msgid "Only allow embeds from secure (SSL) websites and links." msgstr "Permetre embeguts només de llocs web i enllaços segurs (SSL)." -#: ../../Zotlabs/Module/Admin/Security.php:99 +#: ../../Zotlabs/Module/Admin/Security.php:107 msgid "Allow unfiltered embedded HTML content only from these domains" msgstr "Permetre HTML embegut sense filtrar només d'aquests dominis." -#: ../../Zotlabs/Module/Admin/Security.php:99 +#: ../../Zotlabs/Module/Admin/Security.php:107 msgid "One site per line. By default embedded content is filtered." msgstr "Un lloc per línia. Per defecte el contingut embegut es filtrat." -#: ../../Zotlabs/Module/Admin/Security.php:100 +#: ../../Zotlabs/Module/Admin/Security.php:108 msgid "Block embedded HTML from these domains" msgstr "Bloca HTML embegut d'aquests dominis" @@ -3368,7 +3448,7 @@ msgid "Visible to:" msgstr "Visible per:" #: ../../Zotlabs/Module/Lockview.php:117 ../../Zotlabs/Module/Lockview.php:153 -#: ../../Zotlabs/Module/Acl.php:121 ../../include/acl_selectors.php:88 +#: ../../Zotlabs/Module/Acl.php:120 ../../include/acl_selectors.php:88 msgctxt "acl" msgid "Profile" msgstr "Perfil" @@ -3396,6 +3476,7 @@ msgid "" msgstr "Pots crear regles de permisos segons classe de persona o de connexió." #: ../../Zotlabs/Module/Settings/Permcats.php:99 +#: ../../Zotlabs/Widget/Settings_menu.php:108 ../../include/features.php:240 msgid "Permission Categories" msgstr "Categories de permisos" @@ -3407,7 +3488,7 @@ msgstr "Nom de permís" #: ../../Zotlabs/Module/Settings/Tokens.php:161 #: ../../Zotlabs/Module/Connedit.php:891 ../../Zotlabs/Module/Defperms.php:250 msgid "My Settings" -msgstr "Els Meus Ajustos" +msgstr "La meva configuració" #: ../../Zotlabs/Module/Settings/Permcats.php:110 #: ../../Zotlabs/Module/Settings/Tokens.php:163 @@ -3429,20 +3510,20 @@ msgid "" "href=\"settings\">privacy settings, which have higher " "priority than individual settings. You can not change those" " settings here." -msgstr "Alguns permisos poden ser heretats dels teus canals ajustos de privacitat, Els quals tenen més prioritat que els ajustos individuals. No pots canviar aquests ajustos aquí." +msgstr "Alguns permisos pot ser que vinguin heretats de la configuració de privacitat del teu canal. Aquesta té més prioritat que les configuracions individuals. No pots canviar aquests paràmetres aquí." -#: ../../Zotlabs/Module/Settings/Channel.php:64 #: ../../Zotlabs/Module/Settings/Channel.php:68 -#: ../../Zotlabs/Module/Settings/Channel.php:69 #: ../../Zotlabs/Module/Settings/Channel.php:72 -#: ../../Zotlabs/Module/Settings/Channel.php:83 +#: ../../Zotlabs/Module/Settings/Channel.php:73 +#: ../../Zotlabs/Module/Settings/Channel.php:76 +#: ../../Zotlabs/Module/Settings/Channel.php:87 #: ../../Zotlabs/Module/Connedit.php:711 ../../Zotlabs/Widget/Affinity.php:24 #: ../../include/selectors.php:123 ../../include/channel.php:437 #: ../../include/channel.php:438 ../../include/channel.php:445 msgid "Friends" msgstr "Amics" -#: ../../Zotlabs/Module/Settings/Channel.php:264 +#: ../../Zotlabs/Module/Settings/Channel.php:272 #: ../../Zotlabs/Module/Defperms.php:103 #: ../../addon/rendezvous/rendezvous.php:82 #: ../../addon/openstreetmap/openstreetmap.php:184 @@ -3452,401 +3533,415 @@ msgstr "Amics" msgid "Settings updated." msgstr "Ajustes actualizados." -#: ../../Zotlabs/Module/Settings/Channel.php:325 +#: ../../Zotlabs/Module/Settings/Channel.php:333 msgid "Nobody except yourself" msgstr "Ningú excepte tú" -#: ../../Zotlabs/Module/Settings/Channel.php:326 +#: ../../Zotlabs/Module/Settings/Channel.php:334 msgid "Only those you specifically allow" msgstr "Només allò que específicament permetis" -#: ../../Zotlabs/Module/Settings/Channel.php:327 +#: ../../Zotlabs/Module/Settings/Channel.php:335 msgid "Approved connections" msgstr "Connexions aprovades" -#: ../../Zotlabs/Module/Settings/Channel.php:328 +#: ../../Zotlabs/Module/Settings/Channel.php:336 msgid "Any connections" msgstr "Qualsevol connexió" -#: ../../Zotlabs/Module/Settings/Channel.php:329 +#: ../../Zotlabs/Module/Settings/Channel.php:337 msgid "Anybody on this website" msgstr "Qualsevol en aquest lloc" -#: ../../Zotlabs/Module/Settings/Channel.php:330 +#: ../../Zotlabs/Module/Settings/Channel.php:338 msgid "Anybody in this network" msgstr "Qualsevol en aquesta xarxa" -#: ../../Zotlabs/Module/Settings/Channel.php:331 +#: ../../Zotlabs/Module/Settings/Channel.php:339 msgid "Anybody authenticated" msgstr "Qualsevol autenticat" -#: ../../Zotlabs/Module/Settings/Channel.php:332 +#: ../../Zotlabs/Module/Settings/Channel.php:340 msgid "Anybody on the internet" msgstr "Qualsevol a internet" -#: ../../Zotlabs/Module/Settings/Channel.php:407 +#: ../../Zotlabs/Module/Settings/Channel.php:415 msgid "Publish your default profile in the network directory" msgstr "Publica el teu perfil per defecte al directori de la xarxa" -#: ../../Zotlabs/Module/Settings/Channel.php:412 +#: ../../Zotlabs/Module/Settings/Channel.php:420 msgid "Allow us to suggest you as a potential friend to new members?" msgstr "Ens permets suggerir-te com a potencial amic als nous membres?" -#: ../../Zotlabs/Module/Settings/Channel.php:416 +#: ../../Zotlabs/Module/Settings/Channel.php:424 msgid "or" msgstr "o" -#: ../../Zotlabs/Module/Settings/Channel.php:425 +#: ../../Zotlabs/Module/Settings/Channel.php:433 msgid "Your channel address is" msgstr "La teva adreça del canal es" -#: ../../Zotlabs/Module/Settings/Channel.php:428 +#: ../../Zotlabs/Module/Settings/Channel.php:436 msgid "Your files/photos are accessible via WebDAV at" msgstr "Les teves fotos i arxius estan disponibles mitjançant WebDAV a" -#: ../../Zotlabs/Module/Settings/Channel.php:493 +#: ../../Zotlabs/Module/Settings/Channel.php:488 +msgid "Automatic membership approval" +msgstr "Acceptació automàtica de membres" + +#: ../../Zotlabs/Module/Settings/Channel.php:488 +#: ../../Zotlabs/Module/Defperms.php:239 +msgid "" +"If enabled, connection requests will be approved without your interaction" +msgstr "Si s'habilita, les soŀlicituds de connexió s'aprovaran automàticament sense requerir la teva interacció" + +#: ../../Zotlabs/Module/Settings/Channel.php:514 msgid "Channel Settings" -msgstr "Ajustos del Canal" +msgstr "Configuració de canal" -#: ../../Zotlabs/Module/Settings/Channel.php:500 +#: ../../Zotlabs/Module/Settings/Channel.php:521 msgid "Basic Settings" -msgstr "Ajustos Bàsics" +msgstr "Configuració bàsica" -#: ../../Zotlabs/Module/Settings/Channel.php:501 +#: ../../Zotlabs/Module/Settings/Channel.php:522 #: ../../include/channel.php:1521 msgid "Full Name:" msgstr "Nom Complet:" -#: ../../Zotlabs/Module/Settings/Channel.php:502 +#: ../../Zotlabs/Module/Settings/Channel.php:523 #: ../../Zotlabs/Module/Settings/Account.php:119 msgid "Email Address:" msgstr "Adreça de E-Correu:" -#: ../../Zotlabs/Module/Settings/Channel.php:503 +#: ../../Zotlabs/Module/Settings/Channel.php:524 msgid "Your Timezone:" msgstr "La teva Franja Horària" -#: ../../Zotlabs/Module/Settings/Channel.php:504 +#: ../../Zotlabs/Module/Settings/Channel.php:525 msgid "Default Post Location:" msgstr "Localització Predeterminada de les Entrades:" -#: ../../Zotlabs/Module/Settings/Channel.php:504 +#: ../../Zotlabs/Module/Settings/Channel.php:525 msgid "Geographical location to display on your posts" msgstr "Posició geogràfica a mostrar a les teves entrades" -#: ../../Zotlabs/Module/Settings/Channel.php:505 +#: ../../Zotlabs/Module/Settings/Channel.php:526 msgid "Use Browser Location:" msgstr "Empra la Localització del Navegador:" -#: ../../Zotlabs/Module/Settings/Channel.php:507 +#: ../../Zotlabs/Module/Settings/Channel.php:528 msgid "Adult Content" msgstr "Contingut per a Adults" -#: ../../Zotlabs/Module/Settings/Channel.php:507 +#: ../../Zotlabs/Module/Settings/Channel.php:528 msgid "" "This channel frequently or regularly publishes adult content. (Please tag " "any adult material and/or nudity with #NSFW)" msgstr "Aquest canal publica freqúentment o amb regularitat contingut per a adults. (Si us plau, etiqueti qualsevol material per a adults amb #NSFW)" -#: ../../Zotlabs/Module/Settings/Channel.php:509 +#: ../../Zotlabs/Module/Settings/Channel.php:530 msgid "Security and Privacy Settings" -msgstr "Ajustos de Seguretat i Privacitat" +msgstr "Configuració de seguretat i privacitat" -#: ../../Zotlabs/Module/Settings/Channel.php:511 +#: ../../Zotlabs/Module/Settings/Channel.php:532 msgid "Your permissions are already configured. Click to view/adjust" msgstr "Els teus permisos estan configurats. Clic per veure/ajustar" -#: ../../Zotlabs/Module/Settings/Channel.php:513 +#: ../../Zotlabs/Module/Settings/Channel.php:534 msgid "Hide my online presence" msgstr "Amaga la meva presencia en línia" -#: ../../Zotlabs/Module/Settings/Channel.php:513 +#: ../../Zotlabs/Module/Settings/Channel.php:534 msgid "Prevents displaying in your profile that you are online" msgstr "Evita mostrar en el teu perfil, que estàs en línia" -#: ../../Zotlabs/Module/Settings/Channel.php:515 +#: ../../Zotlabs/Module/Settings/Channel.php:536 msgid "Simple Privacy Settings:" -msgstr "Ajustos simples de privacitat:" +msgstr "Configuració simple de privacitat:" -#: ../../Zotlabs/Module/Settings/Channel.php:516 +#: ../../Zotlabs/Module/Settings/Channel.php:537 msgid "" "Very Public - extremely permissive (should be used with caution)" msgstr "Molt públic - extremadament permissiu (s'ha d'anar en compte)" -#: ../../Zotlabs/Module/Settings/Channel.php:517 +#: ../../Zotlabs/Module/Settings/Channel.php:538 msgid "" "Typical - default public, privacy when desired (similar to social " "network permissions but with improved privacy)" msgstr "Normal - públic per defecte, privat quan es desitgi (similar als permisos de xarxa social, però amb millor privacitat)" -#: ../../Zotlabs/Module/Settings/Channel.php:518 +#: ../../Zotlabs/Module/Settings/Channel.php:539 msgid "Private - default private, never open or public" msgstr "Privat - privat per defecte, mai públic o obert" -#: ../../Zotlabs/Module/Settings/Channel.php:519 +#: ../../Zotlabs/Module/Settings/Channel.php:540 msgid "Blocked - default blocked to/from everybody" msgstr "Bloquejat - tothom bloquejat per defecte" -#: ../../Zotlabs/Module/Settings/Channel.php:521 +#: ../../Zotlabs/Module/Settings/Channel.php:542 msgid "Allow others to tag your posts" msgstr "Permet a altres etiquetar les teves entrades" -#: ../../Zotlabs/Module/Settings/Channel.php:521 +#: ../../Zotlabs/Module/Settings/Channel.php:542 msgid "" "Often used by the community to retro-actively flag inappropriate content" msgstr "Sovint emprat per la comunitat per marcar retroactivament contingut inapropiat" -#: ../../Zotlabs/Module/Settings/Channel.php:523 +#: ../../Zotlabs/Module/Settings/Channel.php:544 msgid "Channel Permission Limits" msgstr "Límits dels permisos del canal" -#: ../../Zotlabs/Module/Settings/Channel.php:525 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "Expire other channel content after this many days" msgstr "El contingut d'altes canals caduca després d'aquests dies" -#: ../../Zotlabs/Module/Settings/Channel.php:525 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "0 or blank to use the website limit." msgstr "0 o en blanc per emprar el limit del lloc web." -#: ../../Zotlabs/Module/Settings/Channel.php:525 +#: ../../Zotlabs/Module/Settings/Channel.php:546 #, php-format msgid "This website expires after %d days." msgstr "Aquest lloc web expira després de %d dies." -#: ../../Zotlabs/Module/Settings/Channel.php:525 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "This website does not expire imported content." msgstr "A aquest lloc web no expira el contingut importat" -#: ../../Zotlabs/Module/Settings/Channel.php:525 +#: ../../Zotlabs/Module/Settings/Channel.php:546 msgid "The website limit takes precedence if lower than your limit." msgstr "El límit del lloc web pren la preferència si es inferior al teu límit." -#: ../../Zotlabs/Module/Settings/Channel.php:526 +#: ../../Zotlabs/Module/Settings/Channel.php:547 msgid "Maximum Friend Requests/Day:" msgstr "Nombre màxim de peticions d'amistat per dia" -#: ../../Zotlabs/Module/Settings/Channel.php:526 +#: ../../Zotlabs/Module/Settings/Channel.php:547 msgid "May reduce spam activity" msgstr "Pot reduir l'SPAM" -#: ../../Zotlabs/Module/Settings/Channel.php:527 +#: ../../Zotlabs/Module/Settings/Channel.php:548 msgid "Default Privacy Group" msgstr "Grup de privacitat per defecte" -#: ../../Zotlabs/Module/Settings/Channel.php:529 +#: ../../Zotlabs/Module/Settings/Channel.php:550 msgid "Use my default audience setting for the type of object published" -msgstr "Empra els meus ajustos per defecte segons el tipus de entrada publicada" +msgstr "Empra la meva configuració d'audiència que hagi triat per al tipus d'entrada" -#: ../../Zotlabs/Module/Settings/Channel.php:530 +#: ../../Zotlabs/Module/Settings/Channel.php:551 msgid "Profile to assign new connections" msgstr "Perfil al qual assignar les connexions noves" -#: ../../Zotlabs/Module/Settings/Channel.php:540 +#: ../../Zotlabs/Module/Settings/Channel.php:561 msgid "Default Permissions Group" msgstr "Grup de permisos per defecte" -#: ../../Zotlabs/Module/Settings/Channel.php:546 +#: ../../Zotlabs/Module/Settings/Channel.php:567 msgid "Maximum private messages per day from unknown people:" msgstr "Nombre màxim de missatges privats de desconeguts al dia:" -#: ../../Zotlabs/Module/Settings/Channel.php:546 +#: ../../Zotlabs/Module/Settings/Channel.php:567 msgid "Useful to reduce spamming" msgstr "Útil per a reduir l'spam" -#: ../../Zotlabs/Module/Settings/Channel.php:549 +#: ../../Zotlabs/Module/Settings/Channel.php:570 #: ../../Zotlabs/Lib/Enotify.php:68 msgid "Notification Settings" -msgstr "Ajustos de notificacions" +msgstr "Configuració de notificacions" -#: ../../Zotlabs/Module/Settings/Channel.php:550 +#: ../../Zotlabs/Module/Settings/Channel.php:571 msgid "By default post a status message when:" msgstr "Per defecte envia un missatge d'estat quan:" -#: ../../Zotlabs/Module/Settings/Channel.php:551 +#: ../../Zotlabs/Module/Settings/Channel.php:572 msgid "accepting a friend request" msgstr "S'accepta una sol·licitud d'amistat" -#: ../../Zotlabs/Module/Settings/Channel.php:552 +#: ../../Zotlabs/Module/Settings/Channel.php:573 msgid "joining a forum/community" msgstr "Apuntar-se a un fòrum o comunitat" -#: ../../Zotlabs/Module/Settings/Channel.php:553 +#: ../../Zotlabs/Module/Settings/Channel.php:574 msgid "making an interesting profile change" msgstr "Faci un canvi interesant al perfil" -#: ../../Zotlabs/Module/Settings/Channel.php:554 +#: ../../Zotlabs/Module/Settings/Channel.php:575 msgid "Send a notification email when:" msgstr "Notifica per correu quan:" -#: ../../Zotlabs/Module/Settings/Channel.php:555 +#: ../../Zotlabs/Module/Settings/Channel.php:576 msgid "You receive a connection request" msgstr "Rebi una petició de connexió" -#: ../../Zotlabs/Module/Settings/Channel.php:556 +#: ../../Zotlabs/Module/Settings/Channel.php:577 msgid "Your connections are confirmed" msgstr "Es confirma una connexió" -#: ../../Zotlabs/Module/Settings/Channel.php:557 +#: ../../Zotlabs/Module/Settings/Channel.php:578 msgid "Someone writes on your profile wall" msgstr "Algú ha escrit al mur del teu perfil" -#: ../../Zotlabs/Module/Settings/Channel.php:558 +#: ../../Zotlabs/Module/Settings/Channel.php:579 msgid "Someone writes a followup comment" msgstr "Algú ha escrit un comentari de resposta" -#: ../../Zotlabs/Module/Settings/Channel.php:559 +#: ../../Zotlabs/Module/Settings/Channel.php:580 msgid "You receive a private message" msgstr "Rebi un missatge privat" -#: ../../Zotlabs/Module/Settings/Channel.php:560 +#: ../../Zotlabs/Module/Settings/Channel.php:581 msgid "You receive a friend suggestion" msgstr "Rebi una suggerència d'amistat" -#: ../../Zotlabs/Module/Settings/Channel.php:561 +#: ../../Zotlabs/Module/Settings/Channel.php:582 msgid "You are tagged in a post" msgstr "Estàs etiquetat a l'entrada" -#: ../../Zotlabs/Module/Settings/Channel.php:562 +#: ../../Zotlabs/Module/Settings/Channel.php:583 msgid "You are poked/prodded/etc. in a post" msgstr "S'enfoten/te piquen/etc. en una entrada" -#: ../../Zotlabs/Module/Settings/Channel.php:564 +#: ../../Zotlabs/Module/Settings/Channel.php:585 msgid "Someone likes your post/comment" msgstr "A algú li ha agradat la teva entrada o comentari" -#: ../../Zotlabs/Module/Settings/Channel.php:567 +#: ../../Zotlabs/Module/Settings/Channel.php:588 msgid "Show visual notifications including:" msgstr "Mostra notificacion visuals, com ara:" -#: ../../Zotlabs/Module/Settings/Channel.php:569 +#: ../../Zotlabs/Module/Settings/Channel.php:590 msgid "Unseen grid activity" msgstr "Activitat de malla no vista" -#: ../../Zotlabs/Module/Settings/Channel.php:570 +#: ../../Zotlabs/Module/Settings/Channel.php:591 msgid "Unseen channel activity" msgstr "Activitat no vista del canal" -#: ../../Zotlabs/Module/Settings/Channel.php:571 -msgid "Unseen private messages" -msgstr "Missatges privats no llegits" - -#: ../../Zotlabs/Module/Settings/Channel.php:571 -#: ../../Zotlabs/Module/Settings/Channel.php:576 -#: ../../Zotlabs/Module/Settings/Channel.php:577 -#: ../../Zotlabs/Module/Settings/Channel.php:578 +#: ../../Zotlabs/Module/Settings/Channel.php:592 +msgid "Unseen private messages" +msgstr "Missatges privats no llegits" + +#: ../../Zotlabs/Module/Settings/Channel.php:592 +#: ../../Zotlabs/Module/Settings/Channel.php:597 +#: ../../Zotlabs/Module/Settings/Channel.php:598 +#: ../../Zotlabs/Module/Settings/Channel.php:599 #: ../../addon/jappixmini/jappixmini.php:343 msgid "Recommended" msgstr "Recomanat" -#: ../../Zotlabs/Module/Settings/Channel.php:572 +#: ../../Zotlabs/Module/Settings/Channel.php:593 msgid "Upcoming events" msgstr "Esdeveniments propers" -#: ../../Zotlabs/Module/Settings/Channel.php:573 +#: ../../Zotlabs/Module/Settings/Channel.php:594 msgid "Events today" msgstr "Esdeveniments d'avui" -#: ../../Zotlabs/Module/Settings/Channel.php:574 +#: ../../Zotlabs/Module/Settings/Channel.php:595 msgid "Upcoming birthdays" msgstr "Aniversaris propers" -#: ../../Zotlabs/Module/Settings/Channel.php:574 +#: ../../Zotlabs/Module/Settings/Channel.php:595 msgid "Not available in all themes" msgstr "No està disponible en tots els temes" -#: ../../Zotlabs/Module/Settings/Channel.php:575 +#: ../../Zotlabs/Module/Settings/Channel.php:596 msgid "System (personal) notifications" msgstr "Notificacions (personals) del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:576 +#: ../../Zotlabs/Module/Settings/Channel.php:597 msgid "System info messages" msgstr "Missatges d'informació del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:577 +#: ../../Zotlabs/Module/Settings/Channel.php:598 msgid "System critical alerts" msgstr "Alertes crítiques del sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:578 +#: ../../Zotlabs/Module/Settings/Channel.php:599 msgid "New connections" msgstr "Noves connexions" -#: ../../Zotlabs/Module/Settings/Channel.php:579 +#: ../../Zotlabs/Module/Settings/Channel.php:600 msgid "System Registrations" msgstr "Inscripcions del Sistema" -#: ../../Zotlabs/Module/Settings/Channel.php:580 +#: ../../Zotlabs/Module/Settings/Channel.php:601 msgid "Unseen shared files" msgstr "Fitxers compartits nous" -#: ../../Zotlabs/Module/Settings/Channel.php:581 +#: ../../Zotlabs/Module/Settings/Channel.php:602 msgid "Unseen public activity" msgstr "Activitat pública nova" -#: ../../Zotlabs/Module/Settings/Channel.php:582 +#: ../../Zotlabs/Module/Settings/Channel.php:603 msgid "Unseen likes and dislikes" msgstr "\"M'agrada\" i \"no m'agrada\" pendents" -#: ../../Zotlabs/Module/Settings/Channel.php:583 +#: ../../Zotlabs/Module/Settings/Channel.php:604 +msgid "Unseen forum posts" +msgstr "Entrades de fòrum no llegides" + +#: ../../Zotlabs/Module/Settings/Channel.php:605 msgid "Email notification hub (hostname)" msgstr "Hub per a notificacions per correu (nom de domini)" -#: ../../Zotlabs/Module/Settings/Channel.php:583 +#: ../../Zotlabs/Module/Settings/Channel.php:605 #, php-format msgid "" "If your channel is mirrored to multiple hubs, set this to your preferred " "location. This will prevent duplicate email notifications. Example: %s" msgstr "En cas que el teu canal estigui repicat en diversos hubs, habilita aquesta opció al teu hub preferit. Això evita notificacions duplicades. Exemple: %s" -#: ../../Zotlabs/Module/Settings/Channel.php:584 +#: ../../Zotlabs/Module/Settings/Channel.php:606 msgid "Show new wall posts, private messages and connections under Notices" msgstr "Mostra totes les novetats d'entrades de mur, missatges privats i connexions a Notícies" -#: ../../Zotlabs/Module/Settings/Channel.php:586 +#: ../../Zotlabs/Module/Settings/Channel.php:608 msgid "Notify me of events this many days in advance" msgstr "Notifica'm dels esdeveniments amb aquests dies d'antelació" -#: ../../Zotlabs/Module/Settings/Channel.php:586 +#: ../../Zotlabs/Module/Settings/Channel.php:608 msgid "Must be greater than 0" msgstr "Ha de ser més gran que 0" -#: ../../Zotlabs/Module/Settings/Channel.php:592 +#: ../../Zotlabs/Module/Settings/Channel.php:614 msgid "Advanced Account/Page Type Settings" -msgstr "Ajustos avançats de compte i tipus de pàgina" +msgstr "Configuració avançada de compte i de tipus de pàgina" -#: ../../Zotlabs/Module/Settings/Channel.php:593 +#: ../../Zotlabs/Module/Settings/Channel.php:615 msgid "Change the behaviour of this account for special situations" msgstr "Modifica el comportament d'aquest compte en situacions especials" -#: ../../Zotlabs/Module/Settings/Channel.php:595 +#: ../../Zotlabs/Module/Settings/Channel.php:617 msgid "Miscellaneous Settings" -msgstr "Ajustos diversos" +msgstr "Configuració diversa" -#: ../../Zotlabs/Module/Settings/Channel.php:596 +#: ../../Zotlabs/Module/Settings/Channel.php:618 msgid "Default photo upload folder" msgstr "Carpeta per defecte de fotos pujades" -#: ../../Zotlabs/Module/Settings/Channel.php:596 -#: ../../Zotlabs/Module/Settings/Channel.php:597 +#: ../../Zotlabs/Module/Settings/Channel.php:618 +#: ../../Zotlabs/Module/Settings/Channel.php:619 msgid "%Y - current year, %m - current month" msgstr "%Y - any en curs, %m - mes corrent" -#: ../../Zotlabs/Module/Settings/Channel.php:597 +#: ../../Zotlabs/Module/Settings/Channel.php:619 msgid "Default file upload folder" msgstr "Carpeta per defecte d'arxius pujats" -#: ../../Zotlabs/Module/Settings/Channel.php:599 +#: ../../Zotlabs/Module/Settings/Channel.php:621 msgid "Personal menu to display in your channel pages" msgstr "Menú personal per mostrar en les teves pàgines de canal" -#: ../../Zotlabs/Module/Settings/Channel.php:601 +#: ../../Zotlabs/Module/Settings/Channel.php:623 msgid "Remove this channel." msgstr "Elimina aquest canal." -#: ../../Zotlabs/Module/Settings/Channel.php:602 +#: ../../Zotlabs/Module/Settings/Channel.php:624 msgid "Firefox Share $Projectname provider" msgstr "Firefox Share $Projectname provider" -#: ../../Zotlabs/Module/Settings/Channel.php:603 +#: ../../Zotlabs/Module/Settings/Channel.php:625 msgid "Start calendar week on Monday" msgstr "Comença la setmana en dilluns" @@ -3913,96 +4008,96 @@ msgstr "Data de caducitat (aaaa-mm-dd)" #: ../../Zotlabs/Module/Settings/Tokens.php:160 #: ../../Zotlabs/Module/Connedit.php:890 msgid "Their Settings" -msgstr "Els seus Ajustos" +msgstr "La seva configuració" -#: ../../Zotlabs/Module/Settings/Oauth2.php:35 +#: ../../Zotlabs/Module/Settings/Oauth2.php:36 msgid "Name and Secret are required" msgstr "Es necessiten el nom i el secret" -#: ../../Zotlabs/Module/Settings/Oauth2.php:83 +#: ../../Zotlabs/Module/Settings/Oauth2.php:84 msgid "Add OAuth2 application" msgstr "Afegeix una aplicació OAuth2" -#: ../../Zotlabs/Module/Settings/Oauth2.php:86 -#: ../../Zotlabs/Module/Settings/Oauth2.php:114 +#: ../../Zotlabs/Module/Settings/Oauth2.php:87 +#: ../../Zotlabs/Module/Settings/Oauth2.php:115 #: ../../Zotlabs/Module/Settings/Oauth.php:90 msgid "Name of application" msgstr "Nom de l'aplicatiu" -#: ../../Zotlabs/Module/Settings/Oauth2.php:87 -#: ../../Zotlabs/Module/Settings/Oauth2.php:115 +#: ../../Zotlabs/Module/Settings/Oauth2.php:88 +#: ../../Zotlabs/Module/Settings/Oauth2.php:116 #: ../../Zotlabs/Module/Settings/Oauth.php:92 #: ../../Zotlabs/Module/Settings/Oauth.php:118 #: ../../addon/statusnet/statusnet.php:893 ../../addon/twitter/twitter.php:782 msgid "Consumer Secret" msgstr "Consumer Secret" -#: ../../Zotlabs/Module/Settings/Oauth2.php:87 -#: ../../Zotlabs/Module/Settings/Oauth2.php:115 +#: ../../Zotlabs/Module/Settings/Oauth2.php:88 +#: ../../Zotlabs/Module/Settings/Oauth2.php:116 #: ../../Zotlabs/Module/Settings/Oauth.php:91 #: ../../Zotlabs/Module/Settings/Oauth.php:92 msgid "Automatically generated - change if desired. Max length 20" msgstr "Generat automàticament- Canvia-ho si ho vols. Max. longitud 20" -#: ../../Zotlabs/Module/Settings/Oauth2.php:88 -#: ../../Zotlabs/Module/Settings/Oauth2.php:116 +#: ../../Zotlabs/Module/Settings/Oauth2.php:89 +#: ../../Zotlabs/Module/Settings/Oauth2.php:117 #: ../../Zotlabs/Module/Settings/Oauth.php:93 #: ../../Zotlabs/Module/Settings/Oauth.php:119 msgid "Redirect" msgstr "Redirecciona" -#: ../../Zotlabs/Module/Settings/Oauth2.php:88 -#: ../../Zotlabs/Module/Settings/Oauth2.php:116 +#: ../../Zotlabs/Module/Settings/Oauth2.php:89 +#: ../../Zotlabs/Module/Settings/Oauth2.php:117 #: ../../Zotlabs/Module/Settings/Oauth.php:93 msgid "" "Redirect URI - leave blank unless your application specifically requires " "this" msgstr "URI redirigida - No canviar excepte perquè el teu aplicatiu ho requereixi." -#: ../../Zotlabs/Module/Settings/Oauth2.php:89 -#: ../../Zotlabs/Module/Settings/Oauth2.php:117 +#: ../../Zotlabs/Module/Settings/Oauth2.php:90 +#: ../../Zotlabs/Module/Settings/Oauth2.php:118 msgid "Grant Types" msgstr "Tipus de permís" -#: ../../Zotlabs/Module/Settings/Oauth2.php:89 #: ../../Zotlabs/Module/Settings/Oauth2.php:90 -#: ../../Zotlabs/Module/Settings/Oauth2.php:117 +#: ../../Zotlabs/Module/Settings/Oauth2.php:91 #: ../../Zotlabs/Module/Settings/Oauth2.php:118 +#: ../../Zotlabs/Module/Settings/Oauth2.php:119 msgid "leave blank unless your application sepcifically requires this" msgstr "deixa-ho en blanc si no és que la teva aplicació ho demana explícitament" -#: ../../Zotlabs/Module/Settings/Oauth2.php:90 -#: ../../Zotlabs/Module/Settings/Oauth2.php:118 +#: ../../Zotlabs/Module/Settings/Oauth2.php:91 +#: ../../Zotlabs/Module/Settings/Oauth2.php:119 msgid "Authorization scope" msgstr "Àmbit d'autorització" -#: ../../Zotlabs/Module/Settings/Oauth2.php:102 +#: ../../Zotlabs/Module/Settings/Oauth2.php:103 msgid "OAuth2 Application not found." msgstr "No s'ha trobat l'aplicació OAuth2." -#: ../../Zotlabs/Module/Settings/Oauth2.php:111 -#: ../../Zotlabs/Module/Settings/Oauth2.php:148 +#: ../../Zotlabs/Module/Settings/Oauth2.php:112 +#: ../../Zotlabs/Module/Settings/Oauth2.php:149 #: ../../Zotlabs/Module/Settings/Oauth.php:87 #: ../../Zotlabs/Module/Settings/Oauth.php:113 #: ../../Zotlabs/Module/Settings/Oauth.php:149 msgid "Add application" msgstr "Afegir aplicatiu" -#: ../../Zotlabs/Module/Settings/Oauth2.php:147 +#: ../../Zotlabs/Module/Settings/Oauth2.php:148 msgid "Connected OAuth2 Apps" msgstr "Aplicacions OAuth2 connectades" -#: ../../Zotlabs/Module/Settings/Oauth2.php:151 +#: ../../Zotlabs/Module/Settings/Oauth2.php:152 #: ../../Zotlabs/Module/Settings/Oauth.php:152 msgid "Client key starts with" msgstr "La clau del client comença amb" -#: ../../Zotlabs/Module/Settings/Oauth2.php:152 +#: ../../Zotlabs/Module/Settings/Oauth2.php:153 #: ../../Zotlabs/Module/Settings/Oauth.php:153 msgid "No name" msgstr "Sin nombre" -#: ../../Zotlabs/Module/Settings/Oauth2.php:153 +#: ../../Zotlabs/Module/Settings/Oauth2.php:154 #: ../../Zotlabs/Module/Settings/Oauth.php:154 msgid "Remove authorization" msgstr "Elimina autorització" @@ -4045,7 +4140,7 @@ msgstr "L'actualització de la contrasenya va fallar. Si us plau, torneu a inten #: ../../Zotlabs/Module/Settings/Account.php:112 msgid "Account Settings" -msgstr "Ajustos de Compte" +msgstr "Configuració del compte" #: ../../Zotlabs/Module/Settings/Account.php:113 msgid "Current Password" @@ -4115,23 +4210,23 @@ msgstr "%s - (Experimental)" #: ../../Zotlabs/Module/Settings/Display.php:187 msgid "Display Settings" -msgstr "Ajustos de Pantalla" +msgstr "Configuració de pantalla" #: ../../Zotlabs/Module/Settings/Display.php:188 msgid "Theme Settings" -msgstr "Ajustos de Tema" +msgstr "Configuració de tema" #: ../../Zotlabs/Module/Settings/Display.php:189 msgid "Custom Theme Settings" -msgstr "Ajustos Personals de Tema" +msgstr "Configuració de temes personalitzats" #: ../../Zotlabs/Module/Settings/Display.php:190 msgid "Content Settings" -msgstr "Ajustos de Contingut" +msgstr "Configuració dels continguts" #: ../../Zotlabs/Module/Settings/Display.php:196 msgid "Display Theme:" -msgstr "Ajustos de Tema:" +msgstr "Tema de pantalla:" #: ../../Zotlabs/Module/Settings/Display.php:197 msgid "Select scheme" @@ -4241,7 +4336,7 @@ msgid "Icon url" msgstr "Icona de url" #: ../../Zotlabs/Module/Settings/Oauth.php:94 -#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 +#: ../../Zotlabs/Module/Sources.php:115 ../../Zotlabs/Module/Sources.php:150 msgid "Optional" msgstr "Opcional" @@ -4254,22 +4349,22 @@ msgid "Connected Apps" msgstr "Aplicatius Conectats" #: ../../Zotlabs/Module/Embedphotos.php:140 -#: ../../Zotlabs/Module/Photos.php:811 ../../Zotlabs/Module/Photos.php:1350 +#: ../../Zotlabs/Module/Photos.php:816 ../../Zotlabs/Module/Photos.php:1355 #: ../../Zotlabs/Widget/Portfolio.php:87 ../../Zotlabs/Widget/Album.php:78 msgid "View Photo" msgstr "Mostra la imatge" #: ../../Zotlabs/Module/Embedphotos.php:156 -#: ../../Zotlabs/Module/Photos.php:842 ../../Zotlabs/Widget/Portfolio.php:108 +#: ../../Zotlabs/Module/Photos.php:847 ../../Zotlabs/Widget/Portfolio.php:108 #: ../../Zotlabs/Widget/Album.php:95 msgid "Edit Album" msgstr "Modifica l'àlbum" #: ../../Zotlabs/Module/Embedphotos.php:158 -#: ../../Zotlabs/Module/Photos.php:712 -#: ../../Zotlabs/Module/Profile_photo.php:458 -#: ../../Zotlabs/Module/Cover_photo.php:362 -#: ../../Zotlabs/Storage/Browser.php:384 ../../Zotlabs/Widget/Cdav.php:133 +#: ../../Zotlabs/Module/Photos.php:717 +#: ../../Zotlabs/Module/Profile_photo.php:459 +#: ../../Zotlabs/Module/Cover_photo.php:395 +#: ../../Zotlabs/Storage/Browser.php:392 ../../Zotlabs/Widget/Cdav.php:133 #: ../../Zotlabs/Widget/Cdav.php:169 ../../Zotlabs/Widget/Portfolio.php:110 #: ../../Zotlabs/Widget/Album.php:97 msgid "Upload" @@ -4333,9 +4428,9 @@ msgid "URL for photo of thing (optional)" msgstr "Adreça URL de la foto d'una cosa (opcional)" #: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:372 -#: ../../Zotlabs/Module/Photos.php:702 ../../Zotlabs/Module/Photos.php:1071 +#: ../../Zotlabs/Module/Photos.php:707 ../../Zotlabs/Module/Photos.php:1076 #: ../../Zotlabs/Module/Connedit.php:676 ../../Zotlabs/Module/Chat.php:235 -#: ../../Zotlabs/Module/Filestorage.php:147 +#: ../../Zotlabs/Module/Filestorage.php:170 #: ../../include/acl_selectors.php:123 msgid "Permissions" msgstr "Permisos " @@ -4345,12 +4440,12 @@ msgid "Add Thing to your Profile" msgstr "Afegeix una cosa al teu perfil" #: ../../Zotlabs/Module/Notify.php:61 -#: ../../Zotlabs/Module/Notifications.php:57 +#: ../../Zotlabs/Module/Notifications.php:55 msgid "No more system notifications." msgstr "No hi ha més notificacions del sistema." #: ../../Zotlabs/Module/Notify.php:65 -#: ../../Zotlabs/Module/Notifications.php:61 +#: ../../Zotlabs/Module/Notifications.php:59 msgid "System Notifications" msgstr "Notificacions del sistema" @@ -4358,52 +4453,56 @@ msgstr "Notificacions del sistema" msgid "Connection added." msgstr "S'ha afegit la connexió." -#: ../../Zotlabs/Module/Import.php:144 +#: ../../Zotlabs/Module/Import.php:146 #, php-format msgid "Your service plan only allows %d channels." msgstr "El teu paquet de serveis només admet %d canals." -#: ../../Zotlabs/Module/Import.php:158 +#: ../../Zotlabs/Module/Import.php:173 msgid "No channel. Import failed." msgstr "Sense canal. No s'ha pogut importar." -#: ../../Zotlabs/Module/Import.php:482 +#: ../../Zotlabs/Module/Import.php:513 #: ../../addon/diaspora/import_diaspora.php:139 msgid "Import completed." msgstr "S'ha completat la importació." -#: ../../Zotlabs/Module/Import.php:510 +#: ../../Zotlabs/Module/Import.php:541 msgid "You must be logged in to use this feature." msgstr "Has d'estar registrat per fer servir aquesta funcionalitat." -#: ../../Zotlabs/Module/Import.php:515 +#: ../../Zotlabs/Module/Import.php:546 msgid "Import Channel" msgstr "Importa un canal" -#: ../../Zotlabs/Module/Import.php:516 +#: ../../Zotlabs/Module/Import.php:547 msgid "" "Use this form to import an existing channel from a different server/hub. You" " may retrieve the channel identity from the old server/hub via the network " "or provide an export file." msgstr "Empra aquest formulari per importar un canal existent en un altre servidor/concentrador. Pots recuperar el canal des de l'antic servidor/concentrador via la xarxa o mitjançant un fitxer d'exportació" -#: ../../Zotlabs/Module/Import.php:518 +#: ../../Zotlabs/Module/Import.php:549 msgid "Or provide the old server/hub details" msgstr "O proveeix els detalls de l'antic servidor/node" -#: ../../Zotlabs/Module/Import.php:519 +#: ../../Zotlabs/Module/Import.php:551 msgid "Your old identity address (xyz@example.com)" msgstr "La teva adreça de canal antiga. El format és canal@exemple.org" -#: ../../Zotlabs/Module/Import.php:520 +#: ../../Zotlabs/Module/Import.php:552 msgid "Your old login email address" msgstr "La teva adreça de correu electrònic antiga" -#: ../../Zotlabs/Module/Import.php:521 +#: ../../Zotlabs/Module/Import.php:553 msgid "Your old login password" msgstr "La teva contrasenya antiga" -#: ../../Zotlabs/Module/Import.php:522 +#: ../../Zotlabs/Module/Import.php:554 +msgid "Import a few months of posts if possible (limited by available memory" +msgstr "Importa, si es possible, missatges de fa uns quants mesos (limitat per la memòria disponible) " + +#: ../../Zotlabs/Module/Import.php:556 msgid "" "For either option, please choose whether to make this hub your new primary " "address, or whether your old location should continue this role. You will be" @@ -4411,19 +4510,26 @@ msgid "" "primary location for files, photos, and media." msgstr "Per a qualsevol de les opcions, escull si vols fer primària l'adreça d'aquest node o mantenir l'anterior com a primària. Podràs penjar entrades des de totes dues adreces, però per als fitxers, imatges i altres en cal una de primària." -#: ../../Zotlabs/Module/Import.php:523 +#: ../../Zotlabs/Module/Import.php:558 msgid "Make this hub my primary location" msgstr "Fes d'aquest node la meva ubicació primària" -#: ../../Zotlabs/Module/Import.php:524 +#: ../../Zotlabs/Module/Import.php:559 msgid "Move this channel (disable all previous locations)" msgstr "Moure aquest canal (desactiva totes les prèvies localitzacions)" -#: ../../Zotlabs/Module/Import.php:525 -msgid "Import a few months of posts if possible (limited by available memory" -msgstr "Importa, si es possible, missatges de fa uns quants mesos (limitat per la memòria disponible) " +#: ../../Zotlabs/Module/Import.php:560 +msgid "Use this channel nickname instead of the one provided" +msgstr "Fes servir aquest nom de canal en comptes del que has facilitat" + +#: ../../Zotlabs/Module/Import.php:560 +msgid "" +"Leave blank to keep your existing channel nickname. You will be randomly " +"assigned a similar nickname if either name is already allocated on this " +"site." +msgstr "Deixa-ho en blanc per a mantenir el teu nom de canal actual. Se t'assignarà un nom aleatori però similar a l'actual en cas que el nom actual ja estigui agafat en aquest node." -#: ../../Zotlabs/Module/Import.php:526 +#: ../../Zotlabs/Module/Import.php:562 msgid "" "This process may take several minutes to complete. Please submit the form " "only once and leave this page open until finished." @@ -4433,16 +4539,16 @@ msgstr "Aquest procès pot trigar minuts en completar. Si et plau envia el formu msgid "Authentication failed." msgstr "Ha fallat l'autentificació." -#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1590 -#: ../../include/channel.php:2318 +#: ../../Zotlabs/Module/Rmagic.php:75 ../../boot.php:1614 +#: ../../include/channel.php:2334 msgid "Remote Authentication" msgstr "Autentificació Remota" -#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2319 +#: ../../Zotlabs/Module/Rmagic.php:76 ../../include/channel.php:2335 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Introdueix la teva adreça del canal (eg canal@exemple.com)" -#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2320 +#: ../../Zotlabs/Module/Rmagic.php:77 ../../include/channel.php:2336 msgid "Authenticate" msgstr "Autentica't" @@ -4450,7 +4556,7 @@ msgstr "Autentica't" msgid "Permissions denied." msgstr "Permís denegat." -#: ../../Zotlabs/Module/Cal.php:344 ../../include/text.php:2446 +#: ../../Zotlabs/Module/Cal.php:344 ../../include/text.php:2482 msgid "Import" msgstr "Importar" @@ -4484,15 +4590,15 @@ msgstr "Editar Bloc" msgid "vcard" msgstr "vcard (targeta estàndard de contacte)" -#: ../../Zotlabs/Module/Apps.php:48 ../../Zotlabs/Lib/Apps.php:228 +#: ../../Zotlabs/Module/Apps.php:50 ../../Zotlabs/Lib/Apps.php:291 msgid "Apps" msgstr "Aplicatius" -#: ../../Zotlabs/Module/Apps.php:51 +#: ../../Zotlabs/Module/Apps.php:53 msgid "Manage apps" msgstr "Gestiona apps" -#: ../../Zotlabs/Module/Apps.php:52 +#: ../../Zotlabs/Module/Apps.php:54 msgid "Create new app" msgstr "Crear una nova app" @@ -4502,7 +4608,7 @@ msgctxt "mood" msgid "%1$s is %2$s" msgstr "%1$s es %2$s" -#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:253 +#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:315 msgid "Mood" msgstr "Ànim" @@ -4540,9 +4646,9 @@ msgid "Archived/Unreachable" msgstr "Arxivades o inaccessibles" #: ../../Zotlabs/Module/Connections.php:80 -#: ../../Zotlabs/Module/Connections.php:89 ../../Zotlabs/Module/Menu.php:116 -#: ../../Zotlabs/Module/Notifications.php:52 -#: ../../include/conversation.php:1717 +#: ../../Zotlabs/Module/Connections.php:89 ../../Zotlabs/Module/Menu.php:179 +#: ../../Zotlabs/Module/Notifications.php:50 +#: ../../include/conversation.php:1726 msgid "New" msgstr "Nou" @@ -4651,8 +4757,8 @@ msgstr "Ignora" msgid "Recent activity" msgstr "Activitat recent" -#: ../../Zotlabs/Module/Connections.php:331 ../../Zotlabs/Lib/Apps.php:235 -#: ../../include/text.php:973 +#: ../../Zotlabs/Module/Connections.php:331 ../../Zotlabs/Lib/Apps.php:298 +#: ../../include/text.php:975 msgid "Connections" msgstr "Connexions" @@ -4674,21 +4780,17 @@ msgstr "Troba" msgid "item" msgstr "element" -#: ../../Zotlabs/Module/Viewsrc.php:55 -msgid "Source of Item" -msgstr "Origen de l'article" - #: ../../Zotlabs/Module/Bookmarks.php:56 msgid "Bookmark added" -msgstr "Favorit afegit" +msgstr "S'ha afegit el marcador" #: ../../Zotlabs/Module/Bookmarks.php:79 msgid "My Bookmarks" -msgstr "Els Meus Favorits" +msgstr "Els meus marcadors" #: ../../Zotlabs/Module/Bookmarks.php:90 msgid "My Connections Bookmarks" -msgstr "Les connexions dels meus Favorits" +msgstr "Els marcadors de les meves connexions" #: ../../Zotlabs/Module/Removeaccount.php:35 msgid "" @@ -4722,7 +4824,7 @@ msgstr "Per defecte, només les instancies dels canal ubicats en aquest node pod msgid "Page owner information could not be retrieved." msgstr "La informació del propietari de la pàgina no va poder ser recuperada" -#: ../../Zotlabs/Module/Photos.php:94 ../../Zotlabs/Module/Photos.php:120 +#: ../../Zotlabs/Module/Photos.php:94 ../../Zotlabs/Module/Photos.php:113 msgid "Album not found." msgstr "Àlbum no trobat" @@ -4730,190 +4832,190 @@ msgstr "Àlbum no trobat" msgid "Delete Album" msgstr "Esborra Àlbum" -#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1083 +#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1088 msgid "Delete Photo" msgstr "Esborra Foto" -#: ../../Zotlabs/Module/Photos.php:551 +#: ../../Zotlabs/Module/Photos.php:556 msgid "No photos selected" msgstr "No has seleccionat fotos" -#: ../../Zotlabs/Module/Photos.php:600 +#: ../../Zotlabs/Module/Photos.php:605 msgid "Access to this item is restricted." msgstr "L'accés a aquest element esta restringit." -#: ../../Zotlabs/Module/Photos.php:646 +#: ../../Zotlabs/Module/Photos.php:651 #, php-format msgid "%1$.2f MB of %2$.2f MB photo storage used." msgstr "S'estan fent servir %1$.2f MB de %2$.2f MB de l'espai per a imatges." -#: ../../Zotlabs/Module/Photos.php:649 +#: ../../Zotlabs/Module/Photos.php:654 #, php-format msgid "%1$.2f MB photo storage used." msgstr "S'estan fent servir %1$.2f MB de l'espai per a imatges." -#: ../../Zotlabs/Module/Photos.php:691 +#: ../../Zotlabs/Module/Photos.php:696 msgid "Upload Photos" msgstr "Puja imatges" -#: ../../Zotlabs/Module/Photos.php:695 +#: ../../Zotlabs/Module/Photos.php:700 msgid "Enter an album name" msgstr "Escriu el nom del àlbum" -#: ../../Zotlabs/Module/Photos.php:696 +#: ../../Zotlabs/Module/Photos.php:701 msgid "or select an existing album (doubleclick)" msgstr "o bé fes doble clic a un d'existent" -#: ../../Zotlabs/Module/Photos.php:697 +#: ../../Zotlabs/Module/Photos.php:702 msgid "Create a status post for this upload" msgstr "Genera una entrada a partir de la pujada" -#: ../../Zotlabs/Module/Photos.php:699 +#: ../../Zotlabs/Module/Photos.php:704 msgid "Description (optional)" msgstr "Descripció (opcional)" -#: ../../Zotlabs/Module/Photos.php:785 +#: ../../Zotlabs/Module/Photos.php:790 msgid "Show Newest First" msgstr "Ordena de més nou a més antic" -#: ../../Zotlabs/Module/Photos.php:787 +#: ../../Zotlabs/Module/Photos.php:792 msgid "Show Oldest First" msgstr "Ordena de més antic a més nou" -#: ../../Zotlabs/Module/Photos.php:844 ../../Zotlabs/Module/Photos.php:1381 +#: ../../Zotlabs/Module/Photos.php:849 ../../Zotlabs/Module/Photos.php:1386 msgid "Add Photos" msgstr "Afegeix fotos" -#: ../../Zotlabs/Module/Photos.php:892 +#: ../../Zotlabs/Module/Photos.php:897 msgid "Permission denied. Access to this item may be restricted." msgstr "S'ha denegat el permís. Pot ser que l'accés estigui restringit." -#: ../../Zotlabs/Module/Photos.php:894 +#: ../../Zotlabs/Module/Photos.php:899 msgid "Photo not available" msgstr "La imatge no està disponible" -#: ../../Zotlabs/Module/Photos.php:952 +#: ../../Zotlabs/Module/Photos.php:957 msgid "Use as profile photo" msgstr "Fes-la imatge de perfil" -#: ../../Zotlabs/Module/Photos.php:953 +#: ../../Zotlabs/Module/Photos.php:958 msgid "Use as cover photo" msgstr "Emprar com a foto de portada" -#: ../../Zotlabs/Module/Photos.php:960 +#: ../../Zotlabs/Module/Photos.php:965 msgid "Private Photo" msgstr "Imatge privada" -#: ../../Zotlabs/Module/Photos.php:975 +#: ../../Zotlabs/Module/Photos.php:980 msgid "View Full Size" msgstr "Mostra a mida completa" -#: ../../Zotlabs/Module/Photos.php:1057 +#: ../../Zotlabs/Module/Photos.php:1062 msgid "Edit photo" msgstr "Modifica la imatge" -#: ../../Zotlabs/Module/Photos.php:1059 +#: ../../Zotlabs/Module/Photos.php:1064 msgid "Rotate CW (right)" msgstr "Tomba cap a la dreta" -#: ../../Zotlabs/Module/Photos.php:1060 +#: ../../Zotlabs/Module/Photos.php:1065 msgid "Rotate CCW (left)" msgstr "Tomba cap a l'esquerra" -#: ../../Zotlabs/Module/Photos.php:1063 +#: ../../Zotlabs/Module/Photos.php:1068 msgid "Move photo to album" msgstr "Mou la foto a un àlbum" -#: ../../Zotlabs/Module/Photos.php:1064 +#: ../../Zotlabs/Module/Photos.php:1069 msgid "Enter a new album name" msgstr "Escriu el nom del nou àlbum" -#: ../../Zotlabs/Module/Photos.php:1065 +#: ../../Zotlabs/Module/Photos.php:1070 msgid "or select an existing one (doubleclick)" msgstr "o bé fes doble clic a un d'existent" -#: ../../Zotlabs/Module/Photos.php:1070 +#: ../../Zotlabs/Module/Photos.php:1075 msgid "Add a Tag" msgstr "Afegeix una etiqueta" -#: ../../Zotlabs/Module/Photos.php:1078 +#: ../../Zotlabs/Module/Photos.php:1083 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" msgstr "Exemple: @joan, @Paula_Peris, @mar@exemple.org" -#: ../../Zotlabs/Module/Photos.php:1081 +#: ../../Zotlabs/Module/Photos.php:1086 msgid "Flag as adult in album view" msgstr "Marca com a contingut adult" -#: ../../Zotlabs/Module/Photos.php:1100 ../../Zotlabs/Lib/ThreadItem.php:281 +#: ../../Zotlabs/Module/Photos.php:1105 ../../Zotlabs/Lib/ThreadItem.php:285 msgid "I like this (toggle)" msgstr "M'agrada això (canvia)" -#: ../../Zotlabs/Module/Photos.php:1101 ../../Zotlabs/Lib/ThreadItem.php:282 +#: ../../Zotlabs/Module/Photos.php:1106 ../../Zotlabs/Lib/ThreadItem.php:286 msgid "I don't like this (toggle)" msgstr "No m'agrada això (canvia)" -#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Lib/ThreadItem.php:427 -#: ../../include/conversation.php:785 +#: ../../Zotlabs/Module/Photos.php:1108 ../../Zotlabs/Lib/ThreadItem.php:432 +#: ../../include/conversation.php:787 msgid "Please wait" msgstr "Si us plau, espera" -#: ../../Zotlabs/Module/Photos.php:1119 ../../Zotlabs/Module/Photos.php:1237 -#: ../../Zotlabs/Lib/ThreadItem.php:749 +#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1242 +#: ../../Zotlabs/Lib/ThreadItem.php:754 msgid "This is you" msgstr "Ets tú" -#: ../../Zotlabs/Module/Photos.php:1121 ../../Zotlabs/Module/Photos.php:1239 -#: ../../Zotlabs/Lib/ThreadItem.php:751 ../../include/js_strings.php:6 +#: ../../Zotlabs/Module/Photos.php:1126 ../../Zotlabs/Module/Photos.php:1244 +#: ../../Zotlabs/Lib/ThreadItem.php:756 ../../include/js_strings.php:6 msgid "Comment" msgstr "Comentari" -#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 +#: ../../Zotlabs/Module/Photos.php:1142 ../../include/conversation.php:619 msgctxt "title" msgid "Likes" msgstr "Agrada" -#: ../../Zotlabs/Module/Photos.php:1137 ../../include/conversation.php:618 +#: ../../Zotlabs/Module/Photos.php:1142 ../../include/conversation.php:619 msgctxt "title" msgid "Dislikes" msgstr "Desagrada" -#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 +#: ../../Zotlabs/Module/Photos.php:1143 ../../include/conversation.php:620 msgctxt "title" msgid "Agree" msgstr "Acord" -#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 +#: ../../Zotlabs/Module/Photos.php:1143 ../../include/conversation.php:620 msgctxt "title" msgid "Disagree" msgstr "Desacord" -#: ../../Zotlabs/Module/Photos.php:1138 ../../include/conversation.php:619 +#: ../../Zotlabs/Module/Photos.php:1143 ../../include/conversation.php:620 msgctxt "title" msgid "Abstain" msgstr "Abstenirse" -#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 +#: ../../Zotlabs/Module/Photos.php:1144 ../../include/conversation.php:621 msgctxt "title" msgid "Attending" msgstr "Assistint" -#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 +#: ../../Zotlabs/Module/Photos.php:1144 ../../include/conversation.php:621 msgctxt "title" msgid "Not attending" msgstr "Desassistint" -#: ../../Zotlabs/Module/Photos.php:1139 ../../include/conversation.php:620 +#: ../../Zotlabs/Module/Photos.php:1144 ../../include/conversation.php:621 msgctxt "title" msgid "Might attend" msgstr "Podrien assistir" -#: ../../Zotlabs/Module/Photos.php:1156 ../../Zotlabs/Module/Photos.php:1168 -#: ../../Zotlabs/Lib/ThreadItem.php:201 ../../Zotlabs/Lib/ThreadItem.php:213 +#: ../../Zotlabs/Module/Photos.php:1161 ../../Zotlabs/Module/Photos.php:1173 +#: ../../Zotlabs/Lib/ThreadItem.php:212 ../../Zotlabs/Lib/ThreadItem.php:224 msgid "View all" msgstr "Veure tot" -#: ../../Zotlabs/Module/Photos.php:1160 ../../Zotlabs/Lib/ThreadItem.php:205 -#: ../../include/conversation.php:1981 ../../include/channel.php:1539 +#: ../../Zotlabs/Module/Photos.php:1165 ../../Zotlabs/Lib/ThreadItem.php:216 +#: ../../include/conversation.php:1990 ../../include/channel.php:1539 #: ../../include/taxonomy.php:661 msgctxt "noun" msgid "Like" @@ -4921,56 +5023,58 @@ msgid_plural "Likes" msgstr[0] "Agrada" msgstr[1] "Agraden" -#: ../../Zotlabs/Module/Photos.php:1165 ../../Zotlabs/Lib/ThreadItem.php:210 -#: ../../include/conversation.php:1984 +#: ../../Zotlabs/Module/Photos.php:1170 ../../Zotlabs/Lib/ThreadItem.php:221 +#: ../../include/conversation.php:1993 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "Desagrada" msgstr[1] "Desagrada" -#: ../../Zotlabs/Module/Photos.php:1265 +#: ../../Zotlabs/Module/Photos.php:1270 msgid "Photo Tools" msgstr "Eines per Fotos" -#: ../../Zotlabs/Module/Photos.php:1274 +#: ../../Zotlabs/Module/Photos.php:1279 msgid "In This Photo:" msgstr "Hi apareixen:" -#: ../../Zotlabs/Module/Photos.php:1279 +#: ../../Zotlabs/Module/Photos.php:1284 msgid "Map" msgstr "Mapa" -#: ../../Zotlabs/Module/Photos.php:1287 ../../Zotlabs/Lib/ThreadItem.php:415 +#: ../../Zotlabs/Module/Photos.php:1292 ../../Zotlabs/Lib/ThreadItem.php:420 msgctxt "noun" msgid "Likes" msgstr "Agrada" -#: ../../Zotlabs/Module/Photos.php:1288 ../../Zotlabs/Lib/ThreadItem.php:416 +#: ../../Zotlabs/Module/Photos.php:1293 ../../Zotlabs/Lib/ThreadItem.php:421 msgctxt "noun" msgid "Dislikes" msgstr "Desagrada" -#: ../../Zotlabs/Module/Photos.php:1293 ../../Zotlabs/Lib/ThreadItem.php:421 +#: ../../Zotlabs/Module/Photos.php:1298 ../../Zotlabs/Lib/ThreadItem.php:426 #: ../../include/acl_selectors.php:125 msgid "Close" msgstr "Tanca" -#: ../../Zotlabs/Module/Photos.php:1365 ../../Zotlabs/Module/Photos.php:1378 -#: ../../Zotlabs/Module/Photos.php:1379 ../../include/photos.php:667 +#: ../../Zotlabs/Module/Photos.php:1370 ../../Zotlabs/Module/Photos.php:1383 +#: ../../Zotlabs/Module/Photos.php:1384 ../../include/photos.php:668 msgid "Recent Photos" msgstr "Imatges recents" -#: ../../Zotlabs/Module/Wiki.php:30 ../../addon/cart/cart.php:1135 +#: ../../Zotlabs/Module/Wiki.php:30 ../../addon/cart/cart.php:1293 msgid "Profile Unavailable." msgstr "El perfil no està disponible." -#: ../../Zotlabs/Module/Wiki.php:44 ../../Zotlabs/Module/Cloud.php:114 +#: ../../Zotlabs/Module/Wiki.php:44 ../../Zotlabs/Module/Cloud.php:123 msgid "Not found" msgstr "No s'ha trobat" -#: ../../Zotlabs/Module/Wiki.php:68 ../../addon/cart/myshop.php:114 -#: ../../addon/cart/cart.php:1204 ../../addon/cart/manual_payments.php:58 +#: ../../Zotlabs/Module/Wiki.php:68 ../../addon/cart/myshop.php:51 +#: ../../addon/cart/cart.php:1420 +#: ../../addon/cart/submodules/paypalbutton.php:481 +#: ../../addon/cart/manual_payments.php:62 msgid "Invalid channel" msgstr "El canal és invàlid" @@ -4986,8 +5090,8 @@ msgstr "S'ha produït un error en crear la carpeta per al fitxer comprimit d'exp msgid "Error downloading wiki: " msgstr "S'ha produït un error en descarregar la wiki:" -#: ../../Zotlabs/Module/Wiki.php:197 ../../include/conversation.php:1928 -#: ../../include/nav.php:494 +#: ../../Zotlabs/Module/Wiki.php:197 ../../include/conversation.php:1937 +#: ../../include/nav.php:486 msgid "Wikis" msgstr "Wikis" @@ -5011,22 +5115,22 @@ msgstr "Llenguatge de formatació" #: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:350 #: ../../Zotlabs/Widget/Wiki_pages.php:36 #: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../addon/mdpost/mdpost.php:40 -#: ../../include/text.php:1869 +#: ../../include/text.php:1886 msgid "Markdown" msgstr "Markdown" #: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Module/Wiki.php:350 #: ../../Zotlabs/Widget/Wiki_pages.php:36 -#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1867 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1884 msgid "BBcode" msgstr "BBCode" #: ../../Zotlabs/Module/Wiki.php:208 ../../Zotlabs/Widget/Wiki_pages.php:36 -#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1870 +#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../include/text.php:1887 msgid "Text" msgstr "Cap (text pla)" -#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:284 +#: ../../Zotlabs/Module/Wiki.php:210 ../../Zotlabs/Storage/Browser.php:286 msgid "Type" msgstr "Tipus" @@ -5082,59 +5186,59 @@ msgstr "Font" msgid "New page name" msgstr "Nou nom de pàgina" -#: ../../Zotlabs/Module/Wiki.php:377 ../../include/conversation.php:1282 +#: ../../Zotlabs/Module/Wiki.php:377 msgid "Embed image from photo albums" msgstr "Embeu una imatge dels àlbums de fotos" -#: ../../Zotlabs/Module/Wiki.php:378 ../../include/conversation.php:1388 +#: ../../Zotlabs/Module/Wiki.php:378 ../../include/conversation.php:1396 msgid "Embed an image from your albums" msgstr "Embeu una imatge dels teus àlbums" #: ../../Zotlabs/Module/Wiki.php:380 -#: ../../Zotlabs/Module/Profile_photo.php:465 -#: ../../Zotlabs/Module/Cover_photo.php:367 -#: ../../include/conversation.php:1390 ../../include/conversation.php:1437 +#: ../../Zotlabs/Module/Profile_photo.php:466 +#: ../../Zotlabs/Module/Cover_photo.php:400 +#: ../../include/conversation.php:1398 ../../include/conversation.php:1445 msgid "OK" msgstr "OK" #: ../../Zotlabs/Module/Wiki.php:381 -#: ../../Zotlabs/Module/Profile_photo.php:466 -#: ../../Zotlabs/Module/Cover_photo.php:368 -#: ../../include/conversation.php:1320 +#: ../../Zotlabs/Module/Profile_photo.php:467 +#: ../../Zotlabs/Module/Cover_photo.php:401 +#: ../../include/conversation.php:1327 msgid "Choose images to embed" msgstr "Tria una imatge per a embeure-la" #: ../../Zotlabs/Module/Wiki.php:382 -#: ../../Zotlabs/Module/Profile_photo.php:467 -#: ../../Zotlabs/Module/Cover_photo.php:369 -#: ../../include/conversation.php:1321 +#: ../../Zotlabs/Module/Profile_photo.php:468 +#: ../../Zotlabs/Module/Cover_photo.php:402 +#: ../../include/conversation.php:1328 msgid "Choose an album" msgstr "Tria un àlbum" #: ../../Zotlabs/Module/Wiki.php:383 -#: ../../Zotlabs/Module/Profile_photo.php:468 -#: ../../Zotlabs/Module/Cover_photo.php:370 +#: ../../Zotlabs/Module/Profile_photo.php:469 +#: ../../Zotlabs/Module/Cover_photo.php:403 msgid "Choose a different album" msgstr "Escull un àlbum diferent" #: ../../Zotlabs/Module/Wiki.php:384 -#: ../../Zotlabs/Module/Profile_photo.php:469 -#: ../../Zotlabs/Module/Cover_photo.php:371 -#: ../../include/conversation.php:1323 +#: ../../Zotlabs/Module/Profile_photo.php:470 +#: ../../Zotlabs/Module/Cover_photo.php:404 +#: ../../include/conversation.php:1330 msgid "Error getting album list" msgstr "Ha ocorregut un error quan treia la llista de àlbums" #: ../../Zotlabs/Module/Wiki.php:385 -#: ../../Zotlabs/Module/Profile_photo.php:470 -#: ../../Zotlabs/Module/Cover_photo.php:372 -#: ../../include/conversation.php:1324 +#: ../../Zotlabs/Module/Profile_photo.php:471 +#: ../../Zotlabs/Module/Cover_photo.php:405 +#: ../../include/conversation.php:1331 msgid "Error getting photo link" msgstr "Ha ocorregut un error quan treia l'enllaç a la foto" #: ../../Zotlabs/Module/Wiki.php:386 -#: ../../Zotlabs/Module/Profile_photo.php:471 -#: ../../Zotlabs/Module/Cover_photo.php:373 -#: ../../include/conversation.php:1325 +#: ../../Zotlabs/Module/Profile_photo.php:472 +#: ../../Zotlabs/Module/Cover_photo.php:406 +#: ../../include/conversation.php:1332 msgid "Error getting album" msgstr "Ha ocorregut un error treient l'àlbum" @@ -5234,8 +5338,8 @@ msgstr "Modifica un altre disseny" msgid "System layout" msgstr "Disseny del sistema" -#: ../../Zotlabs/Module/Poke.php:182 ../../Zotlabs/Lib/Apps.php:254 -#: ../../include/conversation.php:1092 +#: ../../Zotlabs/Module/Poke.php:182 ../../Zotlabs/Lib/Apps.php:316 +#: ../../include/conversation.php:1097 msgid "Poke" msgstr "Esperonar" @@ -5264,7 +5368,7 @@ msgid "Make this post private" msgstr "Fer aquesta entrada privada" #: ../../Zotlabs/Module/Profile_photo.php:66 -#: ../../Zotlabs/Module/Cover_photo.php:56 +#: ../../Zotlabs/Module/Cover_photo.php:57 msgid "Image uploaded but image cropping failed." msgstr "S'ha pujat la imatge però no s'ha pogut retallar." @@ -5275,7 +5379,7 @@ msgid "Profile Photos" msgstr "Fotos del Perfil" #: ../../Zotlabs/Module/Profile_photo.php:142 -#: ../../Zotlabs/Module/Cover_photo.php:159 +#: ../../Zotlabs/Module/Cover_photo.php:191 msgid "Image resize failed." msgstr "No s'ha pogut escalar la imatge." @@ -5287,73 +5391,85 @@ msgid "" msgstr "Refresca la memòria cau del navegador si la foto no s'actualitza immediatament. Dreceres: «Ctrl+F5» i «Ctrl+Maj+R»" #: ../../Zotlabs/Module/Profile_photo.php:225 -#: ../../Zotlabs/Module/Cover_photo.php:173 ../../include/photos.php:195 +#: ../../Zotlabs/Module/Cover_photo.php:205 ../../include/photos.php:196 msgid "Unable to process image" msgstr "incapaç de processar la imatge" #: ../../Zotlabs/Module/Profile_photo.php:260 -#: ../../Zotlabs/Module/Cover_photo.php:197 +#: ../../Zotlabs/Module/Cover_photo.php:229 msgid "Image upload failed." msgstr "La pujada de la imatge va fracassar." #: ../../Zotlabs/Module/Profile_photo.php:279 -#: ../../Zotlabs/Module/Cover_photo.php:214 +#: ../../Zotlabs/Module/Cover_photo.php:246 msgid "Unable to process image." msgstr "Incapaç de processar l'imatge." #: ../../Zotlabs/Module/Profile_photo.php:343 #: ../../Zotlabs/Module/Profile_photo.php:390 -#: ../../Zotlabs/Module/Cover_photo.php:307 -#: ../../Zotlabs/Module/Cover_photo.php:322 +#: ../../Zotlabs/Module/Cover_photo.php:339 +#: ../../Zotlabs/Module/Cover_photo.php:354 msgid "Photo not available." msgstr "Foto no disponible." -#: ../../Zotlabs/Module/Profile_photo.php:455 -#: ../../Zotlabs/Module/Cover_photo.php:359 +#: ../../Zotlabs/Module/Profile_photo.php:454 +msgid "" +"Your default profile photo is visible to anybody on the internet. Profile " +"photos for alternate profiles will inherit the permissions of the profile" +msgstr "La teva foto de perfil predeterminada és pública i visible per a tothom. Les fotos de perfil dels perfils alternatius hereten els permisos del seu perfil." + +#: ../../Zotlabs/Module/Profile_photo.php:454 +msgid "" +"Your profile photo is visible to anybody on the internet and may be " +"distributed to other websites." +msgstr "La teva foto de perfil és pública i visible a tothom, i és probable que s'escampi per altres webs." + +#: ../../Zotlabs/Module/Profile_photo.php:456 +#: ../../Zotlabs/Module/Cover_photo.php:392 msgid "Upload File:" msgstr "Puja Arxiu:" -#: ../../Zotlabs/Module/Profile_photo.php:456 -#: ../../Zotlabs/Module/Cover_photo.php:360 +#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Cover_photo.php:393 msgid "Select a profile:" msgstr "Tria un perfil:" -#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Profile_photo.php:458 msgid "Use Photo for Profile" msgstr "Fes servir la foto per al perfil" -#: ../../Zotlabs/Module/Profile_photo.php:457 +#: ../../Zotlabs/Module/Profile_photo.php:458 msgid "Change Profile Photo" msgstr "Canvia la imatge de perfil" -#: ../../Zotlabs/Module/Profile_photo.php:458 +#: ../../Zotlabs/Module/Profile_photo.php:459 msgid "Use" msgstr "Aplica" -#: ../../Zotlabs/Module/Profile_photo.php:462 #: ../../Zotlabs/Module/Profile_photo.php:463 -#: ../../Zotlabs/Module/Cover_photo.php:364 -#: ../../Zotlabs/Module/Cover_photo.php:365 +#: ../../Zotlabs/Module/Profile_photo.php:464 +#: ../../Zotlabs/Module/Cover_photo.php:397 +#: ../../Zotlabs/Module/Cover_photo.php:398 msgid "Use a photo from your albums" msgstr "Agafa una foto dels àlbums" -#: ../../Zotlabs/Module/Profile_photo.php:473 -#: ../../Zotlabs/Module/Cover_photo.php:376 +#: ../../Zotlabs/Module/Profile_photo.php:474 +#: ../../Zotlabs/Module/Cover_photo.php:409 msgid "Select existing photo" msgstr "Tria una foto existent" -#: ../../Zotlabs/Module/Profile_photo.php:492 -#: ../../Zotlabs/Module/Cover_photo.php:393 +#: ../../Zotlabs/Module/Profile_photo.php:493 +#: ../../Zotlabs/Module/Cover_photo.php:426 msgid "Crop Image" msgstr "Retalla Imatge" -#: ../../Zotlabs/Module/Profile_photo.php:493 -#: ../../Zotlabs/Module/Cover_photo.php:394 +#: ../../Zotlabs/Module/Profile_photo.php:494 +#: ../../Zotlabs/Module/Cover_photo.php:427 msgid "Please adjust the image cropping for optimum viewing." msgstr "Si us plau, retalla la imatge per a una optima visualització" -#: ../../Zotlabs/Module/Profile_photo.php:495 -#: ../../Zotlabs/Module/Cover_photo.php:396 +#: ../../Zotlabs/Module/Profile_photo.php:496 +#: ../../Zotlabs/Module/Cover_photo.php:429 msgid "Done Editing" msgstr "Edició Feta" @@ -5373,60 +5489,68 @@ msgstr "No s'ha pogut trobar l'entrada original." msgid "Empty post discarded." msgstr "S'ha descartat l'entrada perquè no té contingut." -#: ../../Zotlabs/Module/Item.php:874 +#: ../../Zotlabs/Module/Item.php:864 msgid "Duplicate post suppressed." msgstr "Publicació duplicada s'ha suprimit." -#: ../../Zotlabs/Module/Item.php:1019 +#: ../../Zotlabs/Module/Item.php:1009 msgid "System error. Post not saved." msgstr "Hi ha hagut un error del sistema. L'entrada no s'ha desat." -#: ../../Zotlabs/Module/Item.php:1055 +#: ../../Zotlabs/Module/Item.php:1045 msgid "Your comment is awaiting approval." msgstr "El teu comentari encara no ha estat aprovat." -#: ../../Zotlabs/Module/Item.php:1160 +#: ../../Zotlabs/Module/Item.php:1162 msgid "Unable to obtain post information from database." msgstr "No s'ha pogut obtenir informació de l'entrada a la base de dades." -#: ../../Zotlabs/Module/Item.php:1189 +#: ../../Zotlabs/Module/Item.php:1191 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "Has assolit el teu límit de %1$.0f entrades (descomptant comentaris)." -#: ../../Zotlabs/Module/Item.php:1196 +#: ../../Zotlabs/Module/Item.php:1198 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Has assolit el teu limit de %1$.0f pàgines web." -#: ../../Zotlabs/Module/Ping.php:330 +#: ../../Zotlabs/Module/Ping.php:332 msgid "sent you a private message" msgstr "Se t'ha enviat un missatge privat" -#: ../../Zotlabs/Module/Ping.php:383 +#: ../../Zotlabs/Module/Ping.php:385 msgid "added your channel" msgstr "el teu canal s'ha afegit" -#: ../../Zotlabs/Module/Ping.php:407 +#: ../../Zotlabs/Module/Ping.php:409 msgid "requires approval" msgstr "requereix aprovació" -#: ../../Zotlabs/Module/Ping.php:417 +#: ../../Zotlabs/Module/Ping.php:419 msgid "g A l F d" msgstr "g A l F d" -#: ../../Zotlabs/Module/Ping.php:435 +#: ../../Zotlabs/Module/Ping.php:437 msgid "[today]" msgstr "[avui]" -#: ../../Zotlabs/Module/Ping.php:444 +#: ../../Zotlabs/Module/Ping.php:446 msgid "posted an event" msgstr "enviat un esdeveniment" -#: ../../Zotlabs/Module/Ping.php:477 +#: ../../Zotlabs/Module/Ping.php:479 msgid "shared a file with you" msgstr "ha compartit un fitxer amb tu" +#: ../../Zotlabs/Module/Ping.php:654 +msgid "Private forum" +msgstr "Fòrum privat" + +#: ../../Zotlabs/Module/Ping.php:654 +msgid "Public forum" +msgstr "Fòrum públic" + #: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29 msgid "Invalid item." msgstr "Article invàlid." @@ -5487,11 +5611,11 @@ msgstr "No es poden ajustar els paràmetres dels contactes." msgid "Connection has been removed." msgstr "S'han eliminat les conexions." -#: ../../Zotlabs/Module/Connedit.php:594 ../../Zotlabs/Lib/Apps.php:247 +#: ../../Zotlabs/Module/Connedit.php:594 ../../Zotlabs/Lib/Apps.php:309 #: ../../addon/openclipatar/openclipatar.php:57 -#: ../../include/conversation.php:1032 ../../include/nav.php:114 +#: ../../include/conversation.php:1037 ../../include/nav.php:108 msgid "View Profile" -msgstr "Veure Perfil" +msgstr "Mostra el meu perfil" #: ../../Zotlabs/Module/Connedit.php:597 #, php-format @@ -5514,7 +5638,7 @@ msgstr "Recarrega la foto" msgid "Fetch updated photo" msgstr "Demana la nova foto al servidor" -#: ../../Zotlabs/Module/Connedit.php:615 ../../include/conversation.php:1042 +#: ../../Zotlabs/Module/Connedit.php:615 ../../include/conversation.php:1047 msgid "Recent Activity" msgstr "Activitat Recent" @@ -5597,7 +5721,7 @@ msgstr "Afinitat" #: ../../Zotlabs/Module/Connedit.php:705 msgid "Open Set Affinity section by default" -msgstr "Obrir, per defecte, la secció d'Ajustos d'Afinitat" +msgstr "Obre per defecte la barra d'afinitat" #: ../../Zotlabs/Module/Connedit.php:709 ../../Zotlabs/Widget/Affinity.php:22 msgid "Me" @@ -5662,7 +5786,7 @@ msgstr "Aquesta connexió no és accessible des d'aquest hub. La seva xarxa no msgid "Connection Default Permissions" msgstr "Permisos per Defecte de la Connexió" -#: ../../Zotlabs/Module/Connedit.php:850 ../../include/items.php:4214 +#: ../../Zotlabs/Module/Connedit.php:850 ../../include/items.php:4158 #, php-format msgid "Connection: %s" msgstr "Connexió: %s" @@ -5679,11 +5803,6 @@ msgstr "Les peticions de connexió seran aprovades sense la teva interacció" msgid "Permission role" msgstr "Permisos de rol" -#: ../../Zotlabs/Module/Connedit.php:852 ../../Zotlabs/Module/Defperms.php:240 -#: ../../Zotlabs/Widget/Notifications.php:151 ../../include/nav.php:284 -msgid "Loading" -msgstr "S'està carregant" - #: ../../Zotlabs/Module/Connedit.php:853 ../../Zotlabs/Module/Defperms.php:241 msgid "Add permission role" msgstr "Afegir permisos de rol" @@ -5731,12 +5850,6 @@ msgstr "Filtre a mida" msgid "Only import posts with this text" msgstr "Importa exclusivament entrades amb aquest text" -#: ../../Zotlabs/Module/Connedit.php:875 ../../Zotlabs/Module/Connedit.php:876 -msgid "" -"words one per line or #tags or /patterns/ or lang=xx, leave blank to import " -"all posts" -msgstr "paraules una per línia o #etiquetes o /patrons/ o idioma=xx, deixar en blanc per importar totes les entrades" - #: ../../Zotlabs/Module/Connedit.php:876 msgid "Do not import posts with this text" msgstr "No importar entrades amb aquest text" @@ -5762,7 +5875,7 @@ msgid "" "href=\"settings\">privacy settings, which have higher " "priority than individual settings. You can change those settings here but " "they wont have any impact unless the inherited setting changes." -msgstr "Alguns permisos poden ser heretats dels teus canals ajustos de privacitat, Els quals tenen més prioritat que els ajustos individuals. Pots canviar aquests ajustos aquí pero no tindran cap impacte fins que no canviis els ajustos heretats." +msgstr "Alguns permisos pot ser que vinguin heretats de la configuració de privacitat. del teu canal. Aquesta té més prioritat que les configuracions individuals. Pots canviar aquí aquests permisos però no tindran cap impacte mentre no canviï la configuració del teu canal." #: ../../Zotlabs/Module/Connedit.php:896 msgid "Last update:" @@ -5794,16 +5907,16 @@ msgstr "Estic connectat/da" #: ../../Zotlabs/Module/Chat.php:202 msgid "Bookmark this room" -msgstr "Fes favorit aquest xat" +msgstr "Desa aquesta sala" #: ../../Zotlabs/Module/Chat.php:205 ../../Zotlabs/Module/Mail.php:241 -#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1315 +#: ../../Zotlabs/Module/Mail.php:362 ../../include/conversation.php:1322 msgid "Please enter a link URL:" msgstr "Si us plau entra l'enllaç URL:" #: ../../Zotlabs/Module/Chat.php:206 ../../Zotlabs/Module/Mail.php:294 -#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:766 -#: ../../include/conversation.php:1435 +#: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Lib/ThreadItem.php:771 +#: ../../include/conversation.php:1443 msgid "Encrypt text" msgstr "Text encriptat" @@ -5836,111 +5949,111 @@ msgstr "Expiració" msgid "min" msgstr "min" -#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:248 -#: ../../include/conversation.php:1834 ../../include/nav.php:401 +#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:310 +#: ../../include/conversation.php:1843 ../../include/nav.php:393 msgid "Photos" msgstr "Fotos" -#: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:243 -#: ../../Zotlabs/Storage/Browser.php:272 ../../include/conversation.php:1842 -#: ../../include/nav.php:409 +#: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:305 +#: ../../Zotlabs/Storage/Browser.php:272 ../../include/conversation.php:1851 +#: ../../include/nav.php:401 msgid "Files" msgstr "Arxius" -#: ../../Zotlabs/Module/Menu.php:49 +#: ../../Zotlabs/Module/Menu.php:67 msgid "Unable to update menu." msgstr "No s'ha pogut actualitzar el menú." -#: ../../Zotlabs/Module/Menu.php:60 +#: ../../Zotlabs/Module/Menu.php:78 msgid "Unable to create menu." msgstr "No s'ha pogut crear el menú." -#: ../../Zotlabs/Module/Menu.php:98 ../../Zotlabs/Module/Menu.php:110 +#: ../../Zotlabs/Module/Menu.php:160 ../../Zotlabs/Module/Menu.php:173 msgid "Menu Name" msgstr "Nom del menú" -#: ../../Zotlabs/Module/Menu.php:98 +#: ../../Zotlabs/Module/Menu.php:160 msgid "Unique name (not visible on webpage) - required" msgstr "Nom únic (no visible a la pàgina web) - requerit" -#: ../../Zotlabs/Module/Menu.php:99 ../../Zotlabs/Module/Menu.php:111 +#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174 msgid "Menu Title" msgstr "Títol del menú" -#: ../../Zotlabs/Module/Menu.php:99 +#: ../../Zotlabs/Module/Menu.php:161 msgid "Visible on webpage - leave empty for no title" msgstr "Visible a la pàgina web - deixar buit per a no posar títol" -#: ../../Zotlabs/Module/Menu.php:100 +#: ../../Zotlabs/Module/Menu.php:162 msgid "Allow Bookmarks" -msgstr "Permetre Marcadors" +msgstr "Activa els marcadors" -#: ../../Zotlabs/Module/Menu.php:100 ../../Zotlabs/Module/Menu.php:157 +#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:221 msgid "Menu may be used to store saved bookmarks" -msgstr "El menú es pot emprar per a guardar marcadors" +msgstr "El menú es pot emprar per a desar marcadors" -#: ../../Zotlabs/Module/Menu.php:101 ../../Zotlabs/Module/Menu.php:159 +#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:224 msgid "Submit and proceed" msgstr "Envia i procedeix" -#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2423 +#: ../../Zotlabs/Module/Menu.php:170 ../../include/text.php:2459 msgid "Menus" msgstr "Menús" -#: ../../Zotlabs/Module/Menu.php:117 +#: ../../Zotlabs/Module/Menu.php:180 msgid "Bookmarks allowed" msgstr "Marcadors permesos" -#: ../../Zotlabs/Module/Menu.php:119 +#: ../../Zotlabs/Module/Menu.php:182 msgid "Delete this menu" msgstr "Esborra el menú" -#: ../../Zotlabs/Module/Menu.php:120 ../../Zotlabs/Module/Menu.php:154 +#: ../../Zotlabs/Module/Menu.php:183 ../../Zotlabs/Module/Menu.php:218 msgid "Edit menu contents" msgstr "Edita el contingut del menú" -#: ../../Zotlabs/Module/Menu.php:121 +#: ../../Zotlabs/Module/Menu.php:184 msgid "Edit this menu" msgstr "Edita el menú" -#: ../../Zotlabs/Module/Menu.php:136 +#: ../../Zotlabs/Module/Menu.php:200 msgid "Menu could not be deleted." msgstr "El menu no es pot esborrar." -#: ../../Zotlabs/Module/Menu.php:149 +#: ../../Zotlabs/Module/Menu.php:213 msgid "Edit Menu" msgstr "Edita Menú" -#: ../../Zotlabs/Module/Menu.php:153 +#: ../../Zotlabs/Module/Menu.php:217 msgid "Add or remove entries to this menu" msgstr "Afegeix o esborra entrades a aquest menú" -#: ../../Zotlabs/Module/Menu.php:155 +#: ../../Zotlabs/Module/Menu.php:219 msgid "Menu name" msgstr "Nom del Menú" -#: ../../Zotlabs/Module/Menu.php:155 +#: ../../Zotlabs/Module/Menu.php:219 msgid "Must be unique, only seen by you" msgstr "Ha de ser únic, nomes vist per tú" -#: ../../Zotlabs/Module/Menu.php:156 +#: ../../Zotlabs/Module/Menu.php:220 msgid "Menu title" msgstr "Títol del menú" -#: ../../Zotlabs/Module/Menu.php:156 +#: ../../Zotlabs/Module/Menu.php:220 msgid "Menu title as seen by others" msgstr "Títol del menú vist pels altres" -#: ../../Zotlabs/Module/Menu.php:157 +#: ../../Zotlabs/Module/Menu.php:221 msgid "Allow bookmarks" -msgstr "Marcadors permesos" +msgstr "Activa els marcadors" -#: ../../Zotlabs/Module/Layouts.php:184 ../../include/text.php:2424 +#: ../../Zotlabs/Module/Layouts.php:184 ../../include/text.php:2460 msgid "Layouts" msgstr "Dissenys" -#: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:251 -#: ../../include/nav.php:176 ../../include/nav.php:280 +#: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:313 +#: ../../include/nav.php:170 ../../include/nav.php:272 #: ../../include/help.php:68 ../../include/help.php:74 msgid "Help" msgstr "Ajuda" @@ -5957,11 +6070,11 @@ msgstr "Descripció del disseny pàgina" msgid "Download PDL file" msgstr "Descarrega l'arxiu PDL" -#: ../../Zotlabs/Module/Cloud.php:120 +#: ../../Zotlabs/Module/Cloud.php:129 msgid "Please refresh page" msgstr "Recarrega la pàgina" -#: ../../Zotlabs/Module/Cloud.php:123 +#: ../../Zotlabs/Module/Cloud.php:132 msgid "Unknown error" msgstr "S'ha produït un error desconegut" @@ -5995,12 +6108,12 @@ msgid "Post not found." msgstr "No s'ha trobat l'entrada" #: ../../Zotlabs/Module/Tagger.php:77 ../../include/markdown.php:160 -#: ../../include/bbcode.php:352 +#: ../../include/bbcode.php:354 msgid "post" msgstr "entrada" #: ../../Zotlabs/Module/Tagger.php:79 ../../include/conversation.php:146 -#: ../../include/text.php:2013 +#: ../../include/text.php:2030 msgid "comment" msgstr "comentari" @@ -6022,12 +6135,7 @@ msgid "" "Warning: Changing some settings could render your channel inoperable. Please" " leave this page unless you are comfortable with and knowledgeable about how" " to correctly use this feature." -msgstr "atenció: Realitzar segons quins ajustos pot fer el canal inoperable. Deixa aquesta pàgina si no estas segur i tens suficients coneixements sobre l'ús correcte d'aquesta característica." - -#: ../../Zotlabs/Module/Defperms.php:239 -msgid "" -"If enabled, connection requests will be approved without your interaction" -msgstr "Si s'habilita, les soŀlicituds de connexió s'aprovaran automàticament sense requerir la teva interacció" +msgstr "Alerta: segons quines combinacions podrien deixar el teu canal inusable. No és recomanable canviar aquesta configuració si no ets sents còmode/ i segur/a de com fer servir aquesta funcionalitat." #: ../../Zotlabs/Module/Defperms.php:246 msgid "Automatic approval settings" @@ -6056,58 +6164,77 @@ msgstr "Vols autoritzar l'aplicació %s a accedir a les dades del teu canal?" msgid "Allow" msgstr "Permet-ho" -#: ../../Zotlabs/Module/Group.php:24 +#: ../../Zotlabs/Module/Group.php:35 msgid "Privacy group created." -msgstr "Creat grup privat." +msgstr "S'ha creat el grup de privacitat." -#: ../../Zotlabs/Module/Group.php:30 +#: ../../Zotlabs/Module/Group.php:38 msgid "Could not create privacy group." -msgstr "No es pot crear el grup privat." +msgstr "No s'ha pogut crear el grup de privacitat." -#: ../../Zotlabs/Module/Group.php:42 ../../Zotlabs/Module/Group.php:143 -#: ../../include/items.php:4181 +#: ../../Zotlabs/Module/Group.php:51 ../../Zotlabs/Module/Group.php:181 +#: ../../include/items.php:4125 msgid "Privacy group not found." -msgstr "No es troben grups privats." +msgstr "No s'ha trobat el grup de privacitat." -#: ../../Zotlabs/Module/Group.php:58 +#: ../../Zotlabs/Module/Group.php:67 msgid "Privacy group updated." -msgstr "Grup privat actualitzat." +msgstr "S'ha actualitzat el grup de privacitat." + +#: ../../Zotlabs/Module/Group.php:113 ../../Zotlabs/Module/Group.php:124 +#: ../../Zotlabs/Widget/Activity_filter.php:68 ../../include/features.php:221 +#: ../../include/nav.php:97 ../../include/group.php:320 +msgid "Privacy Groups" +msgstr "Grup de privacitat" -#: ../../Zotlabs/Module/Group.php:92 -msgid "Create a group of channels." -msgstr "Crear un grup de canals." +#: ../../Zotlabs/Module/Group.php:114 +msgid "Add Group" +msgstr "Afegeix un grup" -#: ../../Zotlabs/Module/Group.php:93 ../../Zotlabs/Module/Group.php:186 -msgid "Privacy group name: " -msgstr "Nom del grup privat:" +#: ../../Zotlabs/Module/Group.php:118 +msgid "Privacy group name" +msgstr "Nom del grup de privacitat" -#: ../../Zotlabs/Module/Group.php:95 ../../Zotlabs/Module/Group.php:189 +#: ../../Zotlabs/Module/Group.php:119 ../../Zotlabs/Module/Group.php:220 msgid "Members are visible to other channels" msgstr "Els membres son visibles en altres canals" -#: ../../Zotlabs/Module/Group.php:113 +#: ../../Zotlabs/Module/Group.php:126 ../../Zotlabs/Module/Help.php:81 +msgid "Members" +msgstr "Membres" + +#: ../../Zotlabs/Module/Group.php:151 msgid "Privacy group removed." -msgstr "Grup privat eliminat." +msgstr "S'ha esborrat el grup de privacitat." -#: ../../Zotlabs/Module/Group.php:115 +#: ../../Zotlabs/Module/Group.php:153 msgid "Unable to remove privacy group." -msgstr "No puc eliminar el grup privat." +msgstr "No s'ha pogut esborrar el grup de privacitat." -#: ../../Zotlabs/Module/Group.php:185 -msgid "Privacy group editor" -msgstr "Editor del grup privat" +#: ../../Zotlabs/Module/Group.php:215 +#, php-format +msgid "Privacy Group: %s" +msgstr "Grup de privacitat: %s" -#: ../../Zotlabs/Module/Group.php:199 ../../Zotlabs/Module/Help.php:81 -msgid "Members" -msgstr "Membres" +#: ../../Zotlabs/Module/Group.php:217 +msgid "Privacy group name: " +msgstr "Nom del grup de privacitat:" + +#: ../../Zotlabs/Module/Group.php:222 +msgid "Delete Group" +msgstr "Esborra el grup" -#: ../../Zotlabs/Module/Group.php:201 -msgid "All Connected Channels" -msgstr "Tots els Canals Connectats" +#: ../../Zotlabs/Module/Group.php:232 +msgid "Group members" +msgstr "Membres del grup" -#: ../../Zotlabs/Module/Group.php:233 -msgid "Click on a channel to add or remove." -msgstr "Clic sobre el canal per afegir o esborrar." +#: ../../Zotlabs/Module/Group.php:234 +msgid "Not in this group" +msgstr "No hi són al grup" + +#: ../../Zotlabs/Module/Group.php:266 +msgid "Click a channel to toggle membership" +msgstr "Fes clic a un canal per a ficar-lo o treure'l del grup" #: ../../Zotlabs/Module/Profiles.php:24 ../../Zotlabs/Module/Profiles.php:184 #: ../../Zotlabs/Module/Profiles.php:241 ../../Zotlabs/Module/Profiles.php:659 @@ -6193,11 +6320,11 @@ msgstr "Amaga dels curiosos la teva llista de connexions d'aquest perfil" #: ../../Zotlabs/Module/Profiles.php:722 msgid "Edit Profile Details" -msgstr "Edita els Detalls del Perfil" +msgstr "Modifica els detalls de perfil" #: ../../Zotlabs/Module/Profiles.php:724 msgid "View this profile" -msgstr "Veure aquest perfil" +msgstr "Mostra aquest perfil" #: ../../Zotlabs/Module/Profiles.php:725 ../../Zotlabs/Module/Profiles.php:824 #: ../../include/channel.php:1319 @@ -6218,7 +6345,7 @@ msgstr "Canviar la foto del perfil" #: ../../Zotlabs/Module/Profiles.php:729 msgid "Create a new profile using these settings" -msgstr "Crea un perfil nou amb aquests ajustos" +msgstr "Crea un perfil nou amb aquesta configuració" #: ../../Zotlabs/Module/Profiles.php:730 msgid "Clone this profile" @@ -6232,7 +6359,7 @@ msgstr "Elimina aquest perfil" msgid "Add profile things" msgstr "Afegeix coses al perfil" -#: ../../Zotlabs/Module/Profiles.php:733 ../../include/conversation.php:1708 +#: ../../Zotlabs/Module/Profiles.php:733 ../../include/conversation.php:1717 msgid "Personal" msgstr "Personal" @@ -6383,9 +6510,9 @@ msgid "Profile Image" msgstr "Imatge del Perfil" #: ../../Zotlabs/Module/Profiles.php:830 ../../include/channel.php:1296 -#: ../../include/nav.php:117 +#: ../../include/nav.php:111 msgid "Edit Profiles" -msgstr "Editar Perfils" +msgstr "Modifica els perfils" #: ../../Zotlabs/Module/Go.php:21 msgid "This page is available only to site members" @@ -6414,7 +6541,7 @@ msgstr "Puja una imatge de portada" #: ../../Zotlabs/Module/Go.php:37 msgid "Edit your default profile" -msgstr "Modifica el teu perfil" +msgstr "Modifica el teu perfil per defecte" #: ../../Zotlabs/Module/Go.php:38 ../../Zotlabs/Widget/Newmember.php:34 msgid "View friend suggestions" @@ -6462,10 +6589,10 @@ msgstr "Edita la Pàgina Web" msgid "Create a new channel" msgstr "Crear un nou canal" -#: ../../Zotlabs/Module/Manage.php:170 ../../Zotlabs/Lib/Apps.php:240 -#: ../../include/nav.php:102 ../../include/nav.php:190 +#: ../../Zotlabs/Module/Manage.php:170 ../../Zotlabs/Lib/Apps.php:302 +#: ../../include/nav.php:94 msgid "Channel Manager" -msgstr "Gestor de Canals" +msgstr "Gestor de canals" #: ../../Zotlabs/Module/Manage.php:171 msgid "Current Channel" @@ -6498,8 +6625,8 @@ msgid "Delegated Channel" msgstr "Canal Delegat" #: ../../Zotlabs/Module/Cards.php:42 ../../Zotlabs/Module/Cards.php:194 -#: ../../Zotlabs/Lib/Apps.php:230 ../../include/conversation.php:1893 -#: ../../include/features.php:123 ../../include/nav.php:458 +#: ../../Zotlabs/Lib/Apps.php:293 ../../include/conversation.php:1902 +#: ../../include/features.php:123 ../../include/nav.php:450 msgid "Cards" msgstr "Targetes" @@ -6511,45 +6638,49 @@ msgstr "Afegeix una carta" msgid "This directory server requires an access token" msgstr "Aquest servidor de directori requereix un token de accès" -#: ../../Zotlabs/Module/Siteinfo.php:18 +#: ../../Zotlabs/Module/Siteinfo.php:21 msgid "About this site" msgstr "Sobre aquest lloc web" -#: ../../Zotlabs/Module/Siteinfo.php:19 +#: ../../Zotlabs/Module/Siteinfo.php:22 msgid "Site Name" msgstr "Nom del lloc web" -#: ../../Zotlabs/Module/Siteinfo.php:23 +#: ../../Zotlabs/Module/Siteinfo.php:26 msgid "Administrator" msgstr "Administrador" -#: ../../Zotlabs/Module/Siteinfo.php:25 ../../Zotlabs/Module/Register.php:232 +#: ../../Zotlabs/Module/Siteinfo.php:28 ../../Zotlabs/Module/Register.php:241 msgid "Terms of Service" msgstr "Condicions del Servei" -#: ../../Zotlabs/Module/Siteinfo.php:26 +#: ../../Zotlabs/Module/Siteinfo.php:29 msgid "Software and Project information" msgstr "Informació del programari i del projecte" -#: ../../Zotlabs/Module/Siteinfo.php:27 +#: ../../Zotlabs/Module/Siteinfo.php:30 msgid "This site is powered by $Projectname" msgstr "Aquest lloc web funciona amb $Projectname" -#: ../../Zotlabs/Module/Siteinfo.php:28 +#: ../../Zotlabs/Module/Siteinfo.php:31 msgid "" "Federated and decentralised networking and identity services provided by Zot" msgstr "Els serveis d'identitat i la federació i descentralització de la xarxa funcionen amb Zot" -#: ../../Zotlabs/Module/Siteinfo.php:30 +#: ../../Zotlabs/Module/Siteinfo.php:34 +msgid "Additional federated transport protocols:" +msgstr "Altres protocols de transport federats:" + +#: ../../Zotlabs/Module/Siteinfo.php:36 #, php-format msgid "Version %s" msgstr "Versió %s" -#: ../../Zotlabs/Module/Siteinfo.php:31 +#: ../../Zotlabs/Module/Siteinfo.php:37 msgid "Project homepage" msgstr "Pàgina principal del projecte" -#: ../../Zotlabs/Module/Siteinfo.php:32 +#: ../../Zotlabs/Module/Siteinfo.php:38 msgid "Developer homepage" msgstr "Pàgina principal de desenvolupament" @@ -6558,7 +6689,7 @@ msgid "No ratings" msgstr "No valorat" #: ../../Zotlabs/Module/Ratings.php:97 ../../Zotlabs/Module/Pubsites.php:35 -#: ../../include/conversation.php:1082 +#: ../../include/conversation.php:1087 msgid "Ratings" msgstr "Valoracions" @@ -6590,8 +6721,8 @@ msgstr "Exporta elements de pàgina web" msgid "Export selected" msgstr "Exporta la selecció" -#: ../../Zotlabs/Module/Webpages.php:237 ../../Zotlabs/Lib/Apps.php:244 -#: ../../include/conversation.php:1915 ../../include/nav.php:481 +#: ../../Zotlabs/Module/Webpages.php:237 ../../Zotlabs/Lib/Apps.php:306 +#: ../../include/conversation.php:1924 ../../include/nav.php:473 msgid "Webpages" msgstr "Pàgines web" @@ -6734,76 +6865,84 @@ msgstr "Opcions" msgid "Redeliver" msgstr "Tornar a lliurar" -#: ../../Zotlabs/Module/Sources.php:37 +#: ../../Zotlabs/Module/Sources.php:38 msgid "Failed to create source. No channel selected." msgstr "Error en crear l'origen. Cap canal seleccionat." -#: ../../Zotlabs/Module/Sources.php:51 +#: ../../Zotlabs/Module/Sources.php:54 msgid "Source created." msgstr "Origen creat." -#: ../../Zotlabs/Module/Sources.php:64 +#: ../../Zotlabs/Module/Sources.php:67 msgid "Source updated." msgstr "Origen actualitzat." -#: ../../Zotlabs/Module/Sources.php:90 +#: ../../Zotlabs/Module/Sources.php:93 msgid "*" msgstr "*" -#: ../../Zotlabs/Module/Sources.php:96 +#: ../../Zotlabs/Module/Sources.php:99 #: ../../Zotlabs/Widget/Settings_menu.php:133 ../../include/features.php:292 msgid "Channel Sources" msgstr "Canal Origen" -#: ../../Zotlabs/Module/Sources.php:97 +#: ../../Zotlabs/Module/Sources.php:100 msgid "Manage remote sources of content for your channel." msgstr "Gestiona contingut per al teu canal d'origens remots" -#: ../../Zotlabs/Module/Sources.php:98 ../../Zotlabs/Module/Sources.php:108 +#: ../../Zotlabs/Module/Sources.php:101 ../../Zotlabs/Module/Sources.php:111 msgid "New Source" msgstr "Nou Origen" -#: ../../Zotlabs/Module/Sources.php:109 ../../Zotlabs/Module/Sources.php:143 +#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:146 msgid "" "Import all or selected content from the following channel into this channel " "and distribute it according to your channel settings." -msgstr "Importar tot o sel·lecciona contingut dels següents canals, en aquest canal i distribueix-lo d'acord als teus ajustos de canals." +msgstr "Importa-ho tot o només allò seleccionat del següent canals, cap a aquest canal, i distribueix-lo d'acord a la configuració del teu canal." -#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 +#: ../../Zotlabs/Module/Sources.php:113 ../../Zotlabs/Module/Sources.php:147 msgid "Only import content with these words (one per line)" msgstr "Només importa contingut amb aquestes paraules (una per línia)" -#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 +#: ../../Zotlabs/Module/Sources.php:113 ../../Zotlabs/Module/Sources.php:147 msgid "Leave blank to import all public content" msgstr "Deixar en blanc per importar tot el contingut públic" -#: ../../Zotlabs/Module/Sources.php:111 ../../Zotlabs/Module/Sources.php:148 +#: ../../Zotlabs/Module/Sources.php:114 ../../Zotlabs/Module/Sources.php:153 msgid "Channel Name" msgstr "Nom del canal" -#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 +#: ../../Zotlabs/Module/Sources.php:115 ../../Zotlabs/Module/Sources.php:150 msgid "" "Add the following categories to posts imported from this source (comma " "separated)" msgstr "Afegeix les següents categories d'entrades importades des d'aquest origen (separat per comes)" -#: ../../Zotlabs/Module/Sources.php:133 ../../Zotlabs/Module/Sources.php:161 +#: ../../Zotlabs/Module/Sources.php:116 ../../Zotlabs/Module/Sources.php:151 +msgid "Resend posts with this channel as author" +msgstr "Reenvia les entrades que tinguin aquest canal com a autor/a" + +#: ../../Zotlabs/Module/Sources.php:116 ../../Zotlabs/Module/Sources.php:151 +msgid "Copyrights may apply" +msgstr "Poden aplicar drets d'autor" + +#: ../../Zotlabs/Module/Sources.php:136 ../../Zotlabs/Module/Sources.php:166 msgid "Source not found." msgstr "No s'ha trobat la font." -#: ../../Zotlabs/Module/Sources.php:140 +#: ../../Zotlabs/Module/Sources.php:143 msgid "Edit Source" msgstr "Edita la font" -#: ../../Zotlabs/Module/Sources.php:141 +#: ../../Zotlabs/Module/Sources.php:144 msgid "Delete Source" msgstr "Esborra la font" -#: ../../Zotlabs/Module/Sources.php:169 +#: ../../Zotlabs/Module/Sources.php:174 msgid "Source removed" msgstr "S'ha esborrat la font" -#: ../../Zotlabs/Module/Sources.php:171 +#: ../../Zotlabs/Module/Sources.php:176 msgid "Unable to remove source." msgstr "No s'ha pogut esborrar la font." @@ -6842,13 +6981,13 @@ msgstr "El canal està inactiu." msgid "Previous action reversed." msgstr "S'ha desfet l'acció anterior." -#: ../../Zotlabs/Module/Like.php:438 ../../addon/diaspora/Receiver.php:1529 -#: ../../addon/pubcrawl/as.php:1440 ../../include/conversation.php:160 +#: ../../Zotlabs/Module/Like.php:438 ../../addon/diaspora/Receiver.php:1559 +#: ../../addon/pubcrawl/as.php:1544 ../../include/conversation.php:160 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s agrada %2$s de %3$s" -#: ../../Zotlabs/Module/Like.php:440 ../../addon/pubcrawl/as.php:1442 +#: ../../Zotlabs/Module/Like.php:440 ../../addon/pubcrawl/as.php:1546 #: ../../include/conversation.php:163 #, php-format msgid "%1$s doesn't like %2$s's %3$s" @@ -6869,17 +7008,17 @@ msgstr "%1$s no està d'acord amb %3$s de %2$s" msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "%1$s s'abstén en %3$s de %2$s" -#: ../../Zotlabs/Module/Like.php:448 ../../addon/diaspora/Receiver.php:2072 +#: ../../Zotlabs/Module/Like.php:448 ../../addon/diaspora/Receiver.php:2102 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%1$s assistirà a %3$s de %2$s" -#: ../../Zotlabs/Module/Like.php:450 ../../addon/diaspora/Receiver.php:2074 +#: ../../Zotlabs/Module/Like.php:450 ../../addon/diaspora/Receiver.php:2104 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%1$s no assistirà a %3$s de %2$s" -#: ../../Zotlabs/Module/Like.php:452 ../../addon/diaspora/Receiver.php:2076 +#: ../../Zotlabs/Module/Like.php:452 ../../addon/diaspora/Receiver.php:2106 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%1$s potser assistirà a %3$s de %2$s" @@ -6938,7 +7077,7 @@ msgstr "Sobre:" #: ../../Zotlabs/Module/Directory.php:338 ../../Zotlabs/Module/Suggest.php:56 #: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Widget/Suggestions.php:44 -#: ../../include/conversation.php:1052 ../../include/channel.php:1376 +#: ../../include/conversation.php:1057 ../../include/channel.php:1376 #: ../../include/connections.php:110 msgid "Connect" msgstr "Connecta " @@ -7087,7 +7226,6 @@ msgid "Subject:" msgstr "Assumpte:" #: ../../Zotlabs/Module/Mail.php:287 ../../Zotlabs/Module/Mail.php:429 -#: ../../include/conversation.php:1385 msgid "Attach file" msgstr "Adjunta arxiu" @@ -7096,7 +7234,7 @@ msgid "Send" msgstr "Envia" #: ../../Zotlabs/Module/Mail.php:292 ../../Zotlabs/Module/Mail.php:434 -#: ../../include/conversation.php:1430 +#: ../../include/conversation.php:1438 msgid "Set expiration date" msgstr "Ajusta la data d'expiració" @@ -7172,19 +7310,19 @@ msgstr "Programari" msgid "Rate" msgstr "Puntua" -#: ../../Zotlabs/Module/Impel.php:43 ../../include/bbcode.php:267 +#: ../../Zotlabs/Module/Impel.php:43 ../../include/bbcode.php:269 msgid "webpage" msgstr "pàgina web" -#: ../../Zotlabs/Module/Impel.php:48 ../../include/bbcode.php:273 +#: ../../Zotlabs/Module/Impel.php:48 ../../include/bbcode.php:275 msgid "block" msgstr "bloc" -#: ../../Zotlabs/Module/Impel.php:53 ../../include/bbcode.php:270 +#: ../../Zotlabs/Module/Impel.php:53 ../../include/bbcode.php:272 msgid "layout" msgstr "disposició" -#: ../../Zotlabs/Module/Impel.php:60 ../../include/bbcode.php:276 +#: ../../Zotlabs/Module/Impel.php:60 ../../include/bbcode.php:278 msgid "menu" msgstr "menú" @@ -7204,15 +7342,15 @@ msgstr "Tria una carpeta d'interès" #: ../../Zotlabs/Module/Rbmark.php:99 msgid "Save Bookmark" -msgstr "Guarda Favorits" +msgstr "Desa el marcadors" #: ../../Zotlabs/Module/Rbmark.php:100 msgid "URL of bookmark" -msgstr "URL de favorit" +msgstr "URL del marcador" #: ../../Zotlabs/Module/Rbmark.php:105 msgid "Or enter new bookmark folder name" -msgstr "O entra un nou nom de favorit" +msgstr "O introdueix el nom d'una carpeta de marcadors nova" #: ../../Zotlabs/Module/Filer.php:52 msgid "Enter a folder name" @@ -7222,7 +7360,7 @@ msgstr "Escriu el nom de la carpeta" msgid "or select an existing folder (doubleclick)" msgstr "o escull-ne una d'existent amb doble clic" -#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:151 +#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Lib/ThreadItem.php:162 msgid "Save to Folder" msgstr "Guardar en la Carpeta" @@ -7270,98 +7408,123 @@ msgstr "L'inscripció en aquest node està deshabilitat." msgid "Registration on this hub is by approval only." msgstr "L'inscripció en aquest node es únicament per validació." -#: ../../Zotlabs/Module/Register.php:202 +#: ../../Zotlabs/Module/Register.php:202 ../../Zotlabs/Module/Register.php:211 msgid "Register at another affiliated hub." msgstr "Inscripció en altre node afiliat" -#: ../../Zotlabs/Module/Register.php:212 +#: ../../Zotlabs/Module/Register.php:210 +msgid "Registration on this hub is by invitation only." +msgstr "El registre en aquest node funciona per invitació." + +#: ../../Zotlabs/Module/Register.php:221 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "El lloc ha excedit el límit màxim diari de nous comptes/inscripció. Provau demà." -#: ../../Zotlabs/Module/Register.php:238 +#: ../../Zotlabs/Module/Register.php:247 #, php-format msgid "I accept the %s for this website" msgstr "Accepto el %s per a aquest lloc web" -#: ../../Zotlabs/Module/Register.php:245 +#: ../../Zotlabs/Module/Register.php:254 #, php-format msgid "I am over %s years of age and accept the %s for this website" msgstr "Tinc més de %s anys i accepto les %s" -#: ../../Zotlabs/Module/Register.php:250 +#: ../../Zotlabs/Module/Register.php:259 msgid "Your email address" msgstr "La teva adreça de correu electrónic" -#: ../../Zotlabs/Module/Register.php:251 +#: ../../Zotlabs/Module/Register.php:260 msgid "Choose a password" msgstr "Tria una contrasenya" -#: ../../Zotlabs/Module/Register.php:252 +#: ../../Zotlabs/Module/Register.php:261 msgid "Please re-enter your password" msgstr "Si et plau, re-entra la contrasenya" -#: ../../Zotlabs/Module/Register.php:253 +#: ../../Zotlabs/Module/Register.php:262 msgid "Please enter your invitation code" msgstr "Si et plau, introdueix el teu codi d'invitació" -#: ../../Zotlabs/Module/Register.php:258 +#: ../../Zotlabs/Module/Register.php:263 +msgid "Your Name" +msgstr "El teu nom" + +#: ../../Zotlabs/Module/Register.php:263 +msgid "Real names are preferred." +msgstr "Considera de fer servir el teu nom real." + +#: ../../Zotlabs/Module/Register.php:265 +#, php-format +msgid "" +"Your nickname will be used to create an easy to remember channel address " +"e.g. nickname%s" +msgstr "El teu àlies servirà per crear un nom fàcil per recordar l'adreça del canal. Per exemple, àlies%s" + +#: ../../Zotlabs/Module/Register.php:266 +msgid "" +"Select a channel permission role for your usage needs and privacy " +"requirements." +msgstr "Escull un rol de permisos de canal. Tingues en compte l'ús que en faràs i el nivell de privacitat que desitges." + +#: ../../Zotlabs/Module/Register.php:267 msgid "no" msgstr "no" -#: ../../Zotlabs/Module/Register.php:258 +#: ../../Zotlabs/Module/Register.php:267 msgid "yes" msgstr "sí" -#: ../../Zotlabs/Module/Register.php:274 -msgid "Membership on this site is by invitation only." -msgstr "La pertinença en aquest lloc es per invitació exclusivament." - -#: ../../Zotlabs/Module/Register.php:286 ../../boot.php:1570 -#: ../../include/nav.php:164 +#: ../../Zotlabs/Module/Register.php:294 ../../boot.php:1593 +#: ../../include/nav.php:158 msgid "Register" msgstr "Inscripció" -#: ../../Zotlabs/Module/Register.php:287 +#: ../../Zotlabs/Module/Register.php:295 msgid "" "This site requires email verification. After completing this form, please " "check your email for further instructions." msgstr "Aquest node demana que es verifiquin els comptes de correu. Un cop completat el formulari, comprova la teva safata d'entrada i segueix les instruccions que hi trobaràs." -#: ../../Zotlabs/Module/Cover_photo.php:136 -#: ../../Zotlabs/Module/Cover_photo.php:186 +#: ../../Zotlabs/Module/Cover_photo.php:168 +#: ../../Zotlabs/Module/Cover_photo.php:218 msgid "Cover Photos" msgstr "Fotos de Portada" -#: ../../Zotlabs/Module/Cover_photo.php:237 ../../include/items.php:4558 +#: ../../Zotlabs/Module/Cover_photo.php:269 ../../include/items.php:4502 msgid "female" msgstr "femení" -#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4559 +#: ../../Zotlabs/Module/Cover_photo.php:270 ../../include/items.php:4503 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s actualitzà el seu %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:239 ../../include/items.php:4560 +#: ../../Zotlabs/Module/Cover_photo.php:271 ../../include/items.php:4504 msgid "male" msgstr "masculí" -#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/items.php:4561 +#: ../../Zotlabs/Module/Cover_photo.php:272 ../../include/items.php:4505 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s actualitzà el seu %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:242 ../../include/items.php:4563 +#: ../../Zotlabs/Module/Cover_photo.php:274 ../../include/items.php:4507 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s actualitzà els seus %2$s" -#: ../../Zotlabs/Module/Cover_photo.php:244 ../../include/channel.php:2070 +#: ../../Zotlabs/Module/Cover_photo.php:276 ../../include/channel.php:2081 msgid "cover photo" msgstr "Foto de la portada" -#: ../../Zotlabs/Module/Cover_photo.php:361 +#: ../../Zotlabs/Module/Cover_photo.php:390 +msgid "Your cover photo may be visible to anybody on the internet" +msgstr "La teva foto de portada és pública i visible a tothom." + +#: ../../Zotlabs/Module/Cover_photo.php:394 msgid "Change Cover Photo" msgstr "Canvia la foto de portada" @@ -7369,8 +7532,8 @@ msgstr "Canvia la foto de portada" msgid "Documentation Search" msgstr "Cerca de Documentació" -#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1824 -#: ../../include/nav.php:391 +#: ../../Zotlabs/Module/Help.php:80 ../../include/conversation.php:1833 +#: ../../include/nav.php:383 msgid "About" msgstr "El Meu Perfil" @@ -7414,39 +7577,27 @@ msgstr "Elimina l'etiqueta d'element" msgid "Select a tag to remove: " msgstr "Tria l'etiqueta a eliminar:" -#: ../../Zotlabs/Module/Network.php:100 +#: ../../Zotlabs/Module/Network.php:116 msgid "No such group" msgstr "No existeix el grup" -#: ../../Zotlabs/Module/Network.php:142 +#: ../../Zotlabs/Module/Network.php:157 msgid "No such channel" msgstr "No existeix el canal" -#: ../../Zotlabs/Module/Network.php:147 -msgid "forum" -msgstr "fòrum" - -#: ../../Zotlabs/Module/Network.php:159 -msgid "Search Results For:" -msgstr "Cerca resultats per:" - -#: ../../Zotlabs/Module/Network.php:229 +#: ../../Zotlabs/Module/Network.php:242 msgid "Privacy group is empty" -msgstr "el grup privat està vuit" +msgstr "El grup de privacitat està buit" -#: ../../Zotlabs/Module/Network.php:238 +#: ../../Zotlabs/Module/Network.php:253 msgid "Privacy group: " -msgstr "Grup privat:" - -#: ../../Zotlabs/Module/Network.php:265 -msgid "Invalid connection." -msgstr "La connexió és invàlida." +msgstr "Grup de privacitat:" -#: ../../Zotlabs/Module/Network.php:285 ../../addon/redred/redred.php:65 +#: ../../Zotlabs/Module/Network.php:304 ../../addon/redred/redred.php:65 msgid "Invalid channel." msgstr "El canal no és vàlid." -#: ../../Zotlabs/Module/Acl.php:361 +#: ../../Zotlabs/Module/Acl.php:359 msgid "network" msgstr "xarxa" @@ -7464,44 +7615,44 @@ msgstr "Benvingut a %s" msgid "Permission Denied." msgstr "Permisos Denegats." -#: ../../Zotlabs/Module/Filestorage.php:95 +#: ../../Zotlabs/Module/Filestorage.php:112 msgid "File not found." msgstr "Arxiu no torbat." -#: ../../Zotlabs/Module/Filestorage.php:142 +#: ../../Zotlabs/Module/Filestorage.php:165 msgid "Edit file permissions" msgstr "Edita els permisos d'arxiu" -#: ../../Zotlabs/Module/Filestorage.php:154 +#: ../../Zotlabs/Module/Filestorage.php:177 msgid "Set/edit permissions" msgstr "Canvia/edita permisos" -#: ../../Zotlabs/Module/Filestorage.php:155 +#: ../../Zotlabs/Module/Filestorage.php:178 msgid "Include all files and sub folders" msgstr "Inclou tots als arxius i subdirectoris" -#: ../../Zotlabs/Module/Filestorage.php:156 +#: ../../Zotlabs/Module/Filestorage.php:179 msgid "Return to file list" msgstr "Tornar al llistat d'arxius" -#: ../../Zotlabs/Module/Filestorage.php:158 +#: ../../Zotlabs/Module/Filestorage.php:181 msgid "Copy/paste this code to attach file to a post" msgstr "Copia/enganxa aquest codi per a adjuntar un arxiu a l'entrada" -#: ../../Zotlabs/Module/Filestorage.php:159 +#: ../../Zotlabs/Module/Filestorage.php:182 msgid "Copy/paste this URL to link file from a web page" msgstr "Copia/enganxa aquesta URL per a enllaçar l'arxiu d'una pàgina web" -#: ../../Zotlabs/Module/Filestorage.php:161 +#: ../../Zotlabs/Module/Filestorage.php:184 msgid "Share this file" msgstr "Comparteix l'arxiu" -#: ../../Zotlabs/Module/Filestorage.php:162 +#: ../../Zotlabs/Module/Filestorage.php:185 msgid "Show URL to this file" msgstr "Mostra la URL d'aquest arxiu" -#: ../../Zotlabs/Module/Filestorage.php:163 -#: ../../Zotlabs/Storage/Browser.php:397 +#: ../../Zotlabs/Module/Filestorage.php:186 +#: ../../Zotlabs/Storage/Browser.php:405 msgid "Show in your contacts shared folder" msgstr "Mostra les carpetes compartides dels teus contactes" @@ -7550,47 +7701,47 @@ msgstr "Comptes caducats" msgid "Expiring accounts" msgstr "Comptes a punt de caducar" -#: ../../Zotlabs/Module/Admin.php:112 +#: ../../Zotlabs/Module/Admin.php:116 msgid "Clones" msgstr "Clons" -#: ../../Zotlabs/Module/Admin.php:118 +#: ../../Zotlabs/Module/Admin.php:122 msgid "Message queues" msgstr "Cues de missatges" -#: ../../Zotlabs/Module/Admin.php:132 +#: ../../Zotlabs/Module/Admin.php:136 msgid "Your software should be updated" msgstr "El teu programari cal que s'actualitzi" -#: ../../Zotlabs/Module/Admin.php:137 +#: ../../Zotlabs/Module/Admin.php:141 msgid "Summary" msgstr "Sumari" -#: ../../Zotlabs/Module/Admin.php:140 +#: ../../Zotlabs/Module/Admin.php:144 msgid "Registered accounts" msgstr "Comptes registrades" -#: ../../Zotlabs/Module/Admin.php:141 +#: ../../Zotlabs/Module/Admin.php:145 msgid "Pending registrations" msgstr "Comptes pendents d'inscripció" -#: ../../Zotlabs/Module/Admin.php:142 +#: ../../Zotlabs/Module/Admin.php:146 msgid "Registered channels" msgstr "Canals registrats" -#: ../../Zotlabs/Module/Admin.php:143 -msgid "Active plugins" +#: ../../Zotlabs/Module/Admin.php:147 +msgid "Active addons" msgstr "Extensions actives" -#: ../../Zotlabs/Module/Admin.php:144 +#: ../../Zotlabs/Module/Admin.php:148 msgid "Version" msgstr "Versió" -#: ../../Zotlabs/Module/Admin.php:145 +#: ../../Zotlabs/Module/Admin.php:149 msgid "Repository version (master)" msgstr "Versió (master) del repositori" -#: ../../Zotlabs/Module/Admin.php:146 +#: ../../Zotlabs/Module/Admin.php:150 msgid "Repository version (dev)" msgstr "Versió (desenvolupament) del repositori" @@ -7643,7 +7794,7 @@ msgid "" "Password reset failed." msgstr "Ha fallat el restabliment de contrasenya perquè la no s'ha pogut verificar soŀlicitud. Pot ser que ja ho hàgiu soŀlicitat abans." -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1598 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1622 msgid "Password Reset" msgstr "Restabliment de contrasenya" @@ -7688,8 +7839,8 @@ msgstr "Escriu la teva adreça de correu electrònic i envia per restablir la co msgid "Email Address" msgstr "Adreça electrònica" -#: ../../Zotlabs/Module/Notifications.php:62 -#: ../../Zotlabs/Lib/ThreadItem.php:408 +#: ../../Zotlabs/Module/Notifications.php:60 +#: ../../Zotlabs/Lib/ThreadItem.php:413 msgid "Mark all seen" msgstr "Marca tot com ja vist" @@ -7717,124 +7868,120 @@ msgstr "4. Expert - puc escriure codi en algun llenguatge de programació" msgid "5. Wizard - I probably know more than you do" msgstr "5. Ninja - probablement en sé més que tu" -#: ../../Zotlabs/Lib/Apps.php:231 +#: ../../Zotlabs/Lib/Apps.php:294 msgid "Site Admin" msgstr "Administració" -#: ../../Zotlabs/Lib/Apps.php:232 ../../addon/buglink/buglink.php:16 +#: ../../Zotlabs/Lib/Apps.php:295 ../../addon/buglink/buglink.php:16 msgid "Report Bug" msgstr "Informa d'errors" -#: ../../Zotlabs/Lib/Apps.php:233 +#: ../../Zotlabs/Lib/Apps.php:296 msgid "View Bookmarks" -msgstr "Veure Marcadors" +msgstr "Marcadors" -#: ../../Zotlabs/Lib/Apps.php:234 +#: ../../Zotlabs/Lib/Apps.php:297 msgid "My Chatrooms" msgstr "Les meves Sales de Xat" -#: ../../Zotlabs/Lib/Apps.php:236 -msgid "Firefox Share" -msgstr "Compartir amb Firefox" - -#: ../../Zotlabs/Lib/Apps.php:237 +#: ../../Zotlabs/Lib/Apps.php:299 msgid "Remote Diagnostics" msgstr "Diagnòstics Remots" -#: ../../Zotlabs/Lib/Apps.php:238 ../../include/features.php:417 +#: ../../Zotlabs/Lib/Apps.php:300 ../../include/features.php:435 msgid "Suggest Channels" msgstr "Suggerir Canals" -#: ../../Zotlabs/Lib/Apps.php:239 ../../boot.php:1589 -#: ../../include/nav.php:126 ../../include/nav.php:130 +#: ../../Zotlabs/Lib/Apps.php:301 ../../boot.php:1613 +#: ../../include/nav.php:120 ../../include/nav.php:124 msgid "Login" msgstr "Identifica't" -#: ../../Zotlabs/Lib/Apps.php:241 +#: ../../Zotlabs/Lib/Apps.php:303 msgid "Activity" msgstr "Activitat" -#: ../../Zotlabs/Lib/Apps.php:245 ../../include/conversation.php:1931 -#: ../../include/features.php:96 ../../include/nav.php:497 +#: ../../Zotlabs/Lib/Apps.php:307 ../../include/conversation.php:1940 +#: ../../include/features.php:96 ../../include/nav.php:489 msgid "Wiki" msgstr "Wiki" -#: ../../Zotlabs/Lib/Apps.php:246 +#: ../../Zotlabs/Lib/Apps.php:308 msgid "Channel Home" msgstr "Canal Personal" -#: ../../Zotlabs/Lib/Apps.php:249 ../../include/conversation.php:1853 -#: ../../include/conversation.php:1856 +#: ../../Zotlabs/Lib/Apps.php:311 ../../include/conversation.php:1862 +#: ../../include/conversation.php:1865 msgid "Events" msgstr "Esdeveniments" -#: ../../Zotlabs/Lib/Apps.php:250 +#: ../../Zotlabs/Lib/Apps.php:312 msgid "Directory" msgstr "Directori" -#: ../../Zotlabs/Lib/Apps.php:252 +#: ../../Zotlabs/Lib/Apps.php:314 msgid "Mail" msgstr "Correu" -#: ../../Zotlabs/Lib/Apps.php:255 +#: ../../Zotlabs/Lib/Apps.php:317 msgid "Chat" msgstr "Xerrar" -#: ../../Zotlabs/Lib/Apps.php:257 +#: ../../Zotlabs/Lib/Apps.php:319 msgid "Probe" msgstr "Sondeig" -#: ../../Zotlabs/Lib/Apps.php:258 +#: ../../Zotlabs/Lib/Apps.php:320 msgid "Suggest" msgstr "Suggeriment" -#: ../../Zotlabs/Lib/Apps.php:259 +#: ../../Zotlabs/Lib/Apps.php:321 msgid "Random Channel" msgstr "Canal Aleatori" -#: ../../Zotlabs/Lib/Apps.php:260 +#: ../../Zotlabs/Lib/Apps.php:322 msgid "Invite" msgstr "Convida" -#: ../../Zotlabs/Lib/Apps.php:261 ../../Zotlabs/Widget/Admin.php:26 +#: ../../Zotlabs/Lib/Apps.php:323 ../../Zotlabs/Widget/Admin.php:26 msgid "Features" msgstr "Funcionalitats" -#: ../../Zotlabs/Lib/Apps.php:262 ../../addon/openid/MysqlProvider.php:69 +#: ../../Zotlabs/Lib/Apps.php:324 ../../addon/openid/MysqlProvider.php:69 msgid "Language" msgstr "Idioma" -#: ../../Zotlabs/Lib/Apps.php:263 +#: ../../Zotlabs/Lib/Apps.php:325 msgid "Post" msgstr "Entrada" -#: ../../Zotlabs/Lib/Apps.php:264 ../../addon/openid/MysqlProvider.php:58 +#: ../../Zotlabs/Lib/Apps.php:326 ../../addon/openid/MysqlProvider.php:58 #: ../../addon/openid/MysqlProvider.php:59 #: ../../addon/openid/MysqlProvider.php:60 msgid "Profile Photo" msgstr "Foto del Perfil" -#: ../../Zotlabs/Lib/Apps.php:407 +#: ../../Zotlabs/Lib/Apps.php:473 msgid "Purchase" msgstr "Compra" -#: ../../Zotlabs/Lib/Apps.php:411 +#: ../../Zotlabs/Lib/Apps.php:477 msgid "Undelete" msgstr "Desfés l'operació d'esborrar" -#: ../../Zotlabs/Lib/Apps.php:419 +#: ../../Zotlabs/Lib/Apps.php:485 msgid "Add to app-tray" msgstr "Afegeix a la safata d'aplicacions" -#: ../../Zotlabs/Lib/Apps.php:420 +#: ../../Zotlabs/Lib/Apps.php:486 msgid "Remove from app-tray" msgstr "Esborra de la safata d'aplicacions" -#: ../../Zotlabs/Lib/Apps.php:421 +#: ../../Zotlabs/Lib/Apps.php:487 msgid "Pin to navbar" msgstr "Fixa a la barra de navegació" -#: ../../Zotlabs/Lib/Apps.php:422 +#: ../../Zotlabs/Lib/Apps.php:488 msgid "Unpin from navbar" msgstr "Treu de la barra de navegació" @@ -7921,8 +8068,8 @@ msgctxt "wiki_history" msgid "Message" msgstr "Missatge" -#: ../../Zotlabs/Lib/NativeWikiPage.php:597 ../../include/bbcode.php:744 -#: ../../include/bbcode.php:914 +#: ../../Zotlabs/Lib/NativeWikiPage.php:597 ../../include/bbcode.php:746 +#: ../../include/bbcode.php:916 msgid "Different viewers will see this text differently" msgstr "Diferents observadors veuran aquest text de diferents formes" @@ -7987,7 +8134,7 @@ msgstr "Aquesta és la configuració per defecte per a qui pugui veure els teus #: ../../Zotlabs/Lib/PermissionDescription.php:154 msgid "This is your default setting for the audience of your webpages" -msgstr "Aquests son els ajustos per defecte de l'audiència de les teves pàgines web" +msgstr "Aquesta és la teva configuració per defecte per l'audiència de les teves pàgines web" #: ../../Zotlabs/Lib/Chatroom.php:23 msgid "Missing room name" @@ -8295,208 +8442,200 @@ msgstr "Error d'Actualització a %s" msgid "Update %s failed. See error logs." msgstr "L'actualització %s ha fallat. Mira el registre d'errors." -#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:697 +#: ../../Zotlabs/Lib/ThreadItem.php:97 ../../include/conversation.php:700 msgid "Private Message" msgstr "Missatge Privat" -#: ../../Zotlabs/Lib/ThreadItem.php:147 ../../include/conversation.php:689 +#: ../../Zotlabs/Lib/ThreadItem.php:152 ../../Zotlabs/Storage/Browser.php:280 +msgid "Admin Delete" +msgstr "Esborrat amb privilegis d'administració" + +#: ../../Zotlabs/Lib/ThreadItem.php:158 ../../include/conversation.php:690 msgid "Select" msgstr "Selecciona" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:183 msgid "I will attend" msgstr "Assistiré" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:183 msgid "I will not attend" msgstr "No assistiré" -#: ../../Zotlabs/Lib/ThreadItem.php:172 +#: ../../Zotlabs/Lib/ThreadItem.php:183 msgid "I might attend" msgstr "Podria assistir" -#: ../../Zotlabs/Lib/ThreadItem.php:182 +#: ../../Zotlabs/Lib/ThreadItem.php:193 msgid "I agree" msgstr "D'acord" -#: ../../Zotlabs/Lib/ThreadItem.php:182 +#: ../../Zotlabs/Lib/ThreadItem.php:193 msgid "I disagree" msgstr "En desacord" -#: ../../Zotlabs/Lib/ThreadItem.php:182 +#: ../../Zotlabs/Lib/ThreadItem.php:193 msgid "I abstain" msgstr "M'abstinc" -#: ../../Zotlabs/Lib/ThreadItem.php:238 -msgid "Add Star" -msgstr "Fes-lo Preferit" - -#: ../../Zotlabs/Lib/ThreadItem.php:239 -msgid "Remove Star" -msgstr "Treu-lo de Preferits" - -#: ../../Zotlabs/Lib/ThreadItem.php:240 +#: ../../Zotlabs/Lib/ThreadItem.php:247 ../../include/conversation.php:695 msgid "Toggle Star Status" msgstr "Canvia el Estat de la Preferència" -#: ../../Zotlabs/Lib/ThreadItem.php:244 -msgid "starred" -msgstr "preferit" - -#: ../../Zotlabs/Lib/ThreadItem.php:254 ../../include/conversation.php:704 +#: ../../Zotlabs/Lib/ThreadItem.php:258 ../../include/conversation.php:707 msgid "Message signature validated" msgstr "Validada la signatura del missatge" -#: ../../Zotlabs/Lib/ThreadItem.php:255 ../../include/conversation.php:705 +#: ../../Zotlabs/Lib/ThreadItem.php:259 ../../include/conversation.php:708 msgid "Message signature incorrect" msgstr "Signatura del missatge incorrecta" -#: ../../Zotlabs/Lib/ThreadItem.php:263 +#: ../../Zotlabs/Lib/ThreadItem.php:267 msgid "Add Tag" msgstr "Afegeix Etiqueta" -#: ../../Zotlabs/Lib/ThreadItem.php:281 ../../include/taxonomy.php:575 +#: ../../Zotlabs/Lib/ThreadItem.php:285 ../../include/taxonomy.php:575 msgid "like" msgstr "agrada" -#: ../../Zotlabs/Lib/ThreadItem.php:282 ../../include/taxonomy.php:576 +#: ../../Zotlabs/Lib/ThreadItem.php:286 ../../include/taxonomy.php:576 msgid "dislike" msgstr "desagrada" -#: ../../Zotlabs/Lib/ThreadItem.php:286 +#: ../../Zotlabs/Lib/ThreadItem.php:290 msgid "Share This" msgstr "Comparteix Això" -#: ../../Zotlabs/Lib/ThreadItem.php:286 +#: ../../Zotlabs/Lib/ThreadItem.php:290 msgid "share" msgstr "comparteix" -#: ../../Zotlabs/Lib/ThreadItem.php:295 +#: ../../Zotlabs/Lib/ThreadItem.php:299 msgid "Delivery Report" msgstr "Informe de Lliurament" -#: ../../Zotlabs/Lib/ThreadItem.php:313 +#: ../../Zotlabs/Lib/ThreadItem.php:317 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d commentari" msgstr[1] "%d commentaris" -#: ../../Zotlabs/Lib/ThreadItem.php:343 ../../Zotlabs/Lib/ThreadItem.php:344 +#: ../../Zotlabs/Lib/ThreadItem.php:347 ../../Zotlabs/Lib/ThreadItem.php:348 #, php-format msgid "View %s's profile - %s" -msgstr "Veure perfil de %s - %s" +msgstr "Mostra el perfil de %s - %s" -#: ../../Zotlabs/Lib/ThreadItem.php:347 +#: ../../Zotlabs/Lib/ThreadItem.php:351 msgid "to" msgstr "a" -#: ../../Zotlabs/Lib/ThreadItem.php:348 +#: ../../Zotlabs/Lib/ThreadItem.php:352 msgid "via" msgstr "via" -#: ../../Zotlabs/Lib/ThreadItem.php:349 +#: ../../Zotlabs/Lib/ThreadItem.php:353 msgid "Wall-to-Wall" msgstr "Mur-a-Mur" -#: ../../Zotlabs/Lib/ThreadItem.php:350 +#: ../../Zotlabs/Lib/ThreadItem.php:354 msgid "via Wall-To-Wall:" msgstr "via Mur-a-Mur:" -#: ../../Zotlabs/Lib/ThreadItem.php:363 ../../include/conversation.php:763 +#: ../../Zotlabs/Lib/ThreadItem.php:367 ../../include/conversation.php:766 #, php-format msgid "from %s" msgstr "De %s" -#: ../../Zotlabs/Lib/ThreadItem.php:366 ../../include/conversation.php:766 +#: ../../Zotlabs/Lib/ThreadItem.php:370 ../../include/conversation.php:769 #, php-format msgid "last edited: %s" msgstr "últim editat: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:367 ../../include/conversation.php:767 +#: ../../Zotlabs/Lib/ThreadItem.php:371 ../../include/conversation.php:770 #, php-format msgid "Expires: %s" msgstr "Expira: %s" -#: ../../Zotlabs/Lib/ThreadItem.php:374 +#: ../../Zotlabs/Lib/ThreadItem.php:379 msgid "Attend" msgstr "Assistir-hi" -#: ../../Zotlabs/Lib/ThreadItem.php:375 +#: ../../Zotlabs/Lib/ThreadItem.php:380 msgid "Attendance Options" msgstr "Opcions d'assistència" -#: ../../Zotlabs/Lib/ThreadItem.php:376 +#: ../../Zotlabs/Lib/ThreadItem.php:381 msgid "Vote" msgstr "Votar" -#: ../../Zotlabs/Lib/ThreadItem.php:377 +#: ../../Zotlabs/Lib/ThreadItem.php:382 msgid "Voting Options" msgstr "Opcions de votació" -#: ../../Zotlabs/Lib/ThreadItem.php:398 +#: ../../Zotlabs/Lib/ThreadItem.php:403 #: ../../addon/bookmarker/bookmarker.php:38 msgid "Save Bookmarks" -msgstr "Guarda Favorits" +msgstr "Desa els marcadors" -#: ../../Zotlabs/Lib/ThreadItem.php:399 +#: ../../Zotlabs/Lib/ThreadItem.php:404 msgid "Add to Calendar" msgstr "Afegeix al Calendari" -#: ../../Zotlabs/Lib/ThreadItem.php:426 ../../include/conversation.php:483 +#: ../../Zotlabs/Lib/ThreadItem.php:431 ../../include/conversation.php:483 msgid "This is an unsaved preview" msgstr "Això només és una vista prèvia, no està desada" -#: ../../Zotlabs/Lib/ThreadItem.php:458 ../../include/js_strings.php:7 +#: ../../Zotlabs/Lib/ThreadItem.php:463 ../../include/js_strings.php:7 #, php-format msgid "%s show all" msgstr "%s mostra-ho tot" -#: ../../Zotlabs/Lib/ThreadItem.php:753 ../../include/conversation.php:1380 +#: ../../Zotlabs/Lib/ThreadItem.php:758 ../../include/conversation.php:1388 msgid "Bold" msgstr "Negreta" -#: ../../Zotlabs/Lib/ThreadItem.php:754 ../../include/conversation.php:1381 +#: ../../Zotlabs/Lib/ThreadItem.php:759 ../../include/conversation.php:1389 msgid "Italic" msgstr "Italica" -#: ../../Zotlabs/Lib/ThreadItem.php:755 ../../include/conversation.php:1382 +#: ../../Zotlabs/Lib/ThreadItem.php:760 ../../include/conversation.php:1390 msgid "Underline" msgstr "Subratllat" -#: ../../Zotlabs/Lib/ThreadItem.php:756 ../../include/conversation.php:1383 +#: ../../Zotlabs/Lib/ThreadItem.php:761 ../../include/conversation.php:1391 msgid "Quote" msgstr "Cometes" -#: ../../Zotlabs/Lib/ThreadItem.php:757 ../../include/conversation.php:1384 +#: ../../Zotlabs/Lib/ThreadItem.php:762 ../../include/conversation.php:1392 msgid "Code" msgstr "Codi" -#: ../../Zotlabs/Lib/ThreadItem.php:758 +#: ../../Zotlabs/Lib/ThreadItem.php:763 msgid "Image" msgstr "Imatge" -#: ../../Zotlabs/Lib/ThreadItem.php:759 -msgid "Attach File" -msgstr "Adjunta un fitxer" +#: ../../Zotlabs/Lib/ThreadItem.php:764 ../../include/conversation.php:1393 +msgid "Attach/Upload file" +msgstr "Adjunta i puja un arxiu" -#: ../../Zotlabs/Lib/ThreadItem.php:760 +#: ../../Zotlabs/Lib/ThreadItem.php:765 msgid "Insert Link" msgstr "Insereix Enllaç" -#: ../../Zotlabs/Lib/ThreadItem.php:761 +#: ../../Zotlabs/Lib/ThreadItem.php:766 msgid "Video" msgstr "Video" -#: ../../Zotlabs/Lib/ThreadItem.php:771 +#: ../../Zotlabs/Lib/ThreadItem.php:776 msgid "Your full name (required)" msgstr "Nom complet (obligatori)" -#: ../../Zotlabs/Lib/ThreadItem.php:772 +#: ../../Zotlabs/Lib/ThreadItem.php:777 msgid "Your email address (required)" msgstr "Adreça de correu (obligatòria)" -#: ../../Zotlabs/Lib/ThreadItem.php:773 +#: ../../Zotlabs/Lib/ThreadItem.php:778 msgid "Your website URL (optional)" msgstr "Adreça web (opcional)" @@ -8512,11 +8651,11 @@ msgstr "Autenticació remota bloquejada. Ha iniciat sessió en aquest lloc a niv msgid "Welcome %s. Remote authentication successful." msgstr "Benvingut %s. Autenticació remota reeixida." -#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:287 +#: ../../Zotlabs/Storage/Browser.php:107 ../../Zotlabs/Storage/Browser.php:289 msgid "parent" msgstr "amunt" -#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2845 +#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2817 msgid "Collection" msgstr "Col·lecció" @@ -8528,8 +8667,8 @@ msgstr "Principal" msgid "Addressbook" msgstr "Llista d'Adreçes" -#: ../../Zotlabs/Storage/Browser.php:140 ../../include/nav.php:420 -#: ../../include/nav.php:423 +#: ../../Zotlabs/Storage/Browser.php:140 ../../include/nav.php:412 +#: ../../include/nav.php:415 msgid "Calendar" msgstr "Calendari" @@ -8553,33 +8692,36 @@ msgstr "Compartit" msgid "Add Files" msgstr "Afegeix arxius" -#: ../../Zotlabs/Storage/Browser.php:353 +#: ../../Zotlabs/Storage/Browser.php:361 #, php-format msgid "You are using %1$s of your available file storage." msgstr "Estàs emprant el %1$s de l'espai d'emmagatzematge disponible" -#: ../../Zotlabs/Storage/Browser.php:358 +#: ../../Zotlabs/Storage/Browser.php:366 #, php-format msgid "You are using %1$s of %2$s available file storage. (%3$s%)" msgstr "Estàs emprant %1$s de %2$s d'emmagatzematge d'arxius disponible.\n(%3$s%)" -#: ../../Zotlabs/Storage/Browser.php:369 +#: ../../Zotlabs/Storage/Browser.php:377 msgid "WARNING:" msgstr "ALERTA:" -#: ../../Zotlabs/Storage/Browser.php:381 +#: ../../Zotlabs/Storage/Browser.php:389 msgid "Create new folder" msgstr "Crea una nova carpeta" -#: ../../Zotlabs/Storage/Browser.php:383 +#: ../../Zotlabs/Storage/Browser.php:391 msgid "Upload file" msgstr "Puja arxiu" -#: ../../Zotlabs/Storage/Browser.php:396 +#: ../../Zotlabs/Storage/Browser.php:404 msgid "Drop files here to immediately upload" msgstr "Deixa anar fitxers aquí per a pujar-los immediatament" #: ../../Zotlabs/Widget/Forums.php:100 +#: ../../Zotlabs/Widget/Activity_filter.php:100 +#: ../../Zotlabs/Widget/Notifications.php:119 +#: ../../Zotlabs/Widget/Notifications.php:120 msgid "Forums" msgstr "Forums" @@ -8659,7 +8801,7 @@ msgstr "Importa una llibreta d'adreces" msgid "Select an addressbook to import to" msgstr "Escull la llibreta d'adreces a on importar" -#: ../../Zotlabs/Widget/Appcategories.php:40 +#: ../../Zotlabs/Widget/Appcategories.php:43 #: ../../include/contact_widgets.php:97 ../../include/contact_widgets.php:141 #: ../../include/contact_widgets.php:186 ../../include/taxonomy.php:409 #: ../../include/taxonomy.php:491 ../../include/taxonomy.php:511 @@ -8667,7 +8809,8 @@ msgstr "Escull la llibreta d'adreces a on importar" msgid "Categories" msgstr "Categories" -#: ../../Zotlabs/Widget/Appcategories.php:43 ../../Zotlabs/Widget/Filer.php:31 +#: ../../Zotlabs/Widget/Appcategories.php:46 ../../Zotlabs/Widget/Filer.php:31 +#: ../../widgets/Netselect/Netselect.php:26 #: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:100 #: ../../include/contact_widgets.php:144 ../../include/contact_widgets.php:189 msgid "Everything" @@ -8718,8 +8861,8 @@ msgid "New Message" msgstr "Nou Missatge" #: ../../Zotlabs/Widget/Chatroom_list.php:16 -#: ../../include/conversation.php:1867 ../../include/conversation.php:1870 -#: ../../include/nav.php:434 ../../include/nav.php:437 +#: ../../include/conversation.php:1876 ../../include/conversation.php:1879 +#: ../../include/nav.php:426 ../../include/nav.php:429 msgid "Chatrooms" msgstr "Sala per Xerrar" @@ -8744,6 +8887,74 @@ msgctxt "widget" msgid "Activity" msgstr "Activitat" +#: ../../Zotlabs/Widget/Activity_filter.php:24 +msgid "Personal Posts" +msgstr "Entrades personals" + +#: ../../Zotlabs/Widget/Activity_filter.php:28 +msgid "Show posts that mention or involve me" +msgstr "Mostra les entrades que m'inclouen" + +#: ../../Zotlabs/Widget/Activity_filter.php:39 +msgid "Starred Posts" +msgstr "Entrades destacades" + +#: ../../Zotlabs/Widget/Activity_filter.php:43 +msgid "Show posts that I have starred" +msgstr "Mostra les entrades que he destacat" + +#: ../../Zotlabs/Widget/Activity_filter.php:63 +#, php-format +msgid "Show posts related to the %s privacy group" +msgstr "Mostra les entrades relacionades amb el grup de privacitat %s" + +#: ../../Zotlabs/Widget/Activity_filter.php:72 +msgid "Show my privacy groups" +msgstr "Mostra els meus grups de privacitat" + +#: ../../Zotlabs/Widget/Activity_filter.php:93 +msgid "Show posts to this forum" +msgstr "Mostra les entrades a aquest fòrum" + +#: ../../Zotlabs/Widget/Activity_filter.php:104 +msgid "Show forums" +msgstr "Mostra els fòrums" + +#: ../../Zotlabs/Widget/Activity_filter.php:128 +#, php-format +msgid "Show posts that I have filed to %s" +msgstr "Mostra les entrades que he penjat a %s" + +#: ../../Zotlabs/Widget/Activity_filter.php:134 +#: ../../Zotlabs/Widget/Filer.php:28 ../../include/contact_widgets.php:53 +#: ../../include/features.php:488 +msgid "Saved Folders" +msgstr "Carpetes Guardades" + +#: ../../Zotlabs/Widget/Activity_filter.php:138 +msgid "Show filed post categories" +msgstr "Mostra les categories de les entrades pujades" + +#: ../../Zotlabs/Widget/Activity_filter.php:152 +msgid "Panel search" +msgstr "Panell de cerca" + +#: ../../Zotlabs/Widget/Activity_filter.php:162 +#: ../../Zotlabs/Widget/Notifications.php:27 +#: ../../Zotlabs/Widget/Notifications.php:46 +#: ../../Zotlabs/Widget/Notifications.php:122 +#: ../../Zotlabs/Widget/Notifications.php:153 +msgid "Filter by name" +msgstr "Filtra per nom" + +#: ../../Zotlabs/Widget/Activity_filter.php:177 +msgid "Remove active filter" +msgstr "Esborra el filtre actual" + +#: ../../Zotlabs/Widget/Activity_filter.php:193 +msgid "Activity Filters" +msgstr "Filtres d'activitat" + #: ../../Zotlabs/Widget/Follow.php:22 #, php-format msgid "You have %1$.0f of %2$.0f allowed connections." @@ -8805,7 +9016,7 @@ msgstr "Plaç de remoció" msgid "Saved Searches" msgstr "Cerques Guardades" -#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:333 +#: ../../Zotlabs/Widget/Savedsearch.php:84 ../../include/group.php:325 msgid "add" msgstr "afegeix" @@ -8842,10 +9053,33 @@ msgstr "Suggerencies" msgid "See more..." msgstr "Veure més....." -#: ../../Zotlabs/Widget/Filer.php:28 ../../include/contact_widgets.php:53 -#: ../../include/features.php:470 -msgid "Saved Folders" -msgstr "Carpetes Guardades" +#: ../../Zotlabs/Widget/Activity_order.php:86 +msgid "Commented Date" +msgstr "Data dels comentaris" + +#: ../../Zotlabs/Widget/Activity_order.php:90 +msgid "Order by last commented date" +msgstr "Ordena segons la data dels comentaris més recents" + +#: ../../Zotlabs/Widget/Activity_order.php:93 +msgid "Posted Date" +msgstr "Data de les entrades" + +#: ../../Zotlabs/Widget/Activity_order.php:97 +msgid "Order by last posted date" +msgstr "Ordena segons la data de publicació de les entrades" + +#: ../../Zotlabs/Widget/Activity_order.php:100 +msgid "Date Unthreaded" +msgstr "Data sense agrupar" + +#: ../../Zotlabs/Widget/Activity_order.php:104 +msgid "Order unthreaded by date" +msgstr "Ordena per data els comentaris i les publicacions sense agrupar-los per converses" + +#: ../../Zotlabs/Widget/Activity_order.php:119 +msgid "Activity Order" +msgstr "Ordre de les activitats" #: ../../Zotlabs/Widget/Cover_photo.php:54 msgid "Click to show more" @@ -8856,6 +9090,18 @@ msgstr "Fes clic per veure més" msgid "Tags" msgstr "Etiquetes" +#: ../../Zotlabs/Widget/Appstore.php:11 +msgid "App Collections" +msgstr "Coŀleccions d'aplicacions" + +#: ../../Zotlabs/Widget/Appstore.php:13 +msgid "Available Apps" +msgstr "Aplicacions disponibles" + +#: ../../Zotlabs/Widget/Appstore.php:14 +msgid "Installed apps" +msgstr "Aplicacions instaŀlades" + #: ../../Zotlabs/Widget/Newmember.php:24 msgid "Profile Creation" msgstr "Creació de perfils" @@ -8868,9 +9114,9 @@ msgstr "Puja una foto de perfil" msgid "Upload cover photo" msgstr "Puja una foto de portada" -#: ../../Zotlabs/Widget/Newmember.php:28 ../../include/nav.php:119 +#: ../../Zotlabs/Widget/Newmember.php:28 ../../include/nav.php:113 msgid "Edit your profile" -msgstr "Edita el teu perfil" +msgstr "Modifica el teu perfil" #: ../../Zotlabs/Widget/Newmember.php:31 msgid "Find and Connect with others" @@ -8920,21 +9166,21 @@ msgstr "Revisa cua" msgid "DB updates" msgstr "Actualitzacions de Base de Dades" -#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:199 +#: ../../Zotlabs/Widget/Admin.php:55 ../../include/nav.php:191 msgid "Admin" -msgstr "Admin" +msgstr "Administració" #: ../../Zotlabs/Widget/Admin.php:56 -msgid "Plugin Features" -msgstr "Extensions configurables" +msgid "Addon Features" +msgstr "Funcions de les extensions" #: ../../Zotlabs/Widget/Settings_menu.php:35 msgid "Account settings" -msgstr "Ajustos de Compte" +msgstr "Configuració del compte" #: ../../Zotlabs/Widget/Settings_menu.php:41 msgid "Channel settings" -msgstr "Ajustos de Canal" +msgstr "Configuració del canal" #: ../../Zotlabs/Widget/Settings_menu.php:50 msgid "Additional features" @@ -8946,7 +9192,7 @@ msgstr "Configuració de les extensions" #: ../../Zotlabs/Widget/Settings_menu.php:63 msgid "Display settings" -msgstr "Ajustos de pantalla" +msgstr "Configuració de pantalla" #: ../../Zotlabs/Widget/Settings_menu.php:70 msgid "Manage locations" @@ -8964,17 +9210,13 @@ msgstr "Aplicacions OAuth1" msgid "OAuth2 apps" msgstr "Aplicacions OAuth2" -#: ../../Zotlabs/Widget/Settings_menu.php:108 ../../include/features.php:240 -msgid "Permission Groups" -msgstr "Grups de permisos" - #: ../../Zotlabs/Widget/Settings_menu.php:125 msgid "Premium Channel Settings" -msgstr "Ajustos Premium de Canal" +msgstr "Configuració dels canals prèmium" #: ../../Zotlabs/Widget/Bookmarkedchats.php:24 msgid "Bookmarked Chatrooms" -msgstr "Sales de Xat Favorites" +msgstr "Sales de xat desades" #: ../../Zotlabs/Widget/Notifications.php:16 msgid "New Network Activity" @@ -8994,16 +9236,10 @@ msgstr "Marca totes les notificacions com a vistes" #: ../../Zotlabs/Widget/Notifications.php:26 #: ../../Zotlabs/Widget/Notifications.php:45 -#: ../../Zotlabs/Widget/Notifications.php:141 +#: ../../Zotlabs/Widget/Notifications.php:152 msgid "Show new posts only" msgstr "Mostra només les entrades noves" -#: ../../Zotlabs/Widget/Notifications.php:27 -#: ../../Zotlabs/Widget/Notifications.php:46 -#: ../../Zotlabs/Widget/Notifications.php:142 -msgid "Filter by name" -msgstr "Filtra per nom" - #: ../../Zotlabs/Widget/Notifications.php:35 msgid "New Home Activity" msgstr "Activitat nova al mur" @@ -9017,7 +9253,7 @@ msgid "View your home activity" msgstr "Mostra l'activitat al teu mur" #: ../../Zotlabs/Widget/Notifications.php:42 -#: ../../Zotlabs/Widget/Notifications.php:138 +#: ../../Zotlabs/Widget/Notifications.php:149 msgid "Mark all notifications seen" msgstr "Marca totes les notificacions com a vistes" @@ -9082,23 +9318,23 @@ msgstr "Mostra totes les notificacions" msgid "Mark all notices seen" msgstr "Marca totes les notificacions com a vistes" -#: ../../Zotlabs/Widget/Notifications.php:121 +#: ../../Zotlabs/Widget/Notifications.php:132 msgid "New Registrations" msgstr "Inscripcions noves" -#: ../../Zotlabs/Widget/Notifications.php:122 +#: ../../Zotlabs/Widget/Notifications.php:133 msgid "New Registrations Notifications" msgstr "Notificacions noves d'inscripció" -#: ../../Zotlabs/Widget/Notifications.php:132 +#: ../../Zotlabs/Widget/Notifications.php:143 msgid "Public Stream Notifications" msgstr "Notificacions del flux públic" -#: ../../Zotlabs/Widget/Notifications.php:135 +#: ../../Zotlabs/Widget/Notifications.php:146 msgid "View the public stream" msgstr "Mostra el flux públic" -#: ../../Zotlabs/Widget/Notifications.php:150 +#: ../../Zotlabs/Widget/Notifications.php:161 msgid "Sorry, you have got no notifications at the moment" msgstr "No tens cap notificació" @@ -9106,57 +9342,53 @@ msgstr "No tens cap notificació" msgid "Source channel not found." msgstr "No s'ha trobat el canal font." -#: ../../boot.php:1569 +#: ../../boot.php:1592 msgid "Create an account to access services and applications" msgstr "Crea un compte per tal d'accedir a serveis i aplicacions" -#: ../../boot.php:1588 ../../include/nav.php:111 ../../include/nav.php:140 -#: ../../include/nav.php:159 +#: ../../boot.php:1612 ../../include/nav.php:105 ../../include/nav.php:134 +#: ../../include/nav.php:153 msgid "Logout" -msgstr "Desconectar" +msgstr "Surt" -#: ../../boot.php:1592 +#: ../../boot.php:1616 msgid "Login/Email" msgstr "Correu d'usuari" -#: ../../boot.php:1593 +#: ../../boot.php:1617 msgid "Password" msgstr "Contrasenya" -#: ../../boot.php:1594 +#: ../../boot.php:1618 msgid "Remember me" msgstr "Recorda'm" -#: ../../boot.php:1597 +#: ../../boot.php:1621 msgid "Forgot your password?" msgstr "Has perdut la Contrasenya?" -#: ../../boot.php:2354 +#: ../../boot.php:2405 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Error de TLS per a %s" -#: ../../boot.php:2359 +#: ../../boot.php:2410 msgid "Website SSL certificate is not valid. Please correct." msgstr "El certificat SSL és invalid, soluciona-ho, si us plau." -#: ../../boot.php:2475 +#: ../../boot.php:2526 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Les tasques del cron tasks no s'estan executant a %s" -#: ../../boot.php:2480 +#: ../../boot.php:2531 msgid "Cron/Scheduled tasks not running." msgstr "No s'estan executant les tasques programades al cron." -#: ../../boot.php:2481 ../../include/datetime.php:238 +#: ../../boot.php:2532 ../../include/datetime.php:238 msgid "never" msgstr "mai" -#: ../../store/[data]/smarty3/compiled/a0a1289f91f53b2c12e4e0b45ffe8291540ba895_0.file.cover_photo.tpl.php:123 -msgid "Cover Photo" -msgstr "Foto de portada" - #: ../../view/theme/redbasic_c/php/config.php:16 #: ../../view/theme/redbasic_c/php/config.php:19 #: ../../view/theme/redbasic/php/config.php:16 @@ -9167,7 +9399,7 @@ msgstr "Focus (Hubzilla per defecte)" #: ../../view/theme/redbasic_c/php/config.php:99 #: ../../view/theme/redbasic/php/config.php:97 msgid "Theme settings" -msgstr "Ajustos de tema" +msgstr "Configuració de tema" #: ../../view/theme/redbasic_c/php/config.php:100 #: ../../view/theme/redbasic/php/config.php:98 @@ -9273,6 +9505,33 @@ msgstr "Ajusta la mida de la foto del autor a la conversa" msgid "Set size of followup author photos" msgstr "Ajusta la mida del seguidor de les fotos de l'autor" +#: ../../widgets/Netselect/Netselect.php:24 +msgid "Network/Protocol" +msgstr "Xarxa/protocol" + +#: ../../widgets/Netselect/Netselect.php:28 ../../include/network.php:1772 +msgid "Zot" +msgstr "Zot" + +#: ../../widgets/Netselect/Netselect.php:31 ../../include/network.php:1770 +msgid "Diaspora" +msgstr "Diaspora" + +#: ../../widgets/Netselect/Netselect.php:33 ../../include/network.php:1763 +#: ../../include/network.php:1764 +msgid "Friendica" +msgstr "Friendica" + +#: ../../widgets/Netselect/Netselect.php:38 ../../include/network.php:1765 +msgid "OStatus" +msgstr "OStatus" + +#: ../../widgets/Netselect/Netselect.php:42 ../../addon/pubcrawl/as.php:1219 +#: ../../addon/pubcrawl/as.php:1374 ../../addon/pubcrawl/as.php:1553 +#: ../../include/network.php:1768 +msgid "ActivityPub" +msgstr "ActivityPub" + #: ../../addon/rendezvous/rendezvous.php:57 msgid "Errors encountered deleting database table " msgstr "S'ha produït un o més errors en esborrar una taula de la base de dades" @@ -9415,30 +9674,30 @@ msgstr "Opció Y" msgid "Skeleton Settings" msgstr "Configuració del Skeleton" -#: ../../addon/gnusoc/gnusoc.php:249 +#: ../../addon/gnusoc/gnusoc.php:258 msgid "GNU-Social Protocol Settings updated." msgstr "S'ha actualitzat la configuració del Protocol GNU-Social" -#: ../../addon/gnusoc/gnusoc.php:268 +#: ../../addon/gnusoc/gnusoc.php:277 msgid "" "The GNU-Social protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "El Protocol GNU-Social és incompatible amb la independència de hub. Les connexions que facis en aquesta xarxa no seran accessibles des de hubs alternatius del teu canal." -#: ../../addon/gnusoc/gnusoc.php:271 +#: ../../addon/gnusoc/gnusoc.php:280 msgid "Enable the GNU-Social protocol for this channel" msgstr "Habilita el Protocol GNU-Social per a aquest canal" -#: ../../addon/gnusoc/gnusoc.php:275 +#: ../../addon/gnusoc/gnusoc.php:284 msgid "GNU-Social Protocol Settings" msgstr "Configuració del Protocol GNU-Social " -#: ../../addon/gnusoc/gnusoc.php:471 +#: ../../addon/gnusoc/gnusoc.php:480 msgid "Follow" msgstr "Segueix" -#: ../../addon/gnusoc/gnusoc.php:474 +#: ../../addon/gnusoc/gnusoc.php:483 #, php-format msgid "%1$s is now following %2$s" msgstr "%1$s ara segueix a %2$s" @@ -9485,9 +9744,9 @@ msgid "Page to load after image selection." msgstr "Pàgina per carregar després d'haver seleccionat una imatge." #: ../../addon/openclipatar/openclipatar.php:58 ../../include/channel.php:1300 -#: ../../include/nav.php:119 +#: ../../include/nav.php:113 msgid "Edit Profile" -msgstr "Edita Perfil" +msgstr "Modifica el meu perfil" #: ../../addon/openclipatar/openclipatar.php:59 msgid "Profile List" @@ -9871,6 +10130,14 @@ msgstr "S'han actualitzat els paràmetres de IRC." msgid "IRC Chatroom" msgstr "Sala de IRC" +#: ../../addon/gallery/gallery.php:42 ../../addon/gallery/Mod_Gallery.php:111 +msgid "Gallery" +msgstr "Galeria" + +#: ../../addon/gallery/gallery.php:45 +msgid "Photo Gallery" +msgstr "Galeria d'imatges" + #: ../../addon/ljpost/ljpost.php:42 msgid "Post to LiveJournal" msgstr "Publica a LiveJournal" @@ -9973,7 +10240,7 @@ msgstr "Aniversar" msgid "OpenID protocol error. No ID returned." msgstr "Error d'OpenID. No s'ha aconseguit cap ID." -#: ../../addon/openid/Mod_Openid.php:188 ../../include/auth.php:300 +#: ../../addon/openid/Mod_Openid.php:188 ../../include/auth.php:317 msgid "Login failed." msgstr "Identificació fallida." @@ -10170,39 +10437,39 @@ msgstr "declarar-li l'amor etern a" msgid "declared undying love for" msgstr "li ha declarar amor etern a" -#: ../../addon/diaspora/diaspora.php:781 +#: ../../addon/diaspora/diaspora.php:786 msgid "Diaspora Protocol Settings updated." msgstr "S'ha actualitzat la configuració del Protocol de Diàspora" -#: ../../addon/diaspora/diaspora.php:800 +#: ../../addon/diaspora/diaspora.php:805 msgid "" "The Diaspora protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "El Protocol de Diàspora és incompatible amb la independència de hub. Les connexions que facis en aquesta xarxa no seran accessibles des de hubs alternatius del teu canal." -#: ../../addon/diaspora/diaspora.php:803 +#: ../../addon/diaspora/diaspora.php:808 msgid "Enable the Diaspora protocol for this channel" msgstr "Activa el Protocol de Diàspora per aquest canal" -#: ../../addon/diaspora/diaspora.php:807 +#: ../../addon/diaspora/diaspora.php:812 msgid "Allow any Diaspora member to comment on your public posts" msgstr "Permet a qualsevol membre de Diàspora de comentar les teves entrades públiques" -#: ../../addon/diaspora/diaspora.php:811 +#: ../../addon/diaspora/diaspora.php:816 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Evita que les teves etiquetes siguin redirigides a altres llocs web" -#: ../../addon/diaspora/diaspora.php:815 +#: ../../addon/diaspora/diaspora.php:820 msgid "" "Sign and forward posts and comments with no existing Diaspora signature" msgstr "Signa i reenvia entrades o comentaris encara que no tinguin una signatura de Diàspora vàlida." -#: ../../addon/diaspora/diaspora.php:820 +#: ../../addon/diaspora/diaspora.php:825 msgid "Followed hashtags (comma separated, do not include the #)" msgstr "Etiquetes seguides (separades per comes i sense incloure #)" -#: ../../addon/diaspora/diaspora.php:825 +#: ../../addon/diaspora/diaspora.php:830 msgid "Diaspora Protocol Settings" msgstr "Configuració del Protocol de Diàspora" @@ -10210,7 +10477,7 @@ msgstr "Configuració del Protocol de Diàspora" msgid "No username found in import file." msgstr "No s'ha trobat el nom d'usuari en el fitxer d'importació." -#: ../../addon/diaspora/import_diaspora.php:41 ../../include/import.php:67 +#: ../../addon/diaspora/import_diaspora.php:41 ../../include/import.php:72 msgid "Unable to create a unique channel address. Import failed." msgstr "No s'ha pogut importar el canal perquè l'adreça única de canal no s'ha pogut crear." @@ -10673,35 +10940,40 @@ msgstr "Nom de registre a Friendica" msgid "Friendica Login Password" msgstr "Contrasenya a Friendica" -#: ../../addon/pubcrawl/as.php:1146 ../../addon/pubcrawl/as.php:1273 -#: ../../addon/pubcrawl/as.php:1449 ../../include/network.php:1769 -msgid "ActivityPub" -msgstr "ActivityPub" - -#: ../../addon/pubcrawl/pubcrawl.php:1053 +#: ../../addon/pubcrawl/pubcrawl.php:1136 msgid "ActivityPub Protocol Settings updated." msgstr "S'ha actualitzat la configuració del Protocol ActivityPub." -#: ../../addon/pubcrawl/pubcrawl.php:1062 +#: ../../addon/pubcrawl/pubcrawl.php:1145 msgid "" "The ActivityPub protocol does not support location independence. Connections" " you make within that network may be unreachable from alternate channel " "locations." msgstr "El Protocol ActivityPub és incompatible amb la independència de hub. Les connexions que facis en aquesta xarxa no seran accessibles des de hubs alternatius del teu canal." -#: ../../addon/pubcrawl/pubcrawl.php:1065 +#: ../../addon/pubcrawl/pubcrawl.php:1148 msgid "Enable the ActivityPub protocol for this channel" msgstr "Activa el Protocol ActivityPub en aquest canal" -#: ../../addon/pubcrawl/pubcrawl.php:1068 +#: ../../addon/pubcrawl/pubcrawl.php:1151 +msgid "Deliver to ActivityPub recipients in privacy groups" +msgstr "Envia a identitats d'ActivityPub en grups de privacitat" + +#: ../../addon/pubcrawl/pubcrawl.php:1151 +msgid "" +"May result in a large number of mentions and expose all the members of your " +"privacy group" +msgstr "Pot comportar moltes mencions i revelar els teus grups de privacitat." + +#: ../../addon/pubcrawl/pubcrawl.php:1155 msgid "Send multi-media HTML articles" msgstr "Envia articles HTML multimèdia" -#: ../../addon/pubcrawl/pubcrawl.php:1068 +#: ../../addon/pubcrawl/pubcrawl.php:1155 msgid "Not supported by some microblog services such as Mastodon" msgstr "Incompatible amb alguns serveis de microbloguing com Mastodon" -#: ../../addon/pubcrawl/pubcrawl.php:1072 +#: ../../addon/pubcrawl/pubcrawl.php:1159 msgid "ActivityPub Protocol Settings" msgstr "Configuració del Protocol ActivityPub" @@ -11186,75 +11458,206 @@ msgstr "Amaga el botó i mostra les icones directament." msgid "Smileybutton Settings" msgstr "Configuració de Smileybutton" -#: ../../addon/cart/myshop.php:138 +#: ../../addon/cart/myshop.php:44 +msgid "Access Denied." +msgstr "S'ha denegat l'accés." + +#: ../../addon/cart/myshop.php:125 ../../addon/cart/cart.php:1324 msgid "Order Not Found" msgstr "No s'ha trobat l'ordre" -#: ../../addon/cart/cart.php:810 -msgid "Order cannot be checked out." -msgstr "No s'ha pogut confirmar l'ordre." +#: ../../addon/cart/myshop.php:155 ../../addon/cart/myshop.php:191 +#: ../../addon/cart/myshop.php:225 ../../addon/cart/myshop.php:273 +#: ../../addon/cart/myshop.php:308 ../../addon/cart/myshop.php:331 +msgid "Access Denied" +msgstr "S'ha denegat l'accés" -#: ../../addon/cart/cart.php:1073 +#: ../../addon/cart/myshop.php:200 ../../addon/cart/myshop.php:234 +#: ../../addon/cart/myshop.php:283 ../../addon/cart/myshop.php:341 +msgid "Invalid Item" +msgstr "L'article és invàlid" + +#: ../../addon/cart/cart.php:467 +msgid "[cart] Item Added" +msgstr "[cart] S'ha afegit un article" + +#: ../../addon/cart/cart.php:851 +msgid "Order already checked out." +msgstr "La comanda ja s'ha servit." + +#: ../../addon/cart/cart.php:1204 msgid "Enable Shopping Cart" msgstr "Habilita la cistella de la compra" -#: ../../addon/cart/cart.php:1080 +#: ../../addon/cart/cart.php:1211 msgid "Enable Test Catalog" msgstr "Habilita un catàleg de prova" -#: ../../addon/cart/cart.php:1088 +#: ../../addon/cart/cart.php:1219 msgid "Enable Manual Payments" msgstr "Habilita els pagaments manuals" -#: ../../addon/cart/cart.php:1103 -msgid "Base Cart Settings" -msgstr "Configuració bàsica de la cistella" +#: ../../addon/cart/cart.php:1238 +msgid "Base Merchant Currency" +msgstr "Moneda base del comerç" + +#: ../../addon/cart/cart.php:1250 +msgid "Cart - Base Settings" +msgstr "Carretó - Configuració bàsica" -#: ../../addon/cart/cart.php:1151 -msgid "Add Item" -msgstr "Afegeix un element" +#: ../../addon/cart/cart.php:1271 ../../addon/cart/cart.php:1274 +msgid "Shop" +msgstr "Botiga" -#: ../../addon/cart/cart.php:1165 -msgid "Call cart_post_" -msgstr "Crida cart_post_" +#: ../../addon/cart/cart.php:1401 +msgid "You must be logged into the Grid to shop." +msgstr "Cal haver iniciat sessió per a poder comprar." -#: ../../addon/cart/cart.php:1195 +#: ../../addon/cart/cart.php:1411 msgid "Cart Not Enabled (profile: " msgstr "La cistella no està habilitada (perfil:" -#: ../../addon/cart/cart.php:1226 ../../addon/cart/manual_payments.php:36 +#: ../../addon/cart/cart.php:1442 +#: ../../addon/cart/submodules/paypalbutton.php:417 +#: ../../addon/cart/manual_payments.php:37 msgid "Order not found." msgstr "No s'ha trobat l'ordre." -#: ../../addon/cart/cart.php:1262 ../../addon/cart/cart.php:1389 +#: ../../addon/cart/cart.php:1451 +msgid "Access denied." +msgstr "S'ha denegat l'accés." + +#: ../../addon/cart/cart.php:1503 ../../addon/cart/cart.php:1647 msgid "No Order Found" msgstr "No s'ha trobat cap ordre" -#: ../../addon/cart/cart.php:1270 -msgid "call: " -msgstr "crida:" - -#: ../../addon/cart/cart.php:1273 +#: ../../addon/cart/cart.php:1512 msgid "An unknown error has occurred Please start again." msgstr "S'ha produït un error inesperat. Torna-ho a provar." -#: ../../addon/cart/cart.php:1414 +#: ../../addon/cart/cart.php:1680 msgid "Invalid Payment Type. Please start again." msgstr "El tipus de pagament no és vàlid. Torna a començar." -#: ../../addon/cart/cart.php:1421 +#: ../../addon/cart/cart.php:1687 msgid "Order not found" msgstr "No s'ha trobat l'ordre" -#: ../../addon/cart/manual_payments.php:9 +#: ../../addon/cart/submodules/paypalbutton.php:97 +msgid "Enable Paypal Button Module" +msgstr "Activa el mòdul del botó de Paypal" + +#: ../../addon/cart/submodules/paypalbutton.php:102 +msgid "Use Production Key" +msgstr "Fes servir la clau de producció" + +#: ../../addon/cart/submodules/paypalbutton.php:109 +msgid "Paypal Sandbox Client Key" +msgstr "Clau de client de Paypal del banc de proves" + +#: ../../addon/cart/submodules/paypalbutton.php:116 +msgid "Paypal Sandbox Secret Key" +msgstr "Clau secreta de Paypal del banc de proves" + +#: ../../addon/cart/submodules/paypalbutton.php:122 +msgid "Paypal Production Client Key" +msgstr "Clau de client de Paypal de producció" + +#: ../../addon/cart/submodules/paypalbutton.php:129 +msgid "Paypal Production Secret Key" +msgstr "Clau secreta de Paypal de producció" + +#: ../../addon/cart/submodules/paypalbutton.php:143 +msgid "Cart - Paypal Addon" +msgstr "Carretó - Extensió de Paypal" + +#: ../../addon/cart/submodules/paypalbutton.php:277 +msgid "Paypal button payments are not enabled." +msgstr "El botó de pagament per Paypal no està habilitat." + +#: ../../addon/cart/submodules/paypalbutton.php:295 +msgid "" +"Paypal button payments are not properly configured. Please choose another " +"payment option." +msgstr "El botó de pagament per Paypal no està ben configurat. Escull un altre mètode de pagament." + +#: ../../addon/cart/submodules/hzservices.php:71 +msgid "Enable Hubzilla Services Module" +msgstr "Activa el mòdul \"Serveis de Hubzilla\"" + +#: ../../addon/cart/submodules/hzservices.php:77 +msgid "Cart - Hubzilla Services Addon" +msgstr "Carretó - Extensió \"Serveis de Hubzilla\"" + +#: ../../addon/cart/submodules/hzservices.php:169 +msgid "New Sku" +msgstr "Nova SKU" + +#: ../../addon/cart/submodules/hzservices.php:204 +msgid "Cannot save edits to locked item." +msgstr "No s'han pogut desar els canvis a l'article perquè està bloquejat." + +#: ../../addon/cart/submodules/hzservices.php:252 +#: ../../addon/cart/submodules/hzservices.php:339 +msgid "SKU not found." +msgstr "Non s'ha trobat l'SKU" + +#: ../../addon/cart/submodules/hzservices.php:305 +#: ../../addon/cart/submodules/hzservices.php:309 +msgid "Invalid Activation Directive." +msgstr "La directiva d'activació és invàlida." + +#: ../../addon/cart/submodules/hzservices.php:380 +#: ../../addon/cart/submodules/hzservices.php:384 +msgid "Invalid Deactivation Directive." +msgstr "La directiva de desactivació és invàlida." + +#: ../../addon/cart/submodules/hzservices.php:570 +msgid "Add to this privacy group" +msgstr "Afegeix-ho al teu grup de privacitat" + +#: ../../addon/cart/submodules/hzservices.php:586 +msgid "Set user service class" +msgstr "Defineix la classe de servei de l'usuària" + +#: ../../addon/cart/submodules/hzservices.php:613 +msgid "You must be using a local account to purchase this service." +msgstr "Cal una sessió iniciada en aquest hub per a comprar el servei." + +#: ../../addon/cart/submodules/hzservices.php:651 +msgid "Changes Locked" +msgstr "Article bloquejat" + +#: ../../addon/cart/submodules/hzservices.php:655 +msgid "Item available for purchase." +msgstr "Article a la venda." + +#: ../../addon/cart/submodules/hzservices.php:662 +msgid "Price" +msgstr "Preu" + +#: ../../addon/cart/submodules/hzservices.php:665 +msgid "Add buyer to privacy group" +msgstr "Afegeix el comprador a un grup de privacitat" + +#: ../../addon/cart/submodules/hzservices.php:670 +msgid "Add buyer as connection" +msgstr "Connecta automàticament amb els canals de les compradores" + +#: ../../addon/cart/submodules/hzservices.php:677 +#: ../../addon/cart/submodules/hzservices.php:718 +msgid "Set Service Class" +msgstr "Defineix la classe de servei" + +#: ../../addon/cart/manual_payments.php:7 msgid "Error: order mismatch. Please try again." msgstr "Error: l'ordre no coincideix. Torna-ho a provar." -#: ../../addon/cart/manual_payments.php:29 +#: ../../addon/cart/manual_payments.php:30 msgid "Manual payments are not enabled." msgstr "El pagament manual no està habilitat." -#: ../../addon/cart/manual_payments.php:44 +#: ../../addon/cart/manual_payments.php:46 msgid "Finished" msgstr "Operació completa" @@ -11738,11 +12141,11 @@ msgstr "Configuració de les entrades de pump.io" msgid "PumpIO Settings saved." msgstr "S'ha desat la configuració de pump.io" -#: ../../addon/ldapauth/ldapauth.php:61 +#: ../../addon/ldapauth/ldapauth.php:70 msgid "An account has been created for you." msgstr "S'ha creat un compte nou." -#: ../../addon/ldapauth/ldapauth.php:68 +#: ../../addon/ldapauth/ldapauth.php:77 msgid "Authentication successful but rejected: account creation is disabled." msgstr "L'autenticació ha tingut èxit però no s'ha pogut crear un compte perquè no està permès." @@ -12054,282 +12457,286 @@ msgstr "%1$s esta ara connectat amb %2$s" msgid "%1$s poked %2$s" msgstr "%1$s a esperonat %2$s" -#: ../../include/conversation.php:251 ../../include/text.php:1129 -#: ../../include/text.php:1133 +#: ../../include/conversation.php:251 ../../include/text.php:1140 +#: ../../include/text.php:1144 msgid "poked" msgstr "esperonat" -#: ../../include/conversation.php:736 +#: ../../include/conversation.php:739 #, php-format msgid "View %s's profile @ %s" -msgstr "Vista %s del perfil @ %s" +msgstr "Mostra el perfil @%s de %s" -#: ../../include/conversation.php:756 +#: ../../include/conversation.php:759 msgid "Categories:" msgstr "Categories:" -#: ../../include/conversation.php:757 +#: ../../include/conversation.php:760 msgid "Filed under:" msgstr "Arxivar a:" -#: ../../include/conversation.php:783 +#: ../../include/conversation.php:785 msgid "View in context" msgstr "Veure en context" -#: ../../include/conversation.php:884 +#: ../../include/conversation.php:886 msgid "remove" msgstr "treu" -#: ../../include/conversation.php:888 +#: ../../include/conversation.php:890 msgid "Loading..." msgstr "Carregant..." -#: ../../include/conversation.php:889 +#: ../../include/conversation.php:891 msgid "Delete Selected Items" msgstr "Esborra els Articles Seleccionats" -#: ../../include/conversation.php:932 +#: ../../include/conversation.php:934 msgid "View Source" msgstr "Veure l'Origen" -#: ../../include/conversation.php:942 +#: ../../include/conversation.php:944 msgid "Follow Thread" msgstr "Segueix el Fil" -#: ../../include/conversation.php:951 +#: ../../include/conversation.php:953 msgid "Unfollow Thread" msgstr "Fil Abandonat" -#: ../../include/conversation.php:1062 +#: ../../include/conversation.php:1067 msgid "Edit Connection" msgstr "Modifica la Connexió" -#: ../../include/conversation.php:1072 +#: ../../include/conversation.php:1077 msgid "Message" msgstr "Missatge" -#: ../../include/conversation.php:1206 +#: ../../include/conversation.php:1211 #, php-format msgid "%s likes this." msgstr "%s agrada això." -#: ../../include/conversation.php:1206 +#: ../../include/conversation.php:1211 #, php-format msgid "%s doesn't like this." msgstr "%s no agrada això." -#: ../../include/conversation.php:1210 +#: ../../include/conversation.php:1215 #, php-format msgid "%2$d people like this." msgid_plural "%2$d people like this." msgstr[0] "%2$d gent agrada això." msgstr[1] "%2$d gent agrada això." -#: ../../include/conversation.php:1212 +#: ../../include/conversation.php:1217 #, php-format msgid "%2$d people don't like this." msgid_plural "%2$d people don't like this." msgstr[0] "%2$d gent no agrada això." msgstr[1] "%2$d gent no agrada això." -#: ../../include/conversation.php:1218 +#: ../../include/conversation.php:1223 msgid "and" msgstr "i" -#: ../../include/conversation.php:1221 +#: ../../include/conversation.php:1226 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] ", i %d altra gent" msgstr[1] ", i %d altra gent" -#: ../../include/conversation.php:1222 +#: ../../include/conversation.php:1227 #, php-format msgid "%s like this." msgstr "%s agrada això." -#: ../../include/conversation.php:1222 +#: ../../include/conversation.php:1227 #, php-format msgid "%s don't like this." msgstr "%s no agrada això." -#: ../../include/conversation.php:1265 +#: ../../include/conversation.php:1270 msgid "Set your location" msgstr "Ajusta la teva ubicació" -#: ../../include/conversation.php:1266 +#: ../../include/conversation.php:1271 msgid "Clear browser location" msgstr "Treu la localització del navegador" -#: ../../include/conversation.php:1316 +#: ../../include/conversation.php:1287 +msgid "Embed (existing) photo from your photo albums" +msgstr "Incrusta una imatge existent dels teus àlbums." + +#: ../../include/conversation.php:1323 msgid "Tag term:" msgstr "Paraula de l'Etiqueta:" -#: ../../include/conversation.php:1317 +#: ../../include/conversation.php:1324 msgid "Where are you right now?" msgstr "On ets ara?" -#: ../../include/conversation.php:1322 +#: ../../include/conversation.php:1329 msgid "Choose a different album..." msgstr "Tria un àlbum diferent..." -#: ../../include/conversation.php:1326 +#: ../../include/conversation.php:1333 msgid "Comments enabled" msgstr "S'han activat els comentaris" -#: ../../include/conversation.php:1327 +#: ../../include/conversation.php:1334 msgid "Comments disabled" msgstr "S'han activat els comentaris" -#: ../../include/conversation.php:1375 +#: ../../include/conversation.php:1383 msgid "Page link name" msgstr "Nom de la pàgina enllaçada" -#: ../../include/conversation.php:1378 +#: ../../include/conversation.php:1386 msgid "Post as" msgstr "Envia com" -#: ../../include/conversation.php:1392 +#: ../../include/conversation.php:1400 msgid "Toggle voting" msgstr "Commutar votació" -#: ../../include/conversation.php:1395 +#: ../../include/conversation.php:1403 msgid "Disable comments" msgstr "Desactiva els comentaris" -#: ../../include/conversation.php:1396 +#: ../../include/conversation.php:1404 msgid "Toggle comments" msgstr "Commuta l'estat dels comentaris" -#: ../../include/conversation.php:1404 +#: ../../include/conversation.php:1412 msgid "Categories (optional, comma-separated list)" msgstr "Categories (opcional, llista separada per comes)" -#: ../../include/conversation.php:1427 +#: ../../include/conversation.php:1435 msgid "Other networks and post services" msgstr "Altres xarxes i serveis de correu" -#: ../../include/conversation.php:1433 +#: ../../include/conversation.php:1441 msgid "Set publish date" msgstr "Ajusta la data de publicació" -#: ../../include/conversation.php:1693 +#: ../../include/conversation.php:1702 msgid "Commented Order" msgstr "Ordenar per Comentaris" -#: ../../include/conversation.php:1696 +#: ../../include/conversation.php:1705 msgid "Sort by Comment Date" msgstr "Ordenar per Data del Comentari" -#: ../../include/conversation.php:1700 +#: ../../include/conversation.php:1709 msgid "Posted Order" msgstr "Ordenar per Entrades" -#: ../../include/conversation.php:1703 +#: ../../include/conversation.php:1712 msgid "Sort by Post Date" msgstr "Ordenar per Data d' Entrada" -#: ../../include/conversation.php:1711 +#: ../../include/conversation.php:1720 msgid "Posts that mention or involve you" msgstr "Entrades que et mencionen o involucren" -#: ../../include/conversation.php:1720 +#: ../../include/conversation.php:1729 msgid "Activity Stream - by date" msgstr "Activitat del Flux - per data" -#: ../../include/conversation.php:1726 +#: ../../include/conversation.php:1735 msgid "Starred" msgstr "Preferit" -#: ../../include/conversation.php:1729 +#: ../../include/conversation.php:1738 msgid "Favourite Posts" msgstr "Entrades Favorites" -#: ../../include/conversation.php:1736 +#: ../../include/conversation.php:1745 msgid "Spam" msgstr "Spam" -#: ../../include/conversation.php:1739 +#: ../../include/conversation.php:1748 msgid "Posts flagged as SPAM" msgstr "Entrades marcades com a SPAM" -#: ../../include/conversation.php:1814 ../../include/nav.php:381 +#: ../../include/conversation.php:1823 ../../include/nav.php:373 msgid "Status Messages and Posts" msgstr "Estat dels Missatges i Entrades" -#: ../../include/conversation.php:1827 ../../include/nav.php:394 +#: ../../include/conversation.php:1836 ../../include/nav.php:386 msgid "Profile Details" msgstr "Detalls del Perfil" -#: ../../include/conversation.php:1837 ../../include/nav.php:404 -#: ../../include/photos.php:666 +#: ../../include/conversation.php:1846 ../../include/nav.php:396 +#: ../../include/photos.php:667 msgid "Photo Albums" msgstr "Albums de Fotos" -#: ../../include/conversation.php:1845 ../../include/nav.php:412 +#: ../../include/conversation.php:1854 ../../include/nav.php:404 msgid "Files and Storage" msgstr "Arxius i Emmagatzegament" -#: ../../include/conversation.php:1882 ../../include/nav.php:447 +#: ../../include/conversation.php:1891 ../../include/nav.php:439 msgid "Bookmarks" msgstr "Marcadors" -#: ../../include/conversation.php:1885 ../../include/nav.php:450 +#: ../../include/conversation.php:1894 ../../include/nav.php:442 msgid "Saved Bookmarks" -msgstr "Marcadors Guardats" +msgstr "Marcadors desats" -#: ../../include/conversation.php:1896 ../../include/nav.php:461 +#: ../../include/conversation.php:1905 ../../include/nav.php:453 msgid "View Cards" msgstr "Mostra les targetes" -#: ../../include/conversation.php:1904 +#: ../../include/conversation.php:1913 msgid "articles" msgstr "articles" -#: ../../include/conversation.php:1907 ../../include/nav.php:472 +#: ../../include/conversation.php:1916 ../../include/nav.php:464 msgid "View Articles" msgstr "Mostra els articles" -#: ../../include/conversation.php:1918 ../../include/nav.php:484 +#: ../../include/conversation.php:1927 ../../include/nav.php:476 msgid "View Webpages" msgstr "Mostra les pàgines web" -#: ../../include/conversation.php:1987 +#: ../../include/conversation.php:1996 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "Assistint" msgstr[1] "Assistint" -#: ../../include/conversation.php:1990 +#: ../../include/conversation.php:1999 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "Desassistint" msgstr[1] "Desassistint" -#: ../../include/conversation.php:1993 +#: ../../include/conversation.php:2002 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "Indecís" msgstr[1] "Indecisos" -#: ../../include/conversation.php:1996 +#: ../../include/conversation.php:2005 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "Acord" msgstr[1] "Acords" -#: ../../include/conversation.php:1999 +#: ../../include/conversation.php:2008 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "Desacord" msgstr[1] "Desacords" -#: ../../include/conversation.php:2002 +#: ../../include/conversation.php:2011 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -12355,18 +12762,18 @@ msgstr "Només Aquest Lloc Web" #: ../../include/bookmarks.php:34 #, php-format msgid "%1$s's bookmarks" -msgstr "%1$s de marcadors" +msgstr "marcadors de %1$s" #: ../../include/import.php:25 msgid "Unable to import a removed channel." msgstr "No s'ha pogut importar un canal esborrat." -#: ../../include/import.php:46 +#: ../../include/import.php:51 msgid "" "Cannot create a duplicate channel identifier on this system. Import failed." msgstr "No s'ha pogut importar el canal perquè l'identificador del canal no s'ha pogut duplicar en aquest servidor." -#: ../../include/import.php:111 +#: ../../include/import.php:116 msgid "Cloned channel not found. Import failed." msgstr "No s'ha pogut importar el canal perquè el canal clonat no s'ha trobat." @@ -12394,340 +12801,345 @@ msgstr "el més antic" msgid "newer" msgstr "El més nou" -#: ../../include/text.php:961 +#: ../../include/text.php:963 msgid "No connections" msgstr "Sense Connexions" -#: ../../include/text.php:993 +#: ../../include/text.php:995 #, php-format msgid "View all %s connections" msgstr "Veure totes les connexions de %s" -#: ../../include/text.php:1129 ../../include/text.php:1133 +#: ../../include/text.php:1051 +#, php-format +msgid "Network: %s" +msgstr "Xarxa: %s" + +#: ../../include/text.php:1140 ../../include/text.php:1144 msgid "poke" msgstr "esperona" -#: ../../include/text.php:1134 +#: ../../include/text.php:1145 msgid "ping" msgstr "coloca" -#: ../../include/text.php:1134 +#: ../../include/text.php:1145 msgid "pinged" msgstr "colocat" -#: ../../include/text.php:1135 +#: ../../include/text.php:1146 msgid "prod" msgstr "picar" -#: ../../include/text.php:1135 +#: ../../include/text.php:1146 msgid "prodded" msgstr "picat" -#: ../../include/text.php:1136 +#: ../../include/text.php:1147 msgid "slap" msgstr "bufetada" -#: ../../include/text.php:1136 +#: ../../include/text.php:1147 msgid "slapped" msgstr "bufetejat" -#: ../../include/text.php:1137 +#: ../../include/text.php:1148 msgid "finger" msgstr "senyal" -#: ../../include/text.php:1137 +#: ../../include/text.php:1148 msgid "fingered" msgstr "senyalat" -#: ../../include/text.php:1138 +#: ../../include/text.php:1149 msgid "rebuff" msgstr "menyspreu" -#: ../../include/text.php:1138 +#: ../../include/text.php:1149 msgid "rebuffed" msgstr "menyspreuat" -#: ../../include/text.php:1161 +#: ../../include/text.php:1172 msgid "happy" msgstr "feliç" -#: ../../include/text.php:1162 +#: ../../include/text.php:1173 msgid "sad" msgstr "trist" -#: ../../include/text.php:1163 +#: ../../include/text.php:1174 msgid "mellow" msgstr "melós" -#: ../../include/text.php:1164 +#: ../../include/text.php:1175 msgid "tired" msgstr "cansat" -#: ../../include/text.php:1165 +#: ../../include/text.php:1176 msgid "perky" msgstr "turgent" -#: ../../include/text.php:1166 +#: ../../include/text.php:1177 msgid "angry" msgstr "enfadat" -#: ../../include/text.php:1167 +#: ../../include/text.php:1178 msgid "stupefied" msgstr "estupefacte" -#: ../../include/text.php:1168 +#: ../../include/text.php:1179 msgid "puzzled" msgstr "perplexe" -#: ../../include/text.php:1169 +#: ../../include/text.php:1180 msgid "interested" msgstr "Interessat" -#: ../../include/text.php:1170 +#: ../../include/text.php:1181 msgid "bitter" msgstr "amargat" -#: ../../include/text.php:1171 +#: ../../include/text.php:1182 msgid "cheerful" msgstr "feliç" -#: ../../include/text.php:1172 +#: ../../include/text.php:1183 msgid "alive" msgstr "viu" -#: ../../include/text.php:1173 +#: ../../include/text.php:1184 msgid "annoyed" msgstr "molest" -#: ../../include/text.php:1174 +#: ../../include/text.php:1185 msgid "anxious" msgstr "ansiós" -#: ../../include/text.php:1175 +#: ../../include/text.php:1186 msgid "cranky" msgstr "malagaitós" -#: ../../include/text.php:1176 +#: ../../include/text.php:1187 msgid "disturbed" msgstr "transtornat" -#: ../../include/text.php:1177 +#: ../../include/text.php:1188 msgid "frustrated" msgstr "frustrat" -#: ../../include/text.php:1178 +#: ../../include/text.php:1189 msgid "depressed" msgstr "deprimit" -#: ../../include/text.php:1179 +#: ../../include/text.php:1190 msgid "motivated" msgstr "motivat" -#: ../../include/text.php:1180 +#: ../../include/text.php:1191 msgid "relaxed" msgstr "relaxat" -#: ../../include/text.php:1181 +#: ../../include/text.php:1192 msgid "surprised" msgstr "sorprès" -#: ../../include/text.php:1360 ../../include/js_strings.php:76 +#: ../../include/text.php:1371 ../../include/js_strings.php:86 msgid "Monday" msgstr "Dilluns" -#: ../../include/text.php:1360 ../../include/js_strings.php:77 +#: ../../include/text.php:1371 ../../include/js_strings.php:87 msgid "Tuesday" msgstr "Dimarts" -#: ../../include/text.php:1360 ../../include/js_strings.php:78 +#: ../../include/text.php:1371 ../../include/js_strings.php:88 msgid "Wednesday" msgstr "Dimecres" -#: ../../include/text.php:1360 ../../include/js_strings.php:79 +#: ../../include/text.php:1371 ../../include/js_strings.php:89 msgid "Thursday" msgstr "Dijous" -#: ../../include/text.php:1360 ../../include/js_strings.php:80 +#: ../../include/text.php:1371 ../../include/js_strings.php:90 msgid "Friday" msgstr "Divendres" -#: ../../include/text.php:1360 ../../include/js_strings.php:81 +#: ../../include/text.php:1371 ../../include/js_strings.php:91 msgid "Saturday" msgstr "Dissabte" -#: ../../include/text.php:1360 ../../include/js_strings.php:75 +#: ../../include/text.php:1371 ../../include/js_strings.php:85 msgid "Sunday" msgstr "Diumenge" -#: ../../include/text.php:1364 ../../include/js_strings.php:51 +#: ../../include/text.php:1375 ../../include/js_strings.php:61 msgid "January" msgstr "Gener" -#: ../../include/text.php:1364 ../../include/js_strings.php:52 +#: ../../include/text.php:1375 ../../include/js_strings.php:62 msgid "February" msgstr "Febrer" -#: ../../include/text.php:1364 ../../include/js_strings.php:53 +#: ../../include/text.php:1375 ../../include/js_strings.php:63 msgid "March" msgstr "Març" -#: ../../include/text.php:1364 ../../include/js_strings.php:54 +#: ../../include/text.php:1375 ../../include/js_strings.php:64 msgid "April" msgstr "Abril" -#: ../../include/text.php:1364 +#: ../../include/text.php:1375 msgid "May" msgstr "Maig" -#: ../../include/text.php:1364 ../../include/js_strings.php:56 +#: ../../include/text.php:1375 ../../include/js_strings.php:66 msgid "June" msgstr "Juny" -#: ../../include/text.php:1364 ../../include/js_strings.php:57 +#: ../../include/text.php:1375 ../../include/js_strings.php:67 msgid "July" msgstr "Juliol" -#: ../../include/text.php:1364 ../../include/js_strings.php:58 +#: ../../include/text.php:1375 ../../include/js_strings.php:68 msgid "August" msgstr "Agost" -#: ../../include/text.php:1364 ../../include/js_strings.php:59 +#: ../../include/text.php:1375 ../../include/js_strings.php:69 msgid "September" msgstr "Setembre" -#: ../../include/text.php:1364 ../../include/js_strings.php:60 +#: ../../include/text.php:1375 ../../include/js_strings.php:70 msgid "October" msgstr "Octubre" -#: ../../include/text.php:1364 ../../include/js_strings.php:61 +#: ../../include/text.php:1375 ../../include/js_strings.php:71 msgid "November" msgstr "Novembre" -#: ../../include/text.php:1364 ../../include/js_strings.php:62 +#: ../../include/text.php:1375 ../../include/js_strings.php:72 msgid "December" msgstr "Desembre" -#: ../../include/text.php:1428 ../../include/text.php:1432 +#: ../../include/text.php:1449 msgid "Unknown Attachment" msgstr "Adjunt Desconegut" -#: ../../include/text.php:1434 ../../include/feedutils.php:860 +#: ../../include/text.php:1451 ../../include/feedutils.php:860 msgid "unknown" msgstr "desconegut" -#: ../../include/text.php:1470 +#: ../../include/text.php:1487 msgid "remove category" msgstr "elimina categoria" -#: ../../include/text.php:1544 +#: ../../include/text.php:1561 msgid "remove from file" msgstr "elimina del arxiu" -#: ../../include/text.php:1686 ../../include/message.php:12 +#: ../../include/text.php:1703 ../../include/message.php:12 msgid "Download binary/encrypted content" msgstr "Descarrega el binari o contingut xifrat" -#: ../../include/text.php:1849 ../../include/language.php:397 +#: ../../include/text.php:1866 ../../include/language.php:397 msgid "default" msgstr "per defecte" -#: ../../include/text.php:1857 +#: ../../include/text.php:1874 msgid "Page layout" msgstr "Disseny de pàgina" -#: ../../include/text.php:1857 +#: ../../include/text.php:1874 msgid "You can create your own with the layouts tool" msgstr "Pots crear el teu propi amb l'editor de dissenys de pàgina." -#: ../../include/text.php:1868 +#: ../../include/text.php:1885 msgid "HTML" msgstr "HTML" -#: ../../include/text.php:1871 +#: ../../include/text.php:1888 msgid "Comanche Layout" msgstr "Disseny Comanche" -#: ../../include/text.php:1876 +#: ../../include/text.php:1893 msgid "PHP" msgstr "PHP" -#: ../../include/text.php:1885 +#: ../../include/text.php:1902 msgid "Page content type" msgstr "Tipus de contingut de la pàgina" -#: ../../include/text.php:2018 +#: ../../include/text.php:2035 msgid "activity" msgstr "activitat" -#: ../../include/text.php:2100 +#: ../../include/text.php:2135 msgid "a-z, 0-9, -, and _ only" msgstr "només caràcters alfanumèrics en minúscula (a-z, 0-9), guió (-) i guió baix (_)" -#: ../../include/text.php:2419 +#: ../../include/text.php:2455 msgid "Design Tools" msgstr "Eines de disseny" -#: ../../include/text.php:2425 +#: ../../include/text.php:2461 msgid "Pages" msgstr "Pàgines" -#: ../../include/text.php:2447 +#: ../../include/text.php:2483 msgid "Import website..." msgstr "Importa un lloc web" -#: ../../include/text.php:2448 +#: ../../include/text.php:2484 msgid "Select folder to import" msgstr "Escull la carpeta a on importar" -#: ../../include/text.php:2449 +#: ../../include/text.php:2485 msgid "Import from a zipped folder:" msgstr "Importa des d'una carpeta comprimida:" -#: ../../include/text.php:2450 +#: ../../include/text.php:2486 msgid "Import from cloud files:" msgstr "Importa des de fitxers penjats a un núvol:" -#: ../../include/text.php:2451 +#: ../../include/text.php:2487 msgid "/cloud/channel/path/to/folder" msgstr "/núvol/canal/ruta/a/la/carpeta" -#: ../../include/text.php:2452 +#: ../../include/text.php:2488 msgid "Enter path to website files" msgstr "Introdueix la ruta als arxius de la web" -#: ../../include/text.php:2453 +#: ../../include/text.php:2489 msgid "Select folder" msgstr "Escull la carpeta" -#: ../../include/text.php:2454 +#: ../../include/text.php:2490 msgid "Export website..." msgstr "Exporta un lloc web" -#: ../../include/text.php:2455 +#: ../../include/text.php:2491 msgid "Export to a zip file" msgstr "Exporta a una carpeta comprimida" -#: ../../include/text.php:2456 +#: ../../include/text.php:2492 msgid "website.zip" msgstr "lloc-web.zip" -#: ../../include/text.php:2457 +#: ../../include/text.php:2493 msgid "Enter a name for the zip file." msgstr "Introdueix un nom per al fitxer comprimit." -#: ../../include/text.php:2458 +#: ../../include/text.php:2494 msgid "Export to cloud files" msgstr "Exporta a arxius de núvol" -#: ../../include/text.php:2459 +#: ../../include/text.php:2495 msgid "/path/to/export/folder" msgstr "/ruta/a/la/carpeta/exportació" -#: ../../include/text.php:2460 +#: ../../include/text.php:2496 msgid "Enter a path to a cloud files destination." msgstr "Introdueix la ruta dels fitxers de núvol de destí." -#: ../../include/text.php:2461 +#: ../../include/text.php:2497 msgid "Specify folder" msgstr "Escull una carpeta" @@ -12775,7 +13187,7 @@ msgstr "Connexions en comú" msgid "View all %d common connections" msgstr "Mostra totes les connexions en comú amb %d" -#: ../../include/markdown.php:158 ../../include/bbcode.php:356 +#: ../../include/markdown.php:158 ../../include/bbcode.php:358 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "%1$s va escriure el següent %2$s %3$s" @@ -12883,182 +13295,224 @@ msgstr "Si us plau, entra l'enllaç URL" msgid "Unsaved changes. Are you sure you wish to leave this page?" msgstr "Hi ha canvis sense desar, estàs segur que vols abandonar la pàgina?" +#: ../../include/js_strings.php:26 +msgid "lovely" +msgstr "encantador/a" + +#: ../../include/js_strings.php:27 +msgid "wonderful" +msgstr "meravellós/a" + +#: ../../include/js_strings.php:28 +msgid "fantastic" +msgstr "fantàstic/a" + +#: ../../include/js_strings.php:29 +msgid "great" +msgstr "genial" + +#: ../../include/js_strings.php:30 +msgid "" +"Your chosen nickname was either already taken or not valid. Please use our " +"suggestion (" +msgstr "El nom que has escollit o bé ja està agafat o bé no és vàlid. Pots fer servir la suggerència (" + #: ../../include/js_strings.php:31 +msgid ") or enter a new one." +msgstr ") o provar amb un altre nom." + +#: ../../include/js_strings.php:32 +msgid "Thank you, this nickname is valid." +msgstr "El nom que has triat és vàlid." + +#: ../../include/js_strings.php:33 +msgid "A channel name is required." +msgstr "Cal un nom de canal." + +#: ../../include/js_strings.php:34 +msgid "This is a " +msgstr "Això és un" + +#: ../../include/js_strings.php:35 +msgid " channel name" +msgstr "nom del canal" + +#: ../../include/js_strings.php:41 msgid "timeago.prefixAgo" msgstr "fa" -#: ../../include/js_strings.php:32 +#: ../../include/js_strings.php:42 msgid "timeago.prefixFromNow" msgstr "d'aquí a" -#: ../../include/js_strings.php:33 +#: ../../include/js_strings.php:43 msgid "timeago.suffixAgo" -msgstr "fa" +msgstr "NONE" -#: ../../include/js_strings.php:34 +#: ../../include/js_strings.php:44 msgid "timeago.suffixFromNow" -msgstr "d'aquí a" +msgstr " NONE" -#: ../../include/js_strings.php:37 +#: ../../include/js_strings.php:47 msgid "less than a minute" msgstr "uns segons" -#: ../../include/js_strings.php:38 +#: ../../include/js_strings.php:48 msgid "about a minute" msgstr "prop d'un minut" -#: ../../include/js_strings.php:39 +#: ../../include/js_strings.php:49 #, php-format msgid "%d minutes" msgstr "%d minuts" -#: ../../include/js_strings.php:40 +#: ../../include/js_strings.php:50 msgid "about an hour" msgstr "prop d'una hora" -#: ../../include/js_strings.php:41 +#: ../../include/js_strings.php:51 #, php-format msgid "about %d hours" msgstr "unes %d hores" -#: ../../include/js_strings.php:42 +#: ../../include/js_strings.php:52 msgid "a day" msgstr "un dia" -#: ../../include/js_strings.php:43 +#: ../../include/js_strings.php:53 #, php-format msgid "%d days" msgstr "%d dies" -#: ../../include/js_strings.php:44 +#: ../../include/js_strings.php:54 msgid "about a month" msgstr "prop d'un mes" -#: ../../include/js_strings.php:45 +#: ../../include/js_strings.php:55 #, php-format msgid "%d months" msgstr "%d mesos" -#: ../../include/js_strings.php:46 +#: ../../include/js_strings.php:56 msgid "about a year" msgstr "prop d'un any" -#: ../../include/js_strings.php:47 +#: ../../include/js_strings.php:57 #, php-format msgid "%d years" msgstr "%d anys" -#: ../../include/js_strings.php:48 +#: ../../include/js_strings.php:58 msgid " " msgstr " " -#: ../../include/js_strings.php:49 +#: ../../include/js_strings.php:59 msgid "timeago.numbers" msgstr "timeago.numbers" -#: ../../include/js_strings.php:55 +#: ../../include/js_strings.php:65 msgctxt "long" msgid "May" msgstr "maig" -#: ../../include/js_strings.php:63 +#: ../../include/js_strings.php:73 msgid "Jan" msgstr "gen." -#: ../../include/js_strings.php:64 +#: ../../include/js_strings.php:74 msgid "Feb" msgstr "feb." -#: ../../include/js_strings.php:65 +#: ../../include/js_strings.php:75 msgid "Mar" msgstr "març" -#: ../../include/js_strings.php:66 +#: ../../include/js_strings.php:76 msgid "Apr" msgstr "abr." -#: ../../include/js_strings.php:67 +#: ../../include/js_strings.php:77 msgctxt "short" msgid "May" msgstr "maig" -#: ../../include/js_strings.php:68 +#: ../../include/js_strings.php:78 msgid "Jun" msgstr "juny" -#: ../../include/js_strings.php:69 +#: ../../include/js_strings.php:79 msgid "Jul" msgstr "jul." -#: ../../include/js_strings.php:70 +#: ../../include/js_strings.php:80 msgid "Aug" msgstr "ag." -#: ../../include/js_strings.php:71 +#: ../../include/js_strings.php:81 msgid "Sep" msgstr "set." -#: ../../include/js_strings.php:72 +#: ../../include/js_strings.php:82 msgid "Oct" msgstr "oct." -#: ../../include/js_strings.php:73 +#: ../../include/js_strings.php:83 msgid "Nov" msgstr "nov." -#: ../../include/js_strings.php:74 +#: ../../include/js_strings.php:84 msgid "Dec" msgstr "des." -#: ../../include/js_strings.php:82 +#: ../../include/js_strings.php:92 msgid "Sun" msgstr "dg." -#: ../../include/js_strings.php:83 +#: ../../include/js_strings.php:93 msgid "Mon" msgstr "dl." -#: ../../include/js_strings.php:84 +#: ../../include/js_strings.php:94 msgid "Tue" msgstr "dm." -#: ../../include/js_strings.php:85 +#: ../../include/js_strings.php:95 msgid "Wed" msgstr "dc." -#: ../../include/js_strings.php:86 +#: ../../include/js_strings.php:96 msgid "Thu" msgstr "dj." -#: ../../include/js_strings.php:87 +#: ../../include/js_strings.php:97 msgid "Fri" msgstr "dv." -#: ../../include/js_strings.php:88 +#: ../../include/js_strings.php:98 msgid "Sat" msgstr "ds." -#: ../../include/js_strings.php:89 +#: ../../include/js_strings.php:99 msgctxt "calendar" msgid "today" msgstr "avui" -#: ../../include/js_strings.php:90 +#: ../../include/js_strings.php:100 msgctxt "calendar" msgid "month" msgstr "mes" -#: ../../include/js_strings.php:91 +#: ../../include/js_strings.php:101 msgctxt "calendar" msgid "week" msgstr "setmana" -#: ../../include/js_strings.php:92 +#: ../../include/js_strings.php:102 msgctxt "calendar" msgid "day" msgstr "dia" -#: ../../include/js_strings.php:93 +#: ../../include/js_strings.php:103 msgctxt "calendar" msgid "All day" msgstr "Tot el dia" @@ -13102,65 +13556,69 @@ msgstr "Visita %1$s en %2$s" msgid "%1$s has an updated %2$s, changing %3$s." msgstr "%1$s Ha actualitzat %2$s, canviant %3$s." -#: ../../include/attach.php:265 ../../include/attach.php:361 +#: ../../include/attach.php:265 ../../include/attach.php:374 msgid "Item was not found." msgstr "Article no trobat." -#: ../../include/attach.php:554 +#: ../../include/attach.php:282 +msgid "Unknown error." +msgstr "Error desconegut." + +#: ../../include/attach.php:567 msgid "No source file." msgstr "No hi ha arxiu d'origen." -#: ../../include/attach.php:576 +#: ../../include/attach.php:589 msgid "Cannot locate file to replace" msgstr "No trobo l'arxiu a reemplaçar" -#: ../../include/attach.php:595 +#: ../../include/attach.php:608 msgid "Cannot locate file to revise/update" msgstr "No trobo l'arxiu a revisar/actualitzar" -#: ../../include/attach.php:737 +#: ../../include/attach.php:750 #, php-format msgid "File exceeds size limit of %d" msgstr "L'arxiu excedeix la mida limit de %d" -#: ../../include/attach.php:758 +#: ../../include/attach.php:771 #, php-format msgid "You have reached your limit of %1$.0f Mbytes attachment storage." msgstr "Has arribat al teu límit de %1$.0f Mbytes de emagatzematge d'adjunts." -#: ../../include/attach.php:940 +#: ../../include/attach.php:953 msgid "File upload failed. Possible system limit or action terminated." msgstr "Pujada del arxiu fallida. Possible límit del sistema o acció interrompuda." -#: ../../include/attach.php:969 +#: ../../include/attach.php:982 msgid "Stored file could not be verified. Upload failed." msgstr "L'arxiu guardat no es pot verificar. Pujada fallida." -#: ../../include/attach.php:1043 ../../include/attach.php:1059 +#: ../../include/attach.php:1056 ../../include/attach.php:1072 msgid "Path not available." msgstr "Trajectòria no disponible" -#: ../../include/attach.php:1108 ../../include/attach.php:1273 +#: ../../include/attach.php:1121 ../../include/attach.php:1286 msgid "Empty pathname" msgstr "Trajèctoria vuida." -#: ../../include/attach.php:1134 +#: ../../include/attach.php:1147 msgid "duplicate filename or path" msgstr "Nom o trajectòria duplicat" -#: ../../include/attach.php:1159 +#: ../../include/attach.php:1172 msgid "Path not found." msgstr "Trajectòria no trobada." -#: ../../include/attach.php:1227 +#: ../../include/attach.php:1240 msgid "mkdir failed." msgstr "mkdir va fracassar." -#: ../../include/attach.php:1231 +#: ../../include/attach.php:1244 msgid "database storage failed." msgstr "Arxiu de base de dades va fallar." -#: ../../include/attach.php:1279 +#: ../../include/attach.php:1292 msgid "Empty path" msgstr "Trajèctoria vuida" @@ -13170,71 +13628,71 @@ msgid "" "form has been opened for too long (>3 hours) before submitting it." msgstr "El formulario de la cadena de seguridad no era correcto. Esto probablemente ocurrió porque el formulario se ha abierto durante demasiado tiempo (> 3 horas) antes de enviarlo." -#: ../../include/items.php:885 ../../include/items.php:945 +#: ../../include/items.php:891 ../../include/items.php:951 msgid "(Unknown)" msgstr "(Desconegut)" -#: ../../include/items.php:1133 +#: ../../include/items.php:1137 msgid "Visible to anybody on the internet." msgstr "Visible per tothom a la Internet" -#: ../../include/items.php:1135 +#: ../../include/items.php:1139 msgid "Visible to you only." msgstr "Visible només per tú." -#: ../../include/items.php:1137 +#: ../../include/items.php:1141 msgid "Visible to anybody in this network." msgstr "Visible per tothom en aquesta xarxa." -#: ../../include/items.php:1139 +#: ../../include/items.php:1143 msgid "Visible to anybody authenticated." msgstr "Visible per tothom autenticat." -#: ../../include/items.php:1141 +#: ../../include/items.php:1145 #, php-format msgid "Visible to anybody on %s." msgstr "Visible per a tothom a %s." -#: ../../include/items.php:1143 +#: ../../include/items.php:1147 msgid "Visible to all connections." msgstr "Visible per a totes les connexions." -#: ../../include/items.php:1145 +#: ../../include/items.php:1149 msgid "Visible to approved connections." msgstr "Visible per a les connexions aprovades." -#: ../../include/items.php:1147 +#: ../../include/items.php:1151 msgid "Visible to specific connections." msgstr "Visible per a específiques connexions." -#: ../../include/items.php:4197 +#: ../../include/items.php:4141 msgid "Privacy group is empty." -msgstr "El grup privat està vuit." +msgstr "El grup de privacitat està buit." -#: ../../include/items.php:4204 +#: ../../include/items.php:4148 #, php-format msgid "Privacy group: %s" -msgstr "Grup privat: %s" +msgstr "Grup de privacitat: %s" -#: ../../include/items.php:4216 +#: ../../include/items.php:4160 msgid "Connection not found." msgstr "Connexió no trobada." -#: ../../include/items.php:4565 +#: ../../include/items.php:4509 msgid "profile photo" msgstr "foto del perfil" -#: ../../include/items.php:4756 +#: ../../include/items.php:4700 #, php-format msgid "[Edited %s]" msgstr "[S'ha editat %s]" -#: ../../include/items.php:4756 +#: ../../include/items.php:4700 msgctxt "edit_activity" msgid "Post" msgstr "Entrada" -#: ../../include/items.php:4756 +#: ../../include/items.php:4700 msgctxt "edit_activity" msgid "Comment" msgstr "Comentari" @@ -13424,63 +13882,47 @@ msgstr "En Procès" msgid "Cancelled" msgstr "Cancel·lat" -#: ../../include/event.php:1310 ../../include/connections.php:692 +#: ../../include/event.php:1310 ../../include/connections.php:698 msgid "Home, Voice" msgstr "Casa, veu" -#: ../../include/event.php:1311 ../../include/connections.php:693 +#: ../../include/event.php:1311 ../../include/connections.php:699 msgid "Home, Fax" msgstr "Casa, fax" -#: ../../include/event.php:1313 ../../include/connections.php:695 +#: ../../include/event.php:1313 ../../include/connections.php:701 msgid "Work, Voice" msgstr "Feina, veu" -#: ../../include/event.php:1314 ../../include/connections.php:696 +#: ../../include/event.php:1314 ../../include/connections.php:702 msgid "Work, Fax" msgstr "Feina, fax" -#: ../../include/network.php:762 +#: ../../include/network.php:760 msgid "view full size" msgstr "Veure a mida competa" -#: ../../include/network.php:1764 ../../include/network.php:1765 -msgid "Friendica" -msgstr "Friendica" - #: ../../include/network.php:1766 -msgid "OStatus" -msgstr "OStatus" - -#: ../../include/network.php:1767 msgid "GNU-Social" msgstr "GNU-Social" -#: ../../include/network.php:1768 +#: ../../include/network.php:1767 msgid "RSS/Atom" msgstr "RSS/Atom" #: ../../include/network.php:1771 -msgid "Diaspora" -msgstr "Diaspora" - -#: ../../include/network.php:1772 msgid "Facebook" msgstr "Facebook" #: ../../include/network.php:1773 -msgid "Zot" -msgstr "Zot" - -#: ../../include/network.php:1774 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:1775 +#: ../../include/network.php:1774 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:1776 +#: ../../include/network.php:1775 msgid "MySpace" msgstr "MySpace" @@ -13522,77 +13964,81 @@ msgstr "Els permisos d'entrada %s no poden esser canviats %s posteriorment a que msgid "Cannot locate DNS info for database server '%s'" msgstr "No s'ha trobat informació de DNS pel servidor de base de dades '%s'" -#: ../../include/bbcode.php:198 ../../include/bbcode.php:1200 -#: ../../include/bbcode.php:1203 ../../include/bbcode.php:1208 -#: ../../include/bbcode.php:1211 ../../include/bbcode.php:1214 -#: ../../include/bbcode.php:1217 ../../include/bbcode.php:1222 -#: ../../include/bbcode.php:1225 ../../include/bbcode.php:1230 -#: ../../include/bbcode.php:1233 ../../include/bbcode.php:1236 -#: ../../include/bbcode.php:1239 +#: ../../include/bbcode.php:200 ../../include/bbcode.php:1202 +#: ../../include/bbcode.php:1205 ../../include/bbcode.php:1210 +#: ../../include/bbcode.php:1213 ../../include/bbcode.php:1216 +#: ../../include/bbcode.php:1219 ../../include/bbcode.php:1224 +#: ../../include/bbcode.php:1227 ../../include/bbcode.php:1232 +#: ../../include/bbcode.php:1235 ../../include/bbcode.php:1238 +#: ../../include/bbcode.php:1241 msgid "Image/photo" msgstr "Imatge/foto" -#: ../../include/bbcode.php:237 ../../include/bbcode.php:1250 +#: ../../include/bbcode.php:239 ../../include/bbcode.php:1252 msgid "Encrypted content" msgstr "Contingut encriptat" -#: ../../include/bbcode.php:253 +#: ../../include/bbcode.php:255 #, php-format msgid "Install %1$s element %2$s" msgstr "Instaŀla l'element %2$s del tipus %1$s" -#: ../../include/bbcode.php:257 +#: ../../include/bbcode.php:259 #, php-format msgid "" "This post contains an installable %s element, however you lack permissions " "to install it on this site." msgstr "Aquesta entrada contè un element %s instal·lable, potser manques de permissos per instal·lar-lo en aquest lloc." -#: ../../include/bbcode.php:348 +#: ../../include/bbcode.php:350 msgid "card" msgstr "targeta" -#: ../../include/bbcode.php:350 +#: ../../include/bbcode.php:352 msgid "article" msgstr "article" -#: ../../include/bbcode.php:433 ../../include/bbcode.php:441 +#: ../../include/bbcode.php:435 ../../include/bbcode.php:443 msgid "Click to open/close" msgstr "Clic per obrir/tancar" -#: ../../include/bbcode.php:441 +#: ../../include/bbcode.php:443 msgid "spoiler" msgstr "xafa guitarres" -#: ../../include/bbcode.php:454 +#: ../../include/bbcode.php:456 msgid "View article" msgstr "Mostra l'article" -#: ../../include/bbcode.php:454 +#: ../../include/bbcode.php:456 msgid "View summary" msgstr "Mostra'n un resum" -#: ../../include/bbcode.php:1188 +#: ../../include/bbcode.php:1190 msgid "$1 wrote:" msgstr "$1 va escriure:" -#: ../../include/oembed.php:329 +#: ../../include/oembed.php:224 +msgid "View PDF" +msgstr "Mostra el pdf" + +#: ../../include/oembed.php:347 msgid " by " msgstr "de" -#: ../../include/oembed.php:330 +#: ../../include/oembed.php:348 msgid " on " msgstr "a" -#: ../../include/oembed.php:359 +#: ../../include/oembed.php:377 msgid "Embedded content" msgstr "Contingut embegut" -#: ../../include/oembed.php:368 +#: ../../include/oembed.php:386 msgid "Embedding disabled" msgstr "Incorporació desactivada" -#: ../../include/zid.php:347 +#: ../../include/zid.php:351 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "OpenWebAuth: %1$s dóna la benvinguda a %2$s" @@ -13721,13 +14167,9 @@ msgstr "Permet configurar al detall els temes i els dissenys de pàgina" msgid "Access Control and Permissions" msgstr "Control d'accés i permisos" -#: ../../include/features.php:221 ../../include/group.php:328 -msgid "Privacy Groups" -msgstr "Grup Privat" - #: ../../include/features.php:222 msgid "Enable management and selection of privacy groups" -msgstr "Habilita gestió i selecció de grups privats" +msgstr "Habilita la gestió i selecció de grups de privacitat" #: ../../include/features.php:230 msgid "Multiple Profiles" @@ -13738,8 +14180,8 @@ msgid "Ability to create multiple profiles" msgstr "Capacitat per crear multiples perfils" #: ../../include/features.php:241 -msgid "Provide alternate connection permission roles." -msgstr "Proporciona rols diferents per als permisos de connexió." +msgid "Create custom connection permission limits" +msgstr "Personalitza els límits de permisos de les connexions" #: ../../include/features.php:249 msgid "OAuth1 Clients" @@ -13861,94 +14303,112 @@ msgid "Save search terms for re-use" msgstr "Guardar els termin de la cerca per a re-usar" #: ../../include/features.php:390 -msgid "Network Personal Tab" -msgstr "Pestanya Personal de Xarxa" +msgid "Alternate Stream Order" +msgstr "Diversos ordres al flux" #: ../../include/features.php:391 -msgid "Enable tab to display only Network posts that you've interacted on" -msgstr "Activa la pestanya per mostrar només les entrades de xarxa en les que has intervingut" +msgid "" +"Ability to order the stream by last post date, last comment date or " +"unthreaded activities" +msgstr "Permet canviar l'ordre dels continguts en el flux: segons la data de les entrades, segons la data de l'últim comentari, o segons la data de cada missatge sense agrupar per converses" #: ../../include/features.php:399 -msgid "Network New Tab" -msgstr "Pestanya Nou a la Xarxa" +msgid "Contact Filter" +msgstr "Filtre de contactes" #: ../../include/features.php:400 -msgid "Enable tab to display all new Network activity" -msgstr "Activa pestanya per mostrar tota l'activitat nova de la Xarxa" +msgid "Ability to display only posts of a selected contact" +msgstr "Permet mostrar només entrades d'un contacte determinat" #: ../../include/features.php:408 +msgid "Forum Filter" +msgstr "Filtre de fòrums" + +#: ../../include/features.php:409 +msgid "Ability to display only posts of a specific forum" +msgstr "Permet mostrar només entrades d'un fòrum determinat" + +#: ../../include/features.php:417 +msgid "Personal Posts Filter" +msgstr "Filtre d'interaccions amb mi" + +#: ../../include/features.php:418 +msgid "Ability to display only posts that you've interacted on" +msgstr "Permet mostrar només les entrades amb què has interactuat" + +#: ../../include/features.php:426 msgid "Affinity Tool" msgstr "Eina d'Afinitat" -#: ../../include/features.php:409 +#: ../../include/features.php:427 msgid "Filter stream activity by depth of relationships" msgstr "Filtre d'activitat del flux per importància de la relació" -#: ../../include/features.php:418 +#: ../../include/features.php:436 msgid "Show friend and connection suggestions" msgstr "Suggereix connexions o amistats" -#: ../../include/features.php:426 +#: ../../include/features.php:444 msgid "Connection Filtering" msgstr "Filtre de Connexió" -#: ../../include/features.php:427 +#: ../../include/features.php:445 msgid "Filter incoming posts from connections based on keywords/content" msgstr "Filtre de missatges d'entrada de conexions, basat en paraules clau/contingut " -#: ../../include/features.php:439 +#: ../../include/features.php:457 msgid "Post/Comment Tools" msgstr "Eina d'Entrades/Comentaris" -#: ../../include/features.php:443 +#: ../../include/features.php:461 msgid "Community Tagging" msgstr "Etiquetat per la Comunitat" -#: ../../include/features.php:444 +#: ../../include/features.php:462 msgid "Ability to tag existing posts" msgstr "Capacitat d'etiquetar entrades existents" -#: ../../include/features.php:452 +#: ../../include/features.php:470 msgid "Post Categories" msgstr "Categories d'Entrades" -#: ../../include/features.php:453 +#: ../../include/features.php:471 msgid "Add categories to your posts" msgstr "Afegeix categoria a la teva entrada" -#: ../../include/features.php:461 +#: ../../include/features.php:479 msgid "Emoji Reactions" msgstr "Reaccions dels Emoji" -#: ../../include/features.php:462 +#: ../../include/features.php:480 msgid "Add emoji reaction ability to posts" msgstr "Afegeix un emoji habilitat per reaccionar a entrades" -#: ../../include/features.php:471 +#: ../../include/features.php:489 msgid "Ability to file posts under folders" msgstr "Capacitat de arxivar entrades en les carpetes" -#: ../../include/features.php:479 +#: ../../include/features.php:497 msgid "Dislike Posts" msgstr "No Agrada l'Entrada" -#: ../../include/features.php:480 +#: ../../include/features.php:498 msgid "Ability to dislike posts/comments" msgstr "Capacitat per marcar amb \"No Agrada\" les entrades/comentaris" -#: ../../include/features.php:488 +#: ../../include/features.php:506 msgid "Star Posts" msgstr "Entrades Excel·lents" -#: ../../include/features.php:489 +#: ../../include/features.php:507 msgid "Ability to mark special posts with a star indicator" msgstr "Capacitat per marcar entrades especials amb l'indicador d'excel·lencia" -#: ../../include/features.php:497 +#: ../../include/features.php:515 msgid "Tag Cloud" msgstr "Núvol d'Etiquetes." -#: ../../include/features.php:498 +#: ../../include/features.php:516 msgid "Provide a personal tag cloud on your channel page" msgstr "Proporcionar un núvol d'etiquetes personals a la teva pàgina de canal" @@ -14017,38 +14477,38 @@ msgstr "Ha fallat guardar la informació del compte" msgid "Registration confirmation for %s" msgstr "Inscripció confirmada per %s" -#: ../../include/account.php:383 +#: ../../include/account.php:385 #, php-format msgid "Registration request at %s" msgstr "Sol·licitud d'inscripció a %s" -#: ../../include/account.php:405 +#: ../../include/account.php:407 msgid "your registration password" msgstr "la teva contrasenya registrada" -#: ../../include/account.php:411 ../../include/account.php:473 +#: ../../include/account.php:413 ../../include/account.php:475 #, php-format msgid "Registration details for %s" msgstr "Detalls de l'inscripció per %s" -#: ../../include/account.php:484 +#: ../../include/account.php:486 msgid "Account approved." msgstr "Compte aprovat." -#: ../../include/account.php:524 +#: ../../include/account.php:526 #, php-format msgid "Registration revoked for %s" msgstr "Inscripció revocada per %s" -#: ../../include/account.php:803 ../../include/account.php:805 +#: ../../include/account.php:805 ../../include/account.php:807 msgid "Click here to upgrade." msgstr "Feu clic aquí per actualitzar." -#: ../../include/account.php:811 +#: ../../include/account.php:813 msgid "This action exceeds the limits set by your subscription plan." msgstr "Aquesta acció és superior als límits establerts pel seu pla de subscripció." -#: ../../include/account.php:816 +#: ../../include/account.php:818 msgid "This action is not available under your subscription plan." msgstr "Aquesta acció no està disponible en el seu pla de subscripció." @@ -14133,106 +14593,110 @@ msgstr "Aniversari de %1$s" msgid "Happy Birthday %1$s" msgstr "Feliç Aniversari %1$s" -#: ../../include/nav.php:96 +#: ../../include/nav.php:88 msgid "Remote authentication" msgstr "Autenticació remota" -#: ../../include/nav.php:96 +#: ../../include/nav.php:88 msgid "Click to authenticate to your home hub" msgstr "Clica per autentificar-te en el teu node" -#: ../../include/nav.php:102 ../../include/nav.php:190 -msgid "Manage Your Channels" -msgstr "Gestiona els Teus Canals" +#: ../../include/nav.php:94 +msgid "Manage your channels" +msgstr "Gestiona els teus canals" + +#: ../../include/nav.php:97 +msgid "Manage your privacy groups" +msgstr "Gestiona els teus grups de privacitat" -#: ../../include/nav.php:105 ../../include/nav.php:192 +#: ../../include/nav.php:99 msgid "Account/Channel Settings" -msgstr "Ajustos de Compte/Canal" +msgstr "Configuració de compte i canal" -#: ../../include/nav.php:111 ../../include/nav.php:140 +#: ../../include/nav.php:105 ../../include/nav.php:134 msgid "End this session" msgstr "Finalitza aquesta sessió" -#: ../../include/nav.php:114 +#: ../../include/nav.php:108 msgid "Your profile page" msgstr "La teva pàgina de perfil" -#: ../../include/nav.php:117 +#: ../../include/nav.php:111 msgid "Manage/Edit profiles" -msgstr "Gestiona/Edita perfils" +msgstr "Gestiona/edita els perfils" -#: ../../include/nav.php:126 ../../include/nav.php:130 +#: ../../include/nav.php:120 ../../include/nav.php:124 msgid "Sign in" msgstr "Signatura" -#: ../../include/nav.php:157 +#: ../../include/nav.php:151 msgid "Take me home" msgstr "Porta'm a casa" -#: ../../include/nav.php:159 +#: ../../include/nav.php:153 msgid "Log me out of this site" msgstr "Tanca'm la sessió en aquest lloc web" -#: ../../include/nav.php:164 +#: ../../include/nav.php:158 msgid "Create an account" msgstr "Crear un compte" -#: ../../include/nav.php:176 +#: ../../include/nav.php:170 msgid "Help and documentation" msgstr "Ajuda i documentació" -#: ../../include/nav.php:179 +#: ../../include/nav.php:185 msgid "Search site @name, !forum, #tag, ?docs, content" msgstr "Cerca en el node @nom, !fòrum, #etiqueta, ?documentació, contingut" -#: ../../include/nav.php:199 +#: ../../include/nav.php:191 msgid "Site Setup and Configuration" -msgstr "Ajustos i Configuració del Lloc" +msgstr "Configuració del node" -#: ../../include/nav.php:290 +#: ../../include/nav.php:282 msgid "@name, !forum, #tag, ?doc, content" msgstr "@nom, !fòrum, #etiqueta, ?documentació, contingut" -#: ../../include/nav.php:291 +#: ../../include/nav.php:283 msgid "Please wait..." msgstr "Si us plau, espera......." -#: ../../include/nav.php:297 +#: ../../include/nav.php:289 msgid "Add Apps" msgstr "Afegeix aplicacions" -#: ../../include/nav.php:298 +#: ../../include/nav.php:290 msgid "Arrange Apps" msgstr "Endreça les aplicacions" -#: ../../include/nav.php:299 +#: ../../include/nav.php:291 msgid "Toggle System Apps" msgstr "Commuta l'estat de les aplicacions de sistema" -#: ../../include/photos.php:150 +#: ../../include/photos.php:151 #, php-format msgid "Image exceeds website size limit of %lu bytes" msgstr "La imatge excedeix la mida limit pel lloc web en %lu bytes" -#: ../../include/photos.php:161 +#: ../../include/photos.php:162 msgid "Image file is empty." msgstr "El fitxer d'imatge esta buit." -#: ../../include/photos.php:326 +#: ../../include/photos.php:327 msgid "Photo storage failed." msgstr "Fracassà l'emmagatzematge de la Foto" -#: ../../include/photos.php:375 +#: ../../include/photos.php:376 msgid "a new photo" msgstr "Una foto nova" -#: ../../include/photos.php:379 +#: ../../include/photos.php:380 #, php-format msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "%1$s enviat %2$s a %3$s" -#: ../../include/photos.php:671 +#: ../../include/photos.php:672 msgid "Upload New Photos" msgstr "Puja Noves Fotos" @@ -14244,12 +14708,12 @@ msgstr "paquet de dades invàlid" msgid "Unable to verify channel signature" msgstr "No es pot verificar la signatura del canal" -#: ../../include/zot.php:2552 +#: ../../include/zot.php:2557 #, php-format msgid "Unable to verify site signature for %s" msgstr "No es pot verificar la signatura del lloc per %s" -#: ../../include/zot.php:4219 +#: ../../include/zot.php:4221 msgid "invalid target signature" msgstr "Signatura objectiu invàlida" @@ -14262,23 +14726,23 @@ msgstr "Un grup esborrat amb aquest nom fou reviscolat. Els permisos dels items #: ../../include/group.php:264 msgid "Add new connections to this privacy group" -msgstr "Afegir noves connexions a aquest grup privat" +msgstr "Afegeix noves connexions a aquest grup de privacitat" -#: ../../include/group.php:306 +#: ../../include/group.php:298 msgid "edit" msgstr "edita" -#: ../../include/group.php:329 +#: ../../include/group.php:321 msgid "Edit group" msgstr "Editar grup" -#: ../../include/group.php:330 +#: ../../include/group.php:322 msgid "Add privacy group" -msgstr "Afegir grup privat" +msgstr "Afegeix grup de privacitat" -#: ../../include/group.php:331 +#: ../../include/group.php:323 msgid "Channels not in any privacy group" -msgstr "Sense canals en grups privats" +msgstr "Canals que no estan en cap grup de privacitat" #: ../../include/connections.php:133 msgid "New window" @@ -14288,19 +14752,19 @@ msgstr "Nova finestra" msgid "Open the selected location in a different window or browser tab" msgstr "Obrir la localització seleccionada en un altre finestra o pestanya del navegador" -#: ../../include/auth.php:152 +#: ../../include/auth.php:192 msgid "Delegation session ended." msgstr "S'ha tancat la sessió de delegació." -#: ../../include/auth.php:156 +#: ../../include/auth.php:196 msgid "Logged out." msgstr "Sortir." -#: ../../include/auth.php:273 +#: ../../include/auth.php:291 msgid "Email validation is incomplete. Please check your email." msgstr "Encara no s'ha validat el teu correu. Comprova la safata d'entrada i la paperera." -#: ../../include/auth.php:289 +#: ../../include/auth.php:307 msgid "Failed authentication" msgstr "Autenticació fallida" diff --git a/view/ca/hstrings.php b/view/ca/hstrings.php index 50ffaebeb..d2954b2b7 100644 --- a/view/ca/hstrings.php +++ b/view/ca/hstrings.php @@ -19,7 +19,7 @@ App::$strings["Can post on my channel (wall) page"] = "Pot penjar entrades al mu App::$strings["Can comment on or like my posts"] = "Pot comentar i fer \"m'agrada\" a les meves entrades"; App::$strings["Can send me private mail messages"] = "Pot enviar-me missatges privats"; App::$strings["Can like/dislike profiles and profile things"] = "Pot fer m'agrada i no m'agrada als perfils i coses del perfil"; -App::$strings["Can forward to all my channel connections via @+ mentions in posts"] = "Pot reenviar a totes les connexions del meu canal fent servir @+ per mencionar"; +App::$strings["Can forward to all my channel connections via ! mentions in posts"] = "Pot fer arribar entrades a totes les meves connexions fent servir mencions amb \"!\""; App::$strings["Can chat with me"] = "Pot xatejar amb mi"; App::$strings["Can source my public posts in derived channels"] = "Pot fer servir les meves entrades per publicar automàticament en altres canals"; App::$strings["Can administer my channel"] = "Pot administrar el meu canal"; @@ -49,7 +49,7 @@ App::$strings["Created"] = "Creat"; App::$strings["Edited"] = "Editat"; App::$strings["Create"] = "Crea"; App::$strings["Edit"] = "Edita"; -App::$strings["Share"] = "Compartir"; +App::$strings["Share"] = "Comparteix"; App::$strings["Delete"] = "Esborra"; App::$strings["View"] = "Mostra"; App::$strings["Total invitation limit exceeded."] = "S'ha superat el límit total d'invitacions."; @@ -78,6 +78,7 @@ App::$strings["Item not found"] = "No s'ha trobat l'element"; App::$strings["Layout Name"] = "Nom del disseny"; App::$strings["Layout Description (Optional)"] = "Descripció del disseny (opcional)"; App::$strings["Edit Layout"] = "Edita el disseny"; +App::$strings["Cancel"] = "Cancel·la"; App::$strings["Permission denied"] = "S'ha denegat el permís"; App::$strings["Invalid profile identifier."] = "L'identificador de perfil no és vàlid."; App::$strings["Profile Visibility Editor"] = "Editor de la visibilitat del perfil"; @@ -111,7 +112,6 @@ App::$strings["More"] = "Mostra més"; App::$strings["Less"] = "Mostra menys"; App::$strings["Select calendar"] = "Tria un calendari"; App::$strings["Delete all"] = "Esborra'ls tots"; -App::$strings["Cancel"] = "Cancel·la"; App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "Malauradament encara no es poden editar esdeveniments periòdics."; App::$strings["Name"] = "Nom"; App::$strings["Organisation"] = "Organització"; @@ -142,6 +142,8 @@ App::$strings["You must be logged in to see this page."] = "Has de tenir una ses App::$strings["Posts and comments"] = "Entrades i comentaris"; App::$strings["Only posts"] = "Només entrades"; App::$strings["Insufficient permissions. Request redirected to profile page."] = "S'ha denegat el permís. La petició s'ha redirigit a la pàgina de perfil."; +App::$strings["Search Results For:"] = "Cerca resultats per:"; +App::$strings["Reset form"] = "Esborra el formulari"; App::$strings["Export Channel"] = "Exporta un canal"; App::$strings["Export your basic channel information to a file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new server hub, but does not contain your content."] = "Exporta la informació bàsica del canal a un arxiu. Això serveix com a còpia de seguretat de les teves connexions, permisos, perfil i dades bàsiques, i pots emprar-la per a importar aquestes dades des d'un altre hub. No conté el contingut del canal."; App::$strings["Export Content"] = "Exporta'n el contingut"; @@ -273,16 +275,18 @@ App::$strings["Import Items"] = "Importa articles"; App::$strings["Use this form to import existing posts and content from an export file."] = "Empra aquest formulari per importar entrades existents i contingut d'un arxiu d'exportació."; App::$strings["File to Upload"] = "Fitxer per pujar"; App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Has creat %1$.0f canals dels %2$.0f totals permesos."; -App::$strings["Name or caption"] = "Nom o llegenda"; +App::$strings["Loading"] = "S'està carregant"; +App::$strings["Your real name is recommended."] = "És recomanable fer servir el nom real."; App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Exemples: \"Paula Gomila\", \"Manel i els seus cavalls\", \"Assemblea de veïnes del barri\", \"Filosofia\""; +App::$strings["This will be used to create a unique network address (like an email address)."] = "Es farà servir per crear una adreça de xarxa única, com la de email."; +App::$strings["Allowed characters are a-z 0-9, - and _"] = "Els caràcters permesos són lletres minúscules sense accents, números i guions: a-z, 0-9, -, _"; +App::$strings["Channel name"] = "Nom del canal"; App::$strings["Choose a short nickname"] = "Tria un àlies curt"; -App::$strings["Your nickname will be used to create an easy to remember channel address e.g. nickname%s"] = "El teu àlies servirà per crear un nom fàcil per recordar l'adreça del canal. Per exemple, àlies%s"; App::$strings["Channel role and privacy"] = "Rol i privacitat del canal"; -App::$strings["Select a channel role with your privacy requirements."] = "Tria un rol pel canal segons les teves necessitats de privacitat."; -App::$strings["Read more about roles"] = "Llegix més sobre els rols"; -App::$strings["Create Channel"] = "Crea un canal"; -App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things. Channels can make connections with other channels to share information with each other."] = "Cada canal és una identitat de xarxa única. Tant pot representar una persona (el seu perfil social), com un fòrum (un grup), una associació o la pàgina d'algun personatge públic, una font de notícies, i moltes més coses. Els canals poden connectar-se entre ells per a compartir informació."; -App::$strings["The type of channel you create affects the basic privacy settings, the permissions that are granted to connections/friends, and also the channel's visibility across the network."] = "El tipus de canal que creïs determinarà els permisos de privacitat bàsics, els atorgats a les connexions i a la visibilitat del canal a la xarxa."; +App::$strings["Select a channel permission role compatible with your usage needs and privacy requirements."] = "Escull un rol de permisos de canal. Tingues en compte l'ús que en faràs i el nivell de privacitat que desitges."; +App::$strings["Read more about channel permission roles"] = "Llegeix més sobre els rols de permisos en els canals"; +App::$strings["Create a Channel"] = "Crea un canal"; +App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal és una identitat de xarxa única. Tant pot representar una persona (el seu perfil social), com un fòrum (un grup), una associació o la pàgina d'algun personatge públic, un flux de notícies, i moltes més coses."; App::$strings["or import an existing channel from another location."] = "o bé importa un canal existent des d'una altra ubicació."; App::$strings["Validate"] = "Valida-ho"; App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "No es permet esborrar un canal fins a 48 hores més tard d'haver canviant la contrasenya del compte al qual pertany."; @@ -418,35 +422,6 @@ App::$strings["Failed Updates"] = "Actualitzacions fallides"; App::$strings["Mark success (if update was manually applied)"] = "Marca com a exitosa. Fes-ho només si l'actualització s'ha aplicat de forma manual i saps del cert que ha estat així."; App::$strings["Attempt to execute this update step automatically"] = "Prova a fer automàticament aquesta actualització"; App::$strings["No failed updates."] = "No hi ha actualitzacions fallides."; -App::$strings["Item not found."] = "No s'ha trobat l'element."; -App::$strings["Plugin %s disabled."] = "S'ha desactivat l'extensió %s."; -App::$strings["Plugin %s enabled."] = "S'ha activat l'extensió %s."; -App::$strings["Disable"] = "Desactiva"; -App::$strings["Enable"] = "Activa"; -App::$strings["Administration"] = "Administració"; -App::$strings["Plugins"] = "Extensions"; -App::$strings["Toggle"] = "Commuta'n l'estat"; -App::$strings["Settings"] = "Configuració"; -App::$strings["Author: "] = "Autor/a:"; -App::$strings["Maintainer: "] = "Persona mantenidora:"; -App::$strings["Minimum project version: "] = "Versió mínima del projecte:"; -App::$strings["Maximum project version: "] = "Versió màxima del projecte:"; -App::$strings["Minimum PHP version: "] = "Versió mínima de PHP:"; -App::$strings["Compatible Server Roles: "] = "Rols de servidor compatibles"; -App::$strings["Requires: "] = "Demana:"; -App::$strings["Disabled - version incompatibility"] = "Desactivada - versions incompatibles"; -App::$strings["Enter the public git repository URL of the plugin repo."] = "Introdueix la URL del repositori git d'extensions. Ha de ser un repositori públic."; -App::$strings["Plugin repo git URL"] = "Adreça URL del repositori d'extensions."; -App::$strings["Custom repo name"] = "Nom personalitzat pel repositori"; -App::$strings["(optional)"] = "(opcional)"; -App::$strings["Download Plugin Repo"] = "Descarrega el repositori"; -App::$strings["Install new repo"] = "Instal·la un nou repositori"; -App::$strings["Install"] = "Instal·la"; -App::$strings["Manage Repos"] = "Gestiona els repositoris"; -App::$strings["Installed Plugin Repositories"] = "Repositoris instaŀlats"; -App::$strings["Install a New Plugin Repository"] = "Instal·la un nou repositori"; -App::$strings["Switch branch"] = "Canvia de branca"; -App::$strings["Remove"] = "Esborra"; App::$strings["%s account blocked/unblocked"] = array( 0 => "S'ha [des]bloquejat %s compte", 1 => "S'han [des]bloquejat %s comptes", @@ -459,6 +434,7 @@ App::$strings["Account not found"] = "No s'ha trobat el compte"; App::$strings["Account '%s' deleted"] = "S'ha esborrat el compte '%s'"; App::$strings["Account '%s' blocked"] = "S'ha bloquejat el compte '%s'"; App::$strings["Account '%s' unblocked"] = "S'ha desbloquejat el compte '%s'"; +App::$strings["Administration"] = "Administració"; App::$strings["Accounts"] = "Comptes"; App::$strings["select all"] = "sel·leciona-ho tot"; App::$strings["Registrations waiting for confirm"] = "Inscripcions esperant confirmació"; @@ -512,8 +488,15 @@ App::$strings["Selected channels will be deleted!\\n\\nEverything that was poste App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "El canal {0} està a punt de ser esborrat!\\n\\nTotes les seves publicacions d'aquest en aquest lloc s'eliminaran de forma permanent!\\n\\nN'estàs segur/a?"; App::$strings["Theme settings updated."] = "S'ha actualitzat la configuració de tema."; App::$strings["No themes found."] = "No s'ha trobat cap tema."; +App::$strings["Item not found."] = "No s'ha trobat l'element."; +App::$strings["Disable"] = "Desactiva"; +App::$strings["Enable"] = "Activa"; App::$strings["Screenshot"] = "Captura de pantalla"; App::$strings["Themes"] = "Temes"; +App::$strings["Toggle"] = "Commuta'n l'estat"; +App::$strings["Settings"] = "Configuració"; +App::$strings["Author: "] = "Autor/a:"; +App::$strings["Maintainer: "] = "Persona mantenidora:"; App::$strings["[Experimental]"] = "[Experimental]"; App::$strings["[Unsupported]"] = "[Incompatible]"; App::$strings["Site settings updated."] = "S'ha actualitzat la configuració del lloc"; @@ -533,6 +516,8 @@ App::$strings["Intermediate - somewhat comfortable"] = "Intermedi - còmode en e App::$strings["Advanced - very comfortable"] = "Avançat - molt còmode en entorns informàtics"; App::$strings["Expert - I can write computer code"] = "Expert - Sé programar"; App::$strings["Wizard - I probably know more than you do"] = "Bruixot - Segurament en sé més que tu"; +App::$strings["Default permission role for new accounts"] = "Rol de permisos per defecte per als comptes nous."; +App::$strings["This role will be used for the first channel created after registration."] = "S'aplicarà aquest rol al primer canal que es creï després del registre d'un compte."; App::$strings["Site"] = "Node"; App::$strings["Registration"] = "Inscripcions"; App::$strings["File upload"] = "Pujada d'arxius"; @@ -582,6 +567,9 @@ App::$strings["Site only Public Streams"] = "Fluxos públics només locals"; App::$strings["Allow access to public content originating only from this site if Imported Public Streams are disabled."] = "Permet accedir a aquell contingut públic que s'hagi originat en aquest lloc, suposant que no s'estan important fluxos públics d'altres nodes."; App::$strings["Allow anybody on the internet to access the Public streams"] = "Permet a qualsevol persona d'internet d'accedir els fluxos públics"; App::$strings["Disable to require authentication before viewing. Warning: this content is unmoderated."] = "Desabilita-ho per a demanar iniciar sessió per poder-ho veure. Alerta: el contingut no estarà moderat."; +App::$strings["Only import Public stream posts with this text"] = "Importa només entrades del flux públics que continguin aquest text"; +App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "paraules una per línia o #etiquetes o /patrons/ o idioma=xx, deixar en blanc per importar totes les entrades"; +App::$strings["Do not import Public stream posts with this text"] = "No importes entrades del flux públic que continguin aquest text"; App::$strings["Login on Homepage"] = "Accés a la Pàgina d'inici"; App::$strings["Present a login box to visitors on the home page if no other content has been configured."] = "Presenta una casella d'identificació a la pàgina d'inici als visitants si no s'ha configurat altre contingut."; App::$strings["Enable context help"] = "Activar l'ajuda contextual"; @@ -615,9 +603,30 @@ App::$strings["Do not expire any posts which have comments less than this many d App::$strings["Public servers: Optional landing (marketing) webpage for new registrants"] = "Servidors públics: Pàgina d'arribada promocional per a nous usuaris o usuàries."; App::$strings["Create this page first. Default is %s/register"] = "Crea primer aquesta pàgina. Per defecte és %s/register"; App::$strings["Page to display after creating a new channel"] = "Pàgina que es mostrarà després d'haver creat un canal nou"; -App::$strings["Recommend: profiles, go, or settings"] = "Recomanat: profiles (perfils), go (mostra diverses opcions), settings (configuració)"; +App::$strings["Default: profiles"] = "Per defecte: profiles"; App::$strings["Optional: site location"] = "Opcional: ubicació del node"; App::$strings["Region or country"] = "Regió o país"; +App::$strings["Plugin %s disabled."] = "S'ha desactivat l'extensió %s."; +App::$strings["Plugin %s enabled."] = "S'ha activat l'extensió %s."; +App::$strings["Addons"] = "Extensions"; +App::$strings["Minimum project version: "] = "Versió mínima del projecte:"; +App::$strings["Maximum project version: "] = "Versió màxima del projecte:"; +App::$strings["Minimum PHP version: "] = "Versió mínima de PHP:"; +App::$strings["Compatible Server Roles: "] = "Rols de servidor compatibles"; +App::$strings["Requires: "] = "Demana:"; +App::$strings["Disabled - version incompatibility"] = "Desactivada - versions incompatibles"; +App::$strings["Enter the public git repository URL of the addon repo."] = "Introdueix la URL del repositori git d'extensions. Ha de ser un repositori públic."; +App::$strings["Addon repo git URL"] = "Adreça URL del repositori d'extensions."; +App::$strings["Custom repo name"] = "Nom personalitzat pel repositori"; +App::$strings["(optional)"] = "(opcional)"; +App::$strings["Download Addon Repo"] = "Descarrega el repositori"; +App::$strings["Install new repo"] = "Instal·la un nou repositori"; +App::$strings["Install"] = "Instal·la"; +App::$strings["Manage Repos"] = "Gestiona els repositoris"; +App::$strings["Installed Addon Repositories"] = "Repositoris instaŀlats"; +App::$strings["Install a New Addon Repository"] = "Instal·la un nou repositori"; +App::$strings["Switch branch"] = "Canvia de branca"; +App::$strings["Remove"] = "Esborra"; App::$strings["New Profile Field"] = "Camp de Perfil Nou"; App::$strings["Field nickname"] = "Àlies de Camp"; App::$strings["System name of field"] = "nOM DEL SISTEMA DEL CAMP"; @@ -628,7 +637,7 @@ App::$strings["Help text"] = "Text d'ajuda"; App::$strings["Additional info (optional)"] = "Informació adicional (opcional)"; App::$strings["Save"] = "Guardar"; App::$strings["Field definition not found"] = "No es troba la definició del camp"; -App::$strings["Edit Profile Field"] = "Camp d'Edició del Perfil"; +App::$strings["Edit Profile Field"] = "Modifica el camp de perfil"; App::$strings["Profile Fields"] = "Camps del Perfil"; App::$strings["Basic Profile Fields"] = "Camps Bàsics del Perfil"; App::$strings["Advanced Profile Fields"] = "Camps Avançats del Perfil"; @@ -652,6 +661,9 @@ App::$strings["All other embedded content will be filtered, unlessprivacy settings, which have higher priority than individual settings. You can not change those settings here."] = "Alguns permisos poden ser heretats dels teus canals ajustos de privacitat, Els quals tenen més prioritat que els ajustos individuals. No pots canviar aquests ajustos aquí."; +App::$strings["Some permissions may be inherited from your channel's privacy settings, which have higher priority than individual settings. You can not change those settings here."] = "Alguns permisos pot ser que vinguin heretats de la configuració de privacitat del teu canal. Aquesta té més prioritat que les configuracions individuals. No pots canviar aquests paràmetres aquí."; App::$strings["Friends"] = "Amics"; App::$strings["Settings updated."] = "Ajustes actualizados."; App::$strings["Nobody except yourself"] = "Ningú excepte tú"; @@ -697,8 +709,10 @@ App::$strings["Allow us to suggest you as a potential friend to new members?"] = App::$strings["or"] = "o"; App::$strings["Your channel address is"] = "La teva adreça del canal es"; App::$strings["Your files/photos are accessible via WebDAV at"] = "Les teves fotos i arxius estan disponibles mitjançant WebDAV a"; -App::$strings["Channel Settings"] = "Ajustos del Canal"; -App::$strings["Basic Settings"] = "Ajustos Bàsics"; +App::$strings["Automatic membership approval"] = "Acceptació automàtica de membres"; +App::$strings["If enabled, connection requests will be approved without your interaction"] = "Si s'habilita, les soŀlicituds de connexió s'aprovaran automàticament sense requerir la teva interacció"; +App::$strings["Channel Settings"] = "Configuració de canal"; +App::$strings["Basic Settings"] = "Configuració bàsica"; App::$strings["Full Name:"] = "Nom Complet:"; App::$strings["Email Address:"] = "Adreça de E-Correu:"; App::$strings["Your Timezone:"] = "La teva Franja Horària"; @@ -707,11 +721,11 @@ App::$strings["Geographical location to display on your posts"] = "Posició geog App::$strings["Use Browser Location:"] = "Empra la Localització del Navegador:"; App::$strings["Adult Content"] = "Contingut per a Adults"; App::$strings["This channel frequently or regularly publishes adult content. (Please tag any adult material and/or nudity with #NSFW)"] = "Aquest canal publica freqúentment o amb regularitat contingut per a adults. (Si us plau, etiqueti qualsevol material per a adults amb #NSFW)"; -App::$strings["Security and Privacy Settings"] = "Ajustos de Seguretat i Privacitat"; +App::$strings["Security and Privacy Settings"] = "Configuració de seguretat i privacitat"; App::$strings["Your permissions are already configured. Click to view/adjust"] = "Els teus permisos estan configurats. Clic per veure/ajustar"; App::$strings["Hide my online presence"] = "Amaga la meva presencia en línia"; App::$strings["Prevents displaying in your profile that you are online"] = "Evita mostrar en el teu perfil, que estàs en línia"; -App::$strings["Simple Privacy Settings:"] = "Ajustos simples de privacitat:"; +App::$strings["Simple Privacy Settings:"] = "Configuració simple de privacitat:"; App::$strings["Very Public - extremely permissive (should be used with caution)"] = "Molt públic - extremadament permissiu (s'ha d'anar en compte)"; App::$strings["Typical - default public, privacy when desired (similar to social network permissions but with improved privacy)"] = "Normal - públic per defecte, privat quan es desitgi (similar als permisos de xarxa social, però amb millor privacitat)"; App::$strings["Private - default private, never open or public"] = "Privat - privat per defecte, mai públic o obert"; @@ -727,12 +741,12 @@ App::$strings["The website limit takes precedence if lower than your limit."] = App::$strings["Maximum Friend Requests/Day:"] = "Nombre màxim de peticions d'amistat per dia"; App::$strings["May reduce spam activity"] = "Pot reduir l'SPAM"; App::$strings["Default Privacy Group"] = "Grup de privacitat per defecte"; -App::$strings["Use my default audience setting for the type of object published"] = "Empra els meus ajustos per defecte segons el tipus de entrada publicada"; +App::$strings["Use my default audience setting for the type of object published"] = "Empra la meva configuració d'audiència que hagi triat per al tipus d'entrada"; App::$strings["Profile to assign new connections"] = "Perfil al qual assignar les connexions noves"; App::$strings["Default Permissions Group"] = "Grup de permisos per defecte"; App::$strings["Maximum private messages per day from unknown people:"] = "Nombre màxim de missatges privats de desconeguts al dia:"; App::$strings["Useful to reduce spamming"] = "Útil per a reduir l'spam"; -App::$strings["Notification Settings"] = "Ajustos de notificacions"; +App::$strings["Notification Settings"] = "Configuració de notificacions"; App::$strings["By default post a status message when:"] = "Per defecte envia un missatge d'estat quan:"; App::$strings["accepting a friend request"] = "S'accepta una sol·licitud d'amistat"; App::$strings["joining a forum/community"] = "Apuntar-se a un fòrum o comunitat"; @@ -764,14 +778,15 @@ App::$strings["System Registrations"] = "Inscripcions del Sistema"; App::$strings["Unseen shared files"] = "Fitxers compartits nous"; App::$strings["Unseen public activity"] = "Activitat pública nova"; App::$strings["Unseen likes and dislikes"] = "\"M'agrada\" i \"no m'agrada\" pendents"; +App::$strings["Unseen forum posts"] = "Entrades de fòrum no llegides"; App::$strings["Email notification hub (hostname)"] = "Hub per a notificacions per correu (nom de domini)"; App::$strings["If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s"] = "En cas que el teu canal estigui repicat en diversos hubs, habilita aquesta opció al teu hub preferit. Això evita notificacions duplicades. Exemple: %s"; App::$strings["Show new wall posts, private messages and connections under Notices"] = "Mostra totes les novetats d'entrades de mur, missatges privats i connexions a Notícies"; App::$strings["Notify me of events this many days in advance"] = "Notifica'm dels esdeveniments amb aquests dies d'antelació"; App::$strings["Must be greater than 0"] = "Ha de ser més gran que 0"; -App::$strings["Advanced Account/Page Type Settings"] = "Ajustos avançats de compte i tipus de pàgina"; +App::$strings["Advanced Account/Page Type Settings"] = "Configuració avançada de compte i de tipus de pàgina"; App::$strings["Change the behaviour of this account for special situations"] = "Modifica el comportament d'aquest compte en situacions especials"; -App::$strings["Miscellaneous Settings"] = "Ajustos diversos"; +App::$strings["Miscellaneous Settings"] = "Configuració diversa"; App::$strings["Default photo upload folder"] = "Carpeta per defecte de fotos pujades"; App::$strings["%Y - current year, %m - current month"] = "%Y - any en curs, %m - mes corrent"; App::$strings["Default file upload folder"] = "Carpeta per defecte d'arxius pujats"; @@ -791,7 +806,7 @@ App::$strings["Guest Access Tokens"] = "Tokens d'accés de convidat"; App::$strings["Login Name"] = "Nom d'usuari"; App::$strings["Login Password"] = "Contrasenya d'usuari"; App::$strings["Expires (yyyy-mm-dd)"] = "Data de caducitat (aaaa-mm-dd)"; -App::$strings["Their Settings"] = "Els seus Ajustos"; +App::$strings["Their Settings"] = "La seva configuració"; App::$strings["Name and Secret are required"] = "Es necessiten el nom i el secret"; App::$strings["Add OAuth2 application"] = "Afegeix una aplicació OAuth2"; App::$strings["Name of application"] = "Nom de l'aplicatiu"; @@ -817,7 +832,7 @@ App::$strings["Passwords do not match. Password unchanged."] = "Les contrasenyes App::$strings["Empty passwords are not allowed. Password unchanged."] = "Les contrasenyes en blanc no estan permesas. Contrasenya sense canvis."; App::$strings["Password changed."] = "Contrasenya canviada."; App::$strings["Password update failed. Please try again."] = "L'actualització de la contrasenya va fallar. Si us plau, torneu a intentar-ho."; -App::$strings["Account Settings"] = "Ajustos de Compte"; +App::$strings["Account Settings"] = "Configuració del compte"; App::$strings["Current Password"] = "Contrasenya Actual"; App::$strings["Enter New Password"] = "Entra la Nova Contrasenya"; App::$strings["Confirm New Password"] = "Confirma la Nova Contrasenya"; @@ -834,11 +849,11 @@ App::$strings["Affinity Slider Settings"] = "Configuració de la barra d'afinita App::$strings["Addon Settings"] = "Configuració de les extensions"; App::$strings["Please save/submit changes to any panel before opening another."] = "Desa els canvis en un panell abans d'obrir-ne un altre."; App::$strings["%s - (Experimental)"] = "%s - (Experimental)"; -App::$strings["Display Settings"] = "Ajustos de Pantalla"; -App::$strings["Theme Settings"] = "Ajustos de Tema"; -App::$strings["Custom Theme Settings"] = "Ajustos Personals de Tema"; -App::$strings["Content Settings"] = "Ajustos de Contingut"; -App::$strings["Display Theme:"] = "Ajustos de Tema:"; +App::$strings["Display Settings"] = "Configuració de pantalla"; +App::$strings["Theme Settings"] = "Configuració de tema"; +App::$strings["Custom Theme Settings"] = "Configuració de temes personalitzats"; +App::$strings["Content Settings"] = "Configuració dels continguts"; +App::$strings["Display Theme:"] = "Tema de pantalla:"; App::$strings["Select scheme"] = "Tria esquema"; App::$strings["Preload images before rendering the page"] = "Precarrega les imatges abans de dibuixar la pàgina"; App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "El temps subjectiu per carregar la pàgina pot ser llarg però la pàgina estarà preparada quan es mostri"; @@ -899,10 +914,12 @@ App::$strings["Or provide the old server/hub details"] = "O proveeix els detalls App::$strings["Your old identity address (xyz@example.com)"] = "La teva adreça de canal antiga. El format és canal@exemple.org"; App::$strings["Your old login email address"] = "La teva adreça de correu electrònic antiga"; App::$strings["Your old login password"] = "La teva contrasenya antiga"; +App::$strings["Import a few months of posts if possible (limited by available memory"] = "Importa, si es possible, missatges de fa uns quants mesos (limitat per la memòria disponible) "; App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Per a qualsevol de les opcions, escull si vols fer primària l'adreça d'aquest node o mantenir l'anterior com a primària. Podràs penjar entrades des de totes dues adreces, però per als fitxers, imatges i altres en cal una de primària."; App::$strings["Make this hub my primary location"] = "Fes d'aquest node la meva ubicació primària"; App::$strings["Move this channel (disable all previous locations)"] = "Moure aquest canal (desactiva totes les prèvies localitzacions)"; -App::$strings["Import a few months of posts if possible (limited by available memory"] = "Importa, si es possible, missatges de fa uns quants mesos (limitat per la memòria disponible) "; +App::$strings["Use this channel nickname instead of the one provided"] = "Fes servir aquest nom de canal en comptes del que has facilitat"; +App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Deixa-ho en blanc per a mantenir el teu nom de canal actual. Se t'assignarà un nom aleatori però similar a l'actual en cas que el nom actual ja estigui agafat en aquest node."; App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Aquest procès pot trigar minuts en completar. Si et plau envia el formulari només una vegada i manté aquesta pàgina oberta fins que finalitzi."; App::$strings["Authentication failed."] = "Ha fallat l'autentificació."; App::$strings["Remote Authentication"] = "Autentificació Remota"; @@ -959,10 +976,9 @@ App::$strings["Search your connections"] = "Cerca entre les teves connexions"; App::$strings["Connections search"] = "Cerca connexions"; App::$strings["Find"] = "Troba"; App::$strings["item"] = "element"; -App::$strings["Source of Item"] = "Origen de l'article"; -App::$strings["Bookmark added"] = "Favorit afegit"; -App::$strings["My Bookmarks"] = "Els Meus Favorits"; -App::$strings["My Connections Bookmarks"] = "Les connexions dels meus Favorits"; +App::$strings["Bookmark added"] = "S'ha afegit el marcador"; +App::$strings["My Bookmarks"] = "Els meus marcadors"; +App::$strings["My Connections Bookmarks"] = "Els marcadors de les meves connexions"; App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "L'esborrat de comptes no està permès fins que transcorren 48 hores des de l'últim canvi de contrasenya."; App::$strings["Remove This Account"] = "Esborra el compte"; App::$strings["This account and all its channels will be completely removed from the network. "] = "Aquest compte i tots els seus canals s'estan apunt d'esborrar totalment de la xarxa."; @@ -1104,6 +1120,8 @@ App::$strings["Unable to process image"] = "incapaç de processar la imatge"; App::$strings["Image upload failed."] = "La pujada de la imatge va fracassar."; App::$strings["Unable to process image."] = "Incapaç de processar l'imatge."; App::$strings["Photo not available."] = "Foto no disponible."; +App::$strings["Your default profile photo is visible to anybody on the internet. Profile photos for alternate profiles will inherit the permissions of the profile"] = "La teva foto de perfil predeterminada és pública i visible per a tothom. Les fotos de perfil dels perfils alternatius hereten els permisos del seu perfil."; +App::$strings["Your profile photo is visible to anybody on the internet and may be distributed to other websites."] = "La teva foto de perfil és pública i visible a tothom, i és probable que s'escampi per altres webs."; App::$strings["Upload File:"] = "Puja Arxiu:"; App::$strings["Select a profile:"] = "Tria un perfil:"; App::$strings["Use Photo for Profile"] = "Fes servir la foto per al perfil"; @@ -1131,6 +1149,8 @@ App::$strings["g A l F d"] = "g A l F d"; App::$strings["[today]"] = "[avui]"; App::$strings["posted an event"] = "enviat un esdeveniment"; App::$strings["shared a file with you"] = "ha compartit un fitxer amb tu"; +App::$strings["Private forum"] = "Fòrum privat"; +App::$strings["Public forum"] = "Fòrum públic"; App::$strings["Invalid item."] = "Article invàlid."; App::$strings["Page not found."] = "Pàgina no trobada."; App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; @@ -1143,7 +1163,7 @@ App::$strings["Could not access address book record."] = "No puc accedir al regi App::$strings["Refresh failed - channel is currently unavailable."] = "Ha fallat la recàrrega - el canal es actualment inaccesible."; App::$strings["Unable to set address book parameters."] = "No es poden ajustar els paràmetres dels contactes."; App::$strings["Connection has been removed."] = "S'han eliminat les conexions."; -App::$strings["View Profile"] = "Veure Perfil"; +App::$strings["View Profile"] = "Mostra el meu perfil"; App::$strings["View %s's profile"] = "Mostra el perfil de %s"; App::$strings["Refresh Permissions"] = "Recarrega els Permissos"; App::$strings["Fetch updated permissions"] = "Obté els permisos actualitzats"; @@ -1169,7 +1189,7 @@ App::$strings["Fetch Vcard"] = "Obté la targeta de contacte Vcard"; App::$strings["Fetch electronic calling card for this connection"] = "Obté la targeta de trucada electrònica d'aquesta connexió"; App::$strings["Open Individual Permissions section by default"] = "Obrir, per defecte, la secció de Permisos Individuals"; App::$strings["Affinity"] = "Afinitat"; -App::$strings["Open Set Affinity section by default"] = "Obrir, per defecte, la secció d'Ajustos d'Afinitat"; +App::$strings["Open Set Affinity section by default"] = "Obre per defecte la barra d'afinitat"; App::$strings["Me"] = "Jo"; App::$strings["Family"] = "Família"; App::$strings["Acquaintances"] = "Coneguts"; @@ -1189,7 +1209,6 @@ App::$strings["Connection: %s"] = "Connexió: %s"; App::$strings["Apply these permissions automatically"] = "Aplica aquests permissos automaticament"; App::$strings["Connection requests will be approved without your interaction"] = "Les peticions de connexió seran aprovades sense la teva interacció"; App::$strings["Permission role"] = "Permisos de rol"; -App::$strings["Loading"] = "S'està carregant"; App::$strings["Add permission role"] = "Afegir permisos de rol"; App::$strings["This connection's primary address is"] = "La primera adreça d'aqueste connexió es"; App::$strings["Available locations:"] = "Localització disponible:"; @@ -1201,12 +1220,11 @@ App::$strings["Slide to adjust your rating"] = "Llisca per ajustar la valoració App::$strings["Optionally explain your rating"] = "Opcionalment pots explicar la teva valoració"; App::$strings["Custom Filter"] = "Filtre a mida"; App::$strings["Only import posts with this text"] = "Importa exclusivament entrades amb aquest text"; -App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "paraules una per línia o #etiquetes o /patrons/ o idioma=xx, deixar en blanc per importar totes les entrades"; App::$strings["Do not import posts with this text"] = "No importar entrades amb aquest text"; App::$strings["This information is public!"] = "Aquesta informació es pública!"; App::$strings["Connection Pending Approval"] = "Connexió Pendent d'Aprovació"; App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Tria el perfil que vols mostrar a %s quan es vegi el perfil segur."; -App::$strings["Some permissions may be inherited from your channel's privacy settings, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Alguns permisos poden ser heretats dels teus canals ajustos de privacitat, Els quals tenen més prioritat que els ajustos individuals. Pots canviar aquests ajustos aquí pero no tindran cap impacte fins que no canviis els ajustos heretats."; +App::$strings["Some permissions may be inherited from your channel's privacy settings, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Alguns permisos pot ser que vinguin heretats de la configuració de privacitat. del teu canal. Aquesta té més prioritat que les configuracions individuals. Pots canviar aquí aquests permisos però no tindran cap impacte mentre no canviï la configuració del teu canal."; App::$strings["Last update:"] = "Darrera actualització:"; App::$strings["Details"] = "Detalls"; App::$strings["Room not found"] = "No s'ha trobat la sala"; @@ -1214,7 +1232,7 @@ App::$strings["Leave Room"] = "Abandona la sala"; App::$strings["Delete Room"] = "Esborra Sala"; App::$strings["I am away right now"] = "Absent"; App::$strings["I am online"] = "Estic connectat/da"; -App::$strings["Bookmark this room"] = "Fes favorit aquest xat"; +App::$strings["Bookmark this room"] = "Desa aquesta sala"; App::$strings["Please enter a link URL:"] = "Si us plau entra l'enllaç URL:"; App::$strings["Encrypt text"] = "Text encriptat"; App::$strings["New Chatroom"] = "Nova sala per a Xerrar"; @@ -1232,8 +1250,8 @@ App::$strings["Menu Name"] = "Nom del menú"; App::$strings["Unique name (not visible on webpage) - required"] = "Nom únic (no visible a la pàgina web) - requerit"; App::$strings["Menu Title"] = "Títol del menú"; App::$strings["Visible on webpage - leave empty for no title"] = "Visible a la pàgina web - deixar buit per a no posar títol"; -App::$strings["Allow Bookmarks"] = "Permetre Marcadors"; -App::$strings["Menu may be used to store saved bookmarks"] = "El menú es pot emprar per a guardar marcadors"; +App::$strings["Allow Bookmarks"] = "Activa els marcadors"; +App::$strings["Menu may be used to store saved bookmarks"] = "El menú es pot emprar per a desar marcadors"; App::$strings["Submit and proceed"] = "Envia i procedeix"; App::$strings["Menus"] = "Menús"; App::$strings["Bookmarks allowed"] = "Marcadors permesos"; @@ -1247,7 +1265,7 @@ App::$strings["Menu name"] = "Nom del Menú"; App::$strings["Must be unique, only seen by you"] = "Ha de ser únic, nomes vist per tú"; App::$strings["Menu title"] = "Títol del menú"; App::$strings["Menu title as seen by others"] = "Títol del menú vist pels altres"; -App::$strings["Allow bookmarks"] = "Marcadors permesos"; +App::$strings["Allow bookmarks"] = "Activa els marcadors"; App::$strings["Layouts"] = "Dissenys"; App::$strings["Help"] = "Ajuda"; App::$strings["Comanche page description language help"] = "Pgina d'ajuda del llenguatge Comanche"; @@ -1266,27 +1284,30 @@ App::$strings["comment"] = "comentari"; App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetat %3\$s de %2\$s amb %4\$s"; App::$strings["This setting requires special processing and editing has been blocked."] = "Aquest ajust requereix un procés espedial i l'edició esta bloquejada."; App::$strings["Configuration Editor"] = "Editor de Configuració"; -App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "atenció: Realitzar segons quins ajustos pot fer el canal inoperable. Deixa aquesta pàgina si no estas segur i tens suficients coneixements sobre l'ús correcte d'aquesta característica."; -App::$strings["If enabled, connection requests will be approved without your interaction"] = "Si s'habilita, les soŀlicituds de connexió s'aprovaran automàticament sense requerir la teva interacció"; +App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Alerta: segons quines combinacions podrien deixar el teu canal inusable. No és recomanable canviar aquesta configuració si no ets sents còmode/ i segur/a de com fer servir aquesta funcionalitat."; App::$strings["Automatic approval settings"] = "Aprovació automàtica de soŀlicituds de connexió"; App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "El valor per defecte dels permisos individuals poden tenir valors per defecte segons el tipus de canal i les opcions de privacitat. Pot ser que no estiguis autoritzat/da a modificar-los."; App::$strings["Unknown App"] = "No es coneix l'aplicació"; App::$strings["Authorize"] = "Autoritza"; App::$strings["Do you authorize the app %s to access your channel data?"] = "Vols autoritzar l'aplicació %s a accedir a les dades del teu canal?"; App::$strings["Allow"] = "Permet-ho"; -App::$strings["Privacy group created."] = "Creat grup privat."; -App::$strings["Could not create privacy group."] = "No es pot crear el grup privat."; -App::$strings["Privacy group not found."] = "No es troben grups privats."; -App::$strings["Privacy group updated."] = "Grup privat actualitzat."; -App::$strings["Create a group of channels."] = "Crear un grup de canals."; -App::$strings["Privacy group name: "] = "Nom del grup privat:"; +App::$strings["Privacy group created."] = "S'ha creat el grup de privacitat."; +App::$strings["Could not create privacy group."] = "No s'ha pogut crear el grup de privacitat."; +App::$strings["Privacy group not found."] = "No s'ha trobat el grup de privacitat."; +App::$strings["Privacy group updated."] = "S'ha actualitzat el grup de privacitat."; +App::$strings["Privacy Groups"] = "Grup de privacitat"; +App::$strings["Add Group"] = "Afegeix un grup"; +App::$strings["Privacy group name"] = "Nom del grup de privacitat"; App::$strings["Members are visible to other channels"] = "Els membres son visibles en altres canals"; -App::$strings["Privacy group removed."] = "Grup privat eliminat."; -App::$strings["Unable to remove privacy group."] = "No puc eliminar el grup privat."; -App::$strings["Privacy group editor"] = "Editor del grup privat"; App::$strings["Members"] = "Membres"; -App::$strings["All Connected Channels"] = "Tots els Canals Connectats"; -App::$strings["Click on a channel to add or remove."] = "Clic sobre el canal per afegir o esborrar."; +App::$strings["Privacy group removed."] = "S'ha esborrat el grup de privacitat."; +App::$strings["Unable to remove privacy group."] = "No s'ha pogut esborrar el grup de privacitat."; +App::$strings["Privacy Group: %s"] = "Grup de privacitat: %s"; +App::$strings["Privacy group name: "] = "Nom del grup de privacitat:"; +App::$strings["Delete Group"] = "Esborra el grup"; +App::$strings["Group members"] = "Membres del grup"; +App::$strings["Not in this group"] = "No hi són al grup"; +App::$strings["Click a channel to toggle membership"] = "Fes clic a un canal per a ficar-lo o treure'l del grup"; App::$strings["Profile not found."] = "Perfil no trobat."; App::$strings["Profile deleted."] = "Perfil eliminat."; App::$strings["Profile-"] = "Perfil-"; @@ -1307,13 +1328,13 @@ App::$strings["Homepage"] = "Pàgina Personal"; App::$strings["Interests"] = "Interessos"; App::$strings["Profile updated."] = "Perfil actualitzat."; App::$strings["Hide your connections list from viewers of this profile"] = "Amaga dels curiosos la teva llista de connexions d'aquest perfil"; -App::$strings["Edit Profile Details"] = "Edita els Detalls del Perfil"; -App::$strings["View this profile"] = "Veure aquest perfil"; +App::$strings["Edit Profile Details"] = "Modifica els detalls de perfil"; +App::$strings["View this profile"] = "Mostra aquest perfil"; App::$strings["Edit visibility"] = "Editar visibilitat"; App::$strings["Profile Tools"] = "Eines per Perfils"; App::$strings["Change cover photo"] = "Canviar la foto de portada"; App::$strings["Change profile photo"] = "Canviar la foto del perfil"; -App::$strings["Create a new profile using these settings"] = "Crea un perfil nou amb aquests ajustos"; +App::$strings["Create a new profile using these settings"] = "Crea un perfil nou amb aquesta configuració"; App::$strings["Clone this profile"] = "Clonar aquest perfil"; App::$strings["Delete this profile"] = "Elimina aquest perfil"; App::$strings["Add profile things"] = "Afegeix coses al perfil"; @@ -1354,14 +1375,14 @@ App::$strings["Contact information and social networks"] = "Informació de conta App::$strings["My other channels"] = "Els meus altres canals"; App::$strings["Communications"] = "Comunicacions"; App::$strings["Profile Image"] = "Imatge del Perfil"; -App::$strings["Edit Profiles"] = "Editar Perfils"; +App::$strings["Edit Profiles"] = "Modifica els perfils"; App::$strings["This page is available only to site members"] = "Aquesta pàgina només és accessible per als membres del node."; App::$strings["Welcome"] = "Benvingut/da"; App::$strings["What would you like to do?"] = "Què t'agradaria fer?"; App::$strings["Please bookmark this page if you would like to return to it in the future"] = "Marca aquesta pàgina si vols tornar-hi en un futur"; App::$strings["Upload a profile photo"] = "Puja una imatge de perfil"; App::$strings["Upload a cover photo"] = "Puja una imatge de portada"; -App::$strings["Edit your default profile"] = "Modifica el teu perfil"; +App::$strings["Edit your default profile"] = "Modifica el teu perfil per defecte"; App::$strings["View friend suggestions"] = "Mostra suggerències de connexions"; App::$strings["View the channel directory"] = "Mostra el directori del canal"; App::$strings["View/edit your channel settings"] = "Mostra o modifica la configuració del teu canal"; @@ -1373,7 +1394,7 @@ App::$strings["View the public stream. Warning: this content is not moderated"] App::$strings["Page link"] = "Enllaç de la pàgina"; App::$strings["Edit Webpage"] = "Edita la Pàgina Web"; App::$strings["Create a new channel"] = "Crear un nou canal"; -App::$strings["Channel Manager"] = "Gestor de Canals"; +App::$strings["Channel Manager"] = "Gestor de canals"; App::$strings["Current Channel"] = "Canal Actual"; App::$strings["Switch to one of your channels by selecting it."] = "Canviar a un altre dels teus canals seleccionant-ho."; App::$strings["Default Channel"] = "Canal per Defecte"; @@ -1391,6 +1412,7 @@ App::$strings["Terms of Service"] = "Condicions del Servei"; App::$strings["Software and Project information"] = "Informació del programari i del projecte"; App::$strings["This site is powered by \$Projectname"] = "Aquest lloc web funciona amb \$Projectname"; App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Els serveis d'identitat i la federació i descentralització de la xarxa funcionen amb Zot"; +App::$strings["Additional federated transport protocols:"] = "Altres protocols de transport federats:"; App::$strings["Version %s"] = "Versió %s"; App::$strings["Project homepage"] = "Pàgina principal del projecte"; App::$strings["Developer homepage"] = "Pàgina principal de desenvolupament"; @@ -1444,11 +1466,13 @@ App::$strings["*"] = "*"; App::$strings["Channel Sources"] = "Canal Origen"; App::$strings["Manage remote sources of content for your channel."] = "Gestiona contingut per al teu canal d'origens remots"; App::$strings["New Source"] = "Nou Origen"; -App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importar tot o sel·lecciona contingut dels següents canals, en aquest canal i distribueix-lo d'acord als teus ajustos de canals."; +App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importa-ho tot o només allò seleccionat del següent canals, cap a aquest canal, i distribueix-lo d'acord a la configuració del teu canal."; App::$strings["Only import content with these words (one per line)"] = "Només importa contingut amb aquestes paraules (una per línia)"; App::$strings["Leave blank to import all public content"] = "Deixar en blanc per importar tot el contingut públic"; App::$strings["Channel Name"] = "Nom del canal"; App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Afegeix les següents categories d'entrades importades des d'aquest origen (separat per comes)"; +App::$strings["Resend posts with this channel as author"] = "Reenvia les entrades que tinguin aquest canal com a autor/a"; +App::$strings["Copyrights may apply"] = "Poden aplicar drets d'autor"; App::$strings["Source not found."] = "No s'ha trobat la font."; App::$strings["Edit Source"] = "Edita la font"; App::$strings["Delete Source"] = "Esborra la font"; @@ -1547,9 +1571,9 @@ App::$strings["menu"] = "menú"; App::$strings["%s element installed"] = "%s element instal·lat"; App::$strings["%s element installation failed"] = "%s instal·lació d'element va fallar"; App::$strings["Select a bookmark folder"] = "Tria una carpeta d'interès"; -App::$strings["Save Bookmark"] = "Guarda Favorits"; -App::$strings["URL of bookmark"] = "URL de favorit"; -App::$strings["Or enter new bookmark folder name"] = "O entra un nou nom de favorit"; +App::$strings["Save Bookmark"] = "Desa el marcadors"; +App::$strings["URL of bookmark"] = "URL del marcador"; +App::$strings["Or enter new bookmark folder name"] = "O introdueix el nom d'una carpeta de marcadors nova"; App::$strings["Enter a folder name"] = "Escriu el nom de la carpeta"; App::$strings["or select an existing folder (doubleclick)"] = "o escull-ne una d'existent amb doble clic"; App::$strings["Save to Folder"] = "Guardar en la Carpeta"; @@ -1564,6 +1588,7 @@ App::$strings["Your registration can not be processed."] = "La teva inscripció App::$strings["Registration on this hub is disabled."] = "L'inscripció en aquest node està deshabilitat."; App::$strings["Registration on this hub is by approval only."] = "L'inscripció en aquest node es únicament per validació."; App::$strings["Register at another affiliated hub."] = "Inscripció en altre node afiliat"; +App::$strings["Registration on this hub is by invitation only."] = "El registre en aquest node funciona per invitació."; App::$strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "El lloc ha excedit el límit màxim diari de nous comptes/inscripció. Provau demà."; App::$strings["I accept the %s for this website"] = "Accepto el %s per a aquest lloc web"; App::$strings["I am over %s years of age and accept the %s for this website"] = "Tinc més de %s anys i accepto les %s"; @@ -1571,9 +1596,12 @@ App::$strings["Your email address"] = "La teva adreça de correu electrónic"; App::$strings["Choose a password"] = "Tria una contrasenya"; App::$strings["Please re-enter your password"] = "Si et plau, re-entra la contrasenya"; App::$strings["Please enter your invitation code"] = "Si et plau, introdueix el teu codi d'invitació"; +App::$strings["Your Name"] = "El teu nom"; +App::$strings["Real names are preferred."] = "Considera de fer servir el teu nom real."; +App::$strings["Your nickname will be used to create an easy to remember channel address e.g. nickname%s"] = "El teu àlies servirà per crear un nom fàcil per recordar l'adreça del canal. Per exemple, àlies%s"; +App::$strings["Select a channel permission role for your usage needs and privacy requirements."] = "Escull un rol de permisos de canal. Tingues en compte l'ús que en faràs i el nivell de privacitat que desitges."; App::$strings["no"] = "no"; App::$strings["yes"] = "sí"; -App::$strings["Membership on this site is by invitation only."] = "La pertinença en aquest lloc es per invitació exclusivament."; App::$strings["Register"] = "Inscripció"; App::$strings["This site requires email verification. After completing this form, please check your email for further instructions."] = "Aquest node demana que es verifiquin els comptes de correu. Un cop completat el formulari, comprova la teva safata d'entrada i segueix les instruccions que hi trobaràs."; App::$strings["Cover Photos"] = "Fotos de Portada"; @@ -1583,6 +1611,7 @@ App::$strings["male"] = "masculí"; App::$strings["%1\$s updated his %2\$s"] = "%1\$s actualitzà el seu %2\$s"; App::$strings["%1\$s updated their %2\$s"] = "%1\$s actualitzà els seus %2\$s"; App::$strings["cover photo"] = "Foto de la portada"; +App::$strings["Your cover photo may be visible to anybody on the internet"] = "La teva foto de portada és pública i visible a tothom."; App::$strings["Change Cover Photo"] = "Canvia la foto de portada"; App::$strings["Documentation Search"] = "Cerca de Documentació"; App::$strings["About"] = "El Meu Perfil"; @@ -1598,11 +1627,8 @@ App::$strings["Remove Item Tag"] = "Elimina l'etiqueta d'element"; App::$strings["Select a tag to remove: "] = "Tria l'etiqueta a eliminar:"; App::$strings["No such group"] = "No existeix el grup"; App::$strings["No such channel"] = "No existeix el canal"; -App::$strings["forum"] = "fòrum"; -App::$strings["Search Results For:"] = "Cerca resultats per:"; -App::$strings["Privacy group is empty"] = "el grup privat està vuit"; -App::$strings["Privacy group: "] = "Grup privat:"; -App::$strings["Invalid connection."] = "La connexió és invàlida."; +App::$strings["Privacy group is empty"] = "El grup de privacitat està buit"; +App::$strings["Privacy group: "] = "Grup de privacitat:"; App::$strings["Invalid channel."] = "El canal no és vàlid."; App::$strings["network"] = "xarxa"; App::$strings["\$Projectname"] = "\$Projectname"; @@ -1636,7 +1662,7 @@ App::$strings["Summary"] = "Sumari"; App::$strings["Registered accounts"] = "Comptes registrades"; App::$strings["Pending registrations"] = "Comptes pendents d'inscripció"; App::$strings["Registered channels"] = "Canals registrats"; -App::$strings["Active plugins"] = "Extensions actives"; +App::$strings["Active addons"] = "Extensions actives"; App::$strings["Version"] = "Versió"; App::$strings["Repository version (master)"] = "Versió (master) del repositori"; App::$strings["Repository version (dev)"] = "Versió (desenvolupament) del repositori"; @@ -1670,9 +1696,8 @@ App::$strings["4. Expert - I can write computer code"] = "4. Expert - puc escriu App::$strings["5. Wizard - I probably know more than you do"] = "5. Ninja - probablement en sé més que tu"; App::$strings["Site Admin"] = "Administració"; App::$strings["Report Bug"] = "Informa d'errors"; -App::$strings["View Bookmarks"] = "Veure Marcadors"; +App::$strings["View Bookmarks"] = "Marcadors"; App::$strings["My Chatrooms"] = "Les meves Sales de Xat"; -App::$strings["Firefox Share"] = "Compartir amb Firefox"; App::$strings["Remote Diagnostics"] = "Diagnòstics Remots"; App::$strings["Suggest Channels"] = "Suggerir Canals"; App::$strings["Login"] = "Identifica't"; @@ -1729,7 +1754,7 @@ App::$strings["This is your default setting for the audience of your normal stre App::$strings["This is your default setting for who can view your default channel profile"] = "Aquesta és la configuració per defecte per a qui pugui veure el teu perfil per defecte del canal"; App::$strings["This is your default setting for who can view your connections"] = "Aquesta és la configuració per defecte per a qui pugui veure les teves connexions"; App::$strings["This is your default setting for who can view your file storage and photos"] = "Aquesta és la configuració per defecte per a qui pugui veure els teus arxius i fotos"; -App::$strings["This is your default setting for the audience of your webpages"] = "Aquests son els ajustos per defecte de l'audiència de les teves pàgines web"; +App::$strings["This is your default setting for the audience of your webpages"] = "Aquesta és la teva configuració per defecte per l'audiència de les teves pàgines web"; App::$strings["Missing room name"] = "Perdut el nom de la sala"; App::$strings["Duplicate room name"] = "Nom de la sala duplicat"; App::$strings["Invalid room specifier."] = "Especificació de la sala invàlida."; @@ -1795,6 +1820,7 @@ App::$strings["Wiki files deleted successfully"] = "S'han esborrat els fitxers d App::$strings["Update Error at %s"] = "Error d'Actualització a %s"; App::$strings["Update %s failed. See error logs."] = "L'actualització %s ha fallat. Mira el registre d'errors."; App::$strings["Private Message"] = "Missatge Privat"; +App::$strings["Admin Delete"] = "Esborrat amb privilegis d'administració"; App::$strings["Select"] = "Selecciona"; App::$strings["I will attend"] = "Assistiré"; App::$strings["I will not attend"] = "No assistiré"; @@ -1802,10 +1828,7 @@ App::$strings["I might attend"] = "Podria assistir"; App::$strings["I agree"] = "D'acord"; App::$strings["I disagree"] = "En desacord"; App::$strings["I abstain"] = "M'abstinc"; -App::$strings["Add Star"] = "Fes-lo Preferit"; -App::$strings["Remove Star"] = "Treu-lo de Preferits"; App::$strings["Toggle Star Status"] = "Canvia el Estat de la Preferència"; -App::$strings["starred"] = "preferit"; App::$strings["Message signature validated"] = "Validada la signatura del missatge"; App::$strings["Message signature incorrect"] = "Signatura del missatge incorrecta"; App::$strings["Add Tag"] = "Afegeix Etiqueta"; @@ -1818,7 +1841,7 @@ App::$strings["%d comment"] = array( 0 => "%d commentari", 1 => "%d commentaris", ); -App::$strings["View %s's profile - %s"] = "Veure perfil de %s - %s"; +App::$strings["View %s's profile - %s"] = "Mostra el perfil de %s - %s"; App::$strings["to"] = "a"; App::$strings["via"] = "via"; App::$strings["Wall-to-Wall"] = "Mur-a-Mur"; @@ -1830,7 +1853,7 @@ App::$strings["Attend"] = "Assistir-hi"; App::$strings["Attendance Options"] = "Opcions d'assistència"; App::$strings["Vote"] = "Votar"; App::$strings["Voting Options"] = "Opcions de votació"; -App::$strings["Save Bookmarks"] = "Guarda Favorits"; +App::$strings["Save Bookmarks"] = "Desa els marcadors"; App::$strings["Add to Calendar"] = "Afegeix al Calendari"; App::$strings["This is an unsaved preview"] = "Això només és una vista prèvia, no està desada"; App::$strings["%s show all"] = "%s mostra-ho tot"; @@ -1840,7 +1863,7 @@ App::$strings["Underline"] = "Subratllat"; App::$strings["Quote"] = "Cometes"; App::$strings["Code"] = "Codi"; App::$strings["Image"] = "Imatge"; -App::$strings["Attach File"] = "Adjunta un fitxer"; +App::$strings["Attach/Upload file"] = "Adjunta i puja un arxiu"; App::$strings["Insert Link"] = "Insereix Enllaç"; App::$strings["Video"] = "Video"; App::$strings["Your full name (required)"] = "Nom complet (obligatori)"; @@ -1903,6 +1926,21 @@ App::$strings["Rating Tools"] = "Eines de Valoració"; App::$strings["Rate Me"] = "Valora'm"; App::$strings["View Ratings"] = "Veure Valoracions"; App::$strings["__ctx:widget__ Activity"] = "Activitat"; +App::$strings["Personal Posts"] = "Entrades personals"; +App::$strings["Show posts that mention or involve me"] = "Mostra les entrades que m'inclouen"; +App::$strings["Starred Posts"] = "Entrades destacades"; +App::$strings["Show posts that I have starred"] = "Mostra les entrades que he destacat"; +App::$strings["Show posts related to the %s privacy group"] = "Mostra les entrades relacionades amb el grup de privacitat %s"; +App::$strings["Show my privacy groups"] = "Mostra els meus grups de privacitat"; +App::$strings["Show posts to this forum"] = "Mostra les entrades a aquest fòrum"; +App::$strings["Show forums"] = "Mostra els fòrums"; +App::$strings["Show posts that I have filed to %s"] = "Mostra les entrades que he penjat a %s"; +App::$strings["Saved Folders"] = "Carpetes Guardades"; +App::$strings["Show filed post categories"] = "Mostra les categories de les entrades pujades"; +App::$strings["Panel search"] = "Panell de cerca"; +App::$strings["Filter by name"] = "Filtra per nom"; +App::$strings["Remove active filter"] = "Esborra el filtre actual"; +App::$strings["Activity Filters"] = "Filtres d'activitat"; App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tens %1$.0f de %2$.0f connexions permeses."; App::$strings["Add New Connection"] = "Afegeix una Nova Connexió"; App::$strings["Enter channel address"] = "Introdueix l'adreça del canal"; @@ -1927,13 +1965,22 @@ App::$strings["Refresh"] = "Refresc"; App::$strings["Tasks"] = "Tasques"; App::$strings["Suggestions"] = "Suggerencies"; App::$strings["See more..."] = "Veure més....."; -App::$strings["Saved Folders"] = "Carpetes Guardades"; +App::$strings["Commented Date"] = "Data dels comentaris"; +App::$strings["Order by last commented date"] = "Ordena segons la data dels comentaris més recents"; +App::$strings["Posted Date"] = "Data de les entrades"; +App::$strings["Order by last posted date"] = "Ordena segons la data de publicació de les entrades"; +App::$strings["Date Unthreaded"] = "Data sense agrupar"; +App::$strings["Order unthreaded by date"] = "Ordena per data els comentaris i les publicacions sense agrupar-los per converses"; +App::$strings["Activity Order"] = "Ordre de les activitats"; App::$strings["Click to show more"] = "Fes clic per veure més"; App::$strings["Tags"] = "Etiquetes"; +App::$strings["App Collections"] = "Coŀleccions d'aplicacions"; +App::$strings["Available Apps"] = "Aplicacions disponibles"; +App::$strings["Installed apps"] = "Aplicacions instaŀlades"; App::$strings["Profile Creation"] = "Creació de perfils"; App::$strings["Upload profile photo"] = "Puja una foto de perfil"; App::$strings["Upload cover photo"] = "Puja una foto de portada"; -App::$strings["Edit your profile"] = "Edita el teu perfil"; +App::$strings["Edit your profile"] = "Modifica el teu perfil"; App::$strings["Find and Connect with others"] = "Cerca altres canals i connecta-t'hi"; App::$strings["View the directory"] = "Mostra la carpeta"; App::$strings["Manage your connections"] = "Gestiona les teves conexions"; @@ -1946,26 +1993,24 @@ App::$strings["New Member Links"] = "Enllaços de membres nous"; App::$strings["Member registrations waiting for confirmation"] = "Una inscripció per a ser membre està esperant confirmació"; App::$strings["Inspect queue"] = "Revisa cua"; App::$strings["DB updates"] = "Actualitzacions de Base de Dades"; -App::$strings["Admin"] = "Admin"; -App::$strings["Plugin Features"] = "Extensions configurables"; -App::$strings["Account settings"] = "Ajustos de Compte"; -App::$strings["Channel settings"] = "Ajustos de Canal"; +App::$strings["Admin"] = "Administració"; +App::$strings["Addon Features"] = "Funcions de les extensions"; +App::$strings["Account settings"] = "Configuració del compte"; +App::$strings["Channel settings"] = "Configuració del canal"; App::$strings["Additional features"] = "Característiques addicionals"; App::$strings["Addon settings"] = "Configuració de les extensions"; -App::$strings["Display settings"] = "Ajustos de pantalla"; +App::$strings["Display settings"] = "Configuració de pantalla"; App::$strings["Manage locations"] = "Gestiona ubicacions"; App::$strings["Export channel"] = "Exportat canal"; App::$strings["OAuth1 apps"] = "Aplicacions OAuth1"; App::$strings["OAuth2 apps"] = "Aplicacions OAuth2"; -App::$strings["Permission Groups"] = "Grups de permisos"; -App::$strings["Premium Channel Settings"] = "Ajustos Premium de Canal"; -App::$strings["Bookmarked Chatrooms"] = "Sales de Xat Favorites"; +App::$strings["Premium Channel Settings"] = "Configuració dels canals prèmium"; +App::$strings["Bookmarked Chatrooms"] = "Sales de xat desades"; App::$strings["New Network Activity"] = "Activitat nova a la xarxa"; App::$strings["New Network Activity Notifications"] = "Notificacions noves d'activitat a la xarxa"; App::$strings["View your network activity"] = "Mostra l'activitat a la xarxa"; App::$strings["Mark all notifications read"] = "Marca totes les notificacions com a vistes"; App::$strings["Show new posts only"] = "Mostra només les entrades noves"; -App::$strings["Filter by name"] = "Filtra per nom"; App::$strings["New Home Activity"] = "Activitat nova al mur"; App::$strings["New Home Activity Notifications"] = "Notificacions noves d'activitat al mur"; App::$strings["View your home activity"] = "Mostra l'activitat al teu mur"; @@ -1992,7 +2037,7 @@ App::$strings["View the public stream"] = "Mostra el flux públic"; App::$strings["Sorry, you have got no notifications at the moment"] = "No tens cap notificació"; App::$strings["Source channel not found."] = "No s'ha trobat el canal font."; App::$strings["Create an account to access services and applications"] = "Crea un compte per tal d'accedir a serveis i aplicacions"; -App::$strings["Logout"] = "Desconectar"; +App::$strings["Logout"] = "Surt"; App::$strings["Login/Email"] = "Correu d'usuari"; App::$strings["Password"] = "Contrasenya"; App::$strings["Remember me"] = "Recorda'm"; @@ -2002,9 +2047,8 @@ App::$strings["Website SSL certificate is not valid. Please correct."] = "El cer App::$strings["[\$Projectname] Cron tasks not running on %s"] = "[\$Projectname] Les tasques del cron tasks no s'estan executant a %s"; App::$strings["Cron/Scheduled tasks not running."] = "No s'estan executant les tasques programades al cron."; App::$strings["never"] = "mai"; -App::$strings["Cover Photo"] = "Foto de portada"; App::$strings["Focus (Hubzilla default)"] = "Focus (Hubzilla per defecte)"; -App::$strings["Theme settings"] = "Ajustos de tema"; +App::$strings["Theme settings"] = "Configuració de tema"; App::$strings["Narrow navbar"] = "Barra de navegació estreta"; App::$strings["Navigation bar background color"] = "Color de fons de la barra de navegació"; App::$strings["Navigation bar icon color "] = "Color de la icona de la barra de navegació"; @@ -2026,6 +2070,12 @@ App::$strings["Leave empty for default width"] = "Deixa en blanc per l'amplada p App::$strings["Left align page content"] = "Alineació esquerra del contingut de la pàgina"; App::$strings["Set size of conversation author photo"] = "Ajusta la mida de la foto del autor a la conversa"; App::$strings["Set size of followup author photos"] = "Ajusta la mida del seguidor de les fotos de l'autor"; +App::$strings["Network/Protocol"] = "Xarxa/protocol"; +App::$strings["Zot"] = "Zot"; +App::$strings["Diaspora"] = "Diaspora"; +App::$strings["Friendica"] = "Friendica"; +App::$strings["OStatus"] = "OStatus"; +App::$strings["ActivityPub"] = "ActivityPub"; App::$strings["Errors encountered deleting database table "] = "S'ha produït un o més errors en esborrar una taula de la base de dades"; App::$strings["Submit Settings"] = "Desa els canvis"; App::$strings["Drop tables when uninstalling?"] = "Vols eliminar les taules en desinstaŀlar?"; @@ -2072,7 +2122,7 @@ App::$strings["Default Search Term"] = "Paraula de cerca predeterminada"; App::$strings["The default search term. These will be shown second."] = "La paraula de cerca predeterminada. Aquestes es mostraran en segon lloc."; App::$strings["Return After"] = "Acaba després de"; App::$strings["Page to load after image selection."] = "Pàgina per carregar després d'haver seleccionat una imatge."; -App::$strings["Edit Profile"] = "Edita Perfil"; +App::$strings["Edit Profile"] = "Modifica el meu perfil"; App::$strings["Profile List"] = "Llista de perfils"; App::$strings["Order of Preferred"] = "Ordre de les preferides"; App::$strings["Sort order of preferred clipart ids."] = "Ordena les identitats Clipart preferides"; @@ -2164,6 +2214,8 @@ App::$strings["Popular Channels"] = "Canals populars"; App::$strings["IRC Settings"] = "Paràmetres de IRC"; App::$strings["IRC settings saved."] = "S'han actualitzat els paràmetres de IRC."; App::$strings["IRC Chatroom"] = "Sala de IRC"; +App::$strings["Gallery"] = "Galeria"; +App::$strings["Photo Gallery"] = "Galeria d'imatges"; App::$strings["Post to LiveJournal"] = "Publica a LiveJournal"; App::$strings["Enable LiveJournal Post Plugin"] = "Habilita la publicació a LiveJournal"; App::$strings["LiveJournal username"] = "Nom a LiveJournal"; @@ -2358,10 +2410,11 @@ App::$strings["This will import all your Friendica photo albums to this Red chan App::$strings["Friendica Server base URL"] = "URL base del servidor de Friendica"; App::$strings["Friendica Login Username"] = "Nom de registre a Friendica"; App::$strings["Friendica Login Password"] = "Contrasenya a Friendica"; -App::$strings["ActivityPub"] = "ActivityPub"; App::$strings["ActivityPub Protocol Settings updated."] = "S'ha actualitzat la configuració del Protocol ActivityPub."; App::$strings["The ActivityPub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El Protocol ActivityPub és incompatible amb la independència de hub. Les connexions que facis en aquesta xarxa no seran accessibles des de hubs alternatius del teu canal."; App::$strings["Enable the ActivityPub protocol for this channel"] = "Activa el Protocol ActivityPub en aquest canal"; +App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "Envia a identitats d'ActivityPub en grups de privacitat"; +App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "Pot comportar moltes mencions i revelar els teus grups de privacitat."; App::$strings["Send multi-media HTML articles"] = "Envia articles HTML multimèdia"; App::$strings["Not supported by some microblog services such as Mastodon"] = "Incompatible amb alguns serveis de microbloguing com Mastodon"; App::$strings["ActivityPub Protocol Settings"] = "Configuració del Protocol ActivityPub"; @@ -2469,21 +2522,51 @@ App::$strings["Twitter Post Settings"] = "Configuració de Twitter"; App::$strings["Deactivate the feature"] = "Desactiva la funcionalitat"; App::$strings["Hide the button and show the smilies directly."] = "Amaga el botó i mostra les icones directament."; App::$strings["Smileybutton Settings"] = "Configuració de Smileybutton"; +App::$strings["Access Denied."] = "S'ha denegat l'accés."; App::$strings["Order Not Found"] = "No s'ha trobat l'ordre"; -App::$strings["Order cannot be checked out."] = "No s'ha pogut confirmar l'ordre."; +App::$strings["Access Denied"] = "S'ha denegat l'accés"; +App::$strings["Invalid Item"] = "L'article és invàlid"; +App::$strings["[cart] Item Added"] = "[cart] S'ha afegit un article"; +App::$strings["Order already checked out."] = "La comanda ja s'ha servit."; App::$strings["Enable Shopping Cart"] = "Habilita la cistella de la compra"; App::$strings["Enable Test Catalog"] = "Habilita un catàleg de prova"; App::$strings["Enable Manual Payments"] = "Habilita els pagaments manuals"; -App::$strings["Base Cart Settings"] = "Configuració bàsica de la cistella"; -App::$strings["Add Item"] = "Afegeix un element"; -App::$strings["Call cart_post_"] = "Crida cart_post_"; +App::$strings["Base Merchant Currency"] = "Moneda base del comerç"; +App::$strings["Cart - Base Settings"] = "Carretó - Configuració bàsica"; +App::$strings["Shop"] = "Botiga"; +App::$strings["You must be logged into the Grid to shop."] = "Cal haver iniciat sessió per a poder comprar."; App::$strings["Cart Not Enabled (profile: "] = "La cistella no està habilitada (perfil:"; App::$strings["Order not found."] = "No s'ha trobat l'ordre."; +App::$strings["Access denied."] = "S'ha denegat l'accés."; App::$strings["No Order Found"] = "No s'ha trobat cap ordre"; -App::$strings["call: "] = "crida:"; App::$strings["An unknown error has occurred Please start again."] = "S'ha produït un error inesperat. Torna-ho a provar."; App::$strings["Invalid Payment Type. Please start again."] = "El tipus de pagament no és vàlid. Torna a començar."; App::$strings["Order not found"] = "No s'ha trobat l'ordre"; +App::$strings["Enable Paypal Button Module"] = "Activa el mòdul del botó de Paypal"; +App::$strings["Use Production Key"] = "Fes servir la clau de producció"; +App::$strings["Paypal Sandbox Client Key"] = "Clau de client de Paypal del banc de proves"; +App::$strings["Paypal Sandbox Secret Key"] = "Clau secreta de Paypal del banc de proves"; +App::$strings["Paypal Production Client Key"] = "Clau de client de Paypal de producció"; +App::$strings["Paypal Production Secret Key"] = "Clau secreta de Paypal de producció"; +App::$strings["Cart - Paypal Addon"] = "Carretó - Extensió de Paypal"; +App::$strings["Paypal button payments are not enabled."] = "El botó de pagament per Paypal no està habilitat."; +App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "El botó de pagament per Paypal no està ben configurat. Escull un altre mètode de pagament."; +App::$strings["Enable Hubzilla Services Module"] = "Activa el mòdul \"Serveis de Hubzilla\""; +App::$strings["Cart - Hubzilla Services Addon"] = "Carretó - Extensió \"Serveis de Hubzilla\""; +App::$strings["New Sku"] = "Nova SKU"; +App::$strings["Cannot save edits to locked item."] = "No s'han pogut desar els canvis a l'article perquè està bloquejat."; +App::$strings["SKU not found."] = "Non s'ha trobat l'SKU"; +App::$strings["Invalid Activation Directive."] = "La directiva d'activació és invàlida."; +App::$strings["Invalid Deactivation Directive."] = "La directiva de desactivació és invàlida."; +App::$strings["Add to this privacy group"] = "Afegeix-ho al teu grup de privacitat"; +App::$strings["Set user service class"] = "Defineix la classe de servei de l'usuària"; +App::$strings["You must be using a local account to purchase this service."] = "Cal una sessió iniciada en aquest hub per a comprar el servei."; +App::$strings["Changes Locked"] = "Article bloquejat"; +App::$strings["Item available for purchase."] = "Article a la venda."; +App::$strings["Price"] = "Preu"; +App::$strings["Add buyer to privacy group"] = "Afegeix el comprador a un grup de privacitat"; +App::$strings["Add buyer as connection"] = "Connecta automàticament amb els canals de les compradores"; +App::$strings["Set Service Class"] = "Defineix la classe de servei"; App::$strings["Error: order mismatch. Please try again."] = "Error: l'ordre no coincideix. Torna-ho a provar."; App::$strings["Manual payments are not enabled."] = "El pagament manual no està habilitat."; App::$strings["Finished"] = "Operació completa"; @@ -2676,7 +2759,7 @@ App::$strings["doesn't like %1\$s's %2\$s"] = "no li agrada %2\$s de %1\$s"; App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s esta ara connectat amb %2\$s"; App::$strings["%1\$s poked %2\$s"] = "%1\$s a esperonat %2\$s"; App::$strings["poked"] = "esperonat"; -App::$strings["View %s's profile @ %s"] = "Vista %s del perfil @ %s"; +App::$strings["View %s's profile @ %s"] = "Mostra el perfil @%s de %s"; App::$strings["Categories:"] = "Categories:"; App::$strings["Filed under:"] = "Arxivar a:"; App::$strings["View in context"] = "Veure en context"; @@ -2707,6 +2790,7 @@ App::$strings["%s like this."] = "%s agrada això."; App::$strings["%s don't like this."] = "%s no agrada això."; App::$strings["Set your location"] = "Ajusta la teva ubicació"; App::$strings["Clear browser location"] = "Treu la localització del navegador"; +App::$strings["Embed (existing) photo from your photo albums"] = "Incrusta una imatge existent dels teus àlbums."; App::$strings["Tag term:"] = "Paraula de l'Etiqueta:"; App::$strings["Where are you right now?"] = "On ets ara?"; App::$strings["Choose a different album..."] = "Tria un àlbum diferent..."; @@ -2735,7 +2819,7 @@ App::$strings["Profile Details"] = "Detalls del Perfil"; App::$strings["Photo Albums"] = "Albums de Fotos"; App::$strings["Files and Storage"] = "Arxius i Emmagatzegament"; App::$strings["Bookmarks"] = "Marcadors"; -App::$strings["Saved Bookmarks"] = "Marcadors Guardats"; +App::$strings["Saved Bookmarks"] = "Marcadors desats"; App::$strings["View Cards"] = "Mostra les targetes"; App::$strings["articles"] = "articles"; App::$strings["View Articles"] = "Mostra els articles"; @@ -2768,7 +2852,7 @@ App::$strings["Directory Options"] = "Opcions de Directori"; App::$strings["Safe Mode"] = "Manera Segura"; App::$strings["Public Forums Only"] = "Només Fòrums Públics"; App::$strings["This Website Only"] = "Només Aquest Lloc Web"; -App::$strings["%1\$s's bookmarks"] = "%1\$s de marcadors"; +App::$strings["%1\$s's bookmarks"] = "marcadors de %1\$s"; App::$strings["Unable to import a removed channel."] = "No s'ha pogut importar un canal esborrat."; App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "No s'ha pogut importar el canal perquè l'identificador del canal no s'ha pogut duplicar en aquest servidor."; App::$strings["Cloned channel not found. Import failed."] = "No s'ha pogut importar el canal perquè el canal clonat no s'ha trobat."; @@ -2780,6 +2864,7 @@ App::$strings["older"] = "el més antic"; App::$strings["newer"] = "El més nou"; App::$strings["No connections"] = "Sense Connexions"; App::$strings["View all %s connections"] = "Veure totes les connexions de %s"; +App::$strings["Network: %s"] = "Xarxa: %s"; App::$strings["poke"] = "esperona"; App::$strings["ping"] = "coloca"; App::$strings["pinged"] = "colocat"; @@ -2901,10 +2986,20 @@ App::$strings["Rate This Channel (this is public)"] = "Valora Aquest Canal (aix App::$strings["Describe (optional)"] = "Descriu (opcional)"; App::$strings["Please enter a link URL"] = "Si us plau, entra l'enllaç URL"; App::$strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Hi ha canvis sense desar, estàs segur que vols abandonar la pàgina?"; +App::$strings["lovely"] = "encantador/a"; +App::$strings["wonderful"] = "meravellós/a"; +App::$strings["fantastic"] = "fantàstic/a"; +App::$strings["great"] = "genial"; +App::$strings["Your chosen nickname was either already taken or not valid. Please use our suggestion ("] = "El nom que has escollit o bé ja està agafat o bé no és vàlid. Pots fer servir la suggerència ("; +App::$strings[") or enter a new one."] = ") o provar amb un altre nom."; +App::$strings["Thank you, this nickname is valid."] = "El nom que has triat és vàlid."; +App::$strings["A channel name is required."] = "Cal un nom de canal."; +App::$strings["This is a "] = "Això és un"; +App::$strings[" channel name"] = "nom del canal"; App::$strings["timeago.prefixAgo"] = "fa"; App::$strings["timeago.prefixFromNow"] = "d'aquí a"; -App::$strings["timeago.suffixAgo"] = "fa"; -App::$strings["timeago.suffixFromNow"] = "d'aquí a"; +App::$strings["timeago.suffixAgo"] = "NONE"; +App::$strings["timeago.suffixFromNow"] = " NONE"; App::$strings["less than a minute"] = "uns segons"; App::$strings["about a minute"] = "prop d'un minut"; App::$strings["%d minutes"] = "%d minuts"; @@ -2953,6 +3048,7 @@ App::$strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s canviat %2\ App::$strings["Visit %1\$s's %2\$s"] = "Visita %1\$s en %2\$s"; App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s Ha actualitzat %2\$s, canviant %3\$s."; App::$strings["Item was not found."] = "Article no trobat."; +App::$strings["Unknown error."] = "Error desconegut."; App::$strings["No source file."] = "No hi ha arxiu d'origen."; App::$strings["Cannot locate file to replace"] = "No trobo l'arxiu a reemplaçar"; App::$strings["Cannot locate file to revise/update"] = "No trobo l'arxiu a revisar/actualitzar"; @@ -2977,8 +3073,8 @@ App::$strings["Visible to anybody on %s."] = "Visible per a tothom a %s."; App::$strings["Visible to all connections."] = "Visible per a totes les connexions."; App::$strings["Visible to approved connections."] = "Visible per a les connexions aprovades."; App::$strings["Visible to specific connections."] = "Visible per a específiques connexions."; -App::$strings["Privacy group is empty."] = "El grup privat està vuit."; -App::$strings["Privacy group: %s"] = "Grup privat: %s"; +App::$strings["Privacy group is empty."] = "El grup de privacitat està buit."; +App::$strings["Privacy group: %s"] = "Grup de privacitat: %s"; App::$strings["Connection not found."] = "Connexió no trobada."; App::$strings["profile photo"] = "foto del perfil"; App::$strings["[Edited %s]"] = "[S'ha editat %s]"; @@ -3035,13 +3131,9 @@ App::$strings["Home, Fax"] = "Casa, fax"; App::$strings["Work, Voice"] = "Feina, veu"; App::$strings["Work, Fax"] = "Feina, fax"; App::$strings["view full size"] = "Veure a mida competa"; -App::$strings["Friendica"] = "Friendica"; -App::$strings["OStatus"] = "OStatus"; App::$strings["GNU-Social"] = "GNU-Social"; App::$strings["RSS/Atom"] = "RSS/Atom"; -App::$strings["Diaspora"] = "Diaspora"; App::$strings["Facebook"] = "Facebook"; -App::$strings["Zot"] = "Zot"; App::$strings["LinkedIn"] = "LinkedIn"; App::$strings["XMPP/IM"] = "XMPP/IM"; App::$strings["MySpace"] = "MySpace"; @@ -3064,6 +3156,7 @@ App::$strings["spoiler"] = "xafa guitarres"; App::$strings["View article"] = "Mostra l'article"; App::$strings["View summary"] = "Mostra'n un resum"; App::$strings["$1 wrote:"] = "$1 va escriure:"; +App::$strings["View PDF"] = "Mostra el pdf"; App::$strings[" by "] = "de"; App::$strings[" on "] = "a"; App::$strings["Embedded content"] = "Contingut embegut"; @@ -3099,11 +3192,10 @@ App::$strings["Allows creation of complex directory search queries"] = "Permet f App::$strings["Advanced Theme and Layout Settings"] = "Configuració de disseny i de tema avançada"; App::$strings["Allows fine tuning of themes and page layouts"] = "Permet configurar al detall els temes i els dissenys de pàgina"; App::$strings["Access Control and Permissions"] = "Control d'accés i permisos"; -App::$strings["Privacy Groups"] = "Grup Privat"; -App::$strings["Enable management and selection of privacy groups"] = "Habilita gestió i selecció de grups privats"; +App::$strings["Enable management and selection of privacy groups"] = "Habilita la gestió i selecció de grups de privacitat"; App::$strings["Multiple Profiles"] = "Multiples Perfils"; App::$strings["Ability to create multiple profiles"] = "Capacitat per crear multiples perfils"; -App::$strings["Provide alternate connection permission roles."] = "Proporciona rols diferents per als permisos de connexió."; +App::$strings["Create custom connection permission limits"] = "Personalitza els límits de permisos de les connexions"; App::$strings["OAuth1 Clients"] = "Clients OAuth1"; App::$strings["Manage OAuth1 authenticatication tokens for mobile and remote apps."] = "Gestiona els tokens d'autenticació OAuth1 per al mòbil i aplicacions remotes."; App::$strings["OAuth2 Clients"] = "Clients OAuth2"; @@ -3132,10 +3224,14 @@ App::$strings["Network and Stream Filtering"] = "Filtrat de Xarxa i Flux"; App::$strings["Search by Date"] = "Cerca per Data"; App::$strings["Ability to select posts by date ranges"] = "Capacitat per seleccionar entrades per rang de dates"; App::$strings["Save search terms for re-use"] = "Guardar els termin de la cerca per a re-usar"; -App::$strings["Network Personal Tab"] = "Pestanya Personal de Xarxa"; -App::$strings["Enable tab to display only Network posts that you've interacted on"] = "Activa la pestanya per mostrar només les entrades de xarxa en les que has intervingut"; -App::$strings["Network New Tab"] = "Pestanya Nou a la Xarxa"; -App::$strings["Enable tab to display all new Network activity"] = "Activa pestanya per mostrar tota l'activitat nova de la Xarxa"; +App::$strings["Alternate Stream Order"] = "Diversos ordres al flux"; +App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Permet canviar l'ordre dels continguts en el flux: segons la data de les entrades, segons la data de l'últim comentari, o segons la data de cada missatge sense agrupar per converses"; +App::$strings["Contact Filter"] = "Filtre de contactes"; +App::$strings["Ability to display only posts of a selected contact"] = "Permet mostrar només entrades d'un contacte determinat"; +App::$strings["Forum Filter"] = "Filtre de fòrums"; +App::$strings["Ability to display only posts of a specific forum"] = "Permet mostrar només entrades d'un fòrum determinat"; +App::$strings["Personal Posts Filter"] = "Filtre d'interaccions amb mi"; +App::$strings["Ability to display only posts that you've interacted on"] = "Permet mostrar només les entrades amb què has interactuat"; App::$strings["Affinity Tool"] = "Eina d'Afinitat"; App::$strings["Filter stream activity by depth of relationships"] = "Filtre d'activitat del flux per importància de la relació"; App::$strings["Show friend and connection suggestions"] = "Suggereix connexions o amistats"; @@ -3216,18 +3312,19 @@ App::$strings["%1\$s's birthday"] = "Aniversari de %1\$s"; App::$strings["Happy Birthday %1\$s"] = "Feliç Aniversari %1\$s"; App::$strings["Remote authentication"] = "Autenticació remota"; App::$strings["Click to authenticate to your home hub"] = "Clica per autentificar-te en el teu node"; -App::$strings["Manage Your Channels"] = "Gestiona els Teus Canals"; -App::$strings["Account/Channel Settings"] = "Ajustos de Compte/Canal"; +App::$strings["Manage your channels"] = "Gestiona els teus canals"; +App::$strings["Manage your privacy groups"] = "Gestiona els teus grups de privacitat"; +App::$strings["Account/Channel Settings"] = "Configuració de compte i canal"; App::$strings["End this session"] = "Finalitza aquesta sessió"; App::$strings["Your profile page"] = "La teva pàgina de perfil"; -App::$strings["Manage/Edit profiles"] = "Gestiona/Edita perfils"; +App::$strings["Manage/Edit profiles"] = "Gestiona/edita els perfils"; App::$strings["Sign in"] = "Signatura"; App::$strings["Take me home"] = "Porta'm a casa"; App::$strings["Log me out of this site"] = "Tanca'm la sessió en aquest lloc web"; App::$strings["Create an account"] = "Crear un compte"; App::$strings["Help and documentation"] = "Ajuda i documentació"; App::$strings["Search site @name, !forum, #tag, ?docs, content"] = "Cerca en el node @nom, !fòrum, #etiqueta, ?documentació, contingut"; -App::$strings["Site Setup and Configuration"] = "Ajustos i Configuració del Lloc"; +App::$strings["Site Setup and Configuration"] = "Configuració del node"; App::$strings["@name, !forum, #tag, ?doc, content"] = "@nom, !fòrum, #etiqueta, ?documentació, contingut"; App::$strings["Please wait..."] = "Si us plau, espera......."; App::$strings["Add Apps"] = "Afegeix aplicacions"; @@ -3244,11 +3341,11 @@ App::$strings["Unable to verify channel signature"] = "No es pot verificar la si App::$strings["Unable to verify site signature for %s"] = "No es pot verificar la signatura del lloc per %s"; App::$strings["invalid target signature"] = "Signatura objectiu invàlida"; App::$strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grup esborrat amb aquest nom fou reviscolat. Els permisos dels items existents poden aplicar-se a aquest grup i qualsevol membre futur. Si no es això el que vols, si et plau, crea un altre grup amb un nom diferent."; -App::$strings["Add new connections to this privacy group"] = "Afegir noves connexions a aquest grup privat"; +App::$strings["Add new connections to this privacy group"] = "Afegeix noves connexions a aquest grup de privacitat"; App::$strings["edit"] = "edita"; App::$strings["Edit group"] = "Editar grup"; -App::$strings["Add privacy group"] = "Afegir grup privat"; -App::$strings["Channels not in any privacy group"] = "Sense canals en grups privats"; +App::$strings["Add privacy group"] = "Afegeix grup de privacitat"; +App::$strings["Channels not in any privacy group"] = "Canals que no estan en cap grup de privacitat"; App::$strings["New window"] = "Nova finestra"; App::$strings["Open the selected location in a different window or browser tab"] = "Obrir la localització seleccionada en un altre finestra o pestanya del navegador"; App::$strings["Delegation session ended."] = "S'ha tancat la sessió de delegació."; diff --git a/view/ca/lostpass_eml.tpl b/view/ca/lostpass_eml.tpl index 5ca7b0323..6a1d0bb80 100644 --- a/view/ca/lostpass_eml.tpl +++ b/view/ca/lostpass_eml.tpl @@ -29,4 +29,7 @@ Nom Identificatiu:⇥{{$email}} Atentament, {{$sitename}} Administrador +-- +Condicions del servei: +{{$siteurl}}/help/TermsOfService \ No newline at end of file diff --git a/view/ca/passchanged_eml.tpl b/view/ca/passchanged_eml.tpl index f5f0531b7..fb9459940 100644 --- a/view/ca/passchanged_eml.tpl +++ b/view/ca/passchanged_eml.tpl @@ -17,4 +17,8 @@ Pots canviar aquesta contrasenya en el teu compte desprès que hagis accedit. Atentament, {{$sitename}} Administrador - \ No newline at end of file + + +-- +Condicions del servei: +{{$siteurl}}/help/TermsOfService diff --git a/view/ca/register_verify_eml.tpl b/view/ca/register_verify_eml.tpl index a42fe03a9..f808d3ce5 100644 --- a/view/ca/register_verify_eml.tpl +++ b/view/ca/register_verify_eml.tpl @@ -1,24 +1,34 @@ -S'ha rebut una nova petició de registre en {{$sitename}} la qual cosa requereix -la seva aprovació. - +Gràcies per registrar-te a {{$sitename}}. Les dades d'identificació son les següents: Localització del Lloc Web: {{$siteurl}} Nom Identificatiu:⇥{{$email}} -Adreça IP: {{$details}} -Per tal d'aprovar aquesta petició, si us plau, visita el següent enllaç: +identifica't amb la contrasenya que vas triar durant el registre. + +Necessitem verificar la teva adreça de correu per tal de concedir accès total. + +El codi de validació és + +{{$hash}} -{{$siteurl}}/regmod/allow/{{$hash}} +Si has registrat tu aquest compte, introdueix el codi de validació quan te'l demanem o visita aquest enllaç: +{{$siteurl}}/regver/allow/{{$hash}} -Per rebutjar la petició i esborrar el compte, si us plau visita: +Per rebutjar i esborrar el compte, si us plau visita: -{{$siteurl}}/regmod/deny/{{$hash}} + +{{$siteurl}}/regver/deny/{{$hash}} Gràcies. + + +-- +Condicions del servei: +{{$siteurl}}/help/TermsOfService diff --git a/view/ca/update_fail_eml.tpl b/view/ca/update_fail_eml.tpl new file mode 100644 index 000000000..28e52bc39 --- /dev/null +++ b/view/ca/update_fail_eml.tpl @@ -0,0 +1,13 @@ +Ep!: +Soc el servidor web de {{$sitename}}; + +L'equip de desenvolupament de Hubzilla ha llençat fa poc l'actualització {{$update}}, +però quan s'intentava instal·lar, quelcom ha anat terriblement malament. +Això requereix intervenció humana tan aviat com sigui possible. +Contacta una persona de l'equip de desenvolupament si no pots esbrinar com fer-ho +per tu mateix. La meva base de dades pot quedar inservible. + +El missatge d'error ha estat el següent: '{{$error}}'. + +Disculpes per qualsevol inconvenient, + el teu servidor web en {{$siteurl}} \ No newline at end of file -- cgit v1.2.3 From d95735deaf321eb560b3fdc0b88d25bca4be3b48 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 20 Aug 2018 17:22:49 -0700 Subject: channel page performance improvement: don't use "checkjs" with an associated page reload. Wrap a static copy of the content in noscript tags instead. --- Zotlabs/Module/Channel.php | 86 ++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index b5e6b3aee..f1ae2f507 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -2,6 +2,8 @@ namespace Zotlabs\Module; +use \App; + require_once('include/contact_widgets.php'); require_once('include/items.php'); require_once("include/bbcode.php"); @@ -26,7 +28,7 @@ class Channel extends \Zotlabs\Web\Controller { $which = argv(1); if(! $which) { if(local_channel()) { - $channel = \App::get_channel(); + $channel = App::get_channel(); if($channel && $channel['channel_address']) $which = $channel['channel_address']; } @@ -37,7 +39,7 @@ class Channel extends \Zotlabs\Web\Controller { } $profile = 0; - $channel = \App::get_channel(); + $channel = App::get_channel(); if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { $which = $channel['channel_address']; @@ -70,8 +72,6 @@ class Channel extends \Zotlabs\Web\Controller { if($load) $_SESSION['loadtime'] = datetime_convert(); - $checkjs = new \Zotlabs\Web\CheckJS(1); - $category = $datequery = $datequery2 = ''; $mid = ((x($_REQUEST,'mid')) ? $_REQUEST['mid'] : ''); @@ -95,22 +95,22 @@ class Channel extends \Zotlabs\Web\Controller { if($update) { // Ensure we've got a profile owner if updating. - \App::$profile['profile_uid'] = \App::$profile_uid = $update; + App::$profile['profile_uid'] = App::$profile_uid = $update; } - $is_owner = (((local_channel()) && (\App::$profile['profile_uid'] == local_channel())) ? true : false); + $is_owner = (((local_channel()) && (App::$profile['profile_uid'] == local_channel())) ? true : false); - $channel = \App::get_channel(); - $observer = \App::get_observer(); + $channel = App::get_channel(); + $observer = App::get_observer(); $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - $perms = get_all_perms(\App::$profile['profile_uid'],$ob_hash); + $perms = get_all_perms(App::$profile['profile_uid'],$ob_hash); if(! $perms['view_stream']) { // We may want to make the target of this redirect configurable if($perms['view_profile']) { notice( t('Insufficient permissions. Request redirected to profile page.') . EOL); - goaway (z_root() . "/profile/" . \App::$profile['channel_address']); + goaway (z_root() . "/profile/" . App::$profile['channel_address']); } notice( t('Permission denied.') . EOL); return; @@ -121,7 +121,7 @@ class Channel extends \Zotlabs\Web\Controller { nav_set_selected('Channel Home'); - $static = channel_manual_conv_update(\App::$profile['profile_uid']); + $static = channel_manual_conv_update(App::$profile['profile_uid']); // search terms header if($search) { @@ -147,16 +147,16 @@ class Channel extends \Zotlabs\Web\Controller { $x = array( 'is_owner' => $is_owner, - 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig(\App::$profile['profile_uid'],'system','use_browser_location')))) ? true : false), - 'default_location' => (($is_owner) ? \App::$profile['channel_location'] : ''), - 'nickname' => \App::$profile['channel_address'], - 'lockstate' => (((strlen(\App::$profile['channel_allow_cid'])) || (strlen(\App::$profile['channel_allow_gid'])) || (strlen(\App::$profile['channel_deny_cid'])) || (strlen(\App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'), + 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig(App::$profile['profile_uid'],'system','use_browser_location')))) ? true : false), + 'default_location' => (($is_owner) ? App::$profile['channel_location'] : ''), + 'nickname' => App::$profile['channel_address'], + 'lockstate' => (((strlen(App::$profile['channel_allow_cid'])) || (strlen(App::$profile['channel_allow_gid'])) || (strlen(App::$profile['channel_deny_cid'])) || (strlen(App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'), 'acl' => (($is_owner) ? populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''), 'permissions' => $channel_acl, 'showacl' => (($is_owner) ? 'yes' : ''), 'bang' => '', 'visitor' => (($is_owner || $observer) ? true : false), - 'profile_uid' => \App::$profile['profile_uid'], + 'profile_uid' => App::$profile['profile_uid'], 'editor_autocomplete' => true, 'bbco_autocomplete' => 'bbcode', 'bbcode' => true, @@ -176,14 +176,14 @@ class Channel extends \Zotlabs\Web\Controller { $item_normal = item_normal(); $item_normal_update = item_normal_update(); - $sql_extra = item_permissions_sql(\App::$profile['profile_uid']); + $sql_extra = item_permissions_sql(App::$profile['profile_uid']); - if(get_pconfig(\App::$profile['profile_uid'],'system','channel_list_mode') && (! $mid)) + if(get_pconfig(App::$profile['profile_uid'],'system','channel_list_mode') && (! $mid)) $page_mode = 'list'; else $page_mode = 'client'; - $abook_uids = " and abook.abook_channel = " . intval(\App::$profile['profile_uid']) . " "; + $abook_uids = " and abook.abook_channel = " . intval(App::$profile['profile_uid']) . " "; $simple_update = (($update) ? " AND item_unseen = 1 " : ''); @@ -203,7 +203,7 @@ class Channel extends \Zotlabs\Web\Controller { head_add_link([ 'rel' => 'alternate', 'type' => 'application/json+oembed', - 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string), + 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string), 'title' => 'oembed' ]); @@ -221,7 +221,7 @@ class Channel extends \Zotlabs\Web\Controller { $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal_update AND item_wall = 1 $simple_update $sql_extra limit 1", dbesc($mid . '%'), - intval(\App::$profile['profile_uid']) + intval(App::$profile['profile_uid']) ); $_SESSION['loadtime'] = datetime_convert(); } @@ -233,7 +233,7 @@ class Channel extends \Zotlabs\Web\Controller { AND (abook.abook_blocked = 0 or abook.abook_flags is null) $sql_extra ORDER BY created DESC", - intval(\App::$profile['profile_uid']) + intval(App::$profile['profile_uid']) ); $_SESSION['loadtime'] = datetime_convert(); } @@ -242,10 +242,10 @@ class Channel extends \Zotlabs\Web\Controller { else { if(x($category)) { - $sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); + $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); } if(x($hashtags)) { - $sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG)); + $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG)); } if($datequery) { @@ -267,15 +267,15 @@ class Channel extends \Zotlabs\Web\Controller { $itemspage = get_pconfig(local_channel(),'system','itemspage'); - \App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start'])); + App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); - if($load || ($checkjs->disabled())) { + if((! $update) || ($load)) { if($mid) { $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal AND item_wall = 1 $sql_extra limit 1", dbesc($mid . '%'), - intval(\App::$profile['profile_uid']) + intval(App::$profile['profile_uid']) ); if (! $r) { notice( t('Permission denied.') . EOL); @@ -289,7 +289,7 @@ class Channel extends \Zotlabs\Web\Controller { AND item.item_wall = 1 AND item.item_thread_top = 1 $sql_extra $sql_extra2 ORDER BY $ordering DESC $pager_sql ", - intval(\App::$profile['profile_uid']) + intval(App::$profile['profile_uid']) ); } } @@ -306,7 +306,7 @@ class Channel extends \Zotlabs\Web\Controller { WHERE item.uid = %d $item_normal AND item.parent IN ( %s ) $sql_extra ", - intval(\App::$profile['profile_uid']), + intval(App::$profile['profile_uid']), dbesc($parents_str) ); @@ -329,19 +329,19 @@ class Channel extends \Zotlabs\Web\Controller { // This is ugly, but we can't pass the profile_uid through the session to the ajax updater, // because browser prefetching might change it on us. We have to deliver it with the page. - $maxheight = get_pconfig(\App::$profile['profile_uid'],'system','channel_divmore_height'); + $maxheight = get_pconfig(App::$profile['profile_uid'],'system','channel_divmore_height'); if(! $maxheight) $maxheight = 400; $o .= '
' . "\r\n"; - $o .= "\r\n"; - \App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( + App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( '$baseurl' => z_root(), '$pgtype' => 'channel', - '$uid' => ((\App::$profile['profile_uid']) ? \App::$profile['profile_uid'] : '0'), + '$uid' => ((App::$profile['profile_uid']) ? App::$profile['profile_uid'] : '0'), '$gid' => '0', '$cid' => '0', '$cmin' => '(-1)', @@ -354,7 +354,7 @@ class Channel extends \Zotlabs\Web\Controller { '$wall' => '1', '$fh' => '0', '$static' => $static, - '$page' => ((\App::$pager['page'] != 1) ? \App::$pager['page'] : 1), + '$page' => ((App::$pager['page'] != 1) ? App::$pager['page'] : 1), '$search' => $search, '$xchan' => '', '$order' => $order, @@ -405,17 +405,19 @@ class Channel extends \Zotlabs\Web\Controller { $mode = (($search) ? 'search' : 'channel'); - if($checkjs->disabled()) { - $o .= conversation($items,$mode,$update,'traditional'); + if($update) { + $o .= conversation($items,$mode,$update,$page_mode); } else { + $o .= ''; $o .= conversation($items,$mode,$update,$page_mode); - } - if((! $update) || ($checkjs->disabled())) { - $o .= alt_pager(count($items)); if ($mid && $items[0]['title']) - \App::$page['title'] = $items[0]['title'] . " - " . \App::$page['title']; + App::$page['title'] = $items[0]['title'] . " - " . App::$page['title']; + } if($mid) -- cgit v1.2.3 From a9bbfe9c4f0b783433ceb6c586022093e74aa718 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 20 Aug 2018 17:38:38 -0700 Subject: Only show cover photos once per login session. After that they can get annoying. If there is pushback on this, then it should perhaps be optional. --- Zotlabs/Widget/Cover_photo.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Zotlabs/Widget/Cover_photo.php b/Zotlabs/Widget/Cover_photo.php index d2eb1be92..af1ae5c7f 100644 --- a/Zotlabs/Widget/Cover_photo.php +++ b/Zotlabs/Widget/Cover_photo.php @@ -20,6 +20,16 @@ class Cover_photo { if(! $channel_id) return ''; + // only show cover photos once per login session + + if(array_key_exists('channels_visited',$_SESSION) && is_array($_SESSION['channels_visited']) && in_array($channel_id,$_SESSION['channels_visited'])) { + return EMPTY_STR; + } + if(! array_key_exists('channels_visited',$_SESSION)) { + $_SESSION['channels_visited'] = []; + } + $_SESSION['channels_visited'][] = $channel_id; + $channel = channelx_by_n($channel_id); if(array_key_exists('style', $arr) && isset($arr['style'])) -- cgit v1.2.3 From 9b620b2a35e256c905b6e3bd0e6f0228a0426e07 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 20 Aug 2018 20:07:54 -0700 Subject: remove checkjs reloader from mod_display also --- Zotlabs/Module/Display.php | 90 ++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 48 deletions(-) diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php index fe0408c6f..bdaed0933 100644 --- a/Zotlabs/Module/Display.php +++ b/Zotlabs/Module/Display.php @@ -21,8 +21,6 @@ class Display extends \Zotlabs\Web\Controller { $module_format = 'html'; } - $checkjs = new \Zotlabs\Web\CheckJS(1); - if($load) $_SESSION['loadtime'] = datetime_convert(); @@ -253,53 +251,44 @@ class Display extends \Zotlabs\Web\Controller { $sql_extra = public_permissions_sql($observer_hash); - if(($update && $load) || ($checkjs->disabled()) || ($module_format !== 'html')) { + if((! $update) || ($load)) { - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']),intval(\App::$pager['start'])); + $r = null; - if($load || ($checkjs->disabled()) || ($module_format !== 'html')) { + require_once('include/channel.php'); + $sys = get_sys_channel(); + $sysid = $sys['channel_id']; - $r = null; + if(local_channel()) { + $r = q("SELECT item.id as item_id from item WHERE uid = %d and mid = '%s' $item_normal limit 1", + intval(local_channel()), + dbesc($target_item['parent_mid']) + ); + if($r) { + $updateable = true; + } + } - require_once('include/channel.php'); - $sys = get_sys_channel(); - $sysid = $sys['channel_id']; + if(! $r) { - if(local_channel()) { - $r = q("SELECT item.id as item_id from item - WHERE uid = %d - and mid = '%s' - $item_normal - limit 1", - intval(local_channel()), - dbesc($target_item['parent_mid']) - ); - if($r) { - $updateable = true; - } - } + // in case somebody turned off public access to sys channel content using permissions + // make that content unsearchable by ensuring the owner uid can't match - if(! $r) { - - // in case somebody turned off public access to sys channel content using permissions - // make that content unsearchable by ensuring the owner uid can't match - - if(! perm_is_allowed($sysid,$observer_hash,'view_stream')) - $sysid = 0; - - $r = q("SELECT item.id as item_id from item - WHERE mid = '%s' - AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' - AND item.deny_gid = '' AND item_private = 0 ) - and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " )) - OR uid = %d ) - $sql_extra ) - $item_normal - limit 1", - dbesc($target_item['parent_mid']), - intval($sysid) - ); - } + if(! perm_is_allowed($sysid,$observer_hash,'view_stream')) + $sysid = 0; + + $r = q("SELECT item.id as item_id from item + WHERE mid = '%s' + AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' + AND item.deny_gid = '' AND item_private = 0 ) + and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " )) + OR uid = %d ) + $sql_extra ) + $item_normal + limit 1", + dbesc($target_item['parent_mid']), + intval($sysid) + ); } } @@ -373,14 +362,19 @@ class Display extends \Zotlabs\Web\Controller { case 'html': - if ($checkjs->disabled()) { + if ($update) { + $o .= conversation($items, 'display', $update, 'client'); + } + else { + $o .= ''; + if ($items[0]['title']) \App::$page['title'] = $items[0]['title'] . " - " . \App::$page['title']; - } - else { + $o .= conversation($items, 'display', $update, 'client'); - } + } break; @@ -435,7 +429,7 @@ class Display extends \Zotlabs\Web\Controller { $o .= '
'; - if((($update && $load) || $checkjs->disabled()) && (! $items)) { + if(((! $update) || ($load)) && (! $items)) { $r = q("SELECT id, item_deleted FROM item WHERE mid = '%s' LIMIT 1", dbesc($item_hash) -- cgit v1.2.3 From 8bf1e3a9449b95307d6d991284dce1addade813a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 20 Aug 2018 22:02:08 -0700 Subject: more code optimisation --- Zotlabs/Module/Channel.php | 14 ++++++++------ Zotlabs/Module/Network.php | 22 ++++++++++++---------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index f1ae2f507..9d4c23e4c 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -2,21 +2,23 @@ namespace Zotlabs\Module; -use \App; -require_once('include/contact_widgets.php'); +use App; +use Zotlabs\Web\Controller; +use Zotlabs\Lib\PermissionDescription; + require_once('include/items.php'); -require_once("include/bbcode.php"); require_once('include/security.php'); require_once('include/conversation.php'); require_once('include/acl_selectors.php'); -require_once('include/permissions.php'); + /** * @brief Channel Controller * */ -class Channel extends \Zotlabs\Web\Controller { + +class Channel extends Controller { function init() { @@ -151,7 +153,7 @@ class Channel extends \Zotlabs\Web\Controller { 'default_location' => (($is_owner) ? App::$profile['channel_location'] : ''), 'nickname' => App::$profile['channel_address'], 'lockstate' => (((strlen(App::$profile['channel_allow_cid'])) || (strlen(App::$profile['channel_allow_gid'])) || (strlen(App::$profile['channel_deny_cid'])) || (strlen(App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'), - 'acl' => (($is_owner) ? populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''), + 'acl' => (($is_owner) ? populate_acl($channel_acl,true, PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''), 'permissions' => $channel_acl, 'showacl' => (($is_owner) ? 'yes' : ''), 'bang' => '', diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index 77a08585b..ca0ec7844 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -1,6 +1,8 @@ \App::$query_string); + $arr = array('query' => App::$query_string); call_hooks('network_content_init', $arr); - $channel = \App::get_channel(); + $channel = App::get_channel(); $item_normal = item_normal(); $item_normal_update = item_normal_update(); @@ -326,10 +328,10 @@ class Network extends \Zotlabs\Web\Controller { $o .= '
' . "\r\n"; $o .= "\r\n"; - \App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( + App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( '$baseurl' => z_root(), '$pgtype' => 'network', '$uid' => ((local_channel()) ? local_channel() : '0'), @@ -346,7 +348,7 @@ class Network extends \Zotlabs\Web\Controller { '$wall' => '0', '$static' => $static, '$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0), - '$page' => ((\App::$pager['page'] != 1) ? \App::$pager['page'] : 1), + '$page' => ((App::$pager['page'] != 1) ? App::$pager['page'] : 1), '$search' => (($search) ? $search : ''), '$xchan' => $xchan, '$order' => $order, @@ -417,8 +419,8 @@ class Network extends \Zotlabs\Web\Controller { } else { $itemspage = get_pconfig(local_channel(),'system','itemspage'); - \App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start'])); + App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); } // cmin and cmax are both -1 when the affinity tool is disabled -- cgit v1.2.3 From 5d2ac10073cced796aaea5923aad76e82d01b2ed Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 21 Aug 2018 11:12:41 +0000 Subject: Merge branch 'patch-17' into 'master' Add missed app 'Order Apps' See merge request hubzilla/core!1258 (cherry picked from commit 85aa4957414c98fb6f44c0c2b79ef9d198e963a7) 6086a70e Add missed app 'Order Apps' --- Zotlabs/Lib/Apps.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 9027b13bc..1d9fe48e6 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -336,7 +336,8 @@ class Apps { 'Profile' => t('Profile'), 'Profiles' => t('Profiles'), 'Privacy Groups' => t('Privacy Groups'), - 'Notifications' => t('Notifications') + 'Notifications' => t('Notifications'), + 'Order Apps' => t('Order Apps') ); if(array_key_exists('name',$arr)) { -- cgit v1.2.3 From 79eb6d39423c47c8c7809ed34cdc88effbb6e97e Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Tue, 21 Aug 2018 13:18:42 -0400 Subject: Fix jumpy sidebars --- view/theme/redbasic/css/style.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 82d0cf761..943b27637 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -45,6 +45,9 @@ main { margin-left: auto; margin-right: auto; max-width: $main_widthpx; +} + +main #region_2 { margin-bottom: $bottom_margin; } -- cgit v1.2.3 From 42c4a0da51c61497427721a7467d1d6c8a09a605 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Tue, 21 Aug 2018 21:38:10 -0700 Subject: Zot/Finger: ignore deleted hublocs --- Zotlabs/Zot/Finger.php | 2 +- include/security.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Zot/Finger.php b/Zotlabs/Zot/Finger.php index 348171bdc..559f9657a 100644 --- a/Zotlabs/Zot/Finger.php +++ b/Zotlabs/Zot/Finger.php @@ -55,7 +55,7 @@ class Finger { $r = q("select xchan.*, hubloc.* from xchan left join hubloc on xchan_hash = hubloc_hash - where xchan_addr = '%s' and hubloc_primary = 1 limit 1", + where xchan_addr = '%s' and hubloc_primary = 1 and hubloc_deleted = 0 limit 1", dbesc($xchan_addr) ); diff --git a/include/security.php b/include/security.php index 88988a7c0..ffdd1d7ea 100644 --- a/include/security.php +++ b/include/security.php @@ -370,7 +370,7 @@ function permissions_sql($owner_id, $remote_observer = null, $table = '') { } /** - * @brief Creates an addiontal SQL where statement to check permissions for an item. + * @brief Creates an additional SQL where statement to check permissions for an item. * * @param int $owner_id * @param bool $remote_observer (optional) use current observer if unset -- cgit v1.2.3 From 0eeaf8713fd56d0d8582f5bf6f478e2e46a9bf1e Mon Sep 17 00:00:00 2001 From: zotlabs Date: Tue, 21 Aug 2018 23:13:54 -0700 Subject: add api_not_found hook --- include/api.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/api.php b/include/api.php index 6a05a40a5..ed5c0d29f 100644 --- a/include/api.php +++ b/include/api.php @@ -127,7 +127,10 @@ require_once('include/api_zot.php'); } } - + + + $x = [ 'path' => App::$query_string ]; + call_hooks('api_not_found',$x); header('HTTP/1.1 404 Not Found'); logger('API call not implemented: ' . App::$query_string . ' - ' . print_r($_REQUEST,true)); -- cgit v1.2.3 From b25192332ba3b17f1141ff643b3ce2dd4591c528 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Tue, 21 Aug 2018 23:39:49 -0700 Subject: profile likes - liker image was a bit large and didn't make a very pleasant looking dropdown, may have been overlooked when other related things were changed to menu-img-1 class --- view/tpl/profile_advanced.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/profile_advanced.tpl b/view/tpl/profile_advanced.tpl index c56062459..e6653c130 100755 --- a/view/tpl/profile_advanced.tpl +++ b/view/tpl/profile_advanced.tpl @@ -5,7 +5,7 @@
{{if $profile.likers}} - + {{/if}}
{{/if}} -- cgit v1.2.3 From e071cd4635df3628a8ebf000882b4bb81f5011be Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Wed, 22 Aug 2018 15:12:09 +0200 Subject: Update hmessages.po --- view/ru/hmessages.po | 424 ++++++++++++++++++++++++--------------------------- 1 file changed, 196 insertions(+), 228 deletions(-) diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index 15b1c136b..b04bf742f 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-23 11:34+0200\n" -"PO-Revision-Date: 2018-07-22 19:32+0000\n" +"POT-Creation-Date: 2018-08-21 11:34+0200\n" +"PO-Revision-Date: 2018-08-21 16:39+0200\n" "Last-Translator: Max Kostikov \n" "Language-Team: Russian (http://www.transifex.com/Friendica/hubzilla/language/ru/)\n" "MIME-Version: 1.0\n" @@ -161,11 +161,11 @@ msgstr "Включить плагин публикаций Dreamwidth" #: ../../extend/addon/hzaddons/cart/cart.php:1206 #: ../../extend/addon/hzaddons/cart/cart.php:1213 #: ../../extend/addon/hzaddons/cart/cart.php:1221 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:73 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 #: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 #: ../../extend/addon/hzaddons/nofed/nofed.php:72 #: ../../extend/addon/hzaddons/nofed/nofed.php:76 @@ -237,11 +237,11 @@ msgstr "Нет" #: ../../extend/addon/hzaddons/cart/cart.php:1206 #: ../../extend/addon/hzaddons/cart/cart.php:1213 #: ../../extend/addon/hzaddons/cart/cart.php:1221 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:73 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:99 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:104 #: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 #: ../../extend/addon/hzaddons/nofed/nofed.php:72 #: ../../extend/addon/hzaddons/nofed/nofed.php:76 @@ -310,7 +310,7 @@ msgstr "Настройки публикаций в Dreamwidth" #: ../../extend/addon/hzaddons/twitter/twitter.php:218 #: ../../extend/addon/hzaddons/twitter/twitter.php:265 #: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1159 -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:830 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:831 #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:53 #: ../../extend/addon/hzaddons/skeleton/skeleton.php:65 #: ../../extend/addon/hzaddons/gnusoc/gnusoc.php:284 @@ -328,9 +328,9 @@ msgstr "Настройки публикаций в Dreamwidth" #: ../../extend/addon/hzaddons/redphotos/redphotos.php:136 #: ../../extend/addon/hzaddons/visage/visage.php:170 #: ../../extend/addon/hzaddons/cart/cart.php:1251 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:144 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:78 #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:647 +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:144 #: ../../extend/addon/hzaddons/nsabait/nsabait.php:161 #: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84 #: ../../extend/addon/hzaddons/nofed/nofed.php:80 @@ -340,7 +340,7 @@ msgstr "Настройки публикаций в Dreamwidth" #: ../../extend/addon/hzaddons/wppost/wppost.php:113 #: ../../view/theme/redbasic/php/config.php:93 ../../include/js_strings.php:22 #: ../../Zotlabs/Lib/ThreadItem.php:757 ../../Zotlabs/Widget/Wiki_pages.php:40 -#: ../../Zotlabs/Widget/Wiki_pages.php:97 +#: ../../Zotlabs/Widget/Wiki_pages.php:99 #: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Appman.php:153 #: ../../Zotlabs/Module/Photos.php:1087 ../../Zotlabs/Module/Photos.php:1127 #: ../../Zotlabs/Module/Photos.php:1245 ../../Zotlabs/Module/Connect.php:98 @@ -385,7 +385,7 @@ msgstr "Отправить" #: ../../extend/addon/hzaddons/mdpost/mdpost.php:40 ../../include/text.php:1886 #: ../../Zotlabs/Widget/Wiki_pages.php:36 -#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:208 #: ../../Zotlabs/Module/Wiki.php:350 msgid "Markdown" msgstr "Разметка" @@ -578,10 +578,7 @@ msgid "" "If enabled, members will automatically login to an ejabberd server that has " "to be installed on this machine with synchronized credentials via the " "\"auth_ejabberd.php\" script." -msgstr "" -"Если включено, участники автоматически войдут на сервер ejabberd, который должен " -"быть установлен на этом компьютере с синхронизированными учетными данными через " -"скрипт \"auth_ejabberd.php\"." +msgstr "Если включено, участники автоматически войдут на сервер ejabberd, который должен быть установлен на этом компьютере с синхронизированными учетными данными через скрипт \"auth_ejabberd.php\"." #: ../../extend/addon/hzaddons/xmpp/xmpp.php:102 #: ../../extend/addon/hzaddons/logrot/logrot.php:54 @@ -623,7 +620,7 @@ msgid "Test mode (only send to hub administrator)" msgstr "Тестовый режим (отправка только администратору узла)" #: ../../extend/addon/hzaddons/buglink/buglink.php:16 -#: ../../Zotlabs/Lib/Apps.php:295 +#: ../../Zotlabs/Lib/Apps.php:299 msgid "Report Bug" msgstr "Сообщить об ошибке" @@ -1271,10 +1268,7 @@ msgid "" "This identity has been deleted by another member due to inactivity. Please " "press the \"New identity\" button or refresh the page to register a new " "identity. You may use the same name." -msgstr "" -"Этот идентификатор был удалён другим участником из-за неактивности. Пожалуйста " -"нажмите кнопку \"Новый идентификатор\" для обновления страницы и получения " -"нового идентификатора. Вы можете использовать то же имя." +msgstr "Этот идентификатор был удалён другим участником из-за неактивности. Пожалуйста нажмите кнопку \"Новый идентификатор\" для обновления страницы и получения нового идентификатора. Вы можете использовать то же имя." #: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168 msgid "Welcome to Rendezvous!" @@ -1285,10 +1279,7 @@ msgid "" "Enter your name to join this rendezvous. To begin sharing your location with " "the other members, tap the GPS control. When your location is discovered, a " "red dot will appear and others will be able to see you on the map." -msgstr "" -"Введите ваше имя для вступления в это Rendezvous. Для того, чтобы делиться вашим " -"положением с другими участниками, нажмите \"GPS control\". Когда ваше местоположение " -"определно, красная точка появится и остальные смогут увидеть вас на карте." +msgstr "Введите ваше имя для вступления в это Rendezvous. Для того, чтобы делиться вашим положением с другими участниками, нажмите \"GPS control\". Когда ваше местоположение определно, красная точка появится и остальные смогут увидеть вас на карте." #: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:171 msgid "Let's meet here" @@ -1495,7 +1486,7 @@ msgstr "Электронная почта" #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:58 #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:59 #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:60 -#: ../../Zotlabs/Lib/Apps.php:326 +#: ../../Zotlabs/Lib/Apps.php:330 msgid "Profile Photo" msgstr "Фотография профиля" @@ -1533,7 +1524,7 @@ msgid "Homepage URL" msgstr "URL домашней страницы" #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:69 -#: ../../Zotlabs/Lib/Apps.php:324 +#: ../../Zotlabs/Lib/Apps.php:328 msgid "Language" msgstr "Язык" @@ -1716,8 +1707,8 @@ msgid "" msgstr "Предоставьте возможность редактирования фотографий, чтобы скрыть неприемлемые фотографии из альбома по умолчанию" #: ../../extend/addon/hzaddons/pubcrawl/as.php:961 -#: ../../include/conversation.php:1165 ../../Zotlabs/Lib/Apps.php:819 -#: ../../Zotlabs/Lib/Apps.php:898 ../../Zotlabs/Widget/Album.php:84 +#: ../../include/conversation.php:1165 ../../Zotlabs/Lib/Apps.php:867 +#: ../../Zotlabs/Lib/Apps.php:949 ../../Zotlabs/Widget/Album.php:84 #: ../../Zotlabs/Widget/Portfolio.php:95 ../../Zotlabs/Module/Cdav.php:786 #: ../../Zotlabs/Module/Cdav.php:787 ../../Zotlabs/Module/Cdav.php:794 #: ../../Zotlabs/Module/Photos.php:822 ../../Zotlabs/Module/Photos.php:1278 @@ -1820,38 +1811,38 @@ msgstr "Импорт завершен." msgid "$projectname" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:786 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:787 msgid "Diaspora Protocol Settings updated." msgstr "Настройки протокола Diaspora обновлены." -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:805 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:806 msgid "" "The Diaspora protocol does not support location independence. Connections " "you make within that network may be unreachable from alternate channel " "locations." msgstr "Прокол Diaspora не поддерживает независимость от расположения. Ваши контакты установленные в этой сети могут быть недоступны из альтернативных мест размещения канала." -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:808 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:809 msgid "Enable the Diaspora protocol for this channel" msgstr "Включить протокол Diaspora для этого канала" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:812 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:813 msgid "Allow any Diaspora member to comment on your public posts" msgstr "Разрешить любому участнику Diaspora комментировать ваши общедоступные публикации" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:816 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:817 msgid "Prevent your hashtags from being redirected to other sites" msgstr "Предотвратить перенаправление тегов на другие сайты" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:820 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:821 msgid "Sign and forward posts and comments with no existing Diaspora signature" msgstr "Подписывать и отправлять публикации и комментарии с несуществующей подписью Diaspora" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:825 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:826 msgid "Followed hashtags (comma separated, do not include the #)" msgstr "Отслеживаемые теги (через запятую, исключая #)" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:830 +#: ../../extend/addon/hzaddons/diaspora/diaspora.php:831 msgid "Diaspora Protocol Settings" msgstr "Настройки протокола Diaspora" @@ -1904,7 +1895,7 @@ msgstr "Страница для загрузки после выбора изо #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57 #: ../../include/conversation.php:1037 ../../include/nav.php:108 -#: ../../Zotlabs/Lib/Apps.php:309 ../../Zotlabs/Module/Connedit.php:594 +#: ../../Zotlabs/Lib/Apps.php:313 ../../Zotlabs/Module/Connedit.php:594 msgid "View Profile" msgstr "Просмотреть профиль" @@ -2150,10 +2141,7 @@ msgid "" "pause it at any time and continue where you left off by reloading the page, " "or navigting to another page.

You can also advance by pressing the " "return key" -msgstr "" -"Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

" -"

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

" -"

Также вы можете нажать клавишу \"Назад\"" +msgstr "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?

Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.

Также вы можете нажать клавишу \"Назад\"" #: ../../extend/addon/hzaddons/skeleton/skeleton.php:59 msgid "Some setting" @@ -2663,7 +2651,7 @@ msgid "Manual payments are not enabled." msgstr "Ручные платежи не подключены." #: ../../extend/addon/hzaddons/cart/manual_payments.php:37 -#: ../../extend/addon/hzaddons/cart/cart.php:1442 +#: ../../extend/addon/hzaddons/cart/cart.php:1447 #: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:417 msgid "Order not found." msgstr "Заказ не найден." @@ -2673,7 +2661,7 @@ msgid "Finished" msgstr "Завершено" #: ../../extend/addon/hzaddons/cart/manual_payments.php:62 -#: ../../extend/addon/hzaddons/cart/cart.php:1420 +#: ../../extend/addon/hzaddons/cart/cart.php:1425 #: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:481 #: ../../extend/addon/hzaddons/cart/myshop.php:51 #: ../../Zotlabs/Module/Wiki.php:68 @@ -2708,88 +2696,50 @@ msgstr "Основная торговая валюта" msgid "Cart - Base Settings" msgstr "Корзина - Основные настройки" -#: ../../extend/addon/hzaddons/cart/cart.php:1271 -#: ../../extend/addon/hzaddons/cart/cart.php:1274 +#: ../../extend/addon/hzaddons/cart/cart.php:1275 +#: ../../extend/addon/hzaddons/cart/cart.php:1278 msgid "Shop" msgstr "Магазин" -#: ../../extend/addon/hzaddons/cart/cart.php:1293 +#: ../../extend/addon/hzaddons/cart/cart.php:1298 #: ../../Zotlabs/Module/Wiki.php:30 msgid "Profile Unavailable." msgstr "Профиль недоступен." -#: ../../extend/addon/hzaddons/cart/cart.php:1324 +#: ../../extend/addon/hzaddons/cart/cart.php:1329 #: ../../extend/addon/hzaddons/cart/myshop.php:125 msgid "Order Not Found" msgstr "Заказ не найден" -#: ../../extend/addon/hzaddons/cart/cart.php:1401 +#: ../../extend/addon/hzaddons/cart/cart.php:1406 msgid "You must be logged into the Grid to shop." msgstr "Вы должны быть в сети для доступа к магазину" -#: ../../extend/addon/hzaddons/cart/cart.php:1411 +#: ../../extend/addon/hzaddons/cart/cart.php:1416 msgid "Cart Not Enabled (profile: " msgstr "Корзина не подключена (профиль:" -#: ../../extend/addon/hzaddons/cart/cart.php:1451 +#: ../../extend/addon/hzaddons/cart/cart.php:1456 msgid "Access denied." msgstr "Доступ запрещён." -#: ../../extend/addon/hzaddons/cart/cart.php:1503 -#: ../../extend/addon/hzaddons/cart/cart.php:1647 +#: ../../extend/addon/hzaddons/cart/cart.php:1508 +#: ../../extend/addon/hzaddons/cart/cart.php:1652 msgid "No Order Found" msgstr "Нет найденных заказов" -#: ../../extend/addon/hzaddons/cart/cart.php:1512 +#: ../../extend/addon/hzaddons/cart/cart.php:1517 msgid "An unknown error has occurred Please start again." msgstr "Произошла неизвестная ошибка. Пожалуйста, начните снова." -#: ../../extend/addon/hzaddons/cart/cart.php:1680 +#: ../../extend/addon/hzaddons/cart/cart.php:1685 msgid "Invalid Payment Type. Please start again." msgstr "Недействительный тип платежа. Пожалуйста, начните снова." -#: ../../extend/addon/hzaddons/cart/cart.php:1687 +#: ../../extend/addon/hzaddons/cart/cart.php:1692 msgid "Order not found" msgstr "Заказ не найден" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:97 -msgid "Enable Paypal Button Module" -msgstr "Включить модуль кнопки Paypal" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:102 -msgid "Use Production Key" -msgstr "Использовать ключ Production" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:109 -msgid "Paypal Sandbox Client Key" -msgstr "Ключ клиента Paypal Sandbox" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:116 -msgid "Paypal Sandbox Secret Key" -msgstr "Секретный ключ Paypal Sandbox" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:122 -msgid "Paypal Production Client Key" -msgstr "Ключ клиента Paypal Production" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:129 -msgid "Paypal Production Secret Key" -msgstr "Секретный ключ Paypal Production" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:143 -msgid "Cart - Paypal Addon" -msgstr "Корзина - Paypal плагин" - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:277 -msgid "Paypal button payments are not enabled." -msgstr "Кнопка Paypal для платежей не включена." - -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:295 -msgid "" -"Paypal button payments are not properly configured. Please choose another " -"payment option." -msgstr "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты." - #: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:71 msgid "Enable Hubzilla Services Module" msgstr "Включить модуль сервиса Hubzilla" @@ -2858,6 +2808,44 @@ msgstr "Добавить покупателя как контакт" msgid "Set Service Class" msgstr "Установить класс обслуживания" +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:97 +msgid "Enable Paypal Button Module" +msgstr "Включить модуль кнопки Paypal" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:102 +msgid "Use Production Key" +msgstr "Использовать ключ Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:109 +msgid "Paypal Sandbox Client Key" +msgstr "Ключ клиента Paypal Sandbox" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:116 +msgid "Paypal Sandbox Secret Key" +msgstr "Секретный ключ Paypal Sandbox" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:122 +msgid "Paypal Production Client Key" +msgstr "Ключ клиента Paypal Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:129 +msgid "Paypal Production Secret Key" +msgstr "Секретный ключ Paypal Production" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:143 +msgid "Cart - Paypal Addon" +msgstr "Корзина - Paypal плагин" + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:277 +msgid "Paypal button payments are not enabled." +msgstr "Кнопка Paypal для платежей не включена." + +#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:295 +msgid "" +"Paypal button payments are not properly configured. Please choose another " +"payment option." +msgstr "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты." + #: ../../extend/addon/hzaddons/cart/myshop.php:44 msgid "Access Denied." msgstr "Доступ запрещён." @@ -3324,7 +3312,7 @@ msgstr "Ваш аккаунт на %s перестанет работать че #: ../../extend/addon/hzaddons/testdrive/testdrive.php:105 msgid "Your $Productname test account is about to expire." -msgstr "Срок действия пробного аккаунта в $Productname близок к окончанию." +msgstr "Ваш тестовый аккаунт в $Productname близок к окончанию срока действия." #: ../../boot.php:1595 msgid "Create an account to access services and applications" @@ -3341,7 +3329,7 @@ msgid "Logout" msgstr "Выход" #: ../../boot.php:1616 ../../include/nav.php:120 ../../include/nav.php:124 -#: ../../Zotlabs/Lib/Apps.php:301 +#: ../../Zotlabs/Lib/Apps.php:305 msgid "Login" msgstr "Войти" @@ -3556,7 +3544,7 @@ msgstr "спойлер" #: ../../include/bbcode.php:456 msgid "View article" -msgstr "Просмотр статей" +msgstr "Просмотр статьи" #: ../../include/bbcode.php:456 msgid "View summary" @@ -3723,12 +3711,12 @@ msgstr "Согласен" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Disagree" -msgstr "Против" +msgstr "Не согласен" #: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1143 msgctxt "title" msgid "Abstain" -msgstr "Воздерживаюсь" +msgstr "Воздержался" #: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1144 msgctxt "title" @@ -3750,7 +3738,7 @@ msgid "Select" msgstr "Выбрать" #: ../../include/conversation.php:691 ../../include/conversation.php:736 -#: ../../Zotlabs/Lib/ThreadItem.php:148 ../../Zotlabs/Lib/Apps.php:476 +#: ../../Zotlabs/Lib/ThreadItem.php:148 ../../Zotlabs/Lib/Apps.php:500 #: ../../Zotlabs/Module/Cdav.php:897 ../../Zotlabs/Module/Cdav.php:1187 #: ../../Zotlabs/Module/Photos.php:1208 #: ../../Zotlabs/Module/Connections.php:289 @@ -3877,7 +3865,7 @@ msgstr "Сообщение" msgid "Ratings" msgstr "Оценки" -#: ../../include/conversation.php:1097 ../../Zotlabs/Lib/Apps.php:316 +#: ../../include/conversation.php:1097 ../../Zotlabs/Lib/Apps.php:320 #: ../../Zotlabs/Module/Poke.php:182 msgid "Poke" msgstr "Ткнуть" @@ -4197,7 +4185,7 @@ msgid "Profile Details" msgstr "Информация о профиле" #: ../../include/conversation.php:1843 ../../include/nav.php:393 -#: ../../Zotlabs/Lib/Apps.php:310 ../../Zotlabs/Module/Fbrowser.php:29 +#: ../../Zotlabs/Lib/Apps.php:314 ../../Zotlabs/Module/Fbrowser.php:29 msgid "Photos" msgstr "Фотографии" @@ -4207,7 +4195,7 @@ msgid "Photo Albums" msgstr "Фотоальбомы" #: ../../include/conversation.php:1851 ../../include/nav.php:401 -#: ../../Zotlabs/Lib/Apps.php:305 ../../Zotlabs/Module/Fbrowser.php:85 +#: ../../Zotlabs/Lib/Apps.php:309 ../../Zotlabs/Module/Fbrowser.php:85 #: ../../Zotlabs/Storage/Browser.php:272 msgid "Files" msgstr "Файлы" @@ -4217,7 +4205,7 @@ msgid "Files and Storage" msgstr "Файлы и хранилище" #: ../../include/conversation.php:1862 ../../include/conversation.php:1865 -#: ../../Zotlabs/Lib/Apps.php:311 +#: ../../Zotlabs/Lib/Apps.php:315 msgid "Events" msgstr "События" @@ -4236,7 +4224,7 @@ msgid "Saved Bookmarks" msgstr "Сохранённые закладки" #: ../../include/conversation.php:1902 ../../include/nav.php:450 -#: ../../include/features.php:123 ../../Zotlabs/Lib/Apps.php:293 +#: ../../include/features.php:123 ../../Zotlabs/Lib/Apps.php:297 #: ../../Zotlabs/Module/Cards.php:42 ../../Zotlabs/Module/Cards.php:194 msgid "Cards" msgstr "Карточки" @@ -4254,7 +4242,7 @@ msgid "View Articles" msgstr "Просмотр статей" #: ../../include/conversation.php:1924 ../../include/nav.php:473 -#: ../../Zotlabs/Lib/Apps.php:306 ../../Zotlabs/Module/Webpages.php:237 +#: ../../Zotlabs/Lib/Apps.php:310 ../../Zotlabs/Module/Webpages.php:237 msgid "Webpages" msgstr "Веб-страницы" @@ -4268,7 +4256,7 @@ msgid "Wikis" msgstr "" #: ../../include/conversation.php:1940 ../../include/nav.php:489 -#: ../../include/features.php:96 ../../Zotlabs/Lib/Apps.php:307 +#: ../../include/features.php:96 ../../Zotlabs/Lib/Apps.php:311 msgid "Wiki" msgstr "" @@ -4311,9 +4299,7 @@ msgstr[2] "Не посетят" msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" -msgstr[0] "Не решил" -msgstr[1] "Не решили" -msgstr[2] "Не решили" +msgstr "Не решил" #: ../../include/conversation.php:2005 msgctxt "noun" @@ -4397,44 +4383,44 @@ msgstr "В процессе" msgid "Cancelled" msgstr "Отменено" -#: ../../include/event.php:1308 ../../include/connections.php:696 +#: ../../include/event.php:1308 ../../include/connections.php:698 #: ../../Zotlabs/Module/Cdav.php:1179 ../../Zotlabs/Module/Connedit.php:915 #: ../../Zotlabs/Module/Profiles.php:792 msgid "Mobile" msgstr "Мобильный" -#: ../../include/event.php:1309 ../../include/connections.php:697 +#: ../../include/event.php:1309 ../../include/connections.php:699 #: ../../Zotlabs/Module/Cdav.php:1180 ../../Zotlabs/Module/Connedit.php:916 #: ../../Zotlabs/Module/Profiles.php:793 msgid "Home" msgstr "Домашний" -#: ../../include/event.php:1310 ../../include/connections.php:698 +#: ../../include/event.php:1310 ../../include/connections.php:700 msgid "Home, Voice" msgstr "Дом, голос" -#: ../../include/event.php:1311 ../../include/connections.php:699 +#: ../../include/event.php:1311 ../../include/connections.php:701 msgid "Home, Fax" msgstr "Дом, факс" -#: ../../include/event.php:1312 ../../include/connections.php:700 +#: ../../include/event.php:1312 ../../include/connections.php:702 #: ../../Zotlabs/Module/Cdav.php:1181 ../../Zotlabs/Module/Connedit.php:917 #: ../../Zotlabs/Module/Profiles.php:794 msgid "Work" msgstr "Рабочий" -#: ../../include/event.php:1313 ../../include/connections.php:701 +#: ../../include/event.php:1313 ../../include/connections.php:703 msgid "Work, Voice" msgstr "Работа, голос" -#: ../../include/event.php:1314 ../../include/connections.php:702 +#: ../../include/event.php:1314 ../../include/connections.php:704 msgid "Work, Fax" msgstr "Работа, факс" #: ../../include/event.php:1315 ../../include/event.php:1322 #: ../../include/selectors.php:49 ../../include/selectors.php:66 #: ../../include/selectors.php:104 ../../include/selectors.php:140 -#: ../../include/connections.php:703 ../../include/connections.php:710 +#: ../../include/connections.php:705 ../../include/connections.php:712 #: ../../Zotlabs/Access/PermissionRoles.php:306 #: ../../Zotlabs/Module/Cdav.php:1182 ../../Zotlabs/Module/Connedit.php:918 #: ../../Zotlabs/Module/Settings/Channel.php:496 @@ -4609,7 +4595,7 @@ msgstr "Удаленная аутентификация" msgid "Click to authenticate to your home hub" msgstr "Нажмите, чтобы аутентифицировать себя на домашнем узле" -#: ../../include/nav.php:94 ../../Zotlabs/Lib/Apps.php:302 +#: ../../include/nav.php:94 ../../Zotlabs/Lib/Apps.php:306 #: ../../Zotlabs/Module/Manage.php:170 msgid "Channel Manager" msgstr "Менеджер каналов" @@ -4619,7 +4605,8 @@ msgid "Manage your channels" msgstr "Управление вашими каналами" #: ../../include/nav.php:97 ../../include/group.php:320 -#: ../../include/features.php:221 ../../Zotlabs/Widget/Activity_filter.php:68 +#: ../../include/features.php:221 ../../Zotlabs/Lib/Apps.php:333 +#: ../../Zotlabs/Widget/Activity_filter.php:68 #: ../../Zotlabs/Module/Group.php:113 ../../Zotlabs/Module/Group.php:124 msgid "Privacy Groups" msgstr "Группы безопасности" @@ -4628,7 +4615,7 @@ msgstr "Группы безопасности" msgid "Manage your privacy groups" msgstr "Управление вашим группами безопасности" -#: ../../include/nav.php:99 ../../Zotlabs/Lib/Apps.php:304 +#: ../../include/nav.php:99 ../../Zotlabs/Lib/Apps.php:308 #: ../../Zotlabs/Widget/Settings_menu.php:141 #: ../../Zotlabs/Widget/Newmember.php:46 #: ../../Zotlabs/Module/Admin/Addons.php:344 @@ -4679,7 +4666,7 @@ msgstr "Создать аккаунт" #: ../../include/nav.php:170 ../../include/nav.php:272 #: ../../include/help.php:68 ../../include/help.php:74 -#: ../../Zotlabs/Lib/Apps.php:313 ../../Zotlabs/Module/Layouts.php:186 +#: ../../Zotlabs/Lib/Apps.php:317 ../../Zotlabs/Module/Layouts.php:186 msgid "Help" msgstr "Помощь" @@ -4689,7 +4676,7 @@ msgstr "Справочная информация и документация" #: ../../include/nav.php:185 ../../include/acl_selectors.php:118 #: ../../include/text.php:1062 ../../include/text.php:1074 -#: ../../Zotlabs/Lib/Apps.php:318 ../../Zotlabs/Widget/Sitesearch.php:31 +#: ../../Zotlabs/Lib/Apps.php:322 ../../Zotlabs/Widget/Sitesearch.php:31 #: ../../Zotlabs/Widget/Activity_filter.php:148 #: ../../Zotlabs/Module/Connections.php:335 ../../Zotlabs/Module/Search.php:44 msgid "Search" @@ -4728,7 +4715,7 @@ msgstr "Добавить приложения" #: ../../include/nav.php:290 msgid "Arrange Apps" -msgstr "Управление приложениями" +msgstr "Упорядочить приложения" #: ../../include/nav.php:291 msgid "Toggle System Apps" @@ -4740,7 +4727,7 @@ msgid "Calendar" msgstr "Календарь" #: ../../include/nav.php:461 ../../include/features.php:133 -#: ../../Zotlabs/Lib/Apps.php:292 ../../Zotlabs/Module/Articles.php:38 +#: ../../Zotlabs/Lib/Apps.php:296 ../../Zotlabs/Module/Articles.php:38 #: ../../Zotlabs/Module/Articles.php:191 msgid "Articles" msgstr "Статьи" @@ -4940,9 +4927,7 @@ msgstr "Настраиваемый выбор" msgid "" "Select \"Show\" to allow viewing. \"Don't show\" lets you override and limit " "the scope of \"Show\"." -msgstr "" -"Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам " -"переопределить и ограничить область показа." +msgstr "Нажмите \"Показать\" чтобы разрешить просмотр. \"Не показывать\" позволит вам переопределить и ограничить область показа." #: ../../include/acl_selectors.php:116 msgid "Show" @@ -5105,7 +5090,7 @@ msgstr "новее" msgid "No connections" msgstr "Нет контактов" -#: ../../include/text.php:975 ../../Zotlabs/Lib/Apps.php:298 +#: ../../include/text.php:975 ../../Zotlabs/Lib/Apps.php:302 #: ../../Zotlabs/Module/Connections.php:331 msgid "Connections" msgstr "Контакты" @@ -5366,7 +5351,7 @@ msgid "You can create your own with the layouts tool" msgstr "Вы можете создать свой собственный с помощью инструмента шаблонов" #: ../../include/text.php:1884 ../../Zotlabs/Widget/Wiki_pages.php:36 -#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:208 #: ../../Zotlabs/Module/Wiki.php:350 msgid "BBcode" msgstr "" @@ -5376,7 +5361,7 @@ msgid "HTML" msgstr "" #: ../../include/text.php:1887 ../../Zotlabs/Widget/Wiki_pages.php:36 -#: ../../Zotlabs/Widget/Wiki_pages.php:93 ../../Zotlabs/Module/Wiki.php:208 +#: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:208 msgid "Text" msgstr "Текст" @@ -5496,7 +5481,7 @@ msgstr "Не верный токен безопасности для формы. #: ../../include/menu.php:118 ../../include/channel.php:1296 #: ../../include/channel.php:1300 ../../Zotlabs/Lib/ThreadItem.php:128 -#: ../../Zotlabs/Lib/Apps.php:475 ../../Zotlabs/Widget/Cdav.php:126 +#: ../../Zotlabs/Lib/Apps.php:499 ../../Zotlabs/Widget/Cdav.php:126 #: ../../Zotlabs/Widget/Cdav.php:162 ../../Zotlabs/Module/Connections.php:281 #: ../../Zotlabs/Module/Connections.php:319 #: ../../Zotlabs/Module/Connections.php:339 @@ -5913,7 +5898,8 @@ msgstr "Работа / занятость:" msgid "School/education:" msgstr "Школа / образование:" -#: ../../include/channel.php:1644 ../../Zotlabs/Module/Profperm.php:113 +#: ../../include/channel.php:1644 ../../Zotlabs/Lib/Apps.php:331 +#: ../../Zotlabs/Module/Profperm.php:113 msgid "Profile" msgstr "Профиль" @@ -6262,7 +6248,7 @@ msgstr "Инструмент сходства / соответствия" msgid "Filter stream activity by depth of relationships" msgstr "Фильтровать потоки активности по глубине отношений" -#: ../../include/features.php:435 ../../Zotlabs/Lib/Apps.php:300 +#: ../../include/features.php:435 ../../Zotlabs/Lib/Apps.php:304 msgid "Suggest Channels" msgstr "Предлагаемые каналы" @@ -7197,75 +7183,87 @@ msgstr "Ваш адрес электронной почты (требуется) msgid "Your website URL (optional)" msgstr "URL вашего вебсайта (необязательно)" -#: ../../Zotlabs/Lib/Apps.php:291 ../../Zotlabs/Module/Apps.php:50 +#: ../../Zotlabs/Lib/Apps.php:295 ../../Zotlabs/Module/Apps.php:50 msgid "Apps" msgstr "Приложения" -#: ../../Zotlabs/Lib/Apps.php:294 +#: ../../Zotlabs/Lib/Apps.php:298 msgid "Site Admin" msgstr "Администратор сайта" -#: ../../Zotlabs/Lib/Apps.php:296 +#: ../../Zotlabs/Lib/Apps.php:300 msgid "View Bookmarks" msgstr "Просмотреть закадки" -#: ../../Zotlabs/Lib/Apps.php:297 +#: ../../Zotlabs/Lib/Apps.php:301 msgid "My Chatrooms" msgstr "Мои чаты" -#: ../../Zotlabs/Lib/Apps.php:299 +#: ../../Zotlabs/Lib/Apps.php:303 msgid "Remote Diagnostics" msgstr "Удалённая диагностика" -#: ../../Zotlabs/Lib/Apps.php:303 +#: ../../Zotlabs/Lib/Apps.php:307 msgid "Activity" msgstr "Активность" -#: ../../Zotlabs/Lib/Apps.php:308 +#: ../../Zotlabs/Lib/Apps.php:312 msgid "Channel Home" msgstr "Главная канала" -#: ../../Zotlabs/Lib/Apps.php:312 +#: ../../Zotlabs/Lib/Apps.php:316 msgid "Directory" msgstr "Каталог" -#: ../../Zotlabs/Lib/Apps.php:314 +#: ../../Zotlabs/Lib/Apps.php:318 msgid "Mail" msgstr "Переписка" -#: ../../Zotlabs/Lib/Apps.php:315 ../../Zotlabs/Module/Mood.php:135 +#: ../../Zotlabs/Lib/Apps.php:319 ../../Zotlabs/Module/Mood.php:135 msgid "Mood" msgstr "Настроение" -#: ../../Zotlabs/Lib/Apps.php:317 +#: ../../Zotlabs/Lib/Apps.php:321 msgid "Chat" msgstr "Чат" -#: ../../Zotlabs/Lib/Apps.php:319 +#: ../../Zotlabs/Lib/Apps.php:323 msgid "Probe" msgstr "Проба" -#: ../../Zotlabs/Lib/Apps.php:320 +#: ../../Zotlabs/Lib/Apps.php:324 msgid "Suggest" msgstr "Предложить" -#: ../../Zotlabs/Lib/Apps.php:321 +#: ../../Zotlabs/Lib/Apps.php:325 msgid "Random Channel" msgstr "Случайный канал" -#: ../../Zotlabs/Lib/Apps.php:322 +#: ../../Zotlabs/Lib/Apps.php:326 msgid "Invite" msgstr "Пригласить" -#: ../../Zotlabs/Lib/Apps.php:323 ../../Zotlabs/Widget/Admin.php:26 +#: ../../Zotlabs/Lib/Apps.php:327 ../../Zotlabs/Widget/Admin.php:26 msgid "Features" msgstr "Функции" -#: ../../Zotlabs/Lib/Apps.php:325 +#: ../../Zotlabs/Lib/Apps.php:329 msgid "Post" msgstr "Публикация" -#: ../../Zotlabs/Lib/Apps.php:456 ../../Zotlabs/Module/Cdav.php:1186 +#: ../../Zotlabs/Lib/Apps.php:332 +msgid "Profiles" +msgstr "Редактировать профиль" + +#: ../../Zotlabs/Lib/Apps.php:334 +msgid "Notifications" +msgstr "Оповещения" + +#: ../../Zotlabs/Lib/Apps.php:335 +msgid "Order Apps" +msgstr "Порядок приложений" + +#: ../../Zotlabs/Lib/Apps.php:480 ../../Zotlabs/Module/Cdav.php:1186 #: ../../Zotlabs/Module/Connedit.php:922 #: ../../Zotlabs/Module/Admin/Addons.php:453 #: ../../Zotlabs/Module/Settings/Oauth2.php:40 @@ -7276,31 +7274,31 @@ msgstr "Публикация" msgid "Update" msgstr "Обновить" -#: ../../Zotlabs/Lib/Apps.php:456 ../../Zotlabs/Module/Admin/Addons.php:422 +#: ../../Zotlabs/Lib/Apps.php:480 ../../Zotlabs/Module/Admin/Addons.php:422 msgid "Install" msgstr "Установить" -#: ../../Zotlabs/Lib/Apps.php:473 +#: ../../Zotlabs/Lib/Apps.php:497 msgid "Purchase" msgstr "Купить" -#: ../../Zotlabs/Lib/Apps.php:477 +#: ../../Zotlabs/Lib/Apps.php:501 msgid "Undelete" msgstr "Восстановить" -#: ../../Zotlabs/Lib/Apps.php:485 +#: ../../Zotlabs/Lib/Apps.php:509 msgid "Add to app-tray" msgstr "Добавить в app-tray" -#: ../../Zotlabs/Lib/Apps.php:486 +#: ../../Zotlabs/Lib/Apps.php:510 msgid "Remove from app-tray" msgstr "Удалить из app-tray" -#: ../../Zotlabs/Lib/Apps.php:487 +#: ../../Zotlabs/Lib/Apps.php:511 msgid "Pin to navbar" msgstr "Добавить на панель навигации" -#: ../../Zotlabs/Lib/Apps.php:488 +#: ../../Zotlabs/Lib/Apps.php:512 msgid "Unpin from navbar" msgstr "Удалить с панели навигации" @@ -7352,7 +7350,7 @@ msgstr "%1$s отправил вам новое личное сообщение #: ../../Zotlabs/Lib/Enotify.php:130 #, php-format msgid "%1$s sent you %2$s." -msgstr "%1$s послал вам %2$s." +msgstr "%1$s отправил вам %2$s." #: ../../Zotlabs/Lib/Enotify.php:130 msgid "a private message" @@ -7378,17 +7376,17 @@ msgstr "не понравилось" #: ../../Zotlabs/Lib/Enotify.php:201 #, php-format msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" -msgstr "" +msgstr "%1$s %2$s [zrl=%3$s]%4$s[/zrl]" #: ../../Zotlabs/Lib/Enotify.php:209 #, php-format msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" -msgstr "" +msgstr "%1$s %2$s [zrl=%3$s]%5$s %4$s[/zrl]" #: ../../Zotlabs/Lib/Enotify.php:218 #, php-format msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" -msgstr "%1$s%2$s [zrl=%3$s]ваш %4$s[/zrl]" +msgstr "%1$s %2$s [zrl=%3$s]ваш %4$s[/zrl]" #: ../../Zotlabs/Lib/Enotify.php:230 #, php-format @@ -7679,31 +7677,31 @@ msgstr "Комната не найдена." msgid "Room is full" msgstr "Комната переполнена" -#: ../../Zotlabs/Widget/Activity_order.php:86 +#: ../../Zotlabs/Widget/Activity_order.php:89 msgid "Commented Date" msgstr "По комментариям" -#: ../../Zotlabs/Widget/Activity_order.php:90 +#: ../../Zotlabs/Widget/Activity_order.php:93 msgid "Order by last commented date" msgstr "Сортировка по дате последнего комментария" -#: ../../Zotlabs/Widget/Activity_order.php:93 +#: ../../Zotlabs/Widget/Activity_order.php:96 msgid "Posted Date" msgstr "По публикациям" -#: ../../Zotlabs/Widget/Activity_order.php:97 +#: ../../Zotlabs/Widget/Activity_order.php:100 msgid "Order by last posted date" msgstr "Сортировка по дате последней публикации" -#: ../../Zotlabs/Widget/Activity_order.php:100 +#: ../../Zotlabs/Widget/Activity_order.php:103 msgid "Date Unthreaded" msgstr "По порядку" -#: ../../Zotlabs/Widget/Activity_order.php:104 +#: ../../Zotlabs/Widget/Activity_order.php:107 msgid "Order unthreaded by date" msgstr "Сортировка в порядке поступления" -#: ../../Zotlabs/Widget/Activity_order.php:119 +#: ../../Zotlabs/Widget/Activity_order.php:122 msgid "Activity Order" msgstr "Сортировка активности" @@ -7907,20 +7905,20 @@ msgid "Create a new post" msgstr "Создать новую публикацию" #: ../../Zotlabs/Widget/Wiki_pages.php:32 -#: ../../Zotlabs/Widget/Wiki_pages.php:89 +#: ../../Zotlabs/Widget/Wiki_pages.php:91 msgid "Add new page" msgstr "Добавить новую страницу" #: ../../Zotlabs/Widget/Wiki_pages.php:39 -#: ../../Zotlabs/Widget/Wiki_pages.php:96 ../../Zotlabs/Module/Dreport.php:151 +#: ../../Zotlabs/Widget/Wiki_pages.php:98 ../../Zotlabs/Module/Dreport.php:151 msgid "Options" msgstr "Параметры" -#: ../../Zotlabs/Widget/Wiki_pages.php:83 +#: ../../Zotlabs/Widget/Wiki_pages.php:85 msgid "Wiki Pages" msgstr "Wiki страницы" -#: ../../Zotlabs/Widget/Wiki_pages.php:94 +#: ../../Zotlabs/Widget/Wiki_pages.php:96 msgid "Page name" msgstr "Название страницы" @@ -8829,7 +8827,7 @@ msgstr "Удалить фотографию" #: ../../Zotlabs/Module/Directory.php:63 ../../Zotlabs/Module/Directory.php:68 #: ../../Zotlabs/Module/Display.php:30 msgid "Public access denied." -msgstr "Общественный доступ запрещен." +msgstr "Публичный доступ запрещен." #: ../../Zotlabs/Module/Photos.php:556 msgid "No photos selected" @@ -9511,7 +9509,7 @@ msgstr "Сообщение отозванно." #: ../../Zotlabs/Module/Mail.php:227 msgid "Conversation removed." -msgstr "Разговор удален." +msgstr "Беседа удалена." #: ../../Zotlabs/Module/Mail.php:242 ../../Zotlabs/Module/Mail.php:363 msgid "Expires YYYY-MM-DD HH:MM" @@ -9563,7 +9561,7 @@ msgstr "Сообщение отозванно" #: ../../Zotlabs/Module/Mail.php:414 msgid "Delete Conversation" -msgstr "Удалить разговор" +msgstr "Удалить беседу" #: ../../Zotlabs/Module/Mail.php:416 msgid "" @@ -9786,11 +9784,7 @@ msgid "" "These content files may be imported or restored by visiting " "%2$s on any site containing your channel. For best results please import " "or restore these in date order (oldest first)." -msgstr "" -"Данные файлы с содержимым могут быть импортированы и восстановлены на любом " -"содержащем ваш канал сайте. Посетите %2$s. Для лучших " -"результатов пожалуйста производите импорт и восстановление в порядке датировки " -"(старые сначала)." +msgstr "Данные файлы с содержимым могут быть импортированы и восстановлены на любом содержащем ваш канал сайте. Посетите %2$s. Для лучших результатов пожалуйста производите импорт и восстановление в порядке датировки (старые сначала)." #: ../../Zotlabs/Module/Chatsvc.php:131 msgid "Away" @@ -10150,7 +10144,7 @@ msgid "" "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." -msgstr "Бля бля бля Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +msgstr "" #: ../../Zotlabs/Module/Editblock.php:113 ../../Zotlabs/Module/Blocks.php:97 #: ../../Zotlabs/Module/Blocks.php:155 @@ -10593,10 +10587,7 @@ msgid "" "Some permissions may be inherited from your channel's privacy settings, which have higher priority than " "individual settings. You can not change those settings here." -msgstr "" -"Некоторые разрешения могут наследовать из настроек " -"приватности ваших каналов которые могут иметь более высокий приоритет " -"чем индивидуальные. Вы не можете менять эти настройки здесь." +msgstr "Некоторые разрешения могут наследовать из настроек приватности ваших каналов которые могут иметь более высокий приоритет чем индивидуальные. Вы не можете менять эти настройки здесь." #: ../../Zotlabs/Module/Connedit.php:895 msgid "" @@ -10604,11 +10595,7 @@ msgid "" "\">privacy settings, which have higher priority than " "individual settings. You can change those settings here but they wont have " "any impact unless the inherited setting changes." -msgstr "" -"Некоторые разрешения могут быть унаследованы из настроек " -"приватности вашего канала, которые могут иметь более высокий приоритет " -"чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до " -"изменения переданных по наследству настроек." +msgstr "Некоторые разрешения могут быть унаследованы из настроек приватности вашего канала, которые могут иметь более высокий приоритет чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения переданных по наследству настроек." #: ../../Zotlabs/Module/Connedit.php:896 msgid "Last update:" @@ -11611,9 +11598,7 @@ msgstr "Только по приглашениям" msgid "" "Only allow new member registrations with an invitation code. Above register " "policy must be set to Yes." -msgstr "" -"Регистрация пользователей разрешается только по приглашениям. Вышеуказанная " -"политика регистрация должны быть установлена в \"Да\"." +msgstr "Регистрация пользователей разрешается только по приглашениям. Вышеуказанная политика регистрация должны быть установлена в \"Да\"." #: ../../Zotlabs/Module/Admin/Site.php:334 msgid "Minimum age" @@ -11627,6 +11612,10 @@ msgstr "Минимальный возраст (в годах) для регис msgid "Which best describes the types of account offered by this hub?" msgstr "Как лучше описать тип учётных записей предлагаемых на этом хабе?" +#: ../../Zotlabs/Module/Admin/Site.php:335 +msgid "This is displayed on the public server site list." +msgstr "Это отображается в списке общедоступных серверов." + #: ../../Zotlabs/Module/Admin/Site.php:336 msgid "Register text" msgstr "Текст регистрации" @@ -11748,8 +11737,7 @@ msgstr "Включить контекстную помощь" #: ../../Zotlabs/Module/Admin/Site.php:352 msgid "" "Display contextual help for the current page when the help button is pressed." -msgstr "" -"Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." +msgstr "Показывать контекстную помощь для текущей странице при нажатии на кнопку \"Помощь\"." #: ../../Zotlabs/Module/Admin/Site.php:354 msgid "Reply-to email address for system generated email." @@ -11868,7 +11856,7 @@ msgstr "0 для постоянного хранения импортирова #: ../../Zotlabs/Module/Admin/Site.php:371 msgid "" "Do not expire any posts which have comments less than this many days ago" -msgstr "Продлевать строк хранения для любых публикаций, которые имею комментарии возрастом менее этого значения" +msgstr "Продлевать строк хранения для любых публикаций, которые имеют комментарии возрастом менее этого значения" #: ../../Zotlabs/Module/Admin/Site.php:373 msgid "" @@ -11886,7 +11874,7 @@ msgstr "Страница для показа после создания нов #: ../../Zotlabs/Module/Admin/Site.php:374 msgid "Default: profiles" -msgstr "По умолчанию: профили" +msgstr "По умолчанию: profiles" #: ../../Zotlabs/Module/Admin/Site.php:376 msgid "Optional: site location" @@ -11997,31 +11985,25 @@ msgstr "Класс обслуживания" msgid "" "Selected accounts will be deleted!\\n\\nEverything these accounts had posted " "on this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" -"Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на " -"этом сайте будет удалено навсегда!\n\nВы уверены?" +msgstr "Выбранные учётные записи будут удалены!\n\nВсё что было ими опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Accounts.php:191 msgid "" "The account {0} will be deleted!\\n\\nEverything this account has posted on " "this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" -"Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте " -"будет удалено навсегда!\n\nВы уверены?" +msgstr "Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Security.php:83 msgid "" "By default, unfiltered HTML is allowed in embedded media. This is inherently " "insecure." -msgstr "" -"По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." +msgstr "По умолчанию, HTML без фильтрации доступен во встраиваемых медиа. Это небезопасно." #: ../../Zotlabs/Module/Admin/Security.php:86 msgid "" "The recommended setting is to only allow unfiltered HTML from the following " "sites:" -msgstr "" -"Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" +msgstr "Рекомендуется настроить разрешения использовать HTML без фильтрации только для следующих сайтов:" #: ../../Zotlabs/Module/Admin/Security.php:87 msgid "" @@ -12425,17 +12407,13 @@ msgstr "" msgid "" "Selected channels will be deleted!\\n\\nEverything that was posted in these " "channels on this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" -"Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на " -"этом сайте будет удалено навсегда!\n\nВы уверены?" +msgstr "Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Admin/Channels.php:163 msgid "" "The channel {0} will be deleted!\\n\\nEverything that was posted in this " "channel on this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" -"Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте " -"будет удалено навсегда!\n\nВы уверены?" +msgstr "Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\n\nВы уверены?" #: ../../Zotlabs/Module/Email_validation.php:24 #: ../../Zotlabs/Module/Email_resend.php:12 @@ -12452,11 +12430,7 @@ msgid "" "A verification token was sent to your email address [%s]. Enter that token " "here to complete the account verification step. Please allow a few minutes " "for delivery, and check your spam folder if you do not see the message." -msgstr "" -"Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот " -"токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите " -"несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы " -"не видите письма." +msgstr "Проверочный токен был выслн на ваш адрес электронной почты {%s]. Введите этот токен здесь для завершения этапа проверки учётной записи. Пожалуйста, подождите несколько минут для завершения доставки и проверьте вашу папку \"Спам\" если вы не видите письма." #: ../../Zotlabs/Module/Email_validation.php:38 msgid "Resend Email" @@ -12556,9 +12530,7 @@ msgstr "Это действие доступно только участника msgid "" "Please login with your $Projectname ID or register as a new $Projectname member to continue." -msgstr "" -"Пожалуйста, для продолжения войдите с вашим $Projectname " -"ID или зарегистрируйтесь как новый участник $Projectname." +msgstr "Пожалуйста, для продолжения войдите с вашим $Projectname ID или зарегистрируйтесь как новый участник $Projectname." #: ../../Zotlabs/Module/Like.php:109 ../../Zotlabs/Module/Like.php:135 #: ../../Zotlabs/Module/Like.php:173 @@ -13788,14 +13760,12 @@ msgstr "Рекомендуется использовать ваше насто msgid "" "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " "Group\"" -msgstr "" -"Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\"" +msgstr "Примеры: \"Иван Иванов\", \"Оксана и кони\", \"Футбол\", \"Тимур и его команда\"" #: ../../Zotlabs/Module/New_channel.php:162 msgid "" "This will be used to create a unique network address (like an email address)." -msgstr "" -"Это будет использовано для создания уникального сетевого адреса (наподобие email)." +msgstr "Это будет использовано для создания уникального сетевого адреса (наподобие email)." #: ../../Zotlabs/Module/New_channel.php:164 msgid "Allowed characters are a-z 0-9, - and _" @@ -14059,8 +14029,7 @@ msgstr "Превышено максимальное количество рег #: ../../Zotlabs/Module/Register.php:55 msgid "" "Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "" -"Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась." +msgstr "Пожалуйста, подтвердите согласие с \"Условиями обслуживания\". Регистрация не удалась." #: ../../Zotlabs/Module/Register.php:89 msgid "Passwords do not match." @@ -14884,4 +14853,3 @@ msgstr "Загрузить файл" #: ../../Zotlabs/Storage/Browser.php:404 msgid "Drop files here to immediately upload" msgstr "Поместите файлы сюда для немедленной загрузки" - -- cgit v1.2.3 From 456bc2ef86756b669fe290b77384c2e07046aa64 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Wed, 22 Aug 2018 15:13:01 +0200 Subject: Update hstrings.php --- view/ru/hstrings.php | 62 ++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index cedd38a31..b37c85888 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -533,15 +533,6 @@ App::$strings["No Order Found"] = "Нет найденных заказов"; App::$strings["An unknown error has occurred Please start again."] = "Произошла неизвестная ошибка. Пожалуйста, начните снова."; App::$strings["Invalid Payment Type. Please start again."] = "Недействительный тип платежа. Пожалуйста, начните снова."; App::$strings["Order not found"] = "Заказ не найден"; -App::$strings["Enable Paypal Button Module"] = "Включить модуль кнопки Paypal"; -App::$strings["Use Production Key"] = "Использовать ключ Production"; -App::$strings["Paypal Sandbox Client Key"] = "Ключ клиента Paypal Sandbox"; -App::$strings["Paypal Sandbox Secret Key"] = "Секретный ключ Paypal Sandbox"; -App::$strings["Paypal Production Client Key"] = "Ключ клиента Paypal Production"; -App::$strings["Paypal Production Secret Key"] = "Секретный ключ Paypal Production"; -App::$strings["Cart - Paypal Addon"] = "Корзина - Paypal плагин"; -App::$strings["Paypal button payments are not enabled."] = "Кнопка Paypal для платежей не включена."; -App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты."; App::$strings["Enable Hubzilla Services Module"] = "Включить модуль сервиса Hubzilla"; App::$strings["Cart - Hubzilla Services Addon"] = "Корзина - плагин сервиса Hubzilla"; App::$strings["New Sku"] = "Новый код"; @@ -558,6 +549,15 @@ App::$strings["Price"] = "Цена"; App::$strings["Add buyer to privacy group"] = "Добавить покупателя в группу безопасности"; App::$strings["Add buyer as connection"] = "Добавить покупателя как контакт"; App::$strings["Set Service Class"] = "Установить класс обслуживания"; +App::$strings["Enable Paypal Button Module"] = "Включить модуль кнопки Paypal"; +App::$strings["Use Production Key"] = "Использовать ключ Production"; +App::$strings["Paypal Sandbox Client Key"] = "Ключ клиента Paypal Sandbox"; +App::$strings["Paypal Sandbox Secret Key"] = "Секретный ключ Paypal Sandbox"; +App::$strings["Paypal Production Client Key"] = "Ключ клиента Paypal Production"; +App::$strings["Paypal Production Secret Key"] = "Секретный ключ Paypal Production"; +App::$strings["Cart - Paypal Addon"] = "Корзина - Paypal плагин"; +App::$strings["Paypal button payments are not enabled."] = "Кнопка Paypal для платежей не включена."; +App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Кнопка Paypal для платежей настроена неправильно. Пожалуйста, используйте другой вариант оплаты."; App::$strings["Access Denied."] = "Доступ запрещён."; App::$strings["Access Denied"] = "Доступ запрещён"; App::$strings["Invalid Item"] = "Недействительный элемент"; @@ -667,7 +667,7 @@ App::$strings["WordPress Post Settings"] = "Настройки публикац App::$strings["Wordpress Settings saved."] = "Настройки WordPress сохранены."; App::$strings["Who likes me?"] = "Кому я нравлюсь?"; App::$strings["Your account on %s will expire in a few days."] = "Ваш аккаунт на %s перестанет работать через несколько дней."; -App::$strings["Your $Productname test account is about to expire."] = "Срок действия пробного аккаунта в $Productname близок к окончанию."; +App::$strings["Your $Productname test account is about to expire."] = "Ваш тестовый аккаунт в $Productname близок к окончанию срока действия."; App::$strings["Create an account to access services and applications"] = "Создайте аккаунт для доступа к службам и приложениям"; App::$strings["Register"] = "Регистрация"; App::$strings["Logout"] = "Выход"; @@ -720,7 +720,7 @@ App::$strings["post"] = "публикация"; App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s была создана %2\$s %3\$s"; App::$strings["Click to open/close"] = "Нажмите, чтобы открыть/закрыть"; App::$strings["spoiler"] = "спойлер"; -App::$strings["View article"] = "Просмотр статей"; +App::$strings["View article"] = "Просмотр статьи"; App::$strings["View summary"] = "Просмотр резюме"; App::$strings["Different viewers will see this text differently"] = "Различные зрители увидят этот текст по-разному"; App::$strings["$1 wrote:"] = "$1 писал:"; @@ -757,8 +757,8 @@ App::$strings["This is an unsaved preview"] = "Это несохранённый App::$strings["__ctx:title__ Likes"] = "Нравится"; App::$strings["__ctx:title__ Dislikes"] = "Не нравится"; App::$strings["__ctx:title__ Agree"] = "Согласен"; -App::$strings["__ctx:title__ Disagree"] = "Против"; -App::$strings["__ctx:title__ Abstain"] = "Воздерживаюсь"; +App::$strings["__ctx:title__ Disagree"] = "Не согласен"; +App::$strings["__ctx:title__ Abstain"] = "Воздержался"; App::$strings["__ctx:title__ Attending"] = "Посещаю"; App::$strings["__ctx:title__ Not attending"] = "Не посещаю"; App::$strings["__ctx:title__ Might attend"] = "Возможно посещу"; @@ -899,11 +899,7 @@ App::$strings["__ctx:noun__ Not Attending"] = array( 1 => "Не посетят", 2 => "Не посетят", ); -App::$strings["__ctx:noun__ Undecided"] = array( - 0 => "Не решил", - 1 => "Не решили", - 2 => "Не решили", -); +App::$strings["__ctx:noun__ Undecided"] = "Не решил"; App::$strings["__ctx:noun__ Agree"] = array( 0 => "Согласен", 1 => "Согласны", @@ -1006,7 +1002,7 @@ App::$strings["Loading"] = "Загрузка"; App::$strings["@name, !forum, #tag, ?doc, content"] = "@name, !forum, #tag, ?docs, содержимое"; App::$strings["Please wait..."] = "Подождите пожалуйста ..."; App::$strings["Add Apps"] = "Добавить приложения"; -App::$strings["Arrange Apps"] = "Управление приложениями"; +App::$strings["Arrange Apps"] = "Упорядочить приложения"; App::$strings["Toggle System Apps"] = "Переключить системные приложения"; App::$strings["Calendar"] = "Календарь"; App::$strings["Articles"] = "Статьи"; @@ -1625,6 +1621,9 @@ App::$strings["Random Channel"] = "Случайный канал"; App::$strings["Invite"] = "Пригласить"; App::$strings["Features"] = "Функции"; App::$strings["Post"] = "Публикация"; +App::$strings["Profiles"] = "Редактировать профиль"; +App::$strings["Notifications"] = "Оповещения"; +App::$strings["Order Apps"] = "Порядок приложений"; App::$strings["Update"] = "Обновить"; App::$strings["Install"] = "Установить"; App::$strings["Purchase"] = "Купить"; @@ -1642,15 +1641,15 @@ App::$strings["Notification Settings"] = "Настройки уведомлен App::$strings["%s "] = ""; App::$strings["[\$Projectname:Notify] New mail received at %s"] = "[\$Projectname:Notify] Получено новое сообщение в %s"; App::$strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s отправил вам новое личное сообщение в %2\$s."; -App::$strings["%1\$s sent you %2\$s."] = "%1\$s послал вам %2\$s."; +App::$strings["%1\$s sent you %2\$s."] = "%1\$s отправил вам %2\$s."; App::$strings["a private message"] = "личное сообщение"; App::$strings["Please visit %s to view and/or reply to your private messages."] = "Пожалуйста, посетите %s для просмотра и/или ответа на ваши личные сообщения."; App::$strings["commented on"] = "прокомментировал"; App::$strings["liked"] = "понравилось"; App::$strings["disliked"] = "не понравилось"; -App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = ""; -App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = ""; -App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s%2\$s [zrl=%3\$s]ваш %4\$s[/zrl]"; +App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s %2\$s [zrl=%3\$s]%4\$s[/zrl]"; +App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s %2\$s [zrl=%3\$s]%5\$s %4\$s[/zrl]"; +App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s %2\$s [zrl=%3\$s]ваш %4\$s[/zrl]"; App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Notify] Отмодерирован комментарий к беседе #%1\$d по %2\$s"; App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Notify] Комментарий к беседе #%1\$d по %2\$s"; App::$strings["%1\$s commented on an item/conversation you have been following."] = "%1\$s прокомментировал тему / беседу за которым вы следите."; @@ -1982,7 +1981,7 @@ App::$strings["Page owner information could not be retrieved."] = "Информ App::$strings["Album not found."] = "Альбом не найден."; App::$strings["Delete Album"] = "Удалить альбом"; App::$strings["Delete Photo"] = "Удалить фотографию"; -App::$strings["Public access denied."] = "Общественный доступ запрещен."; +App::$strings["Public access denied."] = "Публичный доступ запрещен."; App::$strings["No photos selected"] = "Никакие фотографии не выбраны"; App::$strings["Access to this item is restricted."] = "Доступ к этому элементу ограничен."; App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото."; @@ -2143,7 +2142,7 @@ App::$strings["Selected channel has private message restrictions. Send failed."] App::$strings["Messages"] = "Сообщения"; App::$strings["message"] = "сообщение"; App::$strings["Message recalled."] = "Сообщение отозванно."; -App::$strings["Conversation removed."] = "Разговор удален."; +App::$strings["Conversation removed."] = "Беседа удалена."; App::$strings["Expires YYYY-MM-DD HH:MM"] = "Истекает YYYY-MM-DD HH:MM"; App::$strings["Requested channel is not in this network"] = "Запрашиваемый канал не доступен."; App::$strings["Send Private Message"] = "Отправить личное сообщение"; @@ -2156,7 +2155,7 @@ App::$strings["Delete message"] = "Удалить сообщение"; App::$strings["Delivery report"] = "Отчёт о доставке"; App::$strings["Recall message"] = "Отозвать сообщение"; App::$strings["Message has been recalled."] = "Сообщение отозванно"; -App::$strings["Delete Conversation"] = "Удалить разговор"; +App::$strings["Delete Conversation"] = "Удалить беседу"; App::$strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Безопасная связь недоступна. Вы можете попытаться ответить со страницы профиля отправителя."; App::$strings["Send Reply"] = "Отправить ответ"; App::$strings["Your message for %s (%s):"] = "Ваше сообщение для %s (%s):"; @@ -2279,7 +2278,7 @@ App::$strings["Show URL to this file"] = "Показать URL этого фай App::$strings["Show in your contacts shared folder"] = "Показать общий каталог в ваших контактах"; App::$strings["Post not found."] = "Публикация не найдена"; App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s отметил тегом %2\$s %3\$s с %4\$s"; -App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Бля бля бля Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; +App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = ""; App::$strings["Block Name"] = "Название блока"; App::$strings["Edit Block"] = "Редактировать блок"; App::$strings["Item is not editable"] = "Элемент нельзя редактировать"; @@ -2608,6 +2607,7 @@ App::$strings["Only allow new member registrations with an invitation code. Abov App::$strings["Minimum age"] = "Минимальный возраст"; App::$strings["Minimum age (in years) for who may register on this site."] = "Минимальный возраст (в годах) для регистрации на этом сайте."; App::$strings["Which best describes the types of account offered by this hub?"] = "Как лучше описать тип учётных записей предлагаемых на этом хабе?"; +App::$strings["This is displayed on the public server site list."] = "Это отображается в списке общедоступных серверов."; App::$strings["Register text"] = "Текст регистрации"; App::$strings["Will be displayed prominently on the registration page."] = "Будет отображаться на странице регистрации на видном месте."; App::$strings["Site homepage to show visitors (default: login box)"] = "Домашняя страница, которая будет показываться посетителям сайт (по умочанию - форма входа)."; @@ -2659,11 +2659,11 @@ App::$strings["Maximum Load Average"] = "Максимальная средняя App::$strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Максимальная нагрузка системы для откладывания процессов опроса и доставки - по умолчанию 50."; App::$strings["Expiration period in days for imported (grid/network) content"] = "Срок хранения в днях для импортированного содержимого (из матрицы / сети)."; App::$strings["0 for no expiration of imported content"] = "0 для постоянного хранения импортированного содержимого"; -App::$strings["Do not expire any posts which have comments less than this many days ago"] = "Продлевать строк хранения для любых публикаций, которые имею комментарии возрастом менее этого значения"; +App::$strings["Do not expire any posts which have comments less than this many days ago"] = "Продлевать строк хранения для любых публикаций, которые имеют комментарии возрастом менее этого значения"; App::$strings["Public servers: Optional landing (marketing) webpage for new registrants"] = "Публичные серверы: необязательная маркетинговая лэндинг-страница для новых пользователей"; App::$strings["Create this page first. Default is %s/register"] = "Создать эту страницу первой. По умолчанию %s/register"; App::$strings["Page to display after creating a new channel"] = "Страница для показа после создания нового канала"; -App::$strings["Default: profiles"] = "По умолчанию: профили"; +App::$strings["Default: profiles"] = "По умолчанию: profiles"; App::$strings["Optional: site location"] = "Необязательно: место размещения сайта"; App::$strings["Region or country"] = "Регион или страна"; App::$strings["Log settings updated."] = "Настройки журнала обновлены."; @@ -2798,7 +2798,7 @@ App::$strings["Uncensor"] = "Нецензурировать"; App::$strings["Allow Code"] = "Разрешить код"; App::$strings["Disallow Code"] = "Запретить код"; App::$strings["UID"] = ""; -App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Выбранные каналы будут удалены!\n\nВсё что было опубликовано в этих каналах на этом сайте будет удалено навсегда!\n\nВы уверены?"; +App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Этот аккаунт {0} будет удалён!\n\nВсё что им было опубликовано на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Канал {0} будет удалён!\n\nВсё что было опубликовано в этом канале на этом сайте будет удалено навсегда!\n\nВы уверены?"; App::$strings["Token verification failed."] = "Не удалось выполнить проверку токена."; App::$strings["Email Verification Required"] = "Требуется проверка адреса email"; @@ -3113,7 +3113,7 @@ App::$strings["Visit %s's profile [%s]"] = "Посетить %s ​​профи App::$strings["View Connections"] = "Просмотр контактов"; App::$strings["Authentication failed."] = "Ошибка аутентификации."; App::$strings["Your real name is recommended."] = "Рекомендуется использовать ваше настоящее имя."; -App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Иван Иванов\", \"Оксана и Кони\", \"Футболист\", \"Тимур и его команда\""; +App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Примеры: \"Иван Иванов\", \"Оксана и кони\", \"Футбол\", \"Тимур и его команда\""; App::$strings["This will be used to create a unique network address (like an email address)."] = "Это будет использовано для создания уникального сетевого адреса (наподобие email)."; App::$strings["Allowed characters are a-z 0-9, - and _"] = "Разрешённые символы a-z 0-9, - и _"; App::$strings["Channel name"] = "Название канала"; -- cgit v1.2.3 From 6ecd31a715c3d4fb5f2073f376cb9509bc6427d6 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 22 Aug 2018 13:30:16 -0700 Subject: tweak archive widget for articles --- Zotlabs/Module/Articles.php | 17 +++++++++++++++-- Zotlabs/Widget/Archive.php | 6 +++--- include/items.php | 16 ++++++++++++++-- view/pdl/mod_articles.pdl | 1 + 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Module/Articles.php b/Zotlabs/Module/Articles.php index 284868241..e1f0b4ab0 100644 --- a/Zotlabs/Module/Articles.php +++ b/Zotlabs/Module/Articles.php @@ -51,6 +51,8 @@ class Articles extends \Zotlabs\Web\Controller { $sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); } + $datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : ''); + $datequery2 = ((x($_GET,'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : ''); $which = argv(1); @@ -143,10 +145,21 @@ class Articles extends \Zotlabs\Web\Controller { $sql_item = "and item.id = " . intval($r[0]['iid']) . " "; } } - + if($datequery) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); + $order = 'post'; + } + if($datequery2) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); + } + + if($datequery || $datequery2) { + $sql_extra2 .= " and item.item_thread_top != 0 "; + } + $r = q("select * from item where item.uid = %d and item_type = %d - $sql_extra $sql_item order by item.created desc $pager_sql", + $sql_extra $sql_extra2 $sql_item order by item.created desc $pager_sql", intval($owner), intval(ITEM_TYPE_ARTICLE) ); diff --git a/Zotlabs/Widget/Archive.php b/Zotlabs/Widget/Archive.php index c151ca563..9adaac38f 100644 --- a/Zotlabs/Widget/Archive.php +++ b/Zotlabs/Widget/Archive.php @@ -22,12 +22,12 @@ class Archive { return ''; $wall = ((array_key_exists('wall', $arr)) ? intval($arr['wall']) : 0); + $wall = ((array_key_exists('articles', $arr)) ? 2 : $wall); + $style = ((array_key_exists('style', $arr)) ? $arr['style'] : 'select'); $showend = ((get_pconfig($uid,'system','archive_show_end_date')) ? true : false); $mindate = get_pconfig($uid,'system','archive_mindate'); - $visible_years = get_pconfig($uid,'system','archive_visible_years'); - if(! $visible_years) - $visible_years = 5; + $visible_years = get_pconfig($uid,'system','archive_visible_years',5); $url = z_root() . '/' . \App::$cmd; diff --git a/include/items.php b/include/items.php index ee7bfd5bc..eb7b9ef78 100755 --- a/include/items.php +++ b/include/items.php @@ -3782,18 +3782,30 @@ function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL, $force = false) { * * @param int $uid * @param boolean $wall (optional) default false + * hack: $wall = 2 selects articles * @return string|boolean date string, otherwise false */ function first_post_date($uid, $wall = false) { - $wall_sql = (($wall) ? " and item_wall = 1 " : "" ); - $item_normal = item_normal(); + $wall_sql = (($wall === 1) ? " and item_wall = 1 " : "" ); + if($wall === 2) { + $wall_sql = " and item_type = 7 "; + $item_normal = " and item.item_hidden = 0 and item.item_type = 7 and item.item_deleted = 0 + and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0 + and item.item_blocked = 0 "; + + } + else { + $item_normal = item_normal(); + } + $r = q("select id, created from item where uid = %d and id = parent $item_normal $wall_sql order by created asc limit 1", intval($uid) ); + if($r) { // logger('first_post_date: ' . $r[0]['id'] . ' ' . $r[0]['created'], LOGGER_DATA); return substr(datetime_convert('',date_default_timezone_get(),$r[0]['created']),0,10); diff --git a/view/pdl/mod_articles.pdl b/view/pdl/mod_articles.pdl index b823787f4..3e77ced4c 100644 --- a/view/pdl/mod_articles.pdl +++ b/view/pdl/mod_articles.pdl @@ -1,4 +1,5 @@ [region=aside] +[widget=archive][var=articles]1[/var][/widget] [widget=categories][var=articles]1[/var][/widget] [widget=tasklist][/widget] [widget=notes][/widget] -- cgit v1.2.3 From 398e42acb52b8b2d83daae9396737fba4a904314 Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Thu, 23 Aug 2018 20:53:24 -0400 Subject: fix exclusion of redmatrix theme --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b001b6b27..fa09c4ee6 100755 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,7 @@ pageheader.html doc/SiteTOS.md # themes except for redbasic view/theme/* -! view/theme/redbasic +!view/theme/redbasic # site theme schemas view/theme/redbasic/schema/default.php # Doxygen API documentation, run 'doxygen util/Doxyfile' to generate it -- cgit v1.2.3 From 2893f7d4810de99a989f7d36d041a120fafac029 Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Thu, 23 Aug 2018 23:54:18 -0400 Subject: Get full page of items --- Zotlabs/Module/Network.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index ca0ec7844..9eedf113d 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -510,7 +510,7 @@ class Network extends \Zotlabs\Web\Controller { if($load) { // Fetch a page full of parent items for this page - $r = q("SELECT item.parent AS item_id FROM item + $r = q("SELECT DISTINCT(item.parent) AS item_id FROM item left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) $net_query WHERE true $uids $item_thread_top $item_normal @@ -524,7 +524,7 @@ class Network extends \Zotlabs\Web\Controller { else { // this is an update - $r = q("SELECT item.parent AS item_id FROM item + $r = q("SELECT DISTINCT(item.parent) AS item_id FROM item left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) $net_query WHERE true $uids $item_normal_update $simple_update -- cgit v1.2.3 From a66c43166af5b31a0e2dbfc148cd5ecd73fded51 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 23 Aug 2018 21:01:28 -0700 Subject: first_post_date() (used by archive widget) - trigger the query options off of the active module rather than rely on passed parameters --- include/items.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/include/items.php b/include/items.php index eb7b9ef78..2990d519e 100755 --- a/include/items.php +++ b/include/items.php @@ -3781,33 +3781,34 @@ function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL, $force = false) { * @brief Return the first post date. * * @param int $uid - * @param boolean $wall (optional) default false - * hack: $wall = 2 selects articles + * @param boolean $wall (optional) no longer used * @return string|boolean date string, otherwise false */ function first_post_date($uid, $wall = false) { - $wall_sql = (($wall === 1) ? " and item_wall = 1 " : "" ); - if($wall === 2) { - $wall_sql = " and item_type = 7 "; - $item_normal = " and item.item_hidden = 0 and item.item_type = 7 and item.item_deleted = 0 - and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0 - and item.item_blocked = 0 "; + $sql_extra = ''; + switch(\App::$module) { + case 'articles': + $sql_extra .= " and item_type = 7 "; + $item_normal = " and item.item_hidden = 0 and item.item_type = 7 and item.item_deleted = 0 + and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0 + and item.item_blocked = 0 "; + break; + case 'channel': + $sql_extra = " and item_wall = 1 "; + default: + $item_normal = item_normal(); + break; } - else { - $item_normal = item_normal(); - } - $r = q("select id, created from item - where uid = %d and id = parent $item_normal $wall_sql + where uid = %d and id = parent $item_normal $sql_extra order by created asc limit 1", intval($uid) ); if($r) { -// logger('first_post_date: ' . $r[0]['id'] . ' ' . $r[0]['created'], LOGGER_DATA); return substr(datetime_convert('',date_default_timezone_get(),$r[0]['created']),0,10); } -- cgit v1.2.3 From 7018da3f127e9d2abdb359516d079fc038a4c2a3 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 23 Aug 2018 22:44:22 -0700 Subject: code cleanup --- include/channel.php | 35 ++++++++++++++++++++-------------- include/items.php | 54 ++++++++++++++++++++++++++++++----------------------- 2 files changed, 52 insertions(+), 37 deletions(-) diff --git a/include/channel.php b/include/channel.php index 82d500e83..7f49deb2e 100644 --- a/include/channel.php +++ b/include/channel.php @@ -4,6 +4,13 @@ * @brief Channel related functions. */ +use Zotlabs\Access\PermissionRoles; +use Zotlabs\Access\PermissionLimits; +use Zotlabs\Access\Permissions; +use Zotlabs\Daemon\Master; +use Zotlabs\Lib\System; +use Zotlabs\Render\Comanche; + require_once('include/zot.php'); require_once('include/crypto.php'); require_once('include/menu.php'); @@ -236,7 +243,7 @@ function create_identity($arr) { $role_permissions = null; if(array_key_exists('permissions_role',$arr) && $arr['permissions_role']) { - $role_permissions = \Zotlabs\Access\PermissionRoles::role_perms($arr['permissions_role']); + $role_permissions = PermissionRoles::role_perms($arr['permissions_role']); } if($role_permissions && array_key_exists('directory_publish',$role_permissions)) @@ -307,7 +314,7 @@ function create_identity($arr) { $perm_limits = site_default_perms(); foreach($perm_limits as $p => $v) - \Zotlabs\Access\PermissionLimits::Set($r[0]['channel_id'],$p,$v); + PermissionLimits::Set($r[0]['channel_id'],$p,$v); if($role_permissions && array_key_exists('perms_auto',$role_permissions)) set_pconfig($r[0]['channel_id'],'system','autoperms',intval($role_permissions['perms_auto'])); @@ -383,7 +390,7 @@ function create_identity($arr) { $myperms = ((array_key_exists('perms_connect',$role_permissions)) ? $role_permissions['perms_connect'] : array()); } else { - $x = \Zotlabs\Access\PermissionRoles::role_perms('social'); + $x = PermissionRoles::role_perms('social'); $myperms = $x['perms_connect']; } @@ -399,7 +406,7 @@ function create_identity($arr) { ] ); - $x = \Zotlabs\Access\Permissions::FilledPerms($myperms); + $x = Permissions::FilledPerms($myperms); foreach($x as $k => $v) { set_abconfig($newuid,$hash,'my_perms',$k,$v); } @@ -416,7 +423,7 @@ function create_identity($arr) { $autoperms = intval($role_permissions['perms_auto']); set_pconfig($newuid,'system','autoperms',$autoperms); if($autoperms) { - $x = \Zotlabs\Access\Permissions::FilledPerms($role_permissions['perms_connect']); + $x = Permissions::FilledPerms($role_permissions['perms_connect']); foreach($x as $k => $v) { set_pconfig($newuid,'autoperms',$k,$v); } @@ -482,7 +489,7 @@ function create_identity($arr) { */ call_hooks('create_identity', $newuid); - Zotlabs\Daemon\Master::Summon(array('Directory', $ret['channel']['channel_id'])); + Master::Summon(array('Directory', $ret['channel']['channel_id'])); } $ret['success'] = true; @@ -583,7 +590,7 @@ function change_channel_keys($channel) { xchan_change_key($oldxchan,$newxchan,$stored); - Zotlabs\Daemon\Master::Summon(array('Notifier', 'keychange', $channel['channel_id'])); + Master::Summon([ 'Notifier', 'keychange', $channel['channel_id'] ]); $ret['success'] = true; return $ret; @@ -666,7 +673,7 @@ function channel_change_address($channel,$new_address) { } } - Zotlabs\Daemon\Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); + Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); $ret['success'] = true; return $ret; @@ -759,7 +766,7 @@ function identity_basic_export($channel_id, $sections = null) { 'project' => PLATFORM_NAME, 'version' => STD_VERSION, 'database' => DB_UPDATE_VERSION, - 'server_role' => Zotlabs\Lib\System::get_server_role() + 'server_role' => System::get_server_role() ]; /* @@ -1425,7 +1432,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true, $zcard = fa } $menublock = get_pconfig($profile['uid'],'system','channel_menublock'); if ($menublock && (! $block)) { - $comanche = new Zotlabs\Render\Comanche(); + $comanche = new Comanche(); $channel_menu .= $comanche->block($menublock); } @@ -1701,7 +1708,7 @@ function zid_init() { dbesc($tmp_str) ); if(! $r) { - Zotlabs\Daemon\Master::Summon(array('Gprobe',bin2hex($tmp_str))); + Master::Summon(array('Gprobe',bin2hex($tmp_str))); } if($r && remote_channel() && remote_channel() === $r[0]['hubloc_hash']) return; @@ -1907,7 +1914,7 @@ function is_public_profile() { $channel = App::get_channel(); if($channel) { - $perm = \Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'view_profile'); + $perm = PermissionLimits::Get($channel['channel_id'],'view_profile'); if($perm == PERMS_PUBLIC) return true; } @@ -2545,7 +2552,7 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { dbesc($channel['channel_hash']) ); - Zotlabs\Daemon\Master::Summon(array('Notifier','purge_all',$channel_id)); + Master::Summon(array('Notifier','purge_all',$channel_id)); } @@ -2658,7 +2665,7 @@ function channel_remove($channel_id, $local = true, $unset_session = false) { @rrmdir($f); } - Zotlabs\Daemon\Master::Summon(array('Directory',$channel_id)); + Master::Summon([ 'Directory', $channel_id ]); if($channel_id == local_channel() && $unset_session) { App::$session->nuke(); diff --git a/include/items.php b/include/items.php index 2990d519e..b0f6a89cf 100755 --- a/include/items.php +++ b/include/items.php @@ -4,7 +4,13 @@ * @brief Items related functions. */ -use Zotlabs\Lib as Zlib; +use Zotlabs\Lib\Enotify; +use Zotlabs\Lib\MarkdownSoap; +use Zotlabs\Lib\MessageFilter; +use Zotlabs\Lib\IConfig; +use Zotlabs\Access\PermissionLimits; +use Zotlabs\Access\AccessList; +use Zotlabs\Daemon\Master; require_once('include/bbcode.php'); require_once('include/oembed.php'); @@ -379,7 +385,7 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) { return $ret; } - $arr['public_policy'] = ((array_key_exists('public_policy',$arr)) ? escape_tags($arr['public_policy']) : map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'view_stream'),true)); + $arr['public_policy'] = ((array_key_exists('public_policy',$arr)) ? escape_tags($arr['public_policy']) : map_scope(PermissionLimits::Get($channel['channel_id'],'view_stream'),true)); if($arr['public_policy']) $arr['item_private'] = 1; @@ -407,7 +413,7 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) { $arr['deny_gid'] = $channel['channel_deny_gid']; } - $arr['comment_policy'] = map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'post_comments')); + $arr['comment_policy'] = map_scope(PermissionLimits::Get($channel['channel_id'],'post_comments')); if ((! $arr['plink']) && (intval($arr['item_thread_top']))) { $arr['plink'] = substr(z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . urlencode($arr['mid']),0,190); @@ -446,7 +452,7 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) { } if($post_id && $deliver) { - Zotlabs\Daemon\Master::Summon(array('Notifier','activity',$post_id)); + Master::Summon([ 'Notifier','activity',$post_id ]); } $ret['success'] = true; @@ -744,7 +750,7 @@ function get_item_elements($x,$allow_code = false) { // was generated on the escaped content. if($arr['mimetype'] === 'text/markdown') - $arr['body'] = \Zotlabs\Lib\MarkdownSoap::unescape($arr['body']); + $arr['body'] = MarkdownSoap::unescape($arr['body']); if(array_key_exists('revision',$x)) { @@ -1003,7 +1009,7 @@ function encode_item($item,$mirror = false) { ); if($r) - $comment_scope = \Zotlabs\Access\PermissionLimits::Get($item['uid'],'post_comments'); + $comment_scope = PermissionLimits::Get($item['uid'],'post_comments'); else $comment_scope = 0; @@ -2439,7 +2445,7 @@ function send_status_notifications($post_id,$item) { return; - Zlib\Enotify::submit(array( + Enotify::submit(array( 'type' => NOTIFY_COMMENT, 'from_xchan' => $item['author_xchan'], 'to_xchan' => $r[0]['channel_hash'], @@ -2532,7 +2538,7 @@ function tag_deliver($uid, $item_id) { $verb = urldecode(substr($item['verb'],strpos($item['verb'],'#')+1)); if($poke_notify) { - Zlib\Enotify::submit(array( + Enotify::submit(array( 'to_xchan' => $u[0]['channel_hash'], 'from_xchan' => $item['author_xchan'], 'type' => NOTIFY_POKE, @@ -2686,7 +2692,7 @@ function tag_deliver($uid, $item_id) { * Kill two birds with one stone. As long as we're here, send a mention notification. */ - Zlib\Enotify::submit(array( + Enotify::submit(array( 'to_xchan' => $u[0]['channel_hash'], 'from_xchan' => $item['author_xchan'], 'type' => NOTIFY_TAGSELF, @@ -2988,7 +2994,7 @@ function start_delivery_chain($channel, $item, $item_id, $parent) { $private = (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 1 : 0); - $new_public_policy = map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'view_stream'),true); + $new_public_policy = map_scope(PermissionLimits::Get($channel['channel_id'],'view_stream'),true); if((! $private) && $new_public_policy) $private = 1; @@ -3031,7 +3037,7 @@ function start_delivery_chain($channel, $item, $item_id, $parent) { dbesc($channel['channel_deny_gid']), intval($private), dbesc($new_public_policy), - dbesc(map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'post_comments'))), + dbesc(map_scope(PermissionLimits::Get($channel['channel_id'],'post_comments'))), dbesc($title), dbesc($body), intval($item_wall), @@ -3040,7 +3046,7 @@ function start_delivery_chain($channel, $item, $item_id, $parent) { ); if($r) - Zotlabs\Daemon\Master::Summon(array('Notifier','tgroup',$item_id)); + Master::Summon([ 'Notifier','tgroup',$item_id ]); else { logger('start_delivery_chain: failed to update item'); // reset the source xchan to prevent loops @@ -3105,7 +3111,7 @@ function check_item_source($uid, $item) { return true; } - if (\Zotlabs\Lib\MessageFilter::evaluate($item, $r[0]['src_patt'], EMPTY_STR)) { + if (MessageFilter::evaluate($item, $r[0]['src_patt'], EMPTY_STR)) { logger('source: text filter success'); return true; } @@ -3128,7 +3134,7 @@ function post_is_importable($item,$abook) { if(! ($abook['abook_incl'] || $abook['abook_excl'])) return true; - return \Zotlabs\Lib\MessageFilter::evaluate($item,$abook['abook_incl'],$abook['abook_excl']); + return MessageFilter::evaluate($item,$abook['abook_incl'],$abook['abook_excl']); } @@ -3264,7 +3270,7 @@ function mail_store($arr) { 'otype' => 'mail' ); - Zlib\Enotify::submit($notif_params); + Enotify::submit($notif_params); } if($arr['conv_guid']) { @@ -3547,8 +3553,9 @@ function drop_items($items,$interactive = false,$stage = DROPITEM_NORMAL,$force // multiple threads may have been deleted, send an expire notification - if($uid) - Zotlabs\Daemon\Master::Summon(array('Notifier','expire',$uid)); + if($uid) { + Master::Summon([ 'Notifier','expire',$uid ]); + } } @@ -3656,8 +3663,9 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = fal // We'll rely on the undocumented behaviour that DROPITEM_PHASE1 is (hopefully) only // set if we know we're going to send delete notifications out to others. - if((intval($item['item_wall']) && ($stage != DROPITEM_PHASE2)) || ($stage == DROPITEM_PHASE1)) - Zotlabs\Daemon\Master::Summon(array('Notifier','drop',$notify_id)); + if((intval($item['item_wall']) && ($stage != DROPITEM_PHASE2)) || ($stage == DROPITEM_PHASE1)) { + Master::Summon([ 'Notifier','drop',$notify_id ]); + } goaway(z_root() . '/' . $_SESSION['return_url']); } @@ -3788,7 +3796,7 @@ function first_post_date($uid, $wall = false) { $sql_extra = ''; - switch(\App::$module) { + switch(App::$module) { case 'articles': $sql_extra .= " and item_type = 7 "; $item_normal = " and item.item_hidden = 0 and item.item_type = 7 and item.item_deleted = 0 @@ -4406,7 +4414,7 @@ function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remo // sixteen bytes of the mid - which makes the link portable and not quite as daunting // as the entire mid. If it were the post_id the link would be less portable. - \Zotlabs\Lib\IConfig::Set( + IConfig::Set( intval($post_id), 'system', $page_type, @@ -4539,7 +4547,7 @@ function send_profile_photo_activity($channel,$photo,$profile) { $arr['body'] = sprintf($t,$channel['channel_name'],$ptext) . "\n\n" . $ltext; - $acl = new Zotlabs\Access\AccessList($channel); + $acl = new AccessList($channel); $x = $acl->get(); $arr['allow_cid'] = $x['allow_cid']; @@ -4770,7 +4778,7 @@ function item_create_edit_activity($post) { } } - \Zotlabs\Daemon\Master::Summon(array('Notifier', 'edit_activity', $post_id)); + Master::Summon([ 'Notifier', 'edit_activity', $post_id ]); } /** -- cgit v1.2.3 From c16fda1cb6fef84788d3045b0edff367d2978c98 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:16:05 +0200 Subject: Update wiki.tpl --- view/tpl/wiki.tpl | 856 +++++++++++++++++++++++++++--------------------------- 1 file changed, 428 insertions(+), 428 deletions(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index 6ca4b0c77..b7bb80dfd 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -1,476 +1,476 @@

-
-
- [{{$typename}}]  - {{if $showPageControls}} - - {{/if}} - - - -
-

- {{$wikiheaderName}}: - {{$wikiheaderPage}} -

-
-
- -
- -
-
- {{if !$mimeType || $mimeType == 'text/markdown'}} -
- {{else}} -
- -
- {{/if}} -
-
-
- {{$renderedContent}} -
-
-
-
-
- {{if $showPageControls}} - - {{/if}} -
-
+
+
+ [{{$typename}}]  + {{if $showPageControls}} + + {{/if}} + + + +
+

+ {{$wikiheaderName}}: + {{$wikiheaderPage}} +

+
+
+ +
+ +
+
+ {{if !$mimeType || $mimeType == 'text/markdown'}} +
+ {{else}} +
+ +
+ {{/if}} +
+
+
+ {{$renderedContent}} +
+
+
+
+
+ {{if $showPageControls}} + + {{/if}} +
+
{{$wikiModal}} + $(window).resize(function () { + if($('main').hasClass('fullscreen')) { + adjustFullscreenEditorHeight(); + } + }); + \ No newline at end of file -- cgit v1.2.3 From 732ce25d7fb78caf23bfe8f339bd0f0708279979 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:17:25 +0200 Subject: Update nwiki_page_history.tpl --- view/tpl/nwiki_page_history.tpl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/view/tpl/nwiki_page_history.tpl b/view/tpl/nwiki_page_history.tpl index b1c6c9284..6926cca2d 100644 --- a/view/tpl/nwiki_page_history.tpl +++ b/view/tpl/nwiki_page_history.tpl @@ -43,17 +43,17 @@ {{foreach $pageHistory as $commit}} - +
Date{{$commit.date}}
{{$date_lbl}}{{$commit.date}} - {{if $permsWrite}} - + {{if $permsWrite}} +

- {{/if}} - + {{/if}} +
{{$name_lbl}}{{$commit.name}}
{{$msg_label}}{{$commit.title}}
- {{/foreach}} - + {{/foreach}} + \ No newline at end of file -- cgit v1.2.3 From 67a9dd84975d4689a1046074f368cc0543100324 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:20:00 +0200 Subject: Update NativeWikiPage.php --- Zotlabs/Lib/NativeWikiPage.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Lib/NativeWikiPage.php b/Zotlabs/Lib/NativeWikiPage.php index 919c51276..f129217c5 100644 --- a/Zotlabs/Lib/NativeWikiPage.php +++ b/Zotlabs/Lib/NativeWikiPage.php @@ -556,7 +556,10 @@ class NativeWikiPage { '$pageHistory' => $pageHistory['history'], '$permsWrite' => $arr['permsWrite'], '$name_lbl' => t('Name'), - '$msg_label' => t('Message','wiki_history') + '$msg_label' => t('Message','wiki_history'), + '$date_lbl' => t('Date'), + '$revert_btn' => t('Revert'), + '$compare_btn' => t('Compare') )); } @@ -692,4 +695,4 @@ class NativeWikiPage { return $o; } -} +} \ No newline at end of file -- cgit v1.2.3 From 308dda1587bc175cab41bc4a02dae8ec568668b3 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:21:57 +0200 Subject: Update Wiki.php --- Zotlabs/Module/Wiki.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index 322a3933c..548a83c22 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -384,6 +384,8 @@ class Wiki extends \Zotlabs\Web\Controller { '$modalerrorlist' => t('Error getting album list'), '$modalerrorlink' => t('Error getting photo link'), '$modalerroralbum' => t('Error getting album'), + '$view_lbl' => t('View'), + '$history_lbl' => t('History') )); if($p['pageMimeType'] === 'text/markdown') -- cgit v1.2.3 From 88ebcb56e7d1f70a594f3f11b0d209e084a3521a Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:23:08 +0200 Subject: Update Wiki_page_history.php --- Zotlabs/Widget/Wiki_page_history.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Widget/Wiki_page_history.php b/Zotlabs/Widget/Wiki_page_history.php index dcec9a037..0f865f12d 100644 --- a/Zotlabs/Widget/Wiki_page_history.php +++ b/Zotlabs/Widget/Wiki_page_history.php @@ -20,7 +20,10 @@ class Wiki_page_history { '$pageHistory' => $pageHistory['history'], '$permsWrite' => $arr['permsWrite'], '$name_lbl' => t('Name'), - '$msg_label' => t('Message','wiki_history') + '$msg_label' => t('Message','wiki_history'), + '$date_lbl' => t('Date'), + '$revert_btn' => t('Revert'), + '$compare_btn' => t('Compare') )); } -- cgit v1.2.3 From e78a4d61d85bac570a63086ec1af68eee3c9c9b0 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:25:26 +0200 Subject: Update NativeWikiPage.php --- Zotlabs/Lib/NativeWikiPage.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Lib/NativeWikiPage.php b/Zotlabs/Lib/NativeWikiPage.php index f129217c5..d4875bbaf 100644 --- a/Zotlabs/Lib/NativeWikiPage.php +++ b/Zotlabs/Lib/NativeWikiPage.php @@ -557,9 +557,9 @@ class NativeWikiPage { '$permsWrite' => $arr['permsWrite'], '$name_lbl' => t('Name'), '$msg_label' => t('Message','wiki_history'), - '$date_lbl' => t('Date'), - '$revert_btn' => t('Revert'), - '$compare_btn' => t('Compare') + '$date_lbl' => t('Date'), + '$revert_btn' => t('Revert'), + '$compare_btn' => t('Compare') )); } @@ -695,4 +695,4 @@ class NativeWikiPage { return $o; } -} \ No newline at end of file +} -- cgit v1.2.3 From c9b80a3612755628cbb6af57458006dd39cf0f5f Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:26:50 +0200 Subject: Update Wiki.php --- Zotlabs/Module/Wiki.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index 548a83c22..25ecb6a6a 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -384,8 +384,8 @@ class Wiki extends \Zotlabs\Web\Controller { '$modalerrorlist' => t('Error getting album list'), '$modalerrorlink' => t('Error getting photo link'), '$modalerroralbum' => t('Error getting album'), - '$view_lbl' => t('View'), - '$history_lbl' => t('History') + '$view_lbl' => t('View'), + '$history_lbl' => t('History') )); if($p['pageMimeType'] === 'text/markdown') -- cgit v1.2.3 From 42c5e986707ffaa660b4fda9f23edbae9a3cb639 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:27:20 +0200 Subject: Update Wiki_page_history.php --- Zotlabs/Widget/Wiki_page_history.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Widget/Wiki_page_history.php b/Zotlabs/Widget/Wiki_page_history.php index 0f865f12d..dbb322dc3 100644 --- a/Zotlabs/Widget/Wiki_page_history.php +++ b/Zotlabs/Widget/Wiki_page_history.php @@ -21,9 +21,9 @@ class Wiki_page_history { '$permsWrite' => $arr['permsWrite'], '$name_lbl' => t('Name'), '$msg_label' => t('Message','wiki_history'), - '$date_lbl' => t('Date'), - '$revert_btn' => t('Revert'), - '$compare_btn' => t('Compare') + '$date_lbl' => t('Date'), + '$revert_btn' => t('Revert'), + '$compare_btn' => t('Compare') )); } -- cgit v1.2.3 From ff1a0d217ff769a2e6e622915cb7e9d9eff327b5 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:29:25 +0200 Subject: Update wiki.tpl --- view/tpl/wiki.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index b7bb80dfd..55e44a0c5 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -473,4 +473,4 @@ adjustFullscreenEditorHeight(); } }); - \ No newline at end of file + -- cgit v1.2.3 From 6767ff5434a17a04cfcaa14eedd616abb0bf80c9 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:30:58 +0200 Subject: Revert "Update wiki.tpl" This reverts commit ff1a0d217ff769a2e6e622915cb7e9d9eff327b5 --- view/tpl/wiki.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index 55e44a0c5..b7bb80dfd 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -473,4 +473,4 @@ adjustFullscreenEditorHeight(); } }); - + \ No newline at end of file -- cgit v1.2.3 From 44f639f371340e086843e655f7e47e220c5665f2 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:31:47 +0200 Subject: Revert "Update wiki.tpl" This reverts commit c16fda1cb6fef84788d3045b0edff367d2978c98 --- view/tpl/wiki.tpl | 856 +++++++++++++++++++++++++++--------------------------- 1 file changed, 428 insertions(+), 428 deletions(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index b7bb80dfd..6ca4b0c77 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -1,476 +1,476 @@
-
-
- [{{$typename}}]  - {{if $showPageControls}} - - {{/if}} - - - -
-

- {{$wikiheaderName}}: - {{$wikiheaderPage}} -

-
-
- -
- -
-
- {{if !$mimeType || $mimeType == 'text/markdown'}} -
- {{else}} -
- -
- {{/if}} -
-
-
- {{$renderedContent}} -
-
-
-
-
- {{if $showPageControls}} - - {{/if}} -
-
+
+
+ [{{$typename}}]  + {{if $showPageControls}} + + {{/if}} + + + +
+

+ {{$wikiheaderName}}: + {{$wikiheaderPage}} +

+
+
+ +
+ +
+
+ {{if !$mimeType || $mimeType == 'text/markdown'}} +
+ {{else}} +
+ +
+ {{/if}} +
+
+
+ {{$renderedContent}} +
+
+
+
+
+ {{if $showPageControls}} + + {{/if}} +
+
{{$wikiModal}} \ No newline at end of file + $(window).resize(function () { + if($('main').hasClass('fullscreen')) { + adjustFullscreenEditorHeight(); + } + }); + -- cgit v1.2.3 From f5f6ec3d71acb3e0488386819d5060e59331ec23 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sat, 25 Aug 2018 21:34:58 +0200 Subject: Update wiki.tpl --- view/tpl/wiki.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index 6ca4b0c77..0f725749f 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -42,8 +42,8 @@
-- cgit v1.2.3 From a0c2bbac9d96a5461b65b5e0ff733a2fcd193dd4 Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Sun, 26 Aug 2018 23:26:10 -0400 Subject: Add hook to extend conv_item cog dropdown menu --- Zotlabs/Lib/ThreadItem.php | 5 +++++ view/tpl/conv_item.tpl | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php index ed78ae00b..f8a7366f8 100644 --- a/Zotlabs/Lib/ThreadItem.php +++ b/Zotlabs/Lib/ThreadItem.php @@ -325,6 +325,10 @@ class ThreadItem { $has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false); + $dropdown_extras_arr = [ 'item' => $item , 'dropdown_extras' => '' ]; + call_hooks('dropdown_extras',$dropdown_extras_arr); + $dropdown_extras = $dropdown_extras_arr['dropdown_extras']; + $tmp_item = array( 'template' => $this->get_template(), 'mode' => $mode, @@ -404,6 +408,7 @@ class ThreadItem { 'addtocal' => (($has_event) ? t('Add to Calendar') : ''), 'drop' => $drop, 'multidrop' => ((feature_enabled($conv->get_profile_owner(),'multi_delete')) ? $multidrop : ''), + 'dropdown_extras' => $dropdown_extras, // end toolbar buttons 'unseen_comments' => $unseen_comments, diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index ac6af40e9..05c3d7ae0 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -175,6 +175,10 @@ {{if $item.drop.dropping}} {{$item.drop.delete}} {{/if}} + {{if $item.dropdown_extras}} + + {{$item.dropdown_extras}} + {{/if}} {{if $item.edpost && $item.dreport}} {{$item.dreport}} -- cgit v1.2.3 From 9367e9fe5a0125bf4c2f77909f2789c9dcd41e1e Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 26 Aug 2018 23:00:31 -0700 Subject: Change main router request variable from 'q' to 'req'. This is necessary to implement search in the twitter api addon, because twitter requires use of the variable 'q'. --- .htaccess | 6 +++--- Zotlabs/Lib/Libzotdir.php | 2 +- Zotlabs/Module/Connections.php | 2 +- Zotlabs/Module/Directory.php | 2 +- Zotlabs/Module/Photos.php | 4 ++-- Zotlabs/Module/Rpost.php | 2 +- Zotlabs/Module/Viewconnections.php | 2 +- boot.php | 8 ++++---- include/dir_fns.php | 2 +- include/text.php | 4 ++-- library/OAuth1.php | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.htaccess b/.htaccess index 3420313a5..7a265eda1 100644 --- a/.htaccess +++ b/.htaccess @@ -20,15 +20,15 @@ AddType audio/ogg .oga RewriteRule "(^|/)\.git" - [F] RewriteRule "(^|/)store" - [F] - # Rewrite current-style URLs of the form 'index.php?q=x'. + # Rewrite current-style URLs of the form 'index.php?req=x'. # Also place auth information into REMOTE_USER for sites running # in CGI mode. RewriteCond %{REQUEST_URI} ^/\.well\-known/.* - RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] + RewriteRule ^(.*)$ index.php?req=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] + RewriteRule ^(.*)$ index.php?req=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php index 91d089c86..81a5b3319 100644 --- a/Zotlabs/Lib/Libzotdir.php +++ b/Zotlabs/Lib/Libzotdir.php @@ -152,7 +152,7 @@ class Libzotdir { unset($tmp['pubforums']); unset($tmp['global']); unset($tmp['safe']); - unset($tmp['q']); + unset($tmp['req']); unset($tmp['f']); $forumsurl = $url . http_build_query($tmp) . $suggest; diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php index cecada769..48b59cb8c 100644 --- a/Zotlabs/Module/Connections.php +++ b/Zotlabs/Module/Connections.php @@ -326,7 +326,7 @@ class Connections extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $o .= replace_macros(get_markup_template('connections.tpl'),array( '$header' => t('Connections') . (($head) ? ': ' . $head : ''), '$tabs' => $tabs, diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php index 8a7c6baf6..59b832a0f 100644 --- a/Zotlabs/Module/Directory.php +++ b/Zotlabs/Module/Directory.php @@ -395,7 +395,7 @@ class Directory extends \Zotlabs\Web\Controller { $dirtitle = (($globaldir) ? t('Global Directory') : t('Local Directory')); - $o .= ""; + $o .= ""; $o .= replace_macros($tpl, array( '$search' => $search, '$desc' => t('Find'), diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index 489bffc4a..d3ef8d60b 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -838,7 +838,7 @@ class Photos extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template('photo_album.tpl'); $o .= replace_macros($tpl, array( '$photos' => $photos, @@ -1377,7 +1377,7 @@ class Photos extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template('photos_recent.tpl'); $o .= replace_macros($tpl, array( '$title' => t('Recent Photos'), diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php index 86ee296ec..50d1ec2aa 100644 --- a/Zotlabs/Module/Rpost.php +++ b/Zotlabs/Module/Rpost.php @@ -46,7 +46,7 @@ class Rpost extends \Zotlabs\Web\Controller { // make sure we're not looping to our own hub if(($url) && (! stristr($url, \App::get_hostname()))) { foreach($_GET as $key => $arg) { - if($key === 'q') + if($key === 'req') continue; $url .= '&' . $key . '=' . $arg; } diff --git a/Zotlabs/Module/Viewconnections.php b/Zotlabs/Module/Viewconnections.php index 0a5e86907..223e185e1 100644 --- a/Zotlabs/Module/Viewconnections.php +++ b/Zotlabs/Module/Viewconnections.php @@ -107,7 +107,7 @@ class Viewconnections extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template("viewcontact_template.tpl"); $o .= replace_macros($tpl, array( '$title' => t('View Connections'), diff --git a/boot.php b/boot.php index 8518a17f6..f957f4f0e 100755 --- a/boot.php +++ b/boot.php @@ -878,8 +878,8 @@ class App { self::$path = $path; } - if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { - self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 2)); + if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 4) === "req=") { + self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 4)); // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); @@ -887,8 +887,8 @@ class App { self::$query_string = preg_replace('/&/','?',self::$query_string,1); } - if(x($_GET,'q')) - self::$cmd = escape_tags(trim($_GET['q'],'/\\')); + if(x($_GET,'req')) + self::$cmd = escape_tags(trim($_GET['req'],'/\\')); // unix style "homedir" diff --git a/include/dir_fns.php b/include/dir_fns.php index 2bd1228ec..99dcb63fb 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -133,7 +133,7 @@ function dir_sort_links() { unset($tmp['pubforums']); unset($tmp['global']); unset($tmp['safe']); - unset($tmp['q']); + unset($tmp['req']); unset($tmp['f']); $forumsurl = $url . http_build_query($tmp) . $suggest; diff --git a/include/text.php b/include/text.php index 8a07dc113..2d704cff1 100644 --- a/include/text.php +++ b/include/text.php @@ -2526,7 +2526,7 @@ function extra_query_args() { if(count($_GET)) { foreach($_GET as $k => $v) { // these are request vars we don't want to duplicate - if(! in_array($k, array('q','f','zid','page','PHPSESSID'))) { + if(! in_array($k, array('req','f','zid','page','PHPSESSID'))) { $s .= '&' . $k . '=' . urlencode($v); } } @@ -2534,7 +2534,7 @@ function extra_query_args() { if(count($_POST)) { foreach($_POST as $k => $v) { // these are request vars we don't want to duplicate - if(! in_array($k, array('q','f','zid','page','PHPSESSID'))) { + if(! in_array($k, array('req','f','zid','page','PHPSESSID'))) { $s .= '&' . $k . '=' . urlencode($v); } } diff --git a/library/OAuth1.php b/library/OAuth1.php index 0a6b20b0a..e70cf0a1b 100644 --- a/library/OAuth1.php +++ b/library/OAuth1.php @@ -293,8 +293,8 @@ class OAuth1Request { } // fix for friendica redirect system // FIXME or don't, but figure out if this is absolutely necessary and act accordingly - $http_url = substr($http_url, 0, strpos($http_url,$parameters['q'])+strlen($parameters['q'])); - unset( $parameters['q'] ); + $http_url = substr($http_url, 0, strpos($http_url,$parameters['req'])+strlen($parameters['req'])); + unset( $parameters['req'] ); return new OAuth1Request($http_method, $http_url, $parameters); } -- cgit v1.2.3 From e4b6a143c7679428ecf7208274fddb5f1b37c70e Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 26 Aug 2018 23:05:56 -0700 Subject: Revert "Change main router request variable from 'q' to 'req'. This is necessary to implement search in the twitter api addon, because twitter requires use of the variable 'q'." Reverting because this will only work with Apache and break nginx/other installations. This reverts commit 9367e9fe5a0125bf4c2f77909f2789c9dcd41e1e. --- .htaccess | 6 +++--- Zotlabs/Lib/Libzotdir.php | 2 +- Zotlabs/Module/Connections.php | 2 +- Zotlabs/Module/Directory.php | 2 +- Zotlabs/Module/Photos.php | 4 ++-- Zotlabs/Module/Rpost.php | 2 +- Zotlabs/Module/Viewconnections.php | 2 +- boot.php | 8 ++++---- include/dir_fns.php | 2 +- include/text.php | 4 ++-- library/OAuth1.php | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.htaccess b/.htaccess index 7a265eda1..3420313a5 100644 --- a/.htaccess +++ b/.htaccess @@ -20,15 +20,15 @@ AddType audio/ogg .oga RewriteRule "(^|/)\.git" - [F] RewriteRule "(^|/)store" - [F] - # Rewrite current-style URLs of the form 'index.php?req=x'. + # Rewrite current-style URLs of the form 'index.php?q=x'. # Also place auth information into REMOTE_USER for sites running # in CGI mode. RewriteCond %{REQUEST_URI} ^/\.well\-known/.* - RewriteRule ^(.*)$ index.php?req=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] + RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.*)$ index.php?req=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] + RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php index 81a5b3319..91d089c86 100644 --- a/Zotlabs/Lib/Libzotdir.php +++ b/Zotlabs/Lib/Libzotdir.php @@ -152,7 +152,7 @@ class Libzotdir { unset($tmp['pubforums']); unset($tmp['global']); unset($tmp['safe']); - unset($tmp['req']); + unset($tmp['q']); unset($tmp['f']); $forumsurl = $url . http_build_query($tmp) . $suggest; diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php index 48b59cb8c..cecada769 100644 --- a/Zotlabs/Module/Connections.php +++ b/Zotlabs/Module/Connections.php @@ -326,7 +326,7 @@ class Connections extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $o .= replace_macros(get_markup_template('connections.tpl'),array( '$header' => t('Connections') . (($head) ? ': ' . $head : ''), '$tabs' => $tabs, diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php index 59b832a0f..8a7c6baf6 100644 --- a/Zotlabs/Module/Directory.php +++ b/Zotlabs/Module/Directory.php @@ -395,7 +395,7 @@ class Directory extends \Zotlabs\Web\Controller { $dirtitle = (($globaldir) ? t('Global Directory') : t('Local Directory')); - $o .= ""; + $o .= ""; $o .= replace_macros($tpl, array( '$search' => $search, '$desc' => t('Find'), diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index d3ef8d60b..489bffc4a 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -838,7 +838,7 @@ class Photos extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template('photo_album.tpl'); $o .= replace_macros($tpl, array( '$photos' => $photos, @@ -1377,7 +1377,7 @@ class Photos extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template('photos_recent.tpl'); $o .= replace_macros($tpl, array( '$title' => t('Recent Photos'), diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php index 50d1ec2aa..86ee296ec 100644 --- a/Zotlabs/Module/Rpost.php +++ b/Zotlabs/Module/Rpost.php @@ -46,7 +46,7 @@ class Rpost extends \Zotlabs\Web\Controller { // make sure we're not looping to our own hub if(($url) && (! stristr($url, \App::get_hostname()))) { foreach($_GET as $key => $arg) { - if($key === 'req') + if($key === 'q') continue; $url .= '&' . $key . '=' . $arg; } diff --git a/Zotlabs/Module/Viewconnections.php b/Zotlabs/Module/Viewconnections.php index 223e185e1..0a5e86907 100644 --- a/Zotlabs/Module/Viewconnections.php +++ b/Zotlabs/Module/Viewconnections.php @@ -107,7 +107,7 @@ class Viewconnections extends \Zotlabs\Web\Controller { killme(); } else { - $o .= ""; + $o .= ""; $tpl = get_markup_template("viewcontact_template.tpl"); $o .= replace_macros($tpl, array( '$title' => t('View Connections'), diff --git a/boot.php b/boot.php index f957f4f0e..8518a17f6 100755 --- a/boot.php +++ b/boot.php @@ -878,8 +878,8 @@ class App { self::$path = $path; } - if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 4) === "req=") { - self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 4)); + if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") { + self::$query_string = str_replace(['<','>'],['<','>'],substr($_SERVER['QUERY_STRING'], 2)); // removing trailing / - maybe a nginx problem if (substr(self::$query_string, 0, 1) == "/") self::$query_string = substr(self::$query_string, 1); @@ -887,8 +887,8 @@ class App { self::$query_string = preg_replace('/&/','?',self::$query_string,1); } - if(x($_GET,'req')) - self::$cmd = escape_tags(trim($_GET['req'],'/\\')); + if(x($_GET,'q')) + self::$cmd = escape_tags(trim($_GET['q'],'/\\')); // unix style "homedir" diff --git a/include/dir_fns.php b/include/dir_fns.php index 99dcb63fb..2bd1228ec 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -133,7 +133,7 @@ function dir_sort_links() { unset($tmp['pubforums']); unset($tmp['global']); unset($tmp['safe']); - unset($tmp['req']); + unset($tmp['q']); unset($tmp['f']); $forumsurl = $url . http_build_query($tmp) . $suggest; diff --git a/include/text.php b/include/text.php index 2d704cff1..8a07dc113 100644 --- a/include/text.php +++ b/include/text.php @@ -2526,7 +2526,7 @@ function extra_query_args() { if(count($_GET)) { foreach($_GET as $k => $v) { // these are request vars we don't want to duplicate - if(! in_array($k, array('req','f','zid','page','PHPSESSID'))) { + if(! in_array($k, array('q','f','zid','page','PHPSESSID'))) { $s .= '&' . $k . '=' . urlencode($v); } } @@ -2534,7 +2534,7 @@ function extra_query_args() { if(count($_POST)) { foreach($_POST as $k => $v) { // these are request vars we don't want to duplicate - if(! in_array($k, array('req','f','zid','page','PHPSESSID'))) { + if(! in_array($k, array('q','f','zid','page','PHPSESSID'))) { $s .= '&' . $k . '=' . urlencode($v); } } diff --git a/library/OAuth1.php b/library/OAuth1.php index e70cf0a1b..0a6b20b0a 100644 --- a/library/OAuth1.php +++ b/library/OAuth1.php @@ -293,8 +293,8 @@ class OAuth1Request { } // fix for friendica redirect system // FIXME or don't, but figure out if this is absolutely necessary and act accordingly - $http_url = substr($http_url, 0, strpos($http_url,$parameters['req'])+strlen($parameters['req'])); - unset( $parameters['req'] ); + $http_url = substr($http_url, 0, strpos($http_url,$parameters['q'])+strlen($parameters['q'])); + unset( $parameters['q'] ); return new OAuth1Request($http_method, $http_url, $parameters); } -- cgit v1.2.3 From 6a2bbed73dfb34975c4525c34c03f20c6945dedc Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Mon, 27 Aug 2018 10:19:10 +0200 Subject: remove distinct from network query again until performance issue is resolved or another fix for the underlying problem is found --- Zotlabs/Module/Network.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index 9eedf113d..ca0ec7844 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -510,7 +510,7 @@ class Network extends \Zotlabs\Web\Controller { if($load) { // Fetch a page full of parent items for this page - $r = q("SELECT DISTINCT(item.parent) AS item_id FROM item + $r = q("SELECT item.parent AS item_id FROM item left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) $net_query WHERE true $uids $item_thread_top $item_normal @@ -524,7 +524,7 @@ class Network extends \Zotlabs\Web\Controller { else { // this is an update - $r = q("SELECT DISTINCT(item.parent) AS item_id FROM item + $r = q("SELECT item.parent AS item_id FROM item left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) $net_query WHERE true $uids $item_normal_update $simple_update -- cgit v1.2.3 From c0c827d3ad2c8364d35fff5546ab40ea76bbbbd9 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Tue, 28 Aug 2018 12:00:23 +0200 Subject: update composer libs and add ramsey/uuid --- composer.json | 3 +- composer.lock | 849 ++++++++++++--------- vendor/composer/ClassLoader.php | 2 +- vendor/composer/autoload_classmap.php | 68 ++ vendor/composer/autoload_files.php | 1 + vendor/composer/autoload_psr4.php | 2 + vendor/composer/autoload_static.php | 82 ++ vendor/composer/installed.json | 235 +++++- vendor/league/html-to-markdown/CHANGELOG.md | 13 +- vendor/league/html-to-markdown/composer.json | 2 +- .../src/Converter/CodeConverter.php | 2 +- .../src/Converter/HardBreakConverter.php | 14 +- .../src/Converter/LinkConverter.php | 2 +- .../src/Converter/ListItemConverter.php | 16 +- .../src/Converter/PreformattedConverter.php | 2 +- .../league/html-to-markdown/src/HtmlConverter.php | 19 + vendor/ramsey/uuid/CHANGELOG.md | 376 +++++++++ vendor/ramsey/uuid/CODE_OF_CONDUCT.md | 74 ++ vendor/ramsey/uuid/CONTRIBUTING.md | 75 ++ vendor/ramsey/uuid/LICENSE | 19 + vendor/ramsey/uuid/README.md | 159 ++++ vendor/ramsey/uuid/composer.json | 80 ++ vendor/ramsey/uuid/src/BinaryUtils.php | 43 ++ .../ramsey/uuid/src/Builder/DefaultUuidBuilder.php | 54 ++ .../uuid/src/Builder/DegradedUuidBuilder.php | 53 ++ .../uuid/src/Builder/UuidBuilderInterface.php | 34 + vendor/ramsey/uuid/src/Codec/CodecInterface.php | 58 ++ vendor/ramsey/uuid/src/Codec/GuidStringCodec.php | 102 +++ vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php | 68 ++ vendor/ramsey/uuid/src/Codec/StringCodec.php | 170 +++++ .../uuid/src/Codec/TimestampFirstCombCodec.php | 107 +++ .../uuid/src/Codec/TimestampLastCombCodec.php | 23 + .../src/Converter/Number/BigNumberConverter.php | 54 ++ .../Converter/Number/DegradedNumberConverter.php | 58 ++ .../src/Converter/NumberConverterInterface.php | 46 ++ .../src/Converter/Time/BigNumberTimeConverter.php | 58 ++ .../src/Converter/Time/DegradedTimeConverter.php | 42 + .../uuid/src/Converter/Time/PhpTimeConverter.php | 47 ++ .../uuid/src/Converter/TimeConverterInterface.php | 35 + vendor/ramsey/uuid/src/DegradedUuid.php | 114 +++ .../src/Exception/InvalidUuidStringException.php | 22 + .../Exception/UnsatisfiedDependencyException.php | 23 + .../Exception/UnsupportedOperationException.php | 22 + vendor/ramsey/uuid/src/FeatureSet.php | 333 ++++++++ vendor/ramsey/uuid/src/Generator/CombGenerator.php | 88 +++ .../uuid/src/Generator/DefaultTimeGenerator.php | 138 ++++ .../ramsey/uuid/src/Generator/MtRandGenerator.php | 41 + .../ramsey/uuid/src/Generator/OpenSslGenerator.php | 38 + .../uuid/src/Generator/PeclUuidRandomGenerator.php | 37 + .../uuid/src/Generator/PeclUuidTimeGenerator.php | 38 + .../uuid/src/Generator/RandomBytesGenerator.php | 37 + .../uuid/src/Generator/RandomGeneratorFactory.php | 31 + .../src/Generator/RandomGeneratorInterface.php | 33 + .../ramsey/uuid/src/Generator/RandomLibAdapter.php | 62 ++ .../uuid/src/Generator/SodiumRandomGenerator.php | 36 + .../uuid/src/Generator/TimeGeneratorFactory.php | 72 ++ .../uuid/src/Generator/TimeGeneratorInterface.php | 39 + .../src/Provider/Node/FallbackNodeProvider.php | 58 ++ .../uuid/src/Provider/Node/RandomNodeProvider.php | 42 + .../uuid/src/Provider/Node/SystemNodeProvider.php | 125 +++ .../uuid/src/Provider/NodeProviderInterface.php | 30 + .../uuid/src/Provider/Time/FixedTimeProvider.php | 76 ++ .../uuid/src/Provider/Time/SystemTimeProvider.php | 33 + .../uuid/src/Provider/TimeProviderInterface.php | 29 + vendor/ramsey/uuid/src/Uuid.php | 740 ++++++++++++++++++ vendor/ramsey/uuid/src/UuidFactory.php | 314 ++++++++ vendor/ramsey/uuid/src/UuidFactoryInterface.php | 103 +++ vendor/ramsey/uuid/src/UuidInterface.php | 270 +++++++ vendor/simplepie/simplepie/.travis.yml | 30 +- vendor/simplepie/simplepie/composer.json | 19 +- .../simplepie/simplepie/idn/idna_convert.class.php | 36 +- vendor/simplepie/simplepie/library/SimplePie.php | 168 ++-- .../simplepie/library/SimplePie/Author.php | 19 +- .../simplepie/library/SimplePie/Cache/MySQL.php | 28 +- .../simplepie/library/SimplePie/Cache/Redis.php | 6 + .../simplepie/library/SimplePie/Caption.php | 31 +- .../library/SimplePie/Content/Type/Sniffer.php | 37 +- .../simplepie/library/SimplePie/Copyright.php | 13 +- .../simplepie/library/SimplePie/Credit.php | 19 +- .../library/SimplePie/Decode/HTML/Entities.php | 13 +- .../simplepie/library/SimplePie/Enclosure.php | 223 ++---- .../simplepie/simplepie/library/SimplePie/File.php | 2 +- .../simplepie/library/SimplePie/HTTP/Parser.php | 16 +- .../simplepie/simplepie/library/SimplePie/IRI.php | 151 ++-- .../simplepie/simplepie/library/SimplePie/Item.php | 137 ++-- .../simplepie/library/SimplePie/Locator.php | 29 +- .../simplepie/simplepie/library/SimplePie/Misc.php | 55 +- .../simplepie/library/SimplePie/Net/IPv6.php | 18 +- .../simplepie/library/SimplePie/Parse/Date.php | 31 +- .../simplepie/library/SimplePie/Parser.php | 112 ++- .../simplepie/library/SimplePie/Rating.php | 12 +- .../simplepie/library/SimplePie/Restriction.php | 18 +- .../simplepie/library/SimplePie/Sanitize.php | 2 +- .../simplepie/library/SimplePie/Source.php | 97 +-- .../library/SimplePie/XML/Declaration/Parser.php | 12 +- .../simplepie/library/SimplePie/gzdecode.php | 12 +- 96 files changed, 6276 insertions(+), 1241 deletions(-) create mode 100644 vendor/ramsey/uuid/CHANGELOG.md create mode 100644 vendor/ramsey/uuid/CODE_OF_CONDUCT.md create mode 100644 vendor/ramsey/uuid/CONTRIBUTING.md create mode 100644 vendor/ramsey/uuid/LICENSE create mode 100644 vendor/ramsey/uuid/README.md create mode 100644 vendor/ramsey/uuid/composer.json create mode 100644 vendor/ramsey/uuid/src/BinaryUtils.php create mode 100644 vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php create mode 100644 vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php create mode 100644 vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php create mode 100644 vendor/ramsey/uuid/src/Codec/CodecInterface.php create mode 100644 vendor/ramsey/uuid/src/Codec/GuidStringCodec.php create mode 100644 vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php create mode 100644 vendor/ramsey/uuid/src/Codec/StringCodec.php create mode 100644 vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php create mode 100644 vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php create mode 100644 vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php create mode 100644 vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php create mode 100644 vendor/ramsey/uuid/src/DegradedUuid.php create mode 100644 vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php create mode 100644 vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php create mode 100644 vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php create mode 100644 vendor/ramsey/uuid/src/FeatureSet.php create mode 100644 vendor/ramsey/uuid/src/Generator/CombGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/MtRandGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php create mode 100644 vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php create mode 100644 vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php create mode 100644 vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php create mode 100644 vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php create mode 100644 vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php create mode 100644 vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php create mode 100644 vendor/ramsey/uuid/src/Uuid.php create mode 100644 vendor/ramsey/uuid/src/UuidFactory.php create mode 100644 vendor/ramsey/uuid/src/UuidFactoryInterface.php create mode 100644 vendor/ramsey/uuid/src/UuidInterface.php diff --git a/composer.json b/composer.json index 792c08810..33bc56fa7 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,8 @@ "pear/text_languagedetect": "^1.0", "commerceguys/intl": "~0.7", "lukasreschke/id3parser": "^0.0.1", - "smarty/smarty": "~3.1" + "smarty/smarty": "~3.1", + "ramsey/uuid": "^3.8" }, "require-dev" : { "phpunit/phpunit" : "@stable", diff --git a/composer.lock b/composer.lock index 6f1af0fd7..35a024712 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ca5770d3c97cc1d0375413eeb61758ab", + "content-hash": "38911748179833a57ee1b46a0af8e518", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -157,16 +157,16 @@ }, { "name": "league/html-to-markdown", - "version": "4.6.2", + "version": "4.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "3af14d8f44838257a75822819784e83819b34e2e" + "reference": "76c076483cef89860d32a3fd25312f5a42848a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/3af14d8f44838257a75822819784e83819b34e2e", - "reference": "3af14d8f44838257a75822819784e83819b34e2e", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/76c076483cef89860d32a3fd25312f5a42848a8c", + "reference": "76c076483cef89860d32a3fd25312f5a42848a8c", "shasum": "" }, "require": { @@ -185,7 +185,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.7-dev" + "dev-master": "4.8-dev" } }, "autoload": { @@ -217,7 +217,7 @@ "html", "markdown" ], - "time": "2018-01-07T19:45:06+00:00" + "time": "2018-05-19T23:47:12+00:00" }, { "name": "lukasreschke/id3parser", @@ -300,6 +300,51 @@ ], "time": "2018-01-15T00:49:33+00:00" }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, { "name": "pear/text_languagedetect", "version": "v1.0.0", @@ -391,6 +436,88 @@ ], "time": "2016-10-10T12:19:37+00:00" }, + { + "name": "ramsey/uuid", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2018-07-19T23:38:55+00:00" + }, { "name": "sabre/dav", "version": "3.2.2", @@ -800,25 +927,32 @@ }, { "name": "simplepie/simplepie", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e" + "reference": "0e8fe72132dad765d25db4cabc69a91139af1263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", - "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/0e8fe72132dad765d25db4cabc69a91139af1263", + "reference": "0e8fe72132dad765d25db4cabc69a91139af1263", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~4 || ~5" + "phpunit/phpunit": "~5.4.3 || ~6.5" }, "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, "type": "library", @@ -827,6 +961,11 @@ "SimplePie": "library" } }, + "scripts": { + "test": [ + "phpunit" + ] + }, "license": [ "BSD-3-Clause" ], @@ -856,10 +995,10 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5.1", + "source": "https://github.com/simplepie/simplepie/tree/1.5.2", "issues": "https://github.com/simplepie/simplepie/issues" }, - "time": "2017-11-12T02:03:34+00:00" + "time": "2018-08-02T05:43:58+00:00" }, { "name": "smarty/smarty", @@ -913,21 +1052,79 @@ "templating" ], "time": "2018-04-24T14:53:33+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" } ], "packages-dev": [ { "name": "behat/behat", - "version": "v3.4.3", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2" + "reference": "e4bce688be0c2029dc1700e46058d86428c63cab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/d60b161bff1b95ec4bb80bb8cb210ccf890314c2", - "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2", + "url": "https://api.github.com/repos/Behat/Behat/zipball/e4bce688be0c2029dc1700e46058d86428c63cab", + "reference": "e4bce688be0c2029dc1700e46058d86428c63cab", "shasum": "" }, "require": { @@ -937,9 +1134,9 @@ "ext-mbstring": "*", "php": ">=5.3.3", "psr/container": "^1.0", - "symfony/class-loader": "~2.1||~3.0||~4.0", + "symfony/class-loader": "~2.1||~3.0", "symfony/config": "~2.3||~3.0||~4.0", - "symfony/console": "~2.5||~3.0||~4.0", + "symfony/console": "~2.7.40||^2.8.33||~3.3.15||^3.4.3||^4.0.3", "symfony/dependency-injection": "~2.1||~3.0||~4.0", "symfony/event-dispatcher": "~2.1||~3.0||~4.0", "symfony/translation": "~2.3||~3.0||~4.0", @@ -950,18 +1147,13 @@ "phpunit/phpunit": "^4.8.36|^6.3", "symfony/process": "~2.5|~3.0|~4.0" }, - "suggest": { - "behat/mink-extension": "for integration with Mink testing framework", - "behat/symfony2-extension": "for integration with Symfony2 web framework", - "behat/yii-extension": "for integration with Yii web framework" - }, "bin": [ "bin/behat" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.5.x-dev" } }, "autoload": { @@ -997,7 +1189,7 @@ "symfony", "testing" ], - "time": "2017-11-27T10:37:56+00:00" + "time": "2018-08-10T18:56:51+00:00" }, { "name": "behat/gherkin", @@ -1363,32 +1555,32 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1413,20 +1605,20 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" }, { "name": "fabpot/goutte", - "version": "v3.2.2", + "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/Goutte.git", - "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96" + "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/395f61d7c2e15a813839769553a4de16fa3b3c96", - "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/3f0eaf0a40181359470651f1565b3e07e3dd31b8", + "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8", "shasum": "" }, "require": { @@ -1468,7 +1660,7 @@ "keywords": [ "scraper" ], - "time": "2017-11-19T08:45:40+00:00" + "time": "2018-06-29T15:13:57+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1653,25 +1845,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -1694,26 +1889,26 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2018-06-11T23:09:50+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", + "phar-io/version": "^2.0", "php": "^5.6 || ^7.0" }, "type": "library", @@ -1749,20 +1944,20 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "time": "2018-07-08T19:23:20+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { @@ -1796,7 +1991,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "time": "2018-07-08T19:19:57+00:00" }, { "name": "php-mock/php-mock", @@ -2022,29 +2217,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -2063,7 +2264,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2114,16 +2315,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.6", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { @@ -2135,12 +2336,12 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -2173,33 +2374,33 @@ "spy", "stub" ], - "time": "2018-04-18T13:57:24+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/dbunit", - "version": "3.0.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/dbunit.git", - "reference": "0fa4329e490480ab957fe7b1185ea0996ca11f44" + "reference": "e77b469c3962b5a563f09a2a989f1c9bd38b8615" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/0fa4329e490480ab957fe7b1185ea0996ca11f44", - "reference": "0fa4329e490480ab957fe7b1185ea0996ca11f44", + "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/e77b469c3962b5a563f09a2a989f1c9bd38b8615", + "reference": "e77b469c3962b5a563f09a2a989f1c9bd38b8615", "shasum": "" }, "require": { "ext-pdo": "*", "ext-simplexml": "*", - "php": "^7.0", - "phpunit/phpunit": "^6.0", + "php": "^7.1", + "phpunit/phpunit": "^7.0", "symfony/yaml": "^3.0 || ^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2225,44 +2426,44 @@ "testing", "xunit" ], - "time": "2018-01-23T13:32:26+00:00" + "time": "2018-02-07T06:47:59+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "6.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -2288,29 +2489,29 @@ "testing", "xunit" ], - "time": "2018-04-06T15:36:58+00:00" + "time": "2018-06-01T07:51:50+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cecbc684605bb0cc288828eb5d65d93d5c676d3c", + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2325,7 +2526,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2335,7 +2536,7 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "time": "2018-06-11T11:44:00+00:00" }, { "name": "phpunit/php-text-template", @@ -2380,28 +2581,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2416,7 +2617,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2425,33 +2626,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2018-02-01T13:07:23+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2474,40 +2675,40 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2018-02-01T13:16:43+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.8", + "version": "7.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b" + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34705f81bddc3f505b9599a2ef96e2b4315ba9b8", + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.5", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", + "phpunit/php-timer": "^2.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -2516,15 +2717,15 @@ "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -2532,7 +2733,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -2558,66 +2759,7 @@ "testing", "xunit" ], - "time": "2018-04-10T11:38:34+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", - "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2018-01-06T05:45:45+00:00" + "time": "2018-08-22T06:39:21+00:00" }, { "name": "psr/container", @@ -2765,30 +2907,30 @@ }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", + "php": "^7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2825,32 +2967,33 @@ "compare", "equality" ], - "time": "2018-02-01T13:46:46+00:00" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "366541b989927187c4ca70490a35615d3fef2dce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", + "reference": "366541b989927187c4ca70490a35615d3fef2dce", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2875,9 +3018,12 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2018-06-10T07:54:39+00:00" }, { "name": "sebastian/environment", @@ -3279,25 +3425,25 @@ }, { "name": "symfony/browser-kit", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79" + "reference": "c55fe9257003b2d95c0211b3f6941e8dfd26dffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/840bb6f0d5b3701fd768b68adf7193c2d0f98f79", - "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c55fe9257003b2d95c0211b3f6941e8dfd26dffd", + "reference": "c55fe9257003b2d95c0211b3f6941e8dfd26dffd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/dom-crawler": "~2.8|~3.0|~4.0" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0" + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" }, "suggest": { "symfony/process": "" @@ -3305,7 +3451,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3332,20 +3478,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" + "time": "2018-07-26T09:10:45+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.9", + "version": "v3.4.15", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e" + "reference": "31db283fc86d3143e7ff87e922177b457d909c30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e", - "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/31db283fc86d3143e7ff87e922177b457d909c30", + "reference": "31db283fc86d3143e7ff87e922177b457d909c30", "shasum": "" }, "require": { @@ -3388,35 +3534,35 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:37:34+00:00" + "time": "2018-07-26T11:19:56+00:00" }, { "name": "symfony/config", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9" + "reference": "76015a3cc372b14d00040ff58e18e29f69eba717" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7c2a9d44f4433863e9bca682e7f03609234657f9", - "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9", + "url": "https://api.github.com/repos/symfony/config/zipball/76015a3cc372b14d00040ff58e18e29f69eba717", + "reference": "76015a3cc372b14d00040ff58e18e29f69eba717", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3424,7 +3570,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3451,25 +3597,24 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" + "time": "2018-08-08T06:37:38+00:00" }, { "name": "symfony/console", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf" + "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5b1fdfa8eb93464bcc36c34da39cedffef822cdf", - "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf", + "url": "https://api.github.com/repos/symfony/console/zipball/ca80b8ced97cf07390078b29773dc384c39eee1f", + "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", + "php": "^7.1.3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -3478,11 +3623,11 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0" }, "suggest": { "psr/log-implementation": "For using the console logger", @@ -3493,7 +3638,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3520,20 +3665,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:22:56+00:00" + "time": "2018-07-26T11:24:31+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.9", + "version": "v3.4.15", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0" + "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/519a80d7c1d95c6cc0b67f686d15fe27c6910de0", - "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416", + "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416", "shasum": "" }, "require": { @@ -3573,85 +3718,29 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/1b95888cfd996484527cb41e8952d9a5eaf7454f", - "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2018-04-30T16:53:52+00:00" + "time": "2018-07-26T09:06:28+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3" + "reference": "bae4983003c9d451e278504d7d9b9d7fc1846873" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", - "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/bae4983003c9d451e278504d7d9b9d7fc1846873", + "reference": "bae4983003c9d451e278504d7d9b9d7fc1846873", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.1.1", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, @@ -3659,8 +3748,8 @@ "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "~4.1", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3673,7 +3762,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3700,28 +3789,29 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-04-29T14:04:08+00:00" + "time": "2018-08-08T11:48:58+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "1a4cffeb059226ff6bee9f48acb388faf674afff" + "reference": "1c4519d257e652404c3aa550207ccd8ada66b38e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/1a4cffeb059226ff6bee9f48acb388faf674afff", - "reference": "1a4cffeb059226ff6bee9f48acb388faf674afff", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/1c4519d257e652404c3aa550207ccd8ada66b38e", + "reference": "1c4519d257e652404c3aa550207ccd8ada66b38e", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0" + "symfony/css-selector": "~3.4|~4.0" }, "suggest": { "symfony/css-selector": "" @@ -3729,7 +3819,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3756,34 +3846,34 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-03-19T22:32:39+00:00" + "time": "2018-07-26T11:00:49+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8" + "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", + "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3792,7 +3882,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3819,29 +3909,30 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-04-06T07:35:25+00:00" + "time": "2018-07-26T09:10:45+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" + "reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e", + "reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3868,20 +3959,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-02-22T10:48:49+00:00" + "time": "2018-08-18T16:52:46+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", "shasum": "" }, "require": { @@ -3893,7 +3984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -3927,37 +4018,38 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2018-08-06T14:22:27+00:00" }, { "name": "symfony/translation", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c" + "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", - "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", + "url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f", + "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/intl": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3968,7 +4060,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3995,24 +4087,25 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-04-30T01:22:56+00:00" + "time": "2018-08-07T12:45:11+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.9", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "033cfa61ef06ee0847e056e530201842b6e926c3" + "reference": "b832cc289608b6d305f62149df91529a2ab3c314" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/033cfa61ef06ee0847e056e530201842b6e926c3", - "reference": "033cfa61ef06ee0847e056e530201842b6e926c3", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b832cc289608b6d305f62149df91529a2ab3c314", + "reference": "b832cc289608b6d305f62149df91529a2ab3c314", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" @@ -4026,7 +4119,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -4053,7 +4146,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-04-08T08:21:29+00:00" + "time": "2018-08-18T16:52:46+00:00" }, { "name": "theseer/tokenizer", diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index dc02dfb11..95f7e0978 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -377,7 +377,7 @@ class ClassLoader $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); - $search = $subPath.'\\'; + $search = $subPath . '\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index dca528ad4..4a3465b9d 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -379,6 +379,52 @@ return array( 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', + 'Ramsey\\Uuid\\BinaryUtils' => $vendorDir . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => $vendorDir . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', + 'Ramsey\\Uuid\\Codec\\CodecInterface' => $vendorDir . '/ramsey/uuid/src/Codec/CodecInterface.php', + 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => $vendorDir . '/ramsey/uuid/src/Codec/GuidStringCodec.php', + 'Ramsey\\Uuid\\Codec\\OrderedTimeCodec' => $vendorDir . '/ramsey/uuid/src/Codec/OrderedTimeCodec.php', + 'Ramsey\\Uuid\\Codec\\StringCodec' => $vendorDir . '/ramsey/uuid/src/Codec/StringCodec.php', + 'Ramsey\\Uuid\\Codec\\TimestampFirstCombCodec' => $vendorDir . '/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php', + 'Ramsey\\Uuid\\Codec\\TimestampLastCombCodec' => $vendorDir . '/ramsey/uuid/src/Codec/TimestampLastCombCodec.php', + 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', + 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', + 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', + 'Ramsey\\Uuid\\DegradedUuid' => $vendorDir . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', + 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Uuid\\FeatureSet' => $vendorDir . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Generator\\CombGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', + 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/MtRandGenerator.php', + 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', + 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', + 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => $vendorDir . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', + 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', + 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', + 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Uuid' => $vendorDir . '/ramsey/uuid/src/Uuid.php', + 'Ramsey\\Uuid\\UuidFactory' => $vendorDir . '/ramsey/uuid/src/UuidFactory.php', + 'Ramsey\\Uuid\\UuidFactoryInterface' => $vendorDir . '/ramsey/uuid/src/UuidFactoryInterface.php', + 'Ramsey\\Uuid\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/UuidInterface.php', 'Sabre\\CalDAV\\Backend\\AbstractBackend' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php', 'Sabre\\CalDAV\\Backend\\BackendInterface' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php', 'Sabre\\CalDAV\\Backend\\NotificationSupport' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php', @@ -753,6 +799,7 @@ return array( 'SimplePie_Source' => $vendorDir . '/simplepie/simplepie/library/SimplePie/Source.php', 'SimplePie_XML_Declaration_Parser' => $vendorDir . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => $vendorDir . '/simplepie/simplepie/library/SimplePie/gzdecode.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', 'Text_LanguageDetect' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect.php', 'Text_LanguageDetect_Exception' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php', 'Text_LanguageDetect_ISO639' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php', @@ -786,12 +833,15 @@ return array( 'Zotlabs\\Daemon\\Ratenotif' => $baseDir . '/Zotlabs/Daemon/Ratenotif.php', 'Zotlabs\\Daemon\\Thumbnail' => $baseDir . '/Zotlabs/Daemon/Thumbnail.php', 'Zotlabs\\Extend\\Hook' => $baseDir . '/Zotlabs/Extend/Hook.php', + 'Zotlabs\\Extend\\Route' => $baseDir . '/Zotlabs/Extend/Route.php', + 'Zotlabs\\Extend\\Widget' => $baseDir . '/Zotlabs/Extend/Widget.php', 'Zotlabs\\Identity\\BasicId\\BasicId' => $baseDir . '/Zotlabs/Identity/BasicId.php', 'Zotlabs\\Identity\\OAuth2Server' => $baseDir . '/Zotlabs/Identity/OAuth2Server.php', 'Zotlabs\\Identity\\OAuth2Storage' => $baseDir . '/Zotlabs/Identity/OAuth2Storage.php', 'Zotlabs\\Identity\\ProfilePhoto\\ProfilePhoto' => $baseDir . '/Zotlabs/Identity/ProfilePhoto.php', 'Zotlabs\\Lib\\AConfig' => $baseDir . '/Zotlabs/Lib/AConfig.php', 'Zotlabs\\Lib\\AbConfig' => $baseDir . '/Zotlabs/Lib/AbConfig.php', + 'Zotlabs\\Lib\\Activity' => $baseDir . '/Zotlabs/Lib/Activity.php', 'Zotlabs\\Lib\\ActivityStreams' => $baseDir . '/Zotlabs/Lib/ActivityStreams.php', 'Zotlabs\\Lib\\Api_router' => $baseDir . '/Zotlabs/Lib/Api_router.php', 'Zotlabs\\Lib\\Apps' => $baseDir . '/Zotlabs/Lib/Apps.php', @@ -802,10 +852,14 @@ return array( 'Zotlabs\\Lib\\DReport' => $baseDir . '/Zotlabs/Lib/DReport.php', 'Zotlabs\\Lib\\Enotify' => $baseDir . '/Zotlabs/Lib/Enotify.php', 'Zotlabs\\Lib\\ExtendedZip' => $baseDir . '/Zotlabs/Lib/ExtendedZip.php', + 'Zotlabs\\Lib\\Group' => $baseDir . '/Zotlabs/Lib/Group.php', 'Zotlabs\\Lib\\IConfig' => $baseDir . '/Zotlabs/Lib/IConfig.php', 'Zotlabs\\Lib\\Img_filesize' => $baseDir . '/Zotlabs/Lib/Img_filesize.php', 'Zotlabs\\Lib\\JSalmon' => $baseDir . '/Zotlabs/Lib/JSalmon.php', 'Zotlabs\\Lib\\LDSignatures' => $baseDir . '/Zotlabs/Lib/LDSignatures.php', + 'Zotlabs\\Lib\\Libsync' => $baseDir . '/Zotlabs/Lib/Libsync.php', + 'Zotlabs\\Lib\\Libzot' => $baseDir . '/Zotlabs/Lib/Libzot.php', + 'Zotlabs\\Lib\\Libzotdir' => $baseDir . '/Zotlabs/Lib/Libzotdir.php', 'Zotlabs\\Lib\\MarkdownSoap' => $baseDir . '/Zotlabs/Lib/MarkdownSoap.php', 'Zotlabs\\Lib\\MessageFilter' => $baseDir . '/Zotlabs/Lib/MessageFilter.php', 'Zotlabs\\Lib\\NativeWiki' => $baseDir . '/Zotlabs/Lib/NativeWiki.php', @@ -813,6 +867,7 @@ return array( 'Zotlabs\\Lib\\PConfig' => $baseDir . '/Zotlabs/Lib/PConfig.php', 'Zotlabs\\Lib\\Permcat' => $baseDir . '/Zotlabs/Lib/Permcat.php', 'Zotlabs\\Lib\\PermissionDescription' => $baseDir . '/Zotlabs/Lib/PermissionDescription.php', + 'Zotlabs\\Lib\\Queue' => $baseDir . '/Zotlabs/Lib/Queue.php', 'Zotlabs\\Lib\\SConfig' => $baseDir . '/Zotlabs/Lib/SConfig.php', 'Zotlabs\\Lib\\Share' => $baseDir . '/Zotlabs/Lib/Share.php', 'Zotlabs\\Lib\\SuperCurl' => $baseDir . '/Zotlabs/Lib/SuperCurl.php', @@ -821,7 +876,9 @@ return array( 'Zotlabs\\Lib\\ThreadItem' => $baseDir . '/Zotlabs/Lib/ThreadItem.php', 'Zotlabs\\Lib\\ThreadStream' => $baseDir . '/Zotlabs/Lib/ThreadStream.php', 'Zotlabs\\Lib\\Verify' => $baseDir . '/Zotlabs/Lib/Verify.php', + 'Zotlabs\\Lib\\Webfinger' => $baseDir . '/Zotlabs/Lib/Webfinger.php', 'Zotlabs\\Lib\\XConfig' => $baseDir . '/Zotlabs/Lib/XConfig.php', + 'Zotlabs\\Lib\\Zotfinger' => $baseDir . '/Zotlabs/Lib/Zotfinger.php', 'Zotlabs\\Module\\Achievements' => $baseDir . '/Zotlabs/Module/Achievements.php', 'Zotlabs\\Module\\Acl' => $baseDir . '/Zotlabs/Module/Acl.php', 'Zotlabs\\Module\\Admin' => $baseDir . '/Zotlabs/Module/Admin.php', @@ -1003,6 +1060,7 @@ return array( 'Zotlabs\\Module\\Token' => $baseDir . '/Zotlabs/Module/Token.php', 'Zotlabs\\Module\\Uexport' => $baseDir . '/Zotlabs/Module/Uexport.php', 'Zotlabs\\Module\\Update' => $baseDir . '/Zotlabs/Module/Update.php', + 'Zotlabs\\Module\\Userinfo' => $baseDir . '/Zotlabs/Module/Userinfo.php', 'Zotlabs\\Module\\View' => $baseDir . '/Zotlabs/Module/View.php', 'Zotlabs\\Module\\Viewconnections' => $baseDir . '/Zotlabs/Module/Viewconnections.php', 'Zotlabs\\Module\\Viewsrc' => $baseDir . '/Zotlabs/Module/Viewsrc.php', @@ -1018,6 +1076,8 @@ return array( 'Zotlabs\\Module\\Xrd' => $baseDir . '/Zotlabs/Module/Xrd.php', 'Zotlabs\\Module\\Xref' => $baseDir . '/Zotlabs/Module/Xref.php', 'Zotlabs\\Module\\Zfinger' => $baseDir . '/Zotlabs/Module/Zfinger.php', + 'Zotlabs\\Module\\Zot' => $baseDir . '/Zotlabs/Module/Zot.php', + 'Zotlabs\\Module\\Zot_probe' => $baseDir . '/Zotlabs/Module/Zot_probe.php', 'Zotlabs\\Module\\Zotfeed' => $baseDir . '/Zotlabs/Module/Zotfeed.php', 'Zotlabs\\Module\\Zping' => $baseDir . '/Zotlabs/Module/Zping.php', 'Zotlabs\\Render\\Comanche' => $baseDir . '/Zotlabs/Render/Comanche.php', @@ -1255,6 +1315,9 @@ return array( 'Zotlabs\\Update\\_1213' => $baseDir . '/Zotlabs/Update/_1213.php', 'Zotlabs\\Update\\_1214' => $baseDir . '/Zotlabs/Update/_1214.php', 'Zotlabs\\Update\\_1215' => $baseDir . '/Zotlabs/Update/_1215.php', + 'Zotlabs\\Update\\_1216' => $baseDir . '/Zotlabs/Update/_1216.php', + 'Zotlabs\\Update\\_1217' => $baseDir . '/Zotlabs/Update/_1217.php', + 'Zotlabs\\Update\\_1218' => $baseDir . '/Zotlabs/Update/_1218.php', 'Zotlabs\\Web\\CheckJS' => $baseDir . '/Zotlabs/Web/CheckJS.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', @@ -1328,6 +1391,11 @@ return array( 'Zotlabs\\Widget\\Wiki_page_history' => $baseDir . '/Zotlabs/Widget/Wiki_page_history.php', 'Zotlabs\\Widget\\Wiki_pages' => $baseDir . '/Zotlabs/Widget/Wiki_pages.php', 'Zotlabs\\Widget\\Zcard' => $baseDir . '/Zotlabs/Widget/Zcard.php', + 'Zotlabs\\Zot6\\Finger' => $baseDir . '/Zotlabs/Zot6/Finger.php', + 'Zotlabs\\Zot6\\HTTPSig' => $baseDir . '/Zotlabs/Zot6/HTTPSig.php', + 'Zotlabs\\Zot6\\IHandler' => $baseDir . '/Zotlabs/Zot6/IHandler.php', + 'Zotlabs\\Zot6\\Receiver' => $baseDir . '/Zotlabs/Zot6/Receiver.php', + 'Zotlabs\\Zot6\\Zot6Handler' => $baseDir . '/Zotlabs/Zot6/Zot6Handler.php', 'Zotlabs\\Zot\\Auth' => $baseDir . '/Zotlabs/Zot/Auth.php', 'Zotlabs\\Zot\\Finger' => $baseDir . '/Zotlabs/Zot/Finger.php', 'Zotlabs\\Zot\\IHandler' => $baseDir . '/Zotlabs/Zot/IHandler.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 1fd1888f8..54054991d 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -13,6 +13,7 @@ return array( '3569eecfeed3bcf0bad3c998a494ecb8' => $vendorDir . '/sabre/xml/lib/Deserializer/functions.php', '93aa591bc4ca510c520999e34229ee79' => $vendorDir . '/sabre/xml/lib/Serializer/functions.php', 'ebdb698ed4152ae445614b69b5e4bb6a' => $vendorDir . '/sabre/http/lib/functions.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 'f084d01b0a599f67676cffef638aa95b' => $vendorDir . '/smarty/smarty/libs/bootstrap.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index e57848647..0029db7c1 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir); return array( 'Zotlabs\\' => array($baseDir . '/Zotlabs'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Sabre\\Xml\\' => array($vendorDir . '/sabre/xml/lib'), 'Sabre\\VObject\\' => array($vendorDir . '/sabre/vobject/lib'), 'Sabre\\Uri\\' => array($vendorDir . '/sabre/uri/lib'), @@ -16,6 +17,7 @@ return array( 'Sabre\\DAVACL\\' => array($vendorDir . '/sabre/dav/lib/DAVACL'), 'Sabre\\CardDAV\\' => array($vendorDir . '/sabre/dav/lib/CardDAV'), 'Sabre\\CalDAV\\' => array($vendorDir . '/sabre/dav/lib/CalDAV'), + 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'), 'League\\HTMLToMarkdown\\' => array($vendorDir . '/league/html-to-markdown/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index cd4782104..1768f259e 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -14,6 +14,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d '3569eecfeed3bcf0bad3c998a494ecb8' => __DIR__ . '/..' . '/sabre/xml/lib/Deserializer/functions.php', '93aa591bc4ca510c520999e34229ee79' => __DIR__ . '/..' . '/sabre/xml/lib/Serializer/functions.php', 'ebdb698ed4152ae445614b69b5e4bb6a' => __DIR__ . '/..' . '/sabre/http/lib/functions.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 'f084d01b0a599f67676cffef638aa95b' => __DIR__ . '/..' . '/smarty/smarty/libs/bootstrap.php', ); @@ -25,6 +26,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d ), 'S' => array ( + 'Symfony\\Polyfill\\Ctype\\' => 23, 'Sabre\\Xml\\' => 10, 'Sabre\\VObject\\' => 14, 'Sabre\\Uri\\' => 10, @@ -35,6 +37,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Sabre\\CardDAV\\' => 14, 'Sabre\\CalDAV\\' => 13, ), + 'R' => + array ( + 'Ramsey\\Uuid\\' => 12, + ), 'P' => array ( 'Psr\\Log\\' => 8, @@ -66,6 +72,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 0 => __DIR__ . '/../..' . '/Zotlabs', ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), 'Sabre\\Xml\\' => array ( 0 => __DIR__ . '/..' . '/sabre/xml/lib', @@ -102,6 +112,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 0 => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV', ), + 'Ramsey\\Uuid\\' => + array ( + 0 => __DIR__ . '/..' . '/ramsey/uuid/src', + ), 'Psr\\Log\\' => array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', @@ -533,6 +547,52 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', + 'Ramsey\\Uuid\\BinaryUtils' => __DIR__ . '/..' . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', + 'Ramsey\\Uuid\\Codec\\CodecInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/CodecInterface.php', + 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/GuidStringCodec.php', + 'Ramsey\\Uuid\\Codec\\OrderedTimeCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/OrderedTimeCodec.php', + 'Ramsey\\Uuid\\Codec\\StringCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/StringCodec.php', + 'Ramsey\\Uuid\\Codec\\TimestampFirstCombCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php', + 'Ramsey\\Uuid\\Codec\\TimestampLastCombCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/TimestampLastCombCodec.php', + 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', + 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', + 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', + 'Ramsey\\Uuid\\DegradedUuid' => __DIR__ . '/..' . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', + 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Uuid\\FeatureSet' => __DIR__ . '/..' . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Generator\\CombGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', + 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/MtRandGenerator.php', + 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', + 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', + 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', + 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', + 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', + 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Uuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Uuid.php', + 'Ramsey\\Uuid\\UuidFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactory.php', + 'Ramsey\\Uuid\\UuidFactoryInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactoryInterface.php', + 'Ramsey\\Uuid\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidInterface.php', 'Sabre\\CalDAV\\Backend\\AbstractBackend' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php', 'Sabre\\CalDAV\\Backend\\BackendInterface' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php', 'Sabre\\CalDAV\\Backend\\NotificationSupport' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php', @@ -907,6 +967,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'SimplePie_Source' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/Source.php', 'SimplePie_XML_Declaration_Parser' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php', 'SimplePie_gzdecode' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/gzdecode.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', 'Text_LanguageDetect' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect.php', 'Text_LanguageDetect_Exception' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php', 'Text_LanguageDetect_ISO639' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php', @@ -940,12 +1001,15 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Daemon\\Ratenotif' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Ratenotif.php', 'Zotlabs\\Daemon\\Thumbnail' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Thumbnail.php', 'Zotlabs\\Extend\\Hook' => __DIR__ . '/../..' . '/Zotlabs/Extend/Hook.php', + 'Zotlabs\\Extend\\Route' => __DIR__ . '/../..' . '/Zotlabs/Extend/Route.php', + 'Zotlabs\\Extend\\Widget' => __DIR__ . '/../..' . '/Zotlabs/Extend/Widget.php', 'Zotlabs\\Identity\\BasicId\\BasicId' => __DIR__ . '/../..' . '/Zotlabs/Identity/BasicId.php', 'Zotlabs\\Identity\\OAuth2Server' => __DIR__ . '/../..' . '/Zotlabs/Identity/OAuth2Server.php', 'Zotlabs\\Identity\\OAuth2Storage' => __DIR__ . '/../..' . '/Zotlabs/Identity/OAuth2Storage.php', 'Zotlabs\\Identity\\ProfilePhoto\\ProfilePhoto' => __DIR__ . '/../..' . '/Zotlabs/Identity/ProfilePhoto.php', 'Zotlabs\\Lib\\AConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/AConfig.php', 'Zotlabs\\Lib\\AbConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/AbConfig.php', + 'Zotlabs\\Lib\\Activity' => __DIR__ . '/../..' . '/Zotlabs/Lib/Activity.php', 'Zotlabs\\Lib\\ActivityStreams' => __DIR__ . '/../..' . '/Zotlabs/Lib/ActivityStreams.php', 'Zotlabs\\Lib\\Api_router' => __DIR__ . '/../..' . '/Zotlabs/Lib/Api_router.php', 'Zotlabs\\Lib\\Apps' => __DIR__ . '/../..' . '/Zotlabs/Lib/Apps.php', @@ -956,10 +1020,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Lib\\DReport' => __DIR__ . '/../..' . '/Zotlabs/Lib/DReport.php', 'Zotlabs\\Lib\\Enotify' => __DIR__ . '/../..' . '/Zotlabs/Lib/Enotify.php', 'Zotlabs\\Lib\\ExtendedZip' => __DIR__ . '/../..' . '/Zotlabs/Lib/ExtendedZip.php', + 'Zotlabs\\Lib\\Group' => __DIR__ . '/../..' . '/Zotlabs/Lib/Group.php', 'Zotlabs\\Lib\\IConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/IConfig.php', 'Zotlabs\\Lib\\Img_filesize' => __DIR__ . '/../..' . '/Zotlabs/Lib/Img_filesize.php', 'Zotlabs\\Lib\\JSalmon' => __DIR__ . '/../..' . '/Zotlabs/Lib/JSalmon.php', 'Zotlabs\\Lib\\LDSignatures' => __DIR__ . '/../..' . '/Zotlabs/Lib/LDSignatures.php', + 'Zotlabs\\Lib\\Libsync' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libsync.php', + 'Zotlabs\\Lib\\Libzot' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzot.php', + 'Zotlabs\\Lib\\Libzotdir' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzotdir.php', 'Zotlabs\\Lib\\MarkdownSoap' => __DIR__ . '/../..' . '/Zotlabs/Lib/MarkdownSoap.php', 'Zotlabs\\Lib\\MessageFilter' => __DIR__ . '/../..' . '/Zotlabs/Lib/MessageFilter.php', 'Zotlabs\\Lib\\NativeWiki' => __DIR__ . '/../..' . '/Zotlabs/Lib/NativeWiki.php', @@ -967,6 +1035,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Lib\\PConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/PConfig.php', 'Zotlabs\\Lib\\Permcat' => __DIR__ . '/../..' . '/Zotlabs/Lib/Permcat.php', 'Zotlabs\\Lib\\PermissionDescription' => __DIR__ . '/../..' . '/Zotlabs/Lib/PermissionDescription.php', + 'Zotlabs\\Lib\\Queue' => __DIR__ . '/../..' . '/Zotlabs/Lib/Queue.php', 'Zotlabs\\Lib\\SConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/SConfig.php', 'Zotlabs\\Lib\\Share' => __DIR__ . '/../..' . '/Zotlabs/Lib/Share.php', 'Zotlabs\\Lib\\SuperCurl' => __DIR__ . '/../..' . '/Zotlabs/Lib/SuperCurl.php', @@ -975,7 +1044,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Lib\\ThreadItem' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadItem.php', 'Zotlabs\\Lib\\ThreadStream' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadStream.php', 'Zotlabs\\Lib\\Verify' => __DIR__ . '/../..' . '/Zotlabs/Lib/Verify.php', + 'Zotlabs\\Lib\\Webfinger' => __DIR__ . '/../..' . '/Zotlabs/Lib/Webfinger.php', 'Zotlabs\\Lib\\XConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/XConfig.php', + 'Zotlabs\\Lib\\Zotfinger' => __DIR__ . '/../..' . '/Zotlabs/Lib/Zotfinger.php', 'Zotlabs\\Module\\Achievements' => __DIR__ . '/../..' . '/Zotlabs/Module/Achievements.php', 'Zotlabs\\Module\\Acl' => __DIR__ . '/../..' . '/Zotlabs/Module/Acl.php', 'Zotlabs\\Module\\Admin' => __DIR__ . '/../..' . '/Zotlabs/Module/Admin.php', @@ -1157,6 +1228,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Token' => __DIR__ . '/../..' . '/Zotlabs/Module/Token.php', 'Zotlabs\\Module\\Uexport' => __DIR__ . '/../..' . '/Zotlabs/Module/Uexport.php', 'Zotlabs\\Module\\Update' => __DIR__ . '/../..' . '/Zotlabs/Module/Update.php', + 'Zotlabs\\Module\\Userinfo' => __DIR__ . '/../..' . '/Zotlabs/Module/Userinfo.php', 'Zotlabs\\Module\\View' => __DIR__ . '/../..' . '/Zotlabs/Module/View.php', 'Zotlabs\\Module\\Viewconnections' => __DIR__ . '/../..' . '/Zotlabs/Module/Viewconnections.php', 'Zotlabs\\Module\\Viewsrc' => __DIR__ . '/../..' . '/Zotlabs/Module/Viewsrc.php', @@ -1172,6 +1244,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Xrd' => __DIR__ . '/../..' . '/Zotlabs/Module/Xrd.php', 'Zotlabs\\Module\\Xref' => __DIR__ . '/../..' . '/Zotlabs/Module/Xref.php', 'Zotlabs\\Module\\Zfinger' => __DIR__ . '/../..' . '/Zotlabs/Module/Zfinger.php', + 'Zotlabs\\Module\\Zot' => __DIR__ . '/../..' . '/Zotlabs/Module/Zot.php', + 'Zotlabs\\Module\\Zot_probe' => __DIR__ . '/../..' . '/Zotlabs/Module/Zot_probe.php', 'Zotlabs\\Module\\Zotfeed' => __DIR__ . '/../..' . '/Zotlabs/Module/Zotfeed.php', 'Zotlabs\\Module\\Zping' => __DIR__ . '/../..' . '/Zotlabs/Module/Zping.php', 'Zotlabs\\Render\\Comanche' => __DIR__ . '/../..' . '/Zotlabs/Render/Comanche.php', @@ -1409,6 +1483,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Update\\_1213' => __DIR__ . '/../..' . '/Zotlabs/Update/_1213.php', 'Zotlabs\\Update\\_1214' => __DIR__ . '/../..' . '/Zotlabs/Update/_1214.php', 'Zotlabs\\Update\\_1215' => __DIR__ . '/../..' . '/Zotlabs/Update/_1215.php', + 'Zotlabs\\Update\\_1216' => __DIR__ . '/../..' . '/Zotlabs/Update/_1216.php', + 'Zotlabs\\Update\\_1217' => __DIR__ . '/../..' . '/Zotlabs/Update/_1217.php', + 'Zotlabs\\Update\\_1218' => __DIR__ . '/../..' . '/Zotlabs/Update/_1218.php', 'Zotlabs\\Web\\CheckJS' => __DIR__ . '/../..' . '/Zotlabs/Web/CheckJS.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', @@ -1482,6 +1559,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Widget\\Wiki_page_history' => __DIR__ . '/../..' . '/Zotlabs/Widget/Wiki_page_history.php', 'Zotlabs\\Widget\\Wiki_pages' => __DIR__ . '/../..' . '/Zotlabs/Widget/Wiki_pages.php', 'Zotlabs\\Widget\\Zcard' => __DIR__ . '/../..' . '/Zotlabs/Widget/Zcard.php', + 'Zotlabs\\Zot6\\Finger' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Finger.php', + 'Zotlabs\\Zot6\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Zot6/HTTPSig.php', + 'Zotlabs\\Zot6\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/IHandler.php', + 'Zotlabs\\Zot6\\Receiver' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Receiver.php', + 'Zotlabs\\Zot6\\Zot6Handler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Zot6Handler.php', 'Zotlabs\\Zot\\Auth' => __DIR__ . '/../..' . '/Zotlabs/Zot/Auth.php', 'Zotlabs\\Zot\\Finger' => __DIR__ . '/../..' . '/Zotlabs/Zot/Finger.php', 'Zotlabs\\Zot\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot/IHandler.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index ea47f731d..fcde8b0f0 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -156,17 +156,17 @@ }, { "name": "league/html-to-markdown", - "version": "4.6.2", - "version_normalized": "4.6.2.0", + "version": "4.7.0", + "version_normalized": "4.7.0.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "3af14d8f44838257a75822819784e83819b34e2e" + "reference": "76c076483cef89860d32a3fd25312f5a42848a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/3af14d8f44838257a75822819784e83819b34e2e", - "reference": "3af14d8f44838257a75822819784e83819b34e2e", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/76c076483cef89860d32a3fd25312f5a42848a8c", + "reference": "76c076483cef89860d32a3fd25312f5a42848a8c", "shasum": "" }, "require": { @@ -179,14 +179,14 @@ "phpunit/phpunit": "4.*", "scrutinizer/ocular": "~1.1" }, - "time": "2018-01-07T19:45:06+00:00", + "time": "2018-05-19T23:47:12+00:00", "bin": [ "bin/html-to-markdown" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.7-dev" + "dev-master": "4.8-dev" } }, "installation-source": "dist", @@ -305,6 +305,53 @@ "markdown" ] }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "version_normalized": "9.99.99.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "time": "2018-07-02T15:55:56+00:00", + "type": "library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ] + }, { "name": "pear/text_languagedetect", "version": "v1.0.0", @@ -400,6 +447,90 @@ "psr-3" ] }, + { + "name": "ramsey/uuid", + "version": "3.8.0", + "version_normalized": "3.8.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "time": "2018-07-19T23:38:55+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ] + }, { "name": "sabre/dav", "version": "3.2.2", @@ -821,29 +952,36 @@ }, { "name": "simplepie/simplepie", - "version": "1.5.1", - "version_normalized": "1.5.1.0", + "version": "1.5.2", + "version_normalized": "1.5.2.0", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e" + "reference": "0e8fe72132dad765d25db4cabc69a91139af1263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", - "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/0e8fe72132dad765d25db4cabc69a91139af1263", + "reference": "0e8fe72132dad765d25db4cabc69a91139af1263", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~4 || ~5" + "phpunit/phpunit": "~5.4.3 || ~6.5" }, "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, - "time": "2017-11-12T02:03:34+00:00", + "time": "2018-08-02T05:43:58+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -851,6 +989,11 @@ "SimplePie": "library" } }, + "scripts": { + "test": [ + "phpunit" + ] + }, "license": [ "BSD-3-Clause" ], @@ -880,7 +1023,7 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/1.5.1", + "source": "https://github.com/simplepie/simplepie/tree/1.5.2", "issues": "https://github.com/simplepie/simplepie/issues" } }, @@ -938,5 +1081,65 @@ "keywords": [ "templating" ] + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2018-08-06T14:22:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ] } ] diff --git a/vendor/league/html-to-markdown/CHANGELOG.md b/vendor/league/html-to-markdown/CHANGELOG.md index c3b7bf65b..981ffd594 100644 --- a/vendor/league/html-to-markdown/CHANGELOG.md +++ b/vendor/league/html-to-markdown/CHANGELOG.md @@ -4,6 +4,16 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip ## [Unreleased][unreleased] +## [4.7.0] - 2018-05-19 +### Added + - Added `setOptions()` function for chainable calling (#149) + - Added new `list_item_style_alternate` option for converting every-other list with a different character (#155) + +### Fixed + - Fixed insufficient newlines after code blocks (#144, #148) + - Fixed trailing spaces not being preserved in link anchors (#157) + - Fixed list-like lines not being escaped inside of lists items (#159) + ## [4.6.2] ### Fixed - Fixed issue with emphasized spaces (#146) @@ -207,7 +217,8 @@ not ideally set, so this releases fixes that. Moving forwards this should reduce ### Added - Initial release -[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.6.2...master +[unreleased]: https://github.com/thephpleague/html-to-markdown/compare/4.7.0...master +[4.7.0]: https://github.com/thephpleague/html-to-markdown/compare/4.6.2...4.7.0 [4.6.2]: https://github.com/thephpleague/html-to-markdown/compare/4.6.1...4.6.2 [4.6.1]: https://github.com/thephpleague/html-to-markdown/compare/4.6.0...4.6.1 [4.6.0]: https://github.com/thephpleague/html-to-markdown/compare/4.5.0...4.6.0 diff --git a/vendor/league/html-to-markdown/composer.json b/vendor/league/html-to-markdown/composer.json index 8482b767c..c79230562 100644 --- a/vendor/league/html-to-markdown/composer.json +++ b/vendor/league/html-to-markdown/composer.json @@ -42,7 +42,7 @@ "bin": ["bin/html-to-markdown"], "extra": { "branch-alias": { - "dev-master": "4.7-dev" + "dev-master": "4.8-dev" } } } diff --git a/vendor/league/html-to-markdown/src/Converter/CodeConverter.php b/vendor/league/html-to-markdown/src/Converter/CodeConverter.php index c8ec2c005..e536362ee 100644 --- a/vendor/league/html-to-markdown/src/Converter/CodeConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/CodeConverter.php @@ -43,7 +43,7 @@ class CodeConverter implements ConverterInterface $lines = preg_split('/\r\n|\r|\n/', $code); if (count($lines) > 1) { // Multiple lines detected, adding three backticks and newlines - $markdown .= '```' . $language . "\n" . $code . "\n" . '```'; + $markdown .= '```' . $language . "\n" . $code . "\n" . '```' . "\n\n"; } else { // One line of code, wrapping it on one backtick. $markdown .= '`' . $language . $code . '`'; diff --git a/vendor/league/html-to-markdown/src/Converter/HardBreakConverter.php b/vendor/league/html-to-markdown/src/Converter/HardBreakConverter.php index 37cd44e73..d079d9127 100644 --- a/vendor/league/html-to-markdown/src/Converter/HardBreakConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/HardBreakConverter.php @@ -28,7 +28,19 @@ class HardBreakConverter implements ConverterInterface, ConfigurationAwareInterf */ public function convert(ElementInterface $element) { - return $this->config->getOption('hard_break') ? "\n" : " \n"; + $return = $this->config->getOption('hard_break') ? "\n" : " \n"; + + $next = $element->getNext(); + if ($next) { + $next_value = $next->getValue(); + if ($next_value) { + if (in_array(substr($next_value, 0, 2), array('- ', '* ', '+ '))) { + $return .= '\\'; + } + } + } + + return $return; } /** diff --git a/vendor/league/html-to-markdown/src/Converter/LinkConverter.php b/vendor/league/html-to-markdown/src/Converter/LinkConverter.php index f0765f38b..74b49a778 100644 --- a/vendor/league/html-to-markdown/src/Converter/LinkConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/LinkConverter.php @@ -15,7 +15,7 @@ class LinkConverter implements ConverterInterface { $href = $element->getAttribute('href'); $title = $element->getAttribute('title'); - $text = trim($element->getValue()); + $text = trim($element->getValue(), "\t\n\r\0\x0B"); if ($title !== '') { $markdown = '[' . $text . '](' . $href . ' "' . $title . '")'; diff --git a/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php b/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php index f737b4e19..c56ab89cd 100644 --- a/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/ListItemConverter.php @@ -13,6 +13,11 @@ class ListItemConverter implements ConverterInterface, ConfigurationAwareInterfa */ protected $config; + /** + * @var string + */ + protected $listItemStyle; + /** * @param Configuration $config */ @@ -45,7 +50,16 @@ class ListItemConverter implements ConverterInterface, ConfigurationAwareInterfa if ($list_type === 'ul') { $list_item_style = $this->config->getOption('list_item_style', '-'); - return $prefix . $list_item_style . ' ' . $value . "\n"; + $list_item_style_alternate = $this->config->getOption('list_item_style_alternate'); + if (!isset($this->listItemStyle)) { + $this->listItemStyle = $list_item_style_alternate ? $list_item_style_alternate : $list_item_style; + } + + if ($list_item_style_alternate && $level == 0 && $element->getSiblingPosition() === 1) { + $this->listItemStyle = $this->listItemStyle == $list_item_style ? $list_item_style_alternate : $list_item_style; + } + + return $prefix . $this->listItemStyle . ' ' . $value . "\n"; } if ($list_type === 'ol' && $start = $element->getParent()->getAttribute('start')) { diff --git a/vendor/league/html-to-markdown/src/Converter/PreformattedConverter.php b/vendor/league/html-to-markdown/src/Converter/PreformattedConverter.php index 0bb89e90f..3b77ba10b 100644 --- a/vendor/league/html-to-markdown/src/Converter/PreformattedConverter.php +++ b/vendor/league/html-to-markdown/src/Converter/PreformattedConverter.php @@ -53,7 +53,7 @@ class PreformattedConverter implements ConverterInterface } // Use three backticks - return "```\n" . $pre_content . "```\n"; + return "```\n" . $pre_content . "```\n\n"; } /** diff --git a/vendor/league/html-to-markdown/src/HtmlConverter.php b/vendor/league/html-to-markdown/src/HtmlConverter.php index 8d8936ec5..155369f56 100644 --- a/vendor/league/html-to-markdown/src/HtmlConverter.php +++ b/vendor/league/html-to-markdown/src/HtmlConverter.php @@ -229,4 +229,23 @@ class HtmlConverter return trim($markdown, "\n\r\0\x0B"); } + + /** + * Pass a series of key-value pairs in an array; these will be passed + * through the config and set. + * The advantage of this is that it can allow for static use (IE in Laravel). + * An example being: + * + * HtmlConverter::setOptions(['strip_tags' => true])->convert('

test

'); + */ + public function setOptions(array $options) + { + $config = $this->getConfig(); + + foreach ($options as $key => $option) { + $config->setOption($key, $option); + } + + return $this; + } } diff --git a/vendor/ramsey/uuid/CHANGELOG.md b/vendor/ramsey/uuid/CHANGELOG.md new file mode 100644 index 000000000..3965fff27 --- /dev/null +++ b/vendor/ramsey/uuid/CHANGELOG.md @@ -0,0 +1,376 @@ +# ramsey/uuid Changelog + +## 3.8.0 + +_Released: 2018-07-19_ + + * Add support for determining MAC address on FreeBSD systems ([#212](https://github.com/ramsey/uuid/pull/212)) + * Add a polyfill for PHP ctype functions to support systems where the ctype functions are not part of the PHP build ([#223](https://github.com/ramsey/uuid/pull/223)) + * Improve validation to disallow UUIDs with a trailing newline character ([#225](https://github.com/ramsey/uuid/pull/225)) + * Add annotations for thrown exceptions for improved IDE hinting ([#232](https://github.com/ramsey/uuid/pull/232)) + * Improve documentation, testing, and project metadata (i.e. `.gitattributes`, etc.) + +## 3.7.3 + +_Released: 2018-01-19_ + + * In rare cases, when using `glob()` to find `/sys/class/net/*/address` files on Linux, `glob()` encountered errors, returning `false` instead of an empty array, causing `array_map()` to emit warnings since its second parameter was not an array; this release gracefully handles cases where `glob()` returns `false` [#203](https://github.com/ramsey/uuid/issues/203) + * Fixed an off-by-one error in `DefaultTimeGenerator` and switching to `random_int()` from `mt_rand()` for better random numbers [#206](https://github.com/ramsey/uuid/pull/206) + +## 3.7.2 + +_Released: 2018-01-13_ + + * On Linux, first check sysfs to determine node identifier; this provides a reliable way to identify the node on Docker images, etc. [#185](https://github.com/ramsey/uuid/pull/185) + +## 3.7.1 + +_Released: 2017-09-22_ + + * Use `random_bytes()` when generating random nodes + * Set the multicast bit for random nodes, according to RFC 4122, §4.5, [#170](https://github.com/ramsey/uuid/pull/170), [#171](https://github.com/ramsey/uuid/pull/171), [#182](https://github.com/ramsey/uuid/pull/182) + +## 3.7.0 + +_Released: 2017-08-04_ + + * Add UUID version constants [#173](https://github.com/ramsey/uuid/issues/173), [#177](https://github.com/ramsey/uuid/pull/177) + * `Uuid::UUID_TYPE_TIME` + * `Uuid::UUID_TYPE_IDENTIFIER` + * `Uuid::UUID_TYPE_HASH_MD5` + * `Uuid::UUID_TYPE_RANDOM` + * `Uuid::UUID_TYPE_HASH_SHA1` + +## 3.6.1 + +_Released: 2017-03-26_ + + * Optimize UUID string decoding [#164](https://github.com/ramsey/uuid/pull/164) + +## 3.6.0 + +_Released: 2017-03-18_ + + * Add `InvalidUuidStringException`, thrown when attempting to decode an invalid string UUID; this does not introduce any BC issues, since the new exception inherits from the previously used `InvalidArgumentException` [#162](https://github.com/ramsey/uuid/pull/162) + * Improve memory usage when generating large quantities of UUIDs (use `str_pad()` and `dechex()` instead of `sprintf()`) [#160](https://github.com/ramsey/uuid/pull/160) + * Minor test and documentation updates + +## 3.5.2 + +_Released: 2016-11-22_ + + * Improved test coverage. + +## 3.5.1 + +_Released: 2016-10-02_ + + * Fixed issue where same UUIDs were not treated as equal with mixed case ([#131](https://github.com/ramsey/uuid/issues/131), [#137](https://github.com/ramsey/uuid/pull/137)). + * Test cleanup. + +## 3.5.0 + +_Released: 2016-08-02_ + + * Add `OrderedTimeCodec` to store UUID in an optimized way for InnoDB ([#117](https://github.com/ramsey/uuid/issues/117), [#118](https://github.com/ramsey/uuid/pull/118)). + * Fixed `RandomNodeProvider` to prevent invalid node generation ([#129](https://github.com/ramsey/uuid/pull/129)). + * Cache failed attempt to retrieve system node to avoid multiple system calls ([#107](https://github.com/ramsey/uuid/issues/107), [#121](https://github.com/ramsey/uuid/pull/121)). + * Various test improvements. + +## 3.4.1 + +_Released: 2016-04-23_ + + * Fixed test that violated a PHP CodeSniffer rule, breaking the build. + +## 3.4.0 + +_Released: 2016-04-23_ + + * Add `TimestampFirstCombCodec` and `TimestampLastCombCodec` codecs. + * Improve logic of `CombGenerator` for COMB sequential UUIDs. + * Significantly improved test coverage. + +## 3.3.0 + +_Released: 2016-03-22_ + + * Drop the use of OpenSSL as a fallback and use [paragonie/random_compat][] to support RandomBytesGenerator in versions of PHP earlier than 7.0. This addresses and fixes the [collision issue][]. + * Improved test coverage. + * Update code to conduct to version 1.4 of the Contributor Covenant. + +## 3.2.0 + +_Released: 2016-02-17_ + + * Add random generator option for use for the PECL libsodium extension. + * Updates to test infrastructure. + +## 3.1.0 + +_Released: 2015-12-17_ + + * Uuid objects now may be properly serialized/unserialized. + * Update build environments for testing on Travis CI. + +## 3.0.1 + +_Released: 2015-10-21_ + + * Add project [Contributor Code of Conduct](https://github.com/ramsey/uuid/blob/master/CONDUCT.md) + * Modify Travis CI builds to run tests on multiple CPU architectures + * Clean up code, tests, and documentation + +## 3.0.0 + +_Released: 2015-09-28_ + +The 3.0.0 release represents a significant step for the ramsey/uuid library. While the simple and familiar API used in previous versions remains intact, this release provides greater flexibility to integrators, including the ability to inject your own number generators, UUID codecs, node and time providers, and more. + + * BREAK: The root namespace for this package has changed from "Rhumsaa" to "Ramsey." In most cases, simply making this change in your applications is the only upgrade path you will need. Everything else should work as expected. + * BREAK: The UUID [Doctrine field type](http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html) has been moved to [ramsey/uuid-doctrine](https://github.com/ramsey/uuid-doctrine). + * BREAK: The `uuid` console application has been moved to [ramsey/uuid-console](https://github.com/ramsey/uuid-console). + * BREAK: The `Uuid::VERSION` package version constant has been removed. + * See also the release notes for [3.0.0-alpha1][300-alpha1], [3.0.0-alpha2][300-alpha2], [3.0.0-alpha3][300-alpha3], and [3.0.0-beta1][300-beta1]. + +[300-alpha1]: https://github.com/ramsey/uuid/blob/master/CHANGELOG.md#300-alpha1 +[300-alpha2]: https://github.com/ramsey/uuid/blob/master/CHANGELOG.md#300-alpha2 +[300-alpha3]: https://github.com/ramsey/uuid/blob/master/CHANGELOG.md#300-alpha3 +[300-beta1]: https://github.com/ramsey/uuid/blob/master/CHANGELOG.md#300-beta1 + +## 3.0.0-beta1 + +_Released: 2015-08-31_ + + * Improve GUID support to ensure that: + * On little endian (LE) architectures, the byte order of the first three fields is LE. + * On big endian (BE) architectures, it is the same as a GUID. + * String representation is always the same. + * Fix exception message for `DegradedNumberConverter::fromHex()`. + * Add Scrutinizer configuration to run code-quality builds through Scrutinizer. + * Auto-fix Scrutinizer issues. + * Fix support URLs in composer.json to point to the correct GitHub repository. + +## 3.0.0-alpha3 + +_Released: 2015-07-28_ + + * Time generator improvements: + * Enabled use of custom TimeGenerator implementations. + * BREAK: Removed now unnecessary `timeConverter` and `timeProvider` properties, setters, and getters in both `FeatureSet` and `UuidFactory` as those are now exclusively used by the default `TimeGenerator`. + * Added a `setTimeGenerator` method on `UuidFactory` to override the default time generator. + * Add option to enable `PeclUuidTimeGenerator` via `FeatureSet`. + +## 3.0.0-alpha2 + +_Released: 2015-07-28_ + + * BREAK: Removed `PeclUuidFactory` in favor of using pecl-uuid with generators. + * NEW: Refactored time-based (version 1) UUIDs into a `TimeGeneratorInterface` to allow for other sources to generate version 1 UUIDs in this library. + * NEW: Added `PeclUuidTimeGenerator` and `PeclUuidRandomGenerator` for creating version 1 or version 4 UUIDs using the pecl-uuid extension. + * NEW: Add `RandomBytesGenerator` for use with PHP 7. ramsey/uuid will default to use this generator when running on PHP 7. + * `RandomLibAdapter` now defaults to a medium-strength generator with [ircmaxell/random-lib](https://github.com/ircmaxell/RandomLib). This is configurable, so other generator strengths may be used. + * Migrated to the Travis CI container-based infrastructure for builds. + * Documentation updates and corrections. + +## 3.0.0-alpha1 + +_Released: 2015-07-16_ + + * BREAK: The root namespace for this package has changed from "Rhumsaa" to "Ramsey." In most cases, simply making this change in your applications is the only upgrade path you will need. Everything else should work as expected. + * BREAK: The UUID [Doctrine field type](http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html) has been moved to [ramsey/uuid-doctrine](https://github.com/ramsey/uuid-doctrine). + * BREAK: The `uuid` console application has been moved to [ramsey/uuid-console](https://github.com/ramsey/uuid-console). + * BREAK: The `Uuid::VERSION` package version constant has been removed. + * NEW: The `Uuid` class is no longer marked as `final`. Everything is now based around interfaces and factories, allowing you to use this package as a base to implement other kinds of UUIDs with different dependencies. + * NEW: Through setting dependencies on `UuidFactory` and/or extending `FeatureSet`, you may override any package defaults, injecting your own dependencies. + * NEW: For random number generation, in addition to `OpenSslGenerator` (used if `openssl_random_pseudo_bytes()` is present) and the fallback `MtRandGenerator`, you may use the bundled `CombGenerator` for sequential UUIDs or the `RandomLibAdapter` if using [ircmaxell/random-lib](https://github.com/ircmaxell/RandomLib). + * NEW: In addition to the default UUID generation, this library also supports GUID generation by configuring a `FeatureSet` to use GUIDs. + * NEW: While the interface to create UUIDs hasn't changed, if using this package on a 32-bit system, you will now receive an object of type `DegradedUuid` (which extends `Uuid`, which implements `UuidInterface`). + * NEW: All UUIDs are now [JsonSerializable](http://php.net/JsonSerializable). + +## 2.9.0 + +_Released: 2016-03-22_ + + * Drop support for OpenSSL in favor of [paragonie/random_compat][]. This addresses and fixes the [collision issue][]. + +## 2.8.4 + +_Released: 2015-12-17_ + + * Add support for symfony/console v3. + * Update build matrix to run Travis CI tests on PHP 7 & with lowest package versions. + +## 2.8.3 + +_Released: 2015-08-31_ + + * Fix exception message in `Uuid::calculateUuidTime()`. + * Update composer.json to reflect new repository and package name. + +## 2.8.2 + +_Released: 2015-07-23_ + + * Ensure the release tag makes it into the rhumsaa/uuid package. + * Minor documentation changes. + +## 2.8.1 + +_Released: 2015-06-16_ + + * Use `passthru()` and output buffering in `getIfconfig()`. + * Cache the system node in a static variable so that we process it only once per runtime. + * Set ramsey/uuid as a replacement for rhumsaa/uuid in composer.json. + * Documentation updates and corrections. + +## 2.8.0 + +_Released: 2014-11-09_ + + * Added static `fromInteger()` method to create UUIDs from string integer or `\Moontoast\Math\BigNumber`. + * Friendlier Doctrine conversion to Uuid or string. + * Documentation fixes. + +## 2.7.4 + +_Released: 2014-10-29_ + + * Changed loop in `generateBytes()` from `foreach` to `for`; see #33 + * Use `toString()` in README examples to avoid confusion + * Exclude build/development tools from releases using .gitattributes + * Set timezone properly for tests + +## 2.7.3 + +_Released: 2014-08-27_ + + * Fixed upper range for `mt_rand` used in version 4 UUIDs + +## 2.7.2 + +_Released: 2014-07-28_ + + * Upgraded to PSR-4 autoloading + * Testing upgrades: + * Testing against PHP 5.6 + * Testing with PHPUnit 4 + * Using Coveralls.io to generate code coverage reports + * Documentation fixes + +## 2.7.1 + +_Released: 2014-02-19_ + + * Moved moontoast/math and symfony/console to require-dev; fixes #20 + * Now supporting symfony/console for 2.3 (LTS version); fixes #21 + * Updated tests to run even when dev packages are not installed (skips tests if requirements are not met) + +## 2.7.0 + +_Released: 2014-01-31_ + + * Moved UUID validation regex pattern into constant for external use (`Uuid::VALID_PATTERN`) + +## 2.6.1 + +_Released: 2014-01-27_ + + * Fixed bug where `uuid` console application could not find the Composer autoloader when installed in another project + +## 2.6.0 + +_Released: 2014-01-17_ + + * Introduced `uuid` console application for generating and decoding UUIDs from CLI (run `./bin/uuid` for details) + * Added `Uuid::getInteger()` to retrieve a Moontoast\Math\BigNumber representation of the 128-bit integer representing the UUID + * Added `Uuid::getHex()` to retrieve the hexadecimal representation of the UUID + * Now using netstat on Linux to capture the node for a version 1 UUID + * Now requiring Moontoast\Math as part of the regular package requirements, not just the dev requirements + +## 2.5.0 + +_Released: 2013-10-30_ + + * Using `openssl_random_pseudo_bytes()`, if available, to generate random bytes, by merging in PR #15 from @dfreudenberger + * Fixed test for Rhumsaa\Uuid\Doctrine\UuidType, by merging in PR #17 from @dfreudenberger + * Documentation fixes + +## 2.4.0 + +_Released: 2013-07-29_ + + * `Uuid::getVersion()` now returns null if the UUID isn't an RFC 4122 variant + * `Uuid::fromString()` now supports a 128-bit integer formatted as a hexadecimal string (UUID without dashes) + * Tests have been greatly enhanced, borrowing from the Python UUID library + +## 2.3.0 + +_Released: 2013-07-16_ + + * Added `Uuid::fromBytes()` by merging in PR #14 from @asm89 + +## 2.2.0 + +_Released: 2013-07-04_ + + * Added `Doctrine\UuidType::requiresSQLCommentHint()` method by merging in PR #13 from @zerrvox + * Removed `"minimum-stability": "dev"` from composer.json + +## 2.1.2 + +_Released: 2013-07-03_ + + * @ericthelin found cases where the system node was coming back with uppercase hexadecimal digits; this ensures that case in the node is converted to lowercase + +## 2.1.1 + +_Released: 2013-04-29_ + + * Fixed NIL bug in `Uuid::isValid()` method, reported by @ocubom in PR #11 + +## 2.1.0 + +_Released: 2013-04-15_ + + * Added static `Uuid::isValid()` method for checking whether a string is a valid UUID + +## 2.0.0 + +_Released: 2013-02-11_ + + * Break: `Uuid` class is now marked as "final" + * Break: `Uuid::getLeastSignificantBits()` no longer returns an integer on 64-bit platforms; it requires `moontoast/math` + * Break: `Uuid::getMostSignificantBits()` no longer returns an integer on 64-bit platforms; it requires `moontoast/math` + * Break: Moved `UnsupportedOperationException` to the `Exception` subnamespace + * Added support for 32-bit platforms + * Added generated API documentation to the repository + +## 1.1.2 + +_Released: 2012-11-29_ + + * Relaxed Doctrine type conversion rules + +## 1.1.1 + +_Released: 2012-08-27_ + + * Removed `final` keyword from `Uuid` class + +## 1.1.0 + +_Released: 2012-08-06_ + + * Added `Doctrine\UuidType` as a field mapping type for the Doctrine Database Abstraction Layer (DBAL) + * Improved tests and code coverage + +## 1.0.0 + +_Released: 2012-07-19_ + + * Initial release + + +[paragonie/random_compat]: https://github.com/paragonie/random_compat +[collision issue]: https://github.com/ramsey/uuid/issues/80 diff --git a/vendor/ramsey/uuid/CODE_OF_CONDUCT.md b/vendor/ramsey/uuid/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..9c207259b --- /dev/null +++ b/vendor/ramsey/uuid/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project maintainer at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/ramsey/uuid/CONTRIBUTING.md b/vendor/ramsey/uuid/CONTRIBUTING.md new file mode 100644 index 000000000..4cde9b840 --- /dev/null +++ b/vendor/ramsey/uuid/CONTRIBUTING.md @@ -0,0 +1,75 @@ +# Contributing + +Contributions are welcome. We accept pull requests on [GitHub](https://github.com/ramsey/uuid). + +This project adheres to a [Contributor Code of Conduct](https://github.com/ramsey/uuid/blob/master/CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code. + +## Team members + +* [Ben Ramsey](https://github.com/ramsey) - original author and maintainer +* [Marijn Huizendveld](https://github.com/marijn) - contributor, author of UUID type definition for Doctrine DBAL +* [Thibaud Fabre](https://github.com/aztech-dev) - contributor, lead developer for version 3.0.0 re-architecture + +## Communication Channels + +You can find help and discussion in the following places: + +* GitHub Issues: +* Wiki: + +## Reporting Bugs + +Bugs are tracked in our project's [issue tracker](https://github.com/ramsey/uuid/issues). + +When submitting a bug report, please include enough information for us to reproduce the bug. A good bug report includes the following sections: + +* Expected outcome +* Actual outcome +* Steps to reproduce, including sample code +* Any other information that will help us debug and reproduce the issue, including stack traces, system/environment information, and screenshots + +**Please do not include passwords or any personally identifiable information in your bug report and sample code.** + +## Fixing Bugs + +We welcome pull requests to fix bugs! + +If you see a bug report that you'd like to fix, please feel free to do so. Following the directions and guidelines described in the "Adding New Features" section below, you may create bugfix branches and send us pull requests. + +## Adding New Features + +If you have an idea for a new feature, it's a good idea to check out our [issues](https://github.com/ramsey/uuid/issues) or active [pull requests](https://github.com/ramsey/uuid/pulls) first to see if the feature is already being worked on. If not, feel free to submit an issue first, asking whether the feature is beneficial to the project. This will save you from doing a lot of development work only to have your feature rejected. We don't enjoy rejecting your hard work, but some features just don't fit with the goals of the project. + +When you do begin working on your feature, here are some guidelines to consider: + +* Your pull request description should clearly detail the changes you have made. We will use this description to add to our CHANGELOG. If there is no description or it does not adequately describe your feature, we will ask you to update the description. +* We following the **[PSR-2 coding standard](http://www.php-fig.org/psr/psr-2/)**. Please ensure your code does, too. +* Please **write tests** for any new features you add. +* Please **ensure that tests pass** before submitting your pull request. We have Travis CI automatically running tests for pull requests. However, running the tests locally will help save time. +* **Use topic/feature branches.** Please do not ask us to pull from your master branch. +* **Submit one feature per pull request.** If you have multiple features you wish to submit, please break them up into separate pull requests. +* **Send coherent history**. Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting. + +## Running Tests + +The following tests must pass before we will accept a pull request. If any of these do not pass, it will result in a complete build failure. Before you can run these, be sure to `composer install`. + +``` +composer test +``` + +### Locally Test With Emulated MIPS Architecture + +The following commands use [Vagrant](https://www.vagrantup.com/) to start an Ubuntu VM, install necessary dependencies, and then run the `tools/run-tests.sh` script that will download a Docker image emulating the MIPS architecture. This is especially helpful for testing UUID generation in a big-endian environment. + +``` +vagrant init ubuntu/trusty64 +vagrant up +vagrant ssh +sudo apt-get install docker.io qemu-user-static php5-cli php5-curl +cd /vagrant +curl -sS https://getcomposer.org/installer | php +php composer.phar install --no-interaction --prefer-dist +mkdir -p build/logs +ARCH=mips PHP_VERSION=5.6.14 TRAVIS_BUILD_DIR=/vagrant ./tools/run-tests.sh +``` diff --git a/vendor/ramsey/uuid/LICENSE b/vendor/ramsey/uuid/LICENSE new file mode 100644 index 000000000..753a4c9c8 --- /dev/null +++ b/vendor/ramsey/uuid/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012-2018 Ben Ramsey + +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. diff --git a/vendor/ramsey/uuid/README.md b/vendor/ramsey/uuid/README.md new file mode 100644 index 000000000..b6557abbc --- /dev/null +++ b/vendor/ramsey/uuid/README.md @@ -0,0 +1,159 @@ +# ramsey/uuid + +_NOTICE: Formerly known as `rhumsaa/uuid`, The package and namespace names have changed to `ramsey/uuid` and `Ramsey\Uuid`, respectively._ + +[![Source Code][badge-source]][source] +[![Latest Version][badge-release]][release] +[![Software License][badge-license]][license] +[![Build Status][badge-build]][build] +[![Coverage Status][badge-coverage]][coverage] +[![Total Downloads][badge-downloads]][downloads] + +ramsey/uuid is a PHP 5.4+ library for generating and working with [RFC 4122][rfc4122] version 1, 3, 4, and 5 universally unique identifiers (UUID). + +This project adheres to a [Contributor Code of Conduct][conduct]. By participating in this project and its community, you are expected to uphold this code. + + +## About + +From [Wikipedia](http://en.wikipedia.org/wiki/Universally_unique_identifier): + +> The intent of UUIDs is to enable distributed systems to uniquely identify information without significant central coordination. In this context the word unique should be taken to mean "practically unique" rather than "guaranteed unique". Since the identifiers have a finite size, it is possible for two differing items to share the same identifier. The identifier size and generation process need to be selected so as to make this sufficiently improbable in practice. Anyone can create a UUID and use it to identify something with reasonable confidence that the same identifier will never be unintentionally created by anyone to identify something else. Information labeled with UUIDs can therefore be later combined into a single database without needing to resolve identifier (ID) conflicts. + +Much inspiration for this library came from the [Java][javauuid] and [Python][pyuuid] UUID libraries. + + +## Installation + +The preferred method of installation is via [Packagist][] and [Composer][]. Run the following command to install the package and add it as a requirement to your project's `composer.json`: + +```bash +composer require ramsey/uuid +``` + + +## Upgrading from 2.x to 3.x + +While we have made significant internal changes to the library, we have made every effort to ensure a seamless upgrade path from the 2.x series of this library to 3.x. + +One major breaking change is the transition from the `Rhumsaa` root namespace to `Ramsey`. In most cases, all you will need is to change the namespace to `Ramsey` in your code, and everything will "just work." + +Here are full details on the breaking changes to the public API of this library: + +1. All namespace references of `Rhumsaa` have changed to `Ramsey`. Simply change the namespace to `Ramsey` in your code and everything should work. +2. The console application has moved to [ramsey/uuid-console](https://packagist.org/packages/ramsey/uuid-console). If using the console functionality, use Composer to require `ramsey/uuid-console`. +3. The Doctrine field type mapping has moved to [ramsey/uuid-doctrine](https://packagist.org/packages/ramsey/uuid-doctrine). If using the Doctrine functionality, use Composer to require `ramsey/uuid-doctrine`. + + +## What to do if you see a "rhumsaa/uuid is abandoned" message + +When installing your project's dependencies using Composer, you might see the following message: + +``` +Package rhumsaa/uuid is abandoned, you should avoid using it. Use ramsey/uuid instead. +``` + +Don't panic. Simply execute the following commands with Composer: + +``` bash +composer remove rhumsaa/uuid +composer require ramsey/uuid=^2.9 +``` + +After doing so, you will have the latest ramsey/uuid package in the 2.x series, and there will be no need to modify any code; the namespace in the 2.x series is still `Rhumsaa`. + + +## Requirements + +Some methods in this library have requirements due to integer size restrictions on 32-bit and 64-bit builds of PHP. A 64-bit build of PHP and the [Moontoast\Math][] library are recommended. However, this library is designed to work on 32-bit builds of PHP without Moontoast\Math, with some degraded functionality. Please check the API documentation for more information. + +If a particular requirement is not present, then an `UnsatisfiedDependencyException` is thrown, allowing one to catch a bad call in an environment where the call is not supported and gracefully degrade. + + +## API documentation + +The [latest class API documentation][apidocs] is available online. + +This project uses [ApiGen](http://apigen.org/) to generate this documentation. To generate the documentation on your own, install dev dependencies and run the following command from the root of the project: + +``` +composer build-docs +``` + +This will generate documentation in the `build/apidocs/` folder. + + +## Examples + +See the [cookbook on the wiki][wiki-cookbook] for more examples and approaches to specific use-cases. + +```php +toString() . "\n"; // i.e. e4eaaaf2-d142-11e1-b3e4-080027620cdd + + // Generate a version 3 (name-based and hashed with MD5) UUID object + $uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net'); + echo $uuid3->toString() . "\n"; // i.e. 11a38b9a-b3da-360f-9353-a5a725514269 + + // Generate a version 4 (random) UUID object + $uuid4 = Uuid::uuid4(); + echo $uuid4->toString() . "\n"; // i.e. 25769c6c-d34d-4bfe-ba98-e0ee856f3e7a + + // Generate a version 5 (name-based and hashed with SHA1) UUID object + $uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net'); + echo $uuid5->toString() . "\n"; // i.e. c4a760a8-dbcf-5254-a0d9-6a4474bd1b62 + +} catch (UnsatisfiedDependencyException $e) { + + // Some dependency was not met. Either the method cannot be called on a + // 32-bit system, or it can, but it relies on Moontoast\Math to be present. + echo 'Caught exception: ' . $e->getMessage() . "\n"; + +} +``` + + +## Contributing + +Contributions are welcome! Please read [CONTRIBUTING][] for details. + + +## Copyright and license + +The ramsey/uuid library is copyright © [Ben Ramsey](https://benramsey.com/) and licensed for use under the MIT License (MIT). Please see [LICENSE][] for more information. + + + +[rfc4122]: http://tools.ietf.org/html/rfc4122 +[conduct]: https://github.com/ramsey/uuid/blob/master/CODE_OF_CONDUCT.md +[javauuid]: http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html +[pyuuid]: http://docs.python.org/3/library/uuid.html +[packagist]: https://packagist.org/packages/ramsey/uuid +[composer]: http://getcomposer.org/ +[moontoast\math]: https://packagist.org/packages/moontoast/math +[apidocs]: http://docs.benramsey.com/ramsey-uuid/latest/ +[wiki-cookbook]: https://github.com/ramsey/uuid/wiki/Ramsey%5CUuid-Cookbook +[contributing]: https://github.com/ramsey/uuid/blob/master/CONTRIBUTING.md + +[badge-source]: https://img.shields.io/badge/source-ramsey/uuid-blue.svg?style=flat-square +[badge-release]: https://img.shields.io/packagist/v/ramsey/uuid.svg?style=flat-square +[badge-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[badge-build]: https://img.shields.io/travis/ramsey/uuid/master.svg?style=flat-square +[badge-coverage]: https://img.shields.io/coveralls/ramsey/uuid/master.svg?style=flat-square +[badge-downloads]: https://img.shields.io/packagist/dt/ramsey/uuid.svg?style=flat-square + +[source]: https://github.com/ramsey/uuid +[release]: https://packagist.org/packages/ramsey/uuid +[license]: https://github.com/ramsey/uuid/blob/master/LICENSE +[build]: https://travis-ci.org/ramsey/uuid +[coverage]: https://coveralls.io/r/ramsey/uuid?branch=master +[downloads]: https://packagist.org/packages/ramsey/uuid diff --git a/vendor/ramsey/uuid/composer.json b/vendor/ramsey/uuid/composer.json new file mode 100644 index 000000000..952120cd4 --- /dev/null +++ b/vendor/ramsey/uuid/composer.json @@ -0,0 +1,80 @@ +{ + "name": "ramsey/uuid", + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "type": "library", + "keywords": ["uuid", "identifier", "guid"], + "homepage": "https://github.com/ramsey/uuid", + "license": "MIT", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid" + }, + "require": { + "php": "^5.4 || ^7.0", + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type.", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid" + }, + "autoload": { + "psr-4": {"Ramsey\\Uuid\\": "src/"} + }, + "autoload-dev": { + "psr-4": {"Ramsey\\Uuid\\Test\\": "tests/"} + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "scripts": { + "lint": "parallel-lint src tests", + "phpunit": "phpunit --verbose --colors=always", + "phpcs": "phpcs src tests --standard=psr2 -sp --colors", + "test": [ + "@lint", + "@phpunit", + "@phpcs" + ] + }, + "config": { + "sort-packages": true + } +} diff --git a/vendor/ramsey/uuid/src/BinaryUtils.php b/vendor/ramsey/uuid/src/BinaryUtils.php new file mode 100644 index 000000000..f04a9d9c1 --- /dev/null +++ b/vendor/ramsey/uuid/src/BinaryUtils.php @@ -0,0 +1,43 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Builder; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Uuid; + +/** + * DefaultUuidBuilder is the default UUID builder for ramsey/uuid; it builds + * instances of Uuid objects + */ +class DefaultUuidBuilder implements UuidBuilderInterface +{ + /** + * @var NumberConverterInterface + */ + private $converter; + + /** + * Constructs the DefaultUuidBuilder + * + * @param NumberConverterInterface $converter The number converter to use when constructing the Uuid + */ + public function __construct(NumberConverterInterface $converter) + { + $this->converter = $converter; + } + + /** + * Builds a Uuid + * + * @param CodecInterface $codec The codec to use for building this Uuid + * @param array $fields An array of fields from which to construct the Uuid; + * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @return Uuid + */ + public function build(CodecInterface $codec, array $fields) + { + return new Uuid($fields, $this->converter, $codec); + } +} diff --git a/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php b/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php new file mode 100644 index 000000000..7edb6deb7 --- /dev/null +++ b/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php @@ -0,0 +1,53 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Builder; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\DegradedUuid; + +/** + * DegradedUuidBuilder builds instances of DegradedUuid + */ +class DegradedUuidBuilder implements UuidBuilderInterface +{ + /** + * @var NumberConverterInterface + */ + private $converter; + + /** + * Constructs the DegradedUuidBuilder + * + * @param NumberConverterInterface $converter The number converter to use when constructing the DegradedUuid + */ + public function __construct(NumberConverterInterface $converter) + { + $this->converter = $converter; + } + + /** + * Builds a DegradedUuid + * + * @param CodecInterface $codec The codec to use for building this DegradedUuid + * @param array $fields An array of fields from which to construct the DegradedUuid; + * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @return DegradedUuid + */ + public function build(CodecInterface $codec, array $fields) + { + return new DegradedUuid($fields, $this->converter, $codec); + } +} diff --git a/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php b/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php new file mode 100644 index 000000000..e4e990109 --- /dev/null +++ b/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php @@ -0,0 +1,34 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Builder; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\UuidInterface; + +/** + * UuidBuilderInterface builds instances UuidInterface + */ +interface UuidBuilderInterface +{ + /** + * Builds an instance of a UuidInterface + * + * @param CodecInterface $codec The codec to use for building this UuidInterface instance + * @param array $fields An array of fields from which to construct a UuidInterface instance; + * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @return UuidInterface + */ + public function build(CodecInterface $codec, array $fields); +} diff --git a/vendor/ramsey/uuid/src/Codec/CodecInterface.php b/vendor/ramsey/uuid/src/Codec/CodecInterface.php new file mode 100644 index 000000000..6ea20544f --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/CodecInterface.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Codec; + +use Ramsey\Uuid\UuidInterface; + +/** + * CodecInterface represents a UUID coder-decoder + */ +interface CodecInterface +{ + /** + * Encodes a UuidInterface as a string representation of a UUID + * + * @param UuidInterface $uuid + * @return string Hexadecimal string representation of a UUID + */ + public function encode(UuidInterface $uuid); + + /** + * Encodes a UuidInterface as a binary representation of a UUID + * + * @param UuidInterface $uuid + * @return string Binary string representation of a UUID + */ + public function encodeBinary(UuidInterface $uuid); + + /** + * Decodes a string representation of a UUID into a UuidInterface object instance + * + * @param string $encodedUuid + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decode($encodedUuid); + + /** + * Decodes a binary representation of a UUID into a UuidInterface object instance + * + * @param string $bytes + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + * @throws \InvalidArgumentException if string has not 16 characters + */ + public function decodeBytes($bytes); +} diff --git a/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php b/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php new file mode 100644 index 000000000..864980b30 --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php @@ -0,0 +1,102 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Codec; + +use Ramsey\Uuid\UuidInterface; + +/** + * GuidStringCodec encodes and decodes globally unique identifiers (GUID) + * + * @link https://en.wikipedia.org/wiki/Globally_unique_identifier + */ +class GuidStringCodec extends StringCodec +{ + /** + * Encodes a UuidInterface as a string representation of a GUID + * + * @param UuidInterface $uuid + * @return string Hexadecimal string representation of a GUID + */ + public function encode(UuidInterface $uuid) + { + $components = array_values($uuid->getFieldsHex()); + + // Swap byte-order on the first three fields + $this->swapFields($components); + + return vsprintf( + '%08s-%04s-%04s-%02s%02s-%012s', + $components + ); + } + + /** + * Encodes a UuidInterface as a binary representation of a GUID + * + * @param UuidInterface $uuid + * @return string Binary string representation of a GUID + */ + public function encodeBinary(UuidInterface $uuid) + { + $components = array_values($uuid->getFieldsHex()); + + return hex2bin(implode('', $components)); + } + + /** + * Decodes a string representation of a GUID into a UuidInterface object instance + * + * @param string $encodedUuid + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decode($encodedUuid) + { + $components = $this->extractComponents($encodedUuid); + + $this->swapFields($components); + + return $this->getBuilder()->build($this, $this->getFields($components)); + } + + /** + * Decodes a binary representation of a GUID into a UuidInterface object instance + * + * @param string $bytes + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decodeBytes($bytes) + { + // Specifically call parent::decode to preserve correct byte order + return parent::decode(bin2hex($bytes)); + } + + /** + * Swaps fields to support GUID byte order + * + * @param array $components An array of UUID components (the UUID exploded on its dashes) + * @return void + */ + protected function swapFields(array &$components) + { + $hex = unpack('H*', pack('L', hexdec($components[0]))); + $components[0] = $hex[1]; + $hex = unpack('H*', pack('S', hexdec($components[1]))); + $components[1] = $hex[1]; + $hex = unpack('H*', pack('S', hexdec($components[2]))); + $components[2] = $hex[1]; + } +} diff --git a/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php b/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php new file mode 100644 index 000000000..3257759c9 --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php @@ -0,0 +1,68 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ +namespace Ramsey\Uuid\Codec; + +use InvalidArgumentException; +use Ramsey\Uuid\UuidInterface; + +/** + * OrderedTimeCodec optimizes the bytes to increment UUIDs when time goes by, to improve database INSERTs. + * The string value will be unchanged from StringCodec. Only works for UUID type 1. + */ +class OrderedTimeCodec extends StringCodec +{ + + /** + * Encodes a UuidInterface as an optimized binary representation of a UUID + * + * @param UuidInterface $uuid + * @return string Binary string representation of a UUID + */ + public function encodeBinary(UuidInterface $uuid) + { + $fields = $uuid->getFieldsHex(); + + $optimized = [ + $fields['time_hi_and_version'], + $fields['time_mid'], + $fields['time_low'], + $fields['clock_seq_hi_and_reserved'], + $fields['clock_seq_low'], + $fields['node'], + ]; + + return hex2bin(implode('', $optimized)); + } + + /** + * Decodes an optimized binary representation of a UUID into a UuidInterface object instance + * + * @param string $bytes + * @return UuidInterface + * @throws \InvalidArgumentException if string has not 16 characters + */ + public function decodeBytes($bytes) + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException('$bytes string should contain 16 characters.'); + } + + $hex = unpack('H*', $bytes)[1]; + + // Rearrange the fields to their original order + $hex = substr($hex, 8, 4) . substr($hex, 12, 4) . substr($hex, 4, 4) . substr($hex, 0, 4) . substr($hex, 16); + + return $this->decode($hex); + } +} diff --git a/vendor/ramsey/uuid/src/Codec/StringCodec.php b/vendor/ramsey/uuid/src/Codec/StringCodec.php new file mode 100644 index 000000000..7f352065c --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/StringCodec.php @@ -0,0 +1,170 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Codec; + +use InvalidArgumentException; +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Exception\InvalidUuidStringException; +use Ramsey\Uuid\Uuid; +use Ramsey\Uuid\UuidInterface; + +/** + * StringCodec encodes and decodes RFC 4122 UUIDs + * + * @link http://tools.ietf.org/html/rfc4122 + */ +class StringCodec implements CodecInterface +{ + /** + * @var UuidBuilderInterface + */ + private $builder; + + /** + * Constructs a StringCodec for use encoding and decoding UUIDs + * + * @param UuidBuilderInterface $builder The UUID builder to use when encoding UUIDs + */ + public function __construct(UuidBuilderInterface $builder) + { + $this->builder = $builder; + } + + /** + * Encodes a UuidInterface as a string representation of a UUID + * + * @param UuidInterface $uuid + * @return string Hexadecimal string representation of a UUID + */ + public function encode(UuidInterface $uuid) + { + $fields = array_values($uuid->getFieldsHex()); + + return vsprintf( + '%08s-%04s-%04s-%02s%02s-%012s', + $fields + ); + } + + /** + * Encodes a UuidInterface as a binary representation of a UUID + * + * @param UuidInterface $uuid + * @return string Binary string representation of a UUID + */ + public function encodeBinary(UuidInterface $uuid) + { + return hex2bin($uuid->getHex()); + } + + /** + * Decodes a string representation of a UUID into a UuidInterface object instance + * + * @param string $encodedUuid + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decode($encodedUuid) + { + $components = $this->extractComponents($encodedUuid); + $fields = $this->getFields($components); + + return $this->builder->build($this, $fields); + } + + /** + * Decodes a binary representation of a UUID into a UuidInterface object instance + * + * @param string $bytes + * @return UuidInterface + * @throws \InvalidArgumentException if string has not 16 characters + */ + public function decodeBytes($bytes) + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException('$bytes string should contain 16 characters.'); + } + + $hexUuid = unpack('H*', $bytes); + + return $this->decode($hexUuid[1]); + } + + /** + * Returns the UUID builder + * + * @return UuidBuilderInterface + */ + protected function getBuilder() + { + return $this->builder; + } + + /** + * Returns an array of UUID components (the UUID exploded on its dashes) + * + * @param string $encodedUuid + * @return array + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + protected function extractComponents($encodedUuid) + { + $nameParsed = str_replace(array( + 'urn:', + 'uuid:', + '{', + '}', + '-' + ), '', $encodedUuid); + + // We have stripped out the dashes and are breaking up the string using + // substr(). In this way, we can accept a full hex value that doesn't + // contain dashes. + $components = array( + substr($nameParsed, 0, 8), + substr($nameParsed, 8, 4), + substr($nameParsed, 12, 4), + substr($nameParsed, 16, 4), + substr($nameParsed, 20) + ); + + $nameParsed = implode('-', $components); + + if (!Uuid::isValid($nameParsed)) { + throw new InvalidUuidStringException('Invalid UUID string: ' . $encodedUuid); + } + + return $components; + } + + /** + * Returns the fields that make up this UUID + * + * @see \Ramsey\Uuid\UuidInterface::getFieldsHex() + * @param array $components + * @return array + */ + protected function getFields(array $components) + { + return array( + 'time_low' => str_pad($components[0], 8, '0', STR_PAD_LEFT), + 'time_mid' => str_pad($components[1], 4, '0', STR_PAD_LEFT), + 'time_hi_and_version' => str_pad($components[2], 4, '0', STR_PAD_LEFT), + 'clock_seq_hi_and_reserved' => str_pad(substr($components[3], 0, 2), 2, '0', STR_PAD_LEFT), + 'clock_seq_low' => str_pad(substr($components[3], 2), 2, '0', STR_PAD_LEFT), + 'node' => str_pad($components[4], 12, '0', STR_PAD_LEFT) + ); + } +} diff --git a/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php b/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php new file mode 100644 index 000000000..2c4ded89e --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php @@ -0,0 +1,107 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ +namespace Ramsey\Uuid\Codec; + +use Ramsey\Uuid\UuidInterface; + +/** + * TimestampLastCombCodec encodes and decodes COMB UUIDs which have the timestamp as the first 48 bits. + * To be used with MySQL, PostgreSQL, Oracle. + */ +class TimestampFirstCombCodec extends StringCodec +{ + /** + * Encodes a UuidInterface as a string representation of a timestamp first COMB UUID + * + * @param UuidInterface $uuid + * + * @return string Hexadecimal string representation of a GUID + */ + public function encode(UuidInterface $uuid) + { + $sixPieceComponents = array_values($uuid->getFieldsHex()); + + $this->swapTimestampAndRandomBits($sixPieceComponents); + + return vsprintf( + '%08s-%04s-%04s-%02s%02s-%012s', + $sixPieceComponents + ); + } + + /** + * Encodes a UuidInterface as a binary representation of timestamp first COMB UUID + * + * @param UuidInterface $uuid + * + * @return string Binary string representation of timestamp first COMB UUID + */ + public function encodeBinary(UuidInterface $uuid) + { + $stringEncoding = $this->encode($uuid); + + return hex2bin(str_replace('-', '', $stringEncoding)); + } + + /** + * Decodes a string representation of timestamp first COMB UUID into a UuidInterface object instance + * + * @param string $encodedUuid + * + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decode($encodedUuid) + { + $fivePieceComponents = $this->extractComponents($encodedUuid); + + $this->swapTimestampAndRandomBits($fivePieceComponents); + + return $this->getBuilder()->build($this, $this->getFields($fivePieceComponents)); + } + + /** + * Decodes a binary representation of timestamp first COMB UUID into a UuidInterface object instance + * + * @param string $bytes + * + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function decodeBytes($bytes) + { + return $this->decode(bin2hex($bytes)); + } + + /** + * Swaps the first 48 bits with the last 48 bits + * + * @param array $components An array of UUID components (the UUID exploded on its dashes) + * + * @return void + */ + protected function swapTimestampAndRandomBits(array &$components) + { + $last48Bits = $components[4]; + if (count($components) == 6) { + $last48Bits = $components[5]; + $components[5] = $components[0] . $components[1]; + } else { + $components[4] = $components[0] . $components[1]; + } + + $components[0] = substr($last48Bits, 0, 8); + $components[1] = substr($last48Bits, 8, 4); + } +} diff --git a/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php b/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php new file mode 100644 index 000000000..0cdd009a4 --- /dev/null +++ b/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php @@ -0,0 +1,23 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ +namespace Ramsey\Uuid\Codec; + +/** + * TimestampLastCombCodec encodes and decodes COMB UUIDs which have the timestamp as the last 48 bits. + * To be used with MSSQL. + */ +class TimestampLastCombCodec extends StringCodec +{ + +} diff --git a/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php b/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php new file mode 100644 index 000000000..d23512256 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php @@ -0,0 +1,54 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter\Number; + +use Moontoast\Math\BigNumber; +use Ramsey\Uuid\Converter\NumberConverterInterface; + +/** + * BigNumberConverter converts UUIDs from hexadecimal characters into + * moontoast/math `BigNumber` representations of integers and vice versa + */ +class BigNumberConverter implements NumberConverterInterface +{ + /** + * Converts a hexadecimal number into a `Moontoast\Math\BigNumber` representation + * + * @param string $hex The hexadecimal string representation to convert + * @return BigNumber + */ + public function fromHex($hex) + { + $number = BigNumber::convertToBase10($hex, 16); + + return new BigNumber($number); + } + + /** + * Converts an integer or `Moontoast\Math\BigNumber` integer representation + * into a hexadecimal string representation + * + * @param int|string|BigNumber $integer An integer or `Moontoast\Math\BigNumber` + * @return string Hexadecimal string + */ + public function toHex($integer) + { + if (!$integer instanceof BigNumber) { + $integer = new BigNumber($integer); + } + + return BigNumber::convertFromBase10($integer, 16); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php b/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php new file mode 100644 index 000000000..96a011c65 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter\Number; + +use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Converter\NumberConverterInterface; + +/** + * DegradedNumberConverter throws `UnsatisfiedDependencyException` exceptions + * if attempting to use number conversion functionality in an environment that + * does not support large integers (i.e. when moontoast/math is not available) + */ +class DegradedNumberConverter implements NumberConverterInterface +{ + /** + * Throws an `UnsatisfiedDependencyException` + * + * @param string $hex The hexadecimal string representation to convert + * @return void + * @throws UnsatisfiedDependencyException + */ + public function fromHex($hex) + { + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' without support for large ' + . 'integers, since integer is an unsigned ' + . '128-bit integer; Moontoast\Math\BigNumber is required.' + ); + } + + /** + * Throws an `UnsatisfiedDependencyException` + * + * @param mixed $integer An integer representation to convert + * @return void + * @throws UnsatisfiedDependencyException + */ + public function toHex($integer) + { + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' without support for large ' + . 'integers, since integer is an unsigned ' + . '128-bit integer; Moontoast\Math\BigNumber is required. ' + ); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php b/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php new file mode 100644 index 000000000..9505e8c6d --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php @@ -0,0 +1,46 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter; + +/** + * NumberConverterInterface converts UUIDs from hexadecimal characters into + * representations of integers and vice versa + */ +interface NumberConverterInterface +{ + /** + * Converts a hexadecimal number into an integer representation of the number + * + * The integer representation returned may be an object or a string + * representation of the integer, depending on the implementation. + * + * @param string $hex The hexadecimal string representation to convert + * @return mixed + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + */ + public function fromHex($hex); + + /** + * Converts an integer representation into a hexadecimal string representation + * of the number + * + * @param mixed $integer An integer representation to convert; this may be + * a true integer, a string integer, or a object representation that + * this converter can understand + * @return string Hexadecimal string + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + */ + public function toHex($integer); +} diff --git a/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php new file mode 100644 index 000000000..d47c80191 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter\Time; + +use Moontoast\Math\BigNumber; +use Ramsey\Uuid\Converter\TimeConverterInterface; + +/** + * BigNumberTimeConverter uses the moontoast/math library's `BigNumber` to + * provide facilities for converting parts of time into representations that may + * be used in UUIDs + */ +class BigNumberTimeConverter implements TimeConverterInterface +{ + /** + * Uses the provided seconds and micro-seconds to calculate the time_low, + * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs + * + * @param string $seconds + * @param string $microSeconds + * @return string[] An array containing `low`, `mid`, and `high` keys + * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + */ + public function calculateTime($seconds, $microSeconds) + { + $uuidTime = new BigNumber('0'); + + $sec = new BigNumber($seconds); + $sec->multiply('10000000'); + + $usec = new BigNumber($microSeconds); + $usec->multiply('10'); + + $uuidTime->add($sec) + ->add($usec) + ->add('122192928000000000'); + + $uuidTimeHex = sprintf('%016s', $uuidTime->convertToBase(16)); + + return array( + 'low' => substr($uuidTimeHex, 8), + 'mid' => substr($uuidTimeHex, 4, 4), + 'hi' => substr($uuidTimeHex, 0, 4), + ); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php new file mode 100644 index 000000000..b94589cd3 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php @@ -0,0 +1,42 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter\Time; + +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; + +/** + * DegradedTimeConverter throws `UnsatisfiedDependencyException` exceptions + * if attempting to use time conversion functionality in an environment that + * does not support large integers (i.e. when moontoast/math is not available) + */ +class DegradedTimeConverter implements TimeConverterInterface +{ + /** + * Throws an `UnsatisfiedDependencyException` + * + * @param string $seconds + * @param string $microSeconds + * @return void + * @throws UnsatisfiedDependencyException if called on a 32-bit system and `Moontoast\Math\BigNumber` is not present + */ + public function calculateTime($seconds, $microSeconds) + { + throw new UnsatisfiedDependencyException( + 'When calling ' . __METHOD__ . ' on a 32-bit system, ' + . 'Moontoast\Math\BigNumber must be present.' + ); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php new file mode 100644 index 000000000..6a9da74b8 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php @@ -0,0 +1,47 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter\Time; + +use Ramsey\Uuid\Converter\TimeConverterInterface; + +/** + * PhpTimeConverter uses built-in PHP functions and standard math operations + * available to the PHP programming language to provide facilities for + * converting parts of time into representations that may be used in UUIDs + */ +class PhpTimeConverter implements TimeConverterInterface +{ + /** + * Uses the provided seconds and micro-seconds to calculate the time_low, + * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs + * + * @param string $seconds + * @param string $microSeconds + * @return string[] An array containing `low`, `mid`, and `high` keys + * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + */ + public function calculateTime($seconds, $microSeconds) + { + // 0x01b21dd213814000 is the number of 100-ns intervals between the + // UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. + $uuidTime = ($seconds * 10000000) + ($microSeconds * 10) + 0x01b21dd213814000; + + return array( + 'low' => sprintf('%08x', $uuidTime & 0xffffffff), + 'mid' => sprintf('%04x', ($uuidTime >> 32) & 0xffff), + 'hi' => sprintf('%04x', ($uuidTime >> 48) & 0x0fff), + ); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php b/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php new file mode 100644 index 000000000..382008ac3 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php @@ -0,0 +1,35 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Converter; + +/** + * TimeConverterInterface provides facilities for converting parts of time into + * representations that may be used in UUIDs + */ +interface TimeConverterInterface +{ + /** + * Uses the provided seconds and micro-seconds to calculate the time_low, + * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs + * + * @param string $seconds + * @param string $microSeconds + * @return string[] An array guaranteed to contain `low`, `mid`, and `high` keys + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called on a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + */ + public function calculateTime($seconds, $microSeconds); +} diff --git a/vendor/ramsey/uuid/src/DegradedUuid.php b/vendor/ramsey/uuid/src/DegradedUuid.php new file mode 100644 index 000000000..bcf0be800 --- /dev/null +++ b/vendor/ramsey/uuid/src/DegradedUuid.php @@ -0,0 +1,114 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Exception\UnsupportedOperationException; + +/** + * DegradedUuid represents an RFC 4122 UUID on 32-bit systems + * + * @see Uuid + */ +class DegradedUuid extends Uuid +{ + /** + * @inheritdoc + */ + public function getDateTime() + { + if ($this->getVersion() != 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + $time = $this->converter->fromHex($this->getTimestampHex()); + + $ts = new \Moontoast\Math\BigNumber($time, 20); + $ts->subtract('122192928000000000'); + $ts->divide('10000000.0'); + $ts->round(); + $unixTime = $ts->getValue(); + + return new \DateTime("@{$unixTime}"); + } + + /** + * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when + * called on a 32-bit system + * + * @throws UnsatisfiedDependencyException if called on a 32-bit system + */ + public function getFields() + { + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since some ' + . 'values overflow the system max integer value' + . '; consider calling getFieldsHex instead' + ); + } + + /** + * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when + * called on a 32-bit system + * + * @throws UnsatisfiedDependencyException if called on a 32-bit system + */ + public function getNode() + { + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since node ' + . 'is an unsigned 48-bit integer and can overflow the system ' + . 'max integer value' + . '; consider calling getNodeHex instead' + ); + } + + /** + * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when + * called on a 32-bit system + * + * @throws UnsatisfiedDependencyException if called on a 32-bit system + */ + public function getTimeLow() + { + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since time_low ' + . 'is an unsigned 32-bit integer and can overflow the system ' + . 'max integer value' + . '; consider calling getTimeLowHex instead' + ); + } + + /** + * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when + * called on a 32-bit system + * + * @throws UnsatisfiedDependencyException if called on a 32-bit system + * @throws UnsupportedOperationException If this UUID is not a version 1 UUID + */ + public function getTimestamp() + { + if ($this->getVersion() != 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + throw new UnsatisfiedDependencyException( + 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since timestamp ' + . 'is an unsigned 60-bit integer and can overflow the system ' + . 'max integer value' + . '; consider calling getTimestampHex instead' + ); + } +} diff --git a/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php b/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php new file mode 100644 index 000000000..0e480649d --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Exception; + +/** + * Thrown to indicate that the parsed UUID string is invalid. + */ +class InvalidUuidStringException extends \InvalidArgumentException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php b/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php new file mode 100644 index 000000000..8b5d5d08e --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php @@ -0,0 +1,23 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Exception; + +/** + * Thrown to indicate that the requested operation has dependencies that have not + * been satisfied. + */ +class UnsatisfiedDependencyException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php b/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php new file mode 100644 index 000000000..b371b6823 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Exception; + +/** + * Thrown to indicate that the requested operation is not supported. + */ +class UnsupportedOperationException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/FeatureSet.php b/vendor/ramsey/uuid/src/FeatureSet.php new file mode 100644 index 000000000..56a774eab --- /dev/null +++ b/vendor/ramsey/uuid/src/FeatureSet.php @@ -0,0 +1,333 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Generator\PeclUuidTimeGenerator; +use Ramsey\Uuid\Provider\Node\FallbackNodeProvider; +use Ramsey\Uuid\Provider\Node\RandomNodeProvider; +use Ramsey\Uuid\Provider\Node\SystemNodeProvider; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\Number\BigNumberConverter; +use Ramsey\Uuid\Converter\Number\DegradedNumberConverter; +use Ramsey\Uuid\Converter\Time\BigNumberTimeConverter; +use Ramsey\Uuid\Converter\Time\DegradedTimeConverter; +use Ramsey\Uuid\Converter\Time\PhpTimeConverter; +use Ramsey\Uuid\Provider\Time\SystemTimeProvider; +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Builder\DefaultUuidBuilder; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Codec\StringCodec; +use Ramsey\Uuid\Codec\GuidStringCodec; +use Ramsey\Uuid\Builder\DegradedUuidBuilder; +use Ramsey\Uuid\Generator\RandomGeneratorFactory; +use Ramsey\Uuid\Generator\RandomGeneratorInterface; +use Ramsey\Uuid\Generator\TimeGeneratorFactory; +use Ramsey\Uuid\Generator\TimeGeneratorInterface; +use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Provider\NodeProviderInterface; + +/** + * FeatureSet detects and exposes available features in the current environment + * (32- or 64-bit, available dependencies, etc.) + */ +class FeatureSet +{ + /** + * @var bool + */ + private $disableBigNumber = false; + + /** + * @var bool + */ + private $disable64Bit = false; + + /** + * @var bool + */ + private $ignoreSystemNode = false; + + /** + * @var bool + */ + private $enablePecl = false; + + /** + * @var UuidBuilderInterface + */ + private $builder; + + /** + * @var CodecInterface + */ + private $codec; + + /** + * @var NodeProviderInterface + */ + private $nodeProvider; + + /** + * @var NumberConverterInterface + */ + private $numberConverter; + + /** + * @var RandomGeneratorInterface + */ + private $randomGenerator; + + /** + * @var TimeGeneratorInterface + */ + private $timeGenerator; + + /** + * Constructs a `FeatureSet` for use by a `UuidFactory` to determine or set + * features available to the environment + * + * @param bool $useGuids Whether to build UUIDs using the `GuidStringCodec` + * @param bool $force32Bit Whether to force the use of 32-bit functionality + * (primarily for testing purposes) + * @param bool $forceNoBigNumber Whether to disable the use of moontoast/math + * `BigNumber` (primarily for testing purposes) + * @param bool $ignoreSystemNode Whether to disable attempts to check for + * the system host ID (primarily for testing purposes) + * @param bool $enablePecl Whether to enable the use of the `PeclUuidTimeGenerator` + * to generate version 1 UUIDs + */ + public function __construct( + $useGuids = false, + $force32Bit = false, + $forceNoBigNumber = false, + $ignoreSystemNode = false, + $enablePecl = false + ) { + $this->disableBigNumber = $forceNoBigNumber; + $this->disable64Bit = $force32Bit; + $this->ignoreSystemNode = $ignoreSystemNode; + $this->enablePecl = $enablePecl; + + $this->numberConverter = $this->buildNumberConverter(); + $this->builder = $this->buildUuidBuilder(); + $this->codec = $this->buildCodec($useGuids); + $this->nodeProvider = $this->buildNodeProvider(); + $this->randomGenerator = $this->buildRandomGenerator(); + $this->setTimeProvider(new SystemTimeProvider()); + } + + /** + * Returns the builder configured for this environment + * + * @return UuidBuilderInterface + */ + public function getBuilder() + { + return $this->builder; + } + + /** + * Returns the UUID UUID coder-decoder configured for this environment + * + * @return CodecInterface + */ + public function getCodec() + { + return $this->codec; + } + + /** + * Returns the system node ID provider configured for this environment + * + * @return NodeProviderInterface + */ + public function getNodeProvider() + { + return $this->nodeProvider; + } + + /** + * Returns the number converter configured for this environment + * + * @return NumberConverterInterface + */ + public function getNumberConverter() + { + return $this->numberConverter; + } + + /** + * Returns the random UUID generator configured for this environment + * + * @return RandomGeneratorInterface + */ + public function getRandomGenerator() + { + return $this->randomGenerator; + } + + /** + * Returns the time-based UUID generator configured for this environment + * + * @return TimeGeneratorInterface + */ + public function getTimeGenerator() + { + return $this->timeGenerator; + } + + /** + * Sets the time provider for use in this environment + * + * @param TimeProviderInterface $timeProvider + */ + public function setTimeProvider(TimeProviderInterface $timeProvider) + { + $this->timeGenerator = $this->buildTimeGenerator($timeProvider); + } + + /** + * Determines which UUID coder-decoder to use and returns the configured + * codec for this environment + * + * @param bool $useGuids Whether to build UUIDs using the `GuidStringCodec` + * @return CodecInterface + */ + protected function buildCodec($useGuids = false) + { + if ($useGuids) { + return new GuidStringCodec($this->builder); + } + + return new StringCodec($this->builder); + } + + /** + * Determines which system node ID provider to use and returns the configured + * system node ID provider for this environment + * + * @return NodeProviderInterface + */ + protected function buildNodeProvider() + { + if ($this->ignoreSystemNode) { + return new RandomNodeProvider(); + } + + return new FallbackNodeProvider([ + new SystemNodeProvider(), + new RandomNodeProvider() + ]); + } + + /** + * Determines which number converter to use and returns the configured + * number converter for this environment + * + * @return NumberConverterInterface + */ + protected function buildNumberConverter() + { + if ($this->hasBigNumber()) { + return new BigNumberConverter(); + } + + return new DegradedNumberConverter(); + } + + /** + * Determines which random UUID generator to use and returns the configured + * random UUID generator for this environment + * + * @return RandomGeneratorInterface + */ + protected function buildRandomGenerator() + { + return (new RandomGeneratorFactory())->getGenerator(); + } + + /** + * Determines which time-based UUID generator to use and returns the configured + * time-based UUID generator for this environment + * + * @param TimeProviderInterface $timeProvider + * @return TimeGeneratorInterface + */ + protected function buildTimeGenerator(TimeProviderInterface $timeProvider) + { + if ($this->enablePecl) { + return new PeclUuidTimeGenerator(); + } + + return (new TimeGeneratorFactory( + $this->nodeProvider, + $this->buildTimeConverter(), + $timeProvider + ))->getGenerator(); + } + + /** + * Determines which time converter to use and returns the configured + * time converter for this environment + * + * @return TimeConverterInterface + */ + protected function buildTimeConverter() + { + if ($this->is64BitSystem()) { + return new PhpTimeConverter(); + } elseif ($this->hasBigNumber()) { + return new BigNumberTimeConverter(); + } + + return new DegradedTimeConverter(); + } + + /** + * Determines which UUID builder to use and returns the configured UUID + * builder for this environment + * + * @return UuidBuilderInterface + */ + protected function buildUuidBuilder() + { + if ($this->is64BitSystem()) { + return new DefaultUuidBuilder($this->numberConverter); + } + + return new DegradedUuidBuilder($this->numberConverter); + } + + /** + * Returns true if the system has `Moontoast\Math\BigNumber` + * + * @return bool + */ + protected function hasBigNumber() + { + return class_exists('Moontoast\Math\BigNumber') && !$this->disableBigNumber; + } + + /** + * Returns true if the system is 64-bit, false otherwise + * + * @return bool + */ + protected function is64BitSystem() + { + return PHP_INT_SIZE == 8 && !$this->disable64Bit; + } +} diff --git a/vendor/ramsey/uuid/src/Generator/CombGenerator.php b/vendor/ramsey/uuid/src/Generator/CombGenerator.php new file mode 100644 index 000000000..7a9482318 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/CombGenerator.php @@ -0,0 +1,88 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Converter\NumberConverterInterface; + +/** + * CombGenerator provides functionality to generate COMB (combined GUID/timestamp) + * sequential UUIDs + * + * @link https://en.wikipedia.org/wiki/Globally_unique_identifier#Sequential_algorithms + */ +class CombGenerator implements RandomGeneratorInterface +{ + const TIMESTAMP_BYTES = 6; + + /** + * @var RandomGeneratorInterface + */ + private $randomGenerator; + + /** + * @var NumberConverterInterface + */ + private $converter; + + /** + * Constructs a `CombGenerator` using a random-number generator and a number converter + * + * @param RandomGeneratorInterface $generator Random-number generator for the non-time part. + * @param NumberConverterInterface $numberConverter Instance of number converter. + */ + public function __construct(RandomGeneratorInterface $generator, NumberConverterInterface $numberConverter) + { + $this->converter = $numberConverter; + $this->randomGenerator = $generator; + } + + /** + * Generates a string of binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException if length is not a positive integer + * @throws \Exception + */ + public function generate($length) + { + if ($length < self::TIMESTAMP_BYTES || $length < 0) { + throw new \InvalidArgumentException('Length must be a positive integer.'); + } + + $hash = ''; + + if (self::TIMESTAMP_BYTES > 0 && $length > self::TIMESTAMP_BYTES) { + $hash = $this->randomGenerator->generate($length - self::TIMESTAMP_BYTES); + } + + $lsbTime = str_pad($this->converter->toHex($this->timestamp()), self::TIMESTAMP_BYTES * 2, '0', STR_PAD_LEFT); + + return hex2bin(str_pad(bin2hex($hash), $length - self::TIMESTAMP_BYTES, '0') . $lsbTime); + } + + /** + * Returns current timestamp as integer, precise to 0.00001 seconds + * + * @return string + */ + private function timestamp() + { + $time = explode(' ', microtime(false)); + + return $time[1] . substr($time[0], 2, 5); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php b/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php new file mode 100644 index 000000000..c9969b3af --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php @@ -0,0 +1,138 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\BinaryUtils; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Provider\TimeProviderInterface; + +/** + * DefaultTimeGenerator provides functionality to generate strings of binary + * data for version 1 UUIDs based on a host ID, sequence number, and the current + * time + */ +class DefaultTimeGenerator implements TimeGeneratorInterface +{ + /** + * @var NodeProviderInterface + */ + private $nodeProvider; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; + + /** + * @var TimeProviderInterface + */ + private $timeProvider; + + /** + * Constructs a `DefaultTimeGenerator` using a node provider, time converter, + * and time provider + * + * @param NodeProviderInterface $nodeProvider + * @param TimeConverterInterface $timeConverter + * @param TimeProviderInterface $timeProvider + */ + public function __construct( + NodeProviderInterface $nodeProvider, + TimeConverterInterface $timeConverter, + TimeProviderInterface $timeProvider + ) { + $this->nodeProvider = $nodeProvider; + $this->timeConverter = $timeConverter; + $this->timeProvider = $timeProvider; + } + + /** + * Generate a version 1 UUID from a host ID, sequence number, and the current time + * + * If $node is not given, we will attempt to obtain the local hardware + * address. If $clockSeq is given, it is used as the sequence number; + * otherwise a random 14-bit sequence number is chosen. + * + * @param int|string $node A 48-bit number representing the hardware address + * This number may be represented as an integer or a hexadecimal string. + * @param int $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes. + * @return string A binary string + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called on a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function generate($node = null, $clockSeq = null) + { + $node = $this->getValidNode($node); + + if ($clockSeq === null) { + // Not using "stable storage"; see RFC 4122, Section 4.2.1.1 + $clockSeq = random_int(0, 0x3fff); + } + + // Create a 60-bit time value as a count of 100-nanosecond intervals + // since 00:00:00.00, 15 October 1582 + $timeOfDay = $this->timeProvider->currentTime(); + $uuidTime = $this->timeConverter->calculateTime($timeOfDay['sec'], $timeOfDay['usec']); + + $timeHi = BinaryUtils::applyVersion($uuidTime['hi'], 1); + $clockSeqHi = BinaryUtils::applyVariant($clockSeq >> 8); + + $hex = vsprintf( + '%08s%04s%04s%02s%02s%012s', + array( + $uuidTime['low'], + $uuidTime['mid'], + sprintf('%04x', $timeHi), + sprintf('%02x', $clockSeqHi), + sprintf('%02x', $clockSeq & 0xff), + $node, + ) + ); + + return hex2bin($hex); + } + + /** + * Uses the node provider given when constructing this instance to get + * the node ID (usually a MAC address) + * + * @param string|int $node A node value that may be used to override the node provider + * @return string Hexadecimal representation of the node ID + * @throws \InvalidArgumentException + * @throws \Exception + */ + protected function getValidNode($node) + { + if ($node === null) { + $node = $this->nodeProvider->getNode(); + } + + // Convert the node to hex, if it is still an integer + if (is_int($node)) { + $node = sprintf('%012x', $node); + } + + if (!ctype_xdigit($node) || strlen($node) > 12) { + throw new \InvalidArgumentException('Invalid node value'); + } + + return strtolower(sprintf('%012s', $node)); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php b/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php new file mode 100644 index 000000000..f58b78357 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php @@ -0,0 +1,41 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * MtRandRandomGenerator provides functionality to generate strings of random + * binary data using the `mt_rand()` PHP function + * + * @link http://php.net/mt_rand + */ +class MtRandGenerator implements RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + */ + public function generate($length) + { + $bytes = ''; + + for ($i = 1; $i <= $length; $i++) { + $bytes = chr(mt_rand(0, 255)) . $bytes; + } + + return $bytes; + } +} diff --git a/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php b/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php new file mode 100644 index 000000000..e8ec6a4d8 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * OpenSslRandomGenerator provides functionality to generate strings of random + * binary data using the `openssl_random_pseudo_bytes()` PHP function + * + * The use of this generator requires PHP to be compiled using the + * `--with-openssl` option. + * + * @link http://php.net/openssl_random_pseudo_bytes + */ +class OpenSslGenerator implements RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + */ + public function generate($length) + { + return openssl_random_pseudo_bytes($length); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php b/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php new file mode 100644 index 000000000..fc2ef7e4d --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php @@ -0,0 +1,37 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * PeclUuidRandomGenerator provides functionality to generate strings of random + * binary data using the PECL UUID PHP extension + * + * @link https://pecl.php.net/package/uuid + */ +class PeclUuidRandomGenerator implements RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + */ + public function generate($length) + { + $uuid = uuid_create(UUID_TYPE_RANDOM); + + return uuid_parse($uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php b/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php new file mode 100644 index 000000000..7ccf16fd9 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * PeclUuidTimeGenerator provides functionality to generate strings of binary + * data for version 1 UUIDs using the PECL UUID PHP extension + * + * @link https://pecl.php.net/package/uuid + */ +class PeclUuidTimeGenerator implements TimeGeneratorInterface +{ + /** + * Generate a version 1 UUID using the PECL UUID extension + * + * @param int|string $node Not used in this context + * @param int $clockSeq Not used in this context + * @return string A binary string + */ + public function generate($node = null, $clockSeq = null) + { + $uuid = uuid_create(UUID_TYPE_TIME); + + return uuid_parse($uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php b/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php new file mode 100644 index 000000000..aaa285df0 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php @@ -0,0 +1,37 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * RandomBytesGenerator provides functionality to generate strings of random + * binary data using `random_bytes()` function in PHP 7+ or paragonie/random_compat + * + * @link http://php.net/random_bytes + * @link https://github.com/paragonie/random_compat + */ +class RandomBytesGenerator implements RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function generate($length) + { + return random_bytes($length); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php b/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php new file mode 100644 index 000000000..39110622f --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php @@ -0,0 +1,31 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * A factory for retrieving a random generator, based on the environment + */ +class RandomGeneratorFactory +{ + /** + * Returns a default random generator, based on the current environment + * + * @return RandomGeneratorInterface + */ + public static function getGenerator() + { + return new RandomBytesGenerator(); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php new file mode 100644 index 000000000..3a1bcae7e --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php @@ -0,0 +1,33 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * RandomGeneratorInterface provides functionality to generate strings of random + * binary data + */ +interface RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function generate($length); +} diff --git a/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php b/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php new file mode 100644 index 000000000..25b54a834 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php @@ -0,0 +1,62 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +use RandomLib\Generator; +use RandomLib\Factory; + +/** + * RandomLibAdapter provides functionality to generate strings of random + * binary data using the ircmaxell/random-lib library + * + * @link https://packagist.org/packages/ircmaxell/random-lib + */ +class RandomLibAdapter implements RandomGeneratorInterface +{ + /** + * @var Generator + */ + private $generator; + + /** + * Constructs a `RandomLibAdapter` using a `RandomLib\Generator` + * + * By default, if no `Generator` is passed in, this creates a medium-strength + * generator to use when generating random binary data. + * + * @param Generator $generator An ircmaxell/random-lib `Generator` + */ + public function __construct(Generator $generator = null) + { + $this->generator = $generator; + + if ($this->generator === null) { + $factory = new Factory(); + + $this->generator = $factory->getMediumStrengthGenerator(); + } + } + + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + */ + public function generate($length) + { + return $this->generator->generate($length); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php b/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php new file mode 100644 index 000000000..6b08f5402 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php @@ -0,0 +1,36 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * SodiumRandomGenerator provides functionality to generate strings of random + * binary data using the PECL libsodium extension + * + * @link http://pecl.php.net/package/libsodium + * @link https://paragonie.com/book/pecl-libsodium + */ +class SodiumRandomGenerator implements RandomGeneratorInterface +{ + /** + * Generates a string of random binary data of the specified length + * + * @param integer $length The number of bytes of random binary data to generate + * @return string A binary string + */ + public function generate($length) + { + return \Sodium\randombytes_buf($length); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php b/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php new file mode 100644 index 000000000..24d501bbf --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php @@ -0,0 +1,72 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Provider\TimeProviderInterface; + +/** + * A factory for retrieving a time generator, based on the environment + */ +class TimeGeneratorFactory +{ + /** + * @var NodeProviderInterface + */ + private $nodeProvider; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; + + /** + * @var TimeProviderInterface + */ + private $timeProvider; + + /** + * Constructs a `TimeGeneratorFactory` using a node provider, time converter, + * and time provider + * + * @param NodeProviderInterface $nodeProvider + * @param TimeConverterInterface $timeConverter + * @param TimeProviderInterface $timeProvider + */ + public function __construct( + NodeProviderInterface $nodeProvider, + TimeConverterInterface $timeConverter, + TimeProviderInterface $timeProvider + ) { + $this->nodeProvider = $nodeProvider; + $this->timeConverter = $timeConverter; + $this->timeProvider = $timeProvider; + } + + /** + * Returns a default time generator, based on the current environment + * + * @return TimeGeneratorInterface + */ + public function getGenerator() + { + return new DefaultTimeGenerator( + $this->nodeProvider, + $this->timeConverter, + $this->timeProvider + ); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php new file mode 100644 index 000000000..cb182ea00 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php @@ -0,0 +1,39 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Generator; + +/** + * TimeGeneratorInterface provides functionality to generate strings of binary + * data for version 1 UUIDs based on a host ID, sequence number, and the current + * time + */ +interface TimeGeneratorInterface +{ + /** + * Generate a version 1 UUID from a host ID, sequence number, and the current time + * + * @param int|string $node A 48-bit number representing the hardware address + * This number may be represented as an integer or a hexadecimal string. + * @param int $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes. + * @return string A binary string + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called on a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function generate($node = null, $clockSeq = null); +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php new file mode 100644 index 000000000..289fddeae --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider\Node; + +use Ramsey\Uuid\Provider\NodeProviderInterface; + +/** + * FallbackNodeProvider attempts to gain the system host ID from an array of + * providers, falling back to the next in line in the event a host ID can not be + * obtained + */ +class FallbackNodeProvider implements NodeProviderInterface +{ + /** + * @var NodeProviderInterface[] + */ + private $nodeProviders; + + /** + * Constructs a `FallbackNodeProvider` using an array of node providers + * + * @param NodeProviderInterface[] $providers Array of node providers + */ + public function __construct(array $providers) + { + $this->nodeProviders = $providers; + } + + /** + * Returns the system node ID by iterating over an array of node providers + * and returning the first non-empty value found + * + * @return string System node ID as a hexadecimal string + * @throws \Exception + */ + public function getNode() + { + foreach ($this->nodeProviders as $provider) { + if ($node = $provider->getNode()) { + return $node; + } + } + + return null; + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php new file mode 100644 index 000000000..76c570d7f --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php @@ -0,0 +1,42 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider\Node; + +use Ramsey\Uuid\Provider\NodeProviderInterface; + +/** + * RandomNodeProvider provides functionality to generate a random node ID, in + * the event that the node ID could not be obtained from the host system + * + * @link http://tools.ietf.org/html/rfc4122#section-4.5 + */ +class RandomNodeProvider implements NodeProviderInterface +{ + /** + * Returns the system node ID + * + * @return string System node ID as a hexadecimal string + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function getNode() + { + $node = hexdec(bin2hex(random_bytes(6))); + + // Set the multicast bit; see RFC 4122, section 4.5. + $node = $node | 0x010000000000; + + return str_pad(dechex($node), 12, '0', STR_PAD_LEFT); + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php new file mode 100644 index 000000000..ae6a09eaa --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php @@ -0,0 +1,125 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider\Node; + +use Ramsey\Uuid\Provider\NodeProviderInterface; + +/** + * SystemNodeProvider provides functionality to get the system node ID (MAC + * address) using external system calls + */ +class SystemNodeProvider implements NodeProviderInterface +{ + /** + * Returns the system node ID + * + * @return string|false System node ID as a hexadecimal string, or false if it is not found + */ + public function getNode() + { + static $node = null; + + if ($node !== null) { + return $node; + } + + $pattern = '/[^:]([0-9A-Fa-f]{2}([:-])[0-9A-Fa-f]{2}(\2[0-9A-Fa-f]{2}){4})[^:]/'; + $matches = array(); + + // first try a linux specific way + $node = $this->getSysfs(); + + // Search the ifconfig output for all MAC addresses and return + // the first one found + if ($node === false) { + if (preg_match_all($pattern, $this->getIfconfig(), $matches, PREG_PATTERN_ORDER)) { + $node = $matches[1][0]; + } + } + if ($node !== false) { + $node = str_replace([':', '-'], '', $node); + } + return $node; + } + + /** + * Returns the network interface configuration for the system + * + * @codeCoverageIgnore + * @return string + */ + protected function getIfconfig() + { + if (strpos(strtolower(ini_get('disable_functions')), 'passthru') !== false) { + return ''; + } + + ob_start(); + switch (strtoupper(substr(php_uname('a'), 0, 3))) { + case 'WIN': + passthru('ipconfig /all 2>&1'); + break; + case 'DAR': + passthru('ifconfig 2>&1'); + break; + case 'FRE': + passthru('netstat -i -f link 2>&1'); + break; + case 'LIN': + default: + passthru('netstat -ie 2>&1'); + break; + } + + return ob_get_clean(); + } + + /** + * Returns mac address from the first system interface via the sysfs interface + * + * @return string|bool + */ + protected function getSysfs() + { + $mac = false; + + if (strtoupper(php_uname('s')) === 'LINUX') { + $addressPaths = glob('/sys/class/net/*/address', GLOB_NOSORT); + + if (empty($addressPaths)) { + return false; + } + + array_walk($addressPaths, function ($addressPath) use (&$macs) { + $macs[] = file_get_contents($addressPath); + }); + + $macs = array_map('trim', $macs); + + // remove invalid entries + $macs = array_filter($macs, function ($mac) { + return + // localhost adapter + $mac !== '00:00:00:00:00:00' && + // must match mac adress + preg_match('/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i', $mac); + }); + + $mac = reset($macs); + } + + return $mac; + } +} diff --git a/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php new file mode 100644 index 000000000..14f747bea --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php @@ -0,0 +1,30 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider; + +/** + * NodeProviderInterface provides functionality to get the node ID (or host ID + * in the form of the system's MAC address) from a specific type of node provider + */ +interface NodeProviderInterface +{ + /** + * Returns the system node ID + * + * @return string System node ID as a hexadecimal string + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function getNode(); +} diff --git a/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php new file mode 100644 index 000000000..a62d39c62 --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php @@ -0,0 +1,76 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider\Time; + +use Ramsey\Uuid\Provider\TimeProviderInterface; + +/** + * FixedTimeProvider uses an previously-generated timestamp to provide the time + * + * This provider allows the use of a previously-generated timestamp, such as one + * stored in a database, when creating version 1 UUIDs. + */ +class FixedTimeProvider implements TimeProviderInterface +{ + /** + * @var int[] Array containing `sec` and `usec` components of a timestamp + */ + private $fixedTime; + + /** + * Constructs a `FixedTimeProvider` using the provided `$timestamp` + * + * @param int[] Array containing `sec` and `usec` components of a timestamp + * @throws \InvalidArgumentException if the `$timestamp` does not contain `sec` or `usec` components + */ + public function __construct(array $timestamp) + { + if (!array_key_exists('sec', $timestamp) || !array_key_exists('usec', $timestamp)) { + throw new \InvalidArgumentException('Array must contain sec and usec keys.'); + } + + $this->fixedTime = $timestamp; + } + + /** + * Sets the `usec` component of the timestamp + * + * @param int $value The `usec` value to set + */ + public function setUsec($value) + { + $this->fixedTime['usec'] = $value; + } + + /** + * Sets the `sec` component of the timestamp + * + * @param int $value The `sec` value to set + */ + public function setSec($value) + { + $this->fixedTime['sec'] = $value; + } + + /** + * Returns a timestamp array + * + * @return int[] Array containing `sec` and `usec` components of a timestamp + */ + public function currentTime() + { + return $this->fixedTime; + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php new file mode 100644 index 000000000..6442985fa --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php @@ -0,0 +1,33 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider\Time; + +use Ramsey\Uuid\Provider\TimeProviderInterface; + +/** + * SystemTimeProvider uses built-in PHP functions to provide the time + */ +class SystemTimeProvider implements TimeProviderInterface +{ + /** + * Returns a timestamp array + * + * @return int[] Array containing `sec` and `usec` components of a timestamp + */ + public function currentTime() + { + return gettimeofday(); + } +} diff --git a/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php new file mode 100644 index 000000000..ef8099dd1 --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php @@ -0,0 +1,29 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid\Provider; + +/** + * TimeProviderInterface provides functionality to get the time from a specific + * type of time provider + */ +interface TimeProviderInterface +{ + /** + * Returns a timestamp array + * + * @return int[] Array guaranteed to contain `sec` and `usec` components of a timestamp + */ + public function currentTime(); +} diff --git a/vendor/ramsey/uuid/src/Uuid.php b/vendor/ramsey/uuid/src/Uuid.php new file mode 100644 index 000000000..45f9fa448 --- /dev/null +++ b/vendor/ramsey/uuid/src/Uuid.php @@ -0,0 +1,740 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Exception\UnsupportedOperationException; + +/** + * Represents a universally unique identifier (UUID), according to RFC 4122. + * + * This class provides immutable UUID objects (the Uuid class) and the static + * methods `uuid1()`, `uuid3()`, `uuid4()`, and `uuid5()` for generating version + * 1, 3, 4, and 5 UUIDs as specified in RFC 4122. + * + * If all you want is a unique ID, you should probably call `uuid1()` or `uuid4()`. + * Note that `uuid1()` may compromise privacy since it creates a UUID containing + * the computer’s network address. `uuid4()` creates a random UUID. + * + * @link http://tools.ietf.org/html/rfc4122 + * @link http://en.wikipedia.org/wiki/Universally_unique_identifier + * @link http://docs.python.org/3/library/uuid.html + * @link http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html + */ +class Uuid implements UuidInterface +{ + /** + * When this namespace is specified, the name string is a fully-qualified domain name. + * @link http://tools.ietf.org/html/rfc4122#appendix-C + */ + const NAMESPACE_DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + + /** + * When this namespace is specified, the name string is a URL. + * @link http://tools.ietf.org/html/rfc4122#appendix-C + */ + const NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + /** + * When this namespace is specified, the name string is an ISO OID. + * @link http://tools.ietf.org/html/rfc4122#appendix-C + */ + const NAMESPACE_OID = '6ba7b812-9dad-11d1-80b4-00c04fd430c8'; + + /** + * When this namespace is specified, the name string is an X.500 DN in DER or a text output format. + * @link http://tools.ietf.org/html/rfc4122#appendix-C + */ + const NAMESPACE_X500 = '6ba7b814-9dad-11d1-80b4-00c04fd430c8'; + + /** + * The nil UUID is special form of UUID that is specified to have all 128 bits set to zero. + * @link http://tools.ietf.org/html/rfc4122#section-4.1.7 + */ + const NIL = '00000000-0000-0000-0000-000000000000'; + + /** + * Reserved for NCS compatibility. + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + */ + const RESERVED_NCS = 0; + + /** + * Specifies the UUID layout given in RFC 4122. + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + */ + const RFC_4122 = 2; + + /** + * Reserved for Microsoft compatibility. + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + */ + const RESERVED_MICROSOFT = 6; + + /** + * Reserved for future definition. + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + */ + const RESERVED_FUTURE = 7; + + /** + * Regular expression pattern for matching a valid UUID of any variant. + */ + const VALID_PATTERN = '^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$'; + + /** + * Version 1 (time-based) UUID object constant identifier + */ + const UUID_TYPE_TIME = 1; + + /** + * Version 2 (identifier-based) UUID object constant identifier + */ + const UUID_TYPE_IDENTIFIER = 2; + + /** + * Version 3 (name-based and hashed with MD5) UUID object constant identifier + */ + const UUID_TYPE_HASH_MD5 = 3; + + /** + * Version 4 (random) UUID object constant identifier + */ + const UUID_TYPE_RANDOM = 4; + + /** + * Version 5 (name-based and hashed with SHA1) UUID object constant identifier + */ + const UUID_TYPE_HASH_SHA1 = 5; + + /** + * The factory to use when creating UUIDs. + * @var UuidFactoryInterface + */ + private static $factory = null; + + /** + * The codec to use when encoding or decoding UUID strings. + * @var CodecInterface + */ + protected $codec; + + /** + * The fields that make up this UUID. + * + * This is initialized to the nil value. + * + * @var array + * @see UuidInterface::getFieldsHex() + */ + protected $fields = array( + 'time_low' => '00000000', + 'time_mid' => '0000', + 'time_hi_and_version' => '0000', + 'clock_seq_hi_and_reserved' => '00', + 'clock_seq_low' => '00', + 'node' => '000000000000', + ); + + /** + * The number converter to use for converting hex values to/from integers. + * @var NumberConverterInterface + */ + protected $converter; + + /** + * Creates a universally unique identifier (UUID) from an array of fields. + * + * Unless you're making advanced use of this library to generate identifiers + * that deviate from RFC 4122, you probably do not want to instantiate a + * UUID directly. Use the static methods, instead: + * + * ``` + * use Ramsey\Uuid\Uuid; + * + * $timeBasedUuid = Uuid::uuid1(); + * $namespaceMd5Uuid = Uuid::uuid3(Uuid::NAMESPACE_URL, 'http://php.net/'); + * $randomUuid = Uuid::uuid4(); + * $namespaceSha1Uuid = Uuid::uuid5(Uuid::NAMESPACE_URL, 'http://php.net/'); + * ``` + * + * @param array $fields An array of fields from which to construct a UUID; + * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @param NumberConverterInterface $converter The number converter to use + * for converting hex values to/from integers. + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings. + */ + public function __construct( + array $fields, + NumberConverterInterface $converter, + CodecInterface $codec + ) { + $this->fields = $fields; + $this->codec = $codec; + $this->converter = $converter; + } + + /** + * Converts this UUID object to a string when the object is used in any + * string context. + * + * @return string + * @link http://www.php.net/manual/en/language.oop5.magic.php#object.tostring + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Converts this UUID object to a string when the object is serialized + * with `json_encode()` + * + * @return string + * @link http://php.net/manual/en/class.jsonserializable.php + */ + public function jsonSerialize() + { + return $this->toString(); + } + + /** + * Converts this UUID object to a string when the object is serialized + * with `serialize()` + * + * @return string + * @link http://php.net/manual/en/class.serializable.php + */ + public function serialize() + { + return $this->toString(); + } + + /** + * Re-constructs the object from its serialized form. + * + * @param string $serialized + * @link http://php.net/manual/en/class.serializable.php + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function unserialize($serialized) + { + $uuid = self::fromString($serialized); + $this->codec = $uuid->codec; + $this->converter = $uuid->converter; + $this->fields = $uuid->fields; + } + + public function compareTo(UuidInterface $other) + { + $comparison = 0; + + if ($this->getMostSignificantBitsHex() < $other->getMostSignificantBitsHex()) { + $comparison = -1; + } elseif ($this->getMostSignificantBitsHex() > $other->getMostSignificantBitsHex()) { + $comparison = 1; + } elseif ($this->getLeastSignificantBitsHex() < $other->getLeastSignificantBitsHex()) { + $comparison = -1; + } elseif ($this->getLeastSignificantBitsHex() > $other->getLeastSignificantBitsHex()) { + $comparison = 1; + } + + return $comparison; + } + + public function equals($other) + { + if (!($other instanceof UuidInterface)) { + return false; + } + + return ($this->compareTo($other) == 0); + } + + public function getBytes() + { + return $this->codec->encodeBinary($this); + } + + /** + * Returns the high field of the clock sequence multiplexed with the variant + * (bits 65-72 of the UUID). + * + * @return int Unsigned 8-bit integer value of clock_seq_hi_and_reserved + */ + public function getClockSeqHiAndReserved() + { + return hexdec($this->getClockSeqHiAndReservedHex()); + } + + public function getClockSeqHiAndReservedHex() + { + return $this->fields['clock_seq_hi_and_reserved']; + } + + /** + * Returns the low field of the clock sequence (bits 73-80 of the UUID). + * + * @return int Unsigned 8-bit integer value of clock_seq_low + */ + public function getClockSeqLow() + { + return hexdec($this->getClockSeqLowHex()); + } + + public function getClockSeqLowHex() + { + return $this->fields['clock_seq_low']; + } + + /** + * Returns the clock sequence value associated with this UUID. + * + * For UUID version 1, the clock sequence is used to help avoid + * duplicates that could arise when the clock is set backwards in time + * or if the node ID changes. + * + * For UUID version 3 or 5, the clock sequence is a 14-bit value + * constructed from a name as described in RFC 4122, Section 4.3. + * + * For UUID version 4, clock sequence is a randomly or pseudo-randomly + * generated 14-bit value as described in RFC 4122, Section 4.4. + * + * @return int Unsigned 14-bit integer value of clock sequence + * @link http://tools.ietf.org/html/rfc4122#section-4.1.5 + */ + public function getClockSequence() + { + return (($this->getClockSeqHiAndReserved() & 0x3f) << 8) + | $this->getClockSeqLow(); + } + + public function getClockSequenceHex() + { + return sprintf('%04x', $this->getClockSequence()); + } + + public function getNumberConverter() + { + return $this->converter; + } + + /** + * @inheritdoc + */ + public function getDateTime() + { + if ($this->getVersion() != 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + $unixTime = ($this->getTimestamp() - 0x01b21dd213814000) / 1e7; + $unixTime = number_format($unixTime, 0, '', ''); + + return new \DateTime("@{$unixTime}"); + } + + /** + * Returns an array of the fields of this UUID, with keys named according + * to the RFC 4122 names for the fields. + * + * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer + * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer + * * **time_hi_and_version**: The high field of the timestamp multiplexed with + * the version number, an unsigned 16-bit integer + * * **clock_seq_hi_and_reserved**: The high field of the clock sequence + * multiplexed with the variant, an unsigned 8-bit integer + * * **clock_seq_low**: The low field of the clock sequence, an unsigned + * 8-bit integer + * * **node**: The spatially unique node identifier, an unsigned 48-bit + * integer + * + * @return array The UUID fields represented as integer values + * @link http://tools.ietf.org/html/rfc4122#section-4.1.2 + */ + public function getFields() + { + return array( + 'time_low' => $this->getTimeLow(), + 'time_mid' => $this->getTimeMid(), + 'time_hi_and_version' => $this->getTimeHiAndVersion(), + 'clock_seq_hi_and_reserved' => $this->getClockSeqHiAndReserved(), + 'clock_seq_low' => $this->getClockSeqLow(), + 'node' => $this->getNode(), + ); + } + + public function getFieldsHex() + { + return $this->fields; + } + + public function getHex() + { + return str_replace('-', '', $this->toString()); + } + + /** + * @inheritdoc + */ + public function getInteger() + { + return $this->converter->fromHex($this->getHex()); + } + + /** + * Returns the least significant 64 bits of this UUID's 128 bit value. + * + * @return mixed Converted representation of the unsigned 64-bit integer value + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + */ + public function getLeastSignificantBits() + { + return $this->converter->fromHex($this->getLeastSignificantBitsHex()); + } + + public function getLeastSignificantBitsHex() + { + return sprintf( + '%02s%02s%012s', + $this->fields['clock_seq_hi_and_reserved'], + $this->fields['clock_seq_low'], + $this->fields['node'] + ); + } + + /** + * Returns the most significant 64 bits of this UUID's 128 bit value. + * + * @return mixed Converted representation of the unsigned 64-bit integer value + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + */ + public function getMostSignificantBits() + { + return $this->converter->fromHex($this->getMostSignificantBitsHex()); + } + + public function getMostSignificantBitsHex() + { + return sprintf( + '%08s%04s%04s', + $this->fields['time_low'], + $this->fields['time_mid'], + $this->fields['time_hi_and_version'] + ); + } + + /** + * Returns the node value associated with this UUID + * + * For UUID version 1, the node field consists of an IEEE 802 MAC + * address, usually the host address. For systems with multiple IEEE + * 802 addresses, any available one can be used. The lowest addressed + * octet (octet number 10) contains the global/local bit and the + * unicast/multicast bit, and is the first octet of the address + * transmitted on an 802.3 LAN. + * + * For systems with no IEEE address, a randomly or pseudo-randomly + * generated value may be used; see RFC 4122, Section 4.5. The + * multicast bit must be set in such addresses, in order that they + * will never conflict with addresses obtained from network cards. + * + * For UUID version 3 or 5, the node field is a 48-bit value constructed + * from a name as described in RFC 4122, Section 4.3. + * + * For UUID version 4, the node field is a randomly or pseudo-randomly + * generated 48-bit value as described in RFC 4122, Section 4.4. + * + * @return int Unsigned 48-bit integer value of node + * @link http://tools.ietf.org/html/rfc4122#section-4.1.6 + */ + public function getNode() + { + return hexdec($this->getNodeHex()); + } + + public function getNodeHex() + { + return $this->fields['node']; + } + + /** + * Returns the high field of the timestamp multiplexed with the version + * number (bits 49-64 of the UUID). + * + * @return int Unsigned 16-bit integer value of time_hi_and_version + */ + public function getTimeHiAndVersion() + { + return hexdec($this->getTimeHiAndVersionHex()); + } + + public function getTimeHiAndVersionHex() + { + return $this->fields['time_hi_and_version']; + } + + /** + * Returns the low field of the timestamp (the first 32 bits of the UUID). + * + * @return int Unsigned 32-bit integer value of time_low + */ + public function getTimeLow() + { + return hexdec($this->getTimeLowHex()); + } + + public function getTimeLowHex() + { + return $this->fields['time_low']; + } + + /** + * Returns the middle field of the timestamp (bits 33-48 of the UUID). + * + * @return int Unsigned 16-bit integer value of time_mid + */ + public function getTimeMid() + { + return hexdec($this->getTimeMidHex()); + } + + public function getTimeMidHex() + { + return $this->fields['time_mid']; + } + + /** + * Returns the timestamp value associated with this UUID. + * + * The 60 bit timestamp value is constructed from the time_low, + * time_mid, and time_hi fields of this UUID. The resulting + * timestamp is measured in 100-nanosecond units since midnight, + * October 15, 1582 UTC. + * + * The timestamp value is only meaningful in a time-based UUID, which + * has version type 1. If this UUID is not a time-based UUID then + * this method throws UnsupportedOperationException. + * + * @return int Unsigned 60-bit integer value of the timestamp + * @throws UnsupportedOperationException If this UUID is not a version 1 UUID + * @link http://tools.ietf.org/html/rfc4122#section-4.1.4 + */ + public function getTimestamp() + { + if ($this->getVersion() != 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + return hexdec($this->getTimestampHex()); + } + + /** + * @inheritdoc + */ + public function getTimestampHex() + { + if ($this->getVersion() != 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + return sprintf( + '%03x%04s%08s', + ($this->getTimeHiAndVersion() & 0x0fff), + $this->fields['time_mid'], + $this->fields['time_low'] + ); + } + + public function getUrn() + { + return 'urn:uuid:' . $this->toString(); + } + + public function getVariant() + { + $clockSeq = $this->getClockSeqHiAndReserved(); + if (0 === ($clockSeq & 0x80)) { + $variant = self::RESERVED_NCS; + } elseif (0 === ($clockSeq & 0x40)) { + $variant = self::RFC_4122; + } elseif (0 === ($clockSeq & 0x20)) { + $variant = self::RESERVED_MICROSOFT; + } else { + $variant = self::RESERVED_FUTURE; + } + + return $variant; + } + + public function getVersion() + { + if ($this->getVariant() == self::RFC_4122) { + return (int) (($this->getTimeHiAndVersion() >> 12) & 0x0f); + } + + return null; + } + + public function toString() + { + return $this->codec->encode($this); + } + + /** + * Returns the currently set factory used to create UUIDs. + * + * @return UuidFactoryInterface + */ + public static function getFactory() + { + if (!self::$factory) { + self::$factory = new UuidFactory(); + } + + return self::$factory; + } + + /** + * Sets the factory used to create UUIDs. + * + * @param UuidFactoryInterface $factory + */ + public static function setFactory(UuidFactoryInterface $factory) + { + self::$factory = $factory; + } + + /** + * Creates a UUID from a byte string. + * + * @param string $bytes + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + * @throws \InvalidArgumentException + */ + public static function fromBytes($bytes) + { + return self::getFactory()->fromBytes($bytes); + } + + /** + * Creates a UUID from the string standard representation. + * + * @param string $name A string that specifies a UUID + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public static function fromString($name) + { + return self::getFactory()->fromString($name); + } + + /** + * Creates a UUID from a 128-bit integer string. + * + * @param string $integer String representation of 128-bit integer + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public static function fromInteger($integer) + { + return self::getFactory()->fromInteger($integer); + } + + /** + * Check if a string is a valid UUID. + * + * @param string $uuid The string UUID to test + * @return boolean + */ + public static function isValid($uuid) + { + $uuid = str_replace(array('urn:', 'uuid:', '{', '}'), '', $uuid); + + if ($uuid == self::NIL) { + return true; + } + + if (!preg_match('/' . self::VALID_PATTERN . '/D', $uuid)) { + return false; + } + + return true; + } + + /** + * Generate a version 1 UUID from a host ID, sequence number, and the current time. + * + * @param int|string $node A 48-bit number representing the hardware address + * This number may be represented as an integer or a hexadecimal string. + * @param int $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes. + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called on a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public static function uuid1($node = null, $clockSeq = null) + { + return self::getFactory()->uuid1($node, $clockSeq); + } + + /** + * Generate a version 3 UUID based on the MD5 hash of a namespace identifier + * (which is a UUID) and a name (which is a string). + * + * @param string $ns The UUID namespace in which to create the named UUID + * @param string $name The name to create a UUID for + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public static function uuid3($ns, $name) + { + return self::getFactory()->uuid3($ns, $name); + } + + /** + * Generate a version 4 (random) UUID. + * + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception + */ + public static function uuid4() + { + return self::getFactory()->uuid4(); + } + + /** + * Generate a version 5 UUID based on the SHA-1 hash of a namespace + * identifier (which is a UUID) and a name (which is a string). + * + * @param string $ns The UUID namespace in which to create the named UUID + * @param string $name The name to create a UUID for + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public static function uuid5($ns, $name) + { + return self::getFactory()->uuid5($ns, $name); + } +} diff --git a/vendor/ramsey/uuid/src/UuidFactory.php b/vendor/ramsey/uuid/src/UuidFactory.php new file mode 100644 index 000000000..99644d4b4 --- /dev/null +++ b/vendor/ramsey/uuid/src/UuidFactory.php @@ -0,0 +1,314 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Generator\RandomGeneratorInterface; +use Ramsey\Uuid\Generator\TimeGeneratorInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Builder\UuidBuilderInterface; + +class UuidFactory implements UuidFactoryInterface +{ + /** + * @var CodecInterface + */ + private $codec = null; + + /** + * @var NodeProviderInterface + */ + private $nodeProvider = null; + + /** + * @var NumberConverterInterface + */ + private $numberConverter = null; + + /** + * @var RandomGeneratorInterface + */ + private $randomGenerator = null; + + /** + * @var TimeGeneratorInterface + */ + private $timeGenerator = null; + + /** + * @var UuidBuilderInterface + */ + private $uuidBuilder = null; + + /** + * Constructs a `UuidFactory` for creating `Ramsey\Uuid\UuidInterface` instances + * + * @param FeatureSet $features A set of features for use when creating UUIDs + */ + public function __construct(FeatureSet $features = null) + { + $features = $features ?: new FeatureSet(); + + $this->codec = $features->getCodec(); + $this->nodeProvider = $features->getNodeProvider(); + $this->numberConverter = $features->getNumberConverter(); + $this->randomGenerator = $features->getRandomGenerator(); + $this->timeGenerator = $features->getTimeGenerator(); + $this->uuidBuilder = $features->getBuilder(); + } + + /** + * Returns the UUID coder-decoder used by this factory + * + * @return CodecInterface + */ + public function getCodec() + { + return $this->codec; + } + + /** + * Sets the UUID coder-decoder used by this factory + * + * @param CodecInterface $codec + */ + public function setCodec(CodecInterface $codec) + { + $this->codec = $codec; + } + + /** + * Returns the system node ID provider used by this factory + * + * @return NodeProviderInterface + */ + public function getNodeProvider() + { + return $this->nodeProvider; + } + + /** + * Returns the random UUID generator used by this factory + * + * @return RandomGeneratorInterface + */ + public function getRandomGenerator() + { + return $this->randomGenerator; + } + + /** + * Returns the time-based UUID generator used by this factory + * + * @return TimeGeneratorInterface + */ + public function getTimeGenerator() + { + return $this->timeGenerator; + } + + /** + * Sets the time-based UUID generator this factory will use to generate version 1 UUIDs + * + * @param TimeGeneratorInterface $generator + */ + public function setTimeGenerator(TimeGeneratorInterface $generator) + { + $this->timeGenerator = $generator; + } + + /** + * Returns the number converter used by this factory + * + * @return NumberConverterInterface + */ + public function getNumberConverter() + { + return $this->numberConverter; + } + + /** + * Sets the random UUID generator this factory will use to generate version 4 UUIDs + * + * @param RandomGeneratorInterface $generator + */ + public function setRandomGenerator(RandomGeneratorInterface $generator) + { + $this->randomGenerator = $generator; + } + + /** + * Sets the number converter this factory will use + * + * @param NumberConverterInterface $converter + */ + public function setNumberConverter(NumberConverterInterface $converter) + { + $this->numberConverter = $converter; + } + + /** + * Returns the UUID builder this factory uses when creating `Uuid` instances + * + * @return UuidBuilderInterface $builder + */ + public function getUuidBuilder() + { + return $this->uuidBuilder; + } + + /** + * Sets the UUID builder this factory will use when creating `Uuid` instances + * + * @param UuidBuilderInterface $builder + */ + public function setUuidBuilder(UuidBuilderInterface $builder) + { + $this->uuidBuilder = $builder; + } + + /** + * @inheritdoc + */ + public function fromBytes($bytes) + { + return $this->codec->decodeBytes($bytes); + } + + /** + * @inheritdoc + */ + public function fromString($uuid) + { + $uuid = strtolower($uuid); + return $this->codec->decode($uuid); + } + + /** + * @inheritdoc + */ + public function fromInteger($integer) + { + $hex = $this->numberConverter->toHex($integer); + $hex = str_pad($hex, 32, '0', STR_PAD_LEFT); + + return $this->fromString($hex); + } + + /** + * @inheritdoc + */ + public function uuid1($node = null, $clockSeq = null) + { + $bytes = $this->timeGenerator->generate($node, $clockSeq); + $hex = bin2hex($bytes); + + return $this->uuidFromHashedName($hex, 1); + } + + /** + * @inheritdoc + */ + public function uuid3($ns, $name) + { + return $this->uuidFromNsAndName($ns, $name, 3, 'md5'); + } + + /** + * @inheritdoc + */ + public function uuid4() + { + $bytes = $this->randomGenerator->generate(16); + + // When converting the bytes to hex, it turns into a 32-character + // hexadecimal string that looks a lot like an MD5 hash, so at this + // point, we can just pass it to uuidFromHashedName. + $hex = bin2hex($bytes); + + return $this->uuidFromHashedName($hex, 4); + } + + /** + * @inheritdoc + */ + public function uuid5($ns, $name) + { + return $this->uuidFromNsAndName($ns, $name, 5, 'sha1'); + } + + /** + * Returns a `Uuid` + * + * Uses the configured builder and codec and the provided array of hexadecimal + * value UUID fields to construct a `Uuid` object. + * + * @param array $fields An array of fields from which to construct a UUID; + * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @return UuidInterface + */ + public function uuid(array $fields) + { + return $this->uuidBuilder->build($this->codec, $fields); + } + + /** + * Returns a version 3 or 5 namespaced `Uuid` + * + * @param string|UuidInterface $ns The UUID namespace to use + * @param string $name The string to hash together with the namespace + * @param int $version The version of UUID to create (3 or 5) + * @param string $hashFunction The hash function to use when hashing together + * the namespace and name + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + protected function uuidFromNsAndName($ns, $name, $version, $hashFunction) + { + if (!($ns instanceof UuidInterface)) { + $ns = $this->codec->decode($ns); + } + + $hash = call_user_func($hashFunction, ($ns->getBytes() . $name)); + + return $this->uuidFromHashedName($hash, $version); + } + + /** + * Returns a `Uuid` created from `$hash` with the version field set to `$version` + * and the variant field set for RFC 4122 + * + * @param string $hash The hash to use when creating the UUID + * @param int $version The UUID version to set for this hash (1, 3, 4, or 5) + * @return UuidInterface + */ + protected function uuidFromHashedName($hash, $version) + { + $timeHi = BinaryUtils::applyVersion(substr($hash, 12, 4), $version); + $clockSeqHi = BinaryUtils::applyVariant(hexdec(substr($hash, 16, 2))); + + $fields = array( + 'time_low' => substr($hash, 0, 8), + 'time_mid' => substr($hash, 8, 4), + 'time_hi_and_version' => str_pad(dechex($timeHi), 4, '0', STR_PAD_LEFT), + 'clock_seq_hi_and_reserved' => str_pad(dechex($clockSeqHi), 2, '0', STR_PAD_LEFT), + 'clock_seq_low' => substr($hash, 18, 2), + 'node' => substr($hash, 20, 12), + ); + + return $this->uuid($fields); + } +} diff --git a/vendor/ramsey/uuid/src/UuidFactoryInterface.php b/vendor/ramsey/uuid/src/UuidFactoryInterface.php new file mode 100644 index 000000000..a228f5bc7 --- /dev/null +++ b/vendor/ramsey/uuid/src/UuidFactoryInterface.php @@ -0,0 +1,103 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +/** + * UuidFactoryInterface defines common functionality all `UuidFactory` instances + * must implement + */ +interface UuidFactoryInterface +{ + /** + * Generate a version 1 UUID from a host ID, sequence number, and the current time. + * + * @param int|string|null $node A 48-bit number representing the hardware address + * This number may be represented as an integer or a hexadecimal string. + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes. + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called on a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception if it was not possible to gather sufficient entropy + */ + public function uuid1($node = null, $clockSeq = null); + + /** + * Generate a version 3 UUID based on the MD5 hash of a namespace identifier + * (which is a UUID) and a name (which is a string). + * + * @param string $ns The UUID namespace in which to create the named UUID + * @param string $name The name to create a UUID for + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function uuid3($ns, $name); + + /** + * Generate a version 4 (random) UUID. + * + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \InvalidArgumentException + * @throws \Exception + */ + public function uuid4(); + + /** + * Generate a version 5 UUID based on the SHA-1 hash of a namespace + * identifier (which is a UUID) and a name (which is a string). + * + * @param string $ns The UUID namespace in which to create the named UUID + * @param string $name The name to create a UUID for + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function uuid5($ns, $name); + + /** + * Creates a UUID from a byte string. + * + * @param string $bytes A 16-byte string representation of a UUID + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + * @throws \InvalidArgumentException if string has not 16 characters + */ + public function fromBytes($bytes); + + /** + * Creates a UUID from the string standard representation + * + * @param string $uuid A string representation of a UUID + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function fromString($uuid); + + /** + * Creates a `Uuid` from an integer representation + * + * The integer representation may be a real integer, a string integer, or + * an integer representation supported by a configured number converter. + * + * @param mixed $integer The integer to use when creating a `Uuid` from an + * integer; may be of any type understood by the configured number converter + * @return UuidInterface + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * @throws \Ramsey\Uuid\Exception\InvalidUuidStringException + */ + public function fromInteger($integer); +} diff --git a/vendor/ramsey/uuid/src/UuidInterface.php b/vendor/ramsey/uuid/src/UuidInterface.php new file mode 100644 index 000000000..ea3a46fb2 --- /dev/null +++ b/vendor/ramsey/uuid/src/UuidInterface.php @@ -0,0 +1,270 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link https://benramsey.com/projects/ramsey-uuid/ Documentation + * @link https://packagist.org/packages/ramsey/uuid Packagist + * @link https://github.com/ramsey/uuid GitHub + */ + +namespace Ramsey\Uuid; + +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Exception\UnsupportedOperationException; + +/** + * UuidInterface defines common functionality for all universally unique + * identifiers (UUIDs) + */ +interface UuidInterface extends \JsonSerializable, \Serializable +{ + /** + * Compares this UUID to the specified UUID. + * + * The first of two UUIDs is greater than the second if the most + * significant field in which the UUIDs differ is greater for the first + * UUID. + * + * * Q. What's the value of being able to sort UUIDs? + * * A. Use them as keys in a B-Tree or similar mapping. + * + * @param UuidInterface $other UUID to which this UUID is compared + * @return int -1, 0 or 1 as this UUID is less than, equal to, or greater than `$uuid` + */ + public function compareTo(UuidInterface $other); + + /** + * Compares this object to the specified object. + * + * The result is true if and only if the argument is not null, is a UUID + * object, has the same variant, and contains the same value, bit for bit, + * as this UUID. + * + * @param object $other + * @return bool True if `$other` is equal to this UUID + */ + public function equals($other); + + /** + * Returns the UUID as a 16-byte string (containing the six integer fields + * in big-endian byte order). + * + * @return string + */ + public function getBytes(); + + /** + * Returns the number converter to use for converting hex values to/from integers. + * + * @return NumberConverterInterface + */ + public function getNumberConverter(); + + /** + * Returns the hexadecimal value of the UUID. + * + * @return string + */ + public function getHex(); + + /** + * Returns an array of the fields of this UUID, with keys named according + * to the RFC 4122 names for the fields. + * + * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer + * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer + * * **time_hi_and_version**: The high field of the timestamp multiplexed with + * the version number, an unsigned 16-bit integer + * * **clock_seq_hi_and_reserved**: The high field of the clock sequence + * multiplexed with the variant, an unsigned 8-bit integer + * * **clock_seq_low**: The low field of the clock sequence, an unsigned + * 8-bit integer + * * **node**: The spatially unique node identifier, an unsigned 48-bit + * integer + * + * @return array The UUID fields represented as hexadecimal values + */ + public function getFieldsHex(); + + /** + * Returns the high field of the clock sequence multiplexed with the variant + * (bits 65-72 of the UUID). + * + * @return string Hexadecimal value of clock_seq_hi_and_reserved + */ + public function getClockSeqHiAndReservedHex(); + + /** + * Returns the low field of the clock sequence (bits 73-80 of the UUID). + * + * @return string Hexadecimal value of clock_seq_low + */ + public function getClockSeqLowHex(); + + /** + * Returns the clock sequence value associated with this UUID. + * + * @return string Hexadecimal value of clock sequence + */ + public function getClockSequenceHex(); + + /** + * Returns a PHP `DateTime` object representing the timestamp associated + * with this UUID. + * + * The timestamp value is only meaningful in a time-based UUID, which + * has version type 1. If this UUID is not a time-based UUID then + * this method throws `UnsupportedOperationException`. + * + * @return \DateTime A PHP DateTime representation of the date + * @throws UnsupportedOperationException If this UUID is not a version 1 UUID + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if called in a 32-bit system and + * `Moontoast\Math\BigNumber` is not present + */ + public function getDateTime(); + + /** + * Returns the integer value of the UUID, converted to an appropriate number + * representation. + * + * @return mixed Converted representation of the unsigned 128-bit integer value + * @throws \Ramsey\Uuid\Exception\UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + */ + public function getInteger(); + + /** + * Returns the least significant 64 bits of this UUID's 128 bit value. + * + * @return string Hexadecimal value of least significant bits + */ + public function getLeastSignificantBitsHex(); + + /** + * Returns the most significant 64 bits of this UUID's 128 bit value. + * + * @return string Hexadecimal value of most significant bits + */ + public function getMostSignificantBitsHex(); + + /** + * Returns the node value associated with this UUID + * + * For UUID version 1, the node field consists of an IEEE 802 MAC + * address, usually the host address. For systems with multiple IEEE + * 802 addresses, any available one can be used. The lowest addressed + * octet (octet number 10) contains the global/local bit and the + * unicast/multicast bit, and is the first octet of the address + * transmitted on an 802.3 LAN. + * + * For systems with no IEEE address, a randomly or pseudo-randomly + * generated value may be used; see RFC 4122, Section 4.5. The + * multicast bit must be set in such addresses, in order that they + * will never conflict with addresses obtained from network cards. + * + * For UUID version 3 or 5, the node field is a 48-bit value constructed + * from a name as described in RFC 4122, Section 4.3. + * + * For UUID version 4, the node field is a randomly or pseudo-randomly + * generated 48-bit value as described in RFC 4122, Section 4.4. + * + * @return string Hexadecimal value of node + * @link http://tools.ietf.org/html/rfc4122#section-4.1.6 + */ + public function getNodeHex(); + + /** + * Returns the high field of the timestamp multiplexed with the version + * number (bits 49-64 of the UUID). + * + * @return string Hexadecimal value of time_hi_and_version + */ + public function getTimeHiAndVersionHex(); + + /** + * Returns the low field of the timestamp (the first 32 bits of the UUID). + * + * @return string Hexadecimal value of time_low + */ + public function getTimeLowHex(); + + /** + * Returns the middle field of the timestamp (bits 33-48 of the UUID). + * + * @return string Hexadecimal value of time_mid + */ + public function getTimeMidHex(); + + /** + * Returns the timestamp value associated with this UUID. + * + * The 60 bit timestamp value is constructed from the time_low, + * time_mid, and time_hi fields of this UUID. The resulting + * timestamp is measured in 100-nanosecond units since midnight, + * October 15, 1582 UTC. + * + * The timestamp value is only meaningful in a time-based UUID, which + * has version type 1. If this UUID is not a time-based UUID then + * this method throws UnsupportedOperationException. + * + * @return string Hexadecimal value of the timestamp + * @throws UnsupportedOperationException If this UUID is not a version 1 UUID + * @link http://tools.ietf.org/html/rfc4122#section-4.1.4 + */ + public function getTimestampHex(); + + /** + * Returns the string representation of the UUID as a URN. + * + * @return string + * @link http://en.wikipedia.org/wiki/Uniform_Resource_Name + */ + public function getUrn(); + + /** + * Returns the variant number associated with this UUID. + * + * The variant number describes the layout of the UUID. The variant + * number has the following meaning: + * + * * 0 - Reserved for NCS backward compatibility + * * 2 - The RFC 4122 variant (used by this class) + * * 6 - Reserved, Microsoft Corporation backward compatibility + * * 7 - Reserved for future definition + * + * @return int + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + */ + public function getVariant(); + + /** + * Returns the version number associated with this UUID. + * + * The version number describes how this UUID was generated and has the + * following meaning: + * + * * 1 - Time-based UUID + * * 2 - DCE security UUID + * * 3 - Name-based UUID hashed with MD5 + * * 4 - Randomly generated UUID + * * 5 - Name-based UUID hashed with SHA-1 + * + * Returns null if this UUID is not an RFC 4122 variant, since version + * is only meaningful for this variant. + * + * @return int|null + * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 + */ + public function getVersion(); + + /** + * Converts this UUID into a string representation. + * + * @return string + */ + public function toString(); +} diff --git a/vendor/simplepie/simplepie/.travis.yml b/vendor/simplepie/simplepie/.travis.yml index 83d90ad19..539710c0b 100644 --- a/vendor/simplepie/simplepie/.travis.yml +++ b/vendor/simplepie/simplepie/.travis.yml @@ -1,21 +1,17 @@ -sudo: false language: php -matrix: - fast_finish: true - include: - - php: 5.4 - - php: 5.5 - - php: 5.6 - - php: 7.0 - - php: 7.1 - - php: hhvm - sudo: true - dist: trusty - group: edge # until the next Travis CI update - allow_failures: - - php: hhvm - - php: 7.0 - - php: 7.1 + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.2 + +before_script: + - travis_retry composer install --no-interaction + +script: + - composer test + branches: except: - one-dot-two diff --git a/vendor/simplepie/simplepie/composer.json b/vendor/simplepie/simplepie/composer.json index b5965b26f..dd1346150 100644 --- a/vendor/simplepie/simplepie/composer.json +++ b/vendor/simplepie/simplepie/composer.json @@ -24,17 +24,30 @@ } ], "require": { - "php": ">=5.3.0" + "php": ">=5.6.0", + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*" }, "require-dev": { - "phpunit/phpunit": "~4 || ~5" + "phpunit/phpunit": "~5.4.3 || ~6.5" }, "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, "autoload": { "psr-0": { "SimplePie": "library" } - } + }, + "config": { + "bin-dir": "bin" + }, + "scripts": { + "test": "phpunit" + } } diff --git a/vendor/simplepie/simplepie/idn/idna_convert.class.php b/vendor/simplepie/simplepie/idn/idna_convert.class.php index eb9d5f516..ec137dc4c 100644 --- a/vendor/simplepie/simplepie/idn/idna_convert.class.php +++ b/vendor/simplepie/simplepie/idn/idna_convert.class.php @@ -306,20 +306,20 @@ class idna_convert if ($this->_strict_mode) { $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); return false; - } else { - // Skip first char - if ($k) { - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); - } - $output .= chr($decoded[$k]); + } + + // Skip first char + if ($k) { + $encoded = ''; + $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); + if ($encoded) { + $output .= $encoded; + } else { + $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); } - $last_begin = $k + 1; + $output .= chr($decoded[$k]); } + $last_begin = $k + 1; } } // Catch the rest of the string @@ -333,13 +333,13 @@ class idna_convert $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); } return $output; - } else { - if ($output = $this->_encode($decoded)) { - return $output; - } else { - return $this->_ucs4_to_utf8($decoded); - } } + + if ($output = $this->_encode($decoded)) { + return $output; + } + + return $this->_ucs4_to_utf8($decoded); } /** diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php index 34b6ca0c9..78e724525 100644 --- a/vendor/simplepie/simplepie/library/SimplePie.php +++ b/vendor/simplepie/simplepie/library/SimplePie.php @@ -33,7 +33,7 @@ * POSSIBILITY OF SUCH DAMAGE. * * @package SimplePie - * @version 1.5.1 + * @version 1.5.2 * @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue * @author Ryan Parman * @author Geoffrey Sneddon @@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie'); /** * SimplePie Version */ -define('SIMPLEPIE_VERSION', '1.5.1'); +define('SIMPLEPIE_VERSION', '1.5.2'); /** * SimplePie Build @@ -648,7 +648,7 @@ class SimplePie * @access private */ public $enable_exceptions = false; - + /** * The SimplePie class contains feed level data and options * @@ -1387,7 +1387,7 @@ class SimplePie list($headers, $sniffed) = $fetched; } - + // Empty response check if(empty($this->raw_data)){ $this->error = "A feed could not be found at `$this->feed_url`. Empty body."; @@ -1471,7 +1471,7 @@ class SimplePie // Cache the file if caching is enabled if ($cache && !$cache->save($this)) { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } return true; } @@ -1640,7 +1640,7 @@ class SimplePie if (!$this->force_feed) { // Check if the supplied URL is a feed, if it isn't, look for it. - $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds)); + $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options)); if (!$locate->is_feed($file)) { @@ -1708,7 +1708,7 @@ class SimplePie $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); if (!$cache->save($this)) { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc')); } @@ -1904,7 +1904,7 @@ class SimplePie /** * Get the URL for the feed - * + * * When the 'permanent' mode is enabled, returns the original feed URL, * except in the case of an `HTTP 301 Moved Permanently` status response, * in which case the location of the first redirection is returned. @@ -2138,10 +2138,8 @@ class SimplePie { return $this->get_link(); } - else - { - return $this->subscribe_url(); - } + + return $this->subscribe_url(); } /** @@ -2211,10 +2209,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } /** @@ -2231,10 +2227,8 @@ class SimplePie { return $categories[$key]; } - else - { - return null; - } + + return null; } /** @@ -2296,10 +2290,8 @@ class SimplePie { return array_unique($categories); } - else - { - return null; - } + + return null; } /** @@ -2316,10 +2308,8 @@ class SimplePie { return $authors[$key]; } - else - { - return null; - } + + return null; } /** @@ -2394,10 +2384,8 @@ class SimplePie { return array_unique($authors); } - else - { - return null; - } + + return null; } /** @@ -2414,10 +2402,8 @@ class SimplePie { return $contributors[$key]; } - else - { - return null; - } + + return null; } /** @@ -2480,10 +2466,8 @@ class SimplePie { return array_unique($contributors); } - else - { - return null; - } + + return null; } /** @@ -2501,10 +2485,8 @@ class SimplePie { return $links[$key]; } - else - { - return null; - } + + return null; } /** @@ -2606,10 +2588,8 @@ class SimplePie { return $this->data['links'][$rel]; } - else - { - return null; - } + + return null; } public function get_all_discovered_feeds() @@ -2664,10 +2644,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); } - else - { - return null; - } + + return null; } /** @@ -2700,10 +2678,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } /** @@ -2744,10 +2720,8 @@ class SimplePie { return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } /** @@ -2773,10 +2747,8 @@ class SimplePie { return (float) $match[1]; } - else - { - return null; - } + + return null; } /** @@ -2805,10 +2777,8 @@ class SimplePie { return (float) $match[2]; } - else - { - return null; - } + + return null; } /** @@ -2842,10 +2812,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } /** @@ -2885,10 +2853,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); } - else - { - return null; - } + + return null; } @@ -2917,10 +2883,8 @@ class SimplePie { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); } - else - { - return null; - } + + return null; } /** @@ -2943,10 +2907,8 @@ class SimplePie { return 88.0; } - else - { - return null; - } + + return null; } /** @@ -2969,10 +2931,8 @@ class SimplePie { return 31.0; } - else - { - return null; - } + + return null; } /** @@ -2992,10 +2952,8 @@ class SimplePie { return $qty; } - else - { - return ($qty > $max) ? $max : $qty; - } + + return ($qty > $max) ? $max : $qty; } /** @@ -3017,10 +2975,8 @@ class SimplePie { return $items[$key]; } - else - { - return null; - } + + return null; } /** @@ -3115,10 +3071,8 @@ class SimplePie { return array_slice($items, $start); } - else - { - return array_slice($items, $start, $end); - } + + return array_slice($items, $start, $end); } /** @@ -3241,16 +3195,12 @@ class SimplePie { return array_slice($items, $start); } - else - { - return array_slice($items, $start, $end); - } - } - else - { - trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); - return array(); + + return array_slice($items, $start, $end); } + + trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); + return array(); } /** diff --git a/vendor/simplepie/simplepie/library/SimplePie/Author.php b/vendor/simplepie/simplepie/library/SimplePie/Author.php index e6768ff29..14794cf27 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Author.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Author.php @@ -113,10 +113,8 @@ class SimplePie_Author { return $this->name; } - else - { - return null; - } + + return null; } /** @@ -130,10 +128,8 @@ class SimplePie_Author { return $this->link; } - else - { - return null; - } + + return null; } /** @@ -147,10 +143,7 @@ class SimplePie_Author { return $this->email; } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php index 8686b6c67..061ed043a 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php @@ -96,7 +96,7 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB 'cache_purge_time' => 2592000 ), ); - + $this->options = SimplePie_Misc::array_merge_recursive($this->options, SimplePie_Cache::parse_URL($location)); // Path is prefixed with a "/" @@ -395,10 +395,8 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB { return $time; } - else - { - return false; - } + + return false; } /** @@ -416,14 +414,8 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id'); $query->bindValue(':time', time()); $query->bindValue(':id', $this->id); - if ($query->execute() && $query->rowCount() > 0) - { - return true; - } - else - { - return false; - } + + return $query->execute() && $query->rowCount() > 0; } /** @@ -442,13 +434,7 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB $query->bindValue(':id', $this->id); $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id'); $query2->bindValue(':id', $this->id); - if ($query->execute() && $query2->execute()) - { - return true; - } - else - { - return false; - } + + return $query->execute() && $query2->execute(); } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php index 04d72c79a..dbc88e829 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php @@ -65,6 +65,12 @@ class SimplePie_Cache_Redis implements SimplePie_Cache_Base { $parsed = SimplePie_Cache::parse_URL($location); $redis = new Redis(); $redis->connect($parsed['host'], $parsed['port']); + if (isset($parsed['pass'])) { + $redis->auth($parsed['pass']); + } + if (isset($parsed['path'])) { + $redis->select((int)substr($parsed['path'], 1)); + } $this->cache = $redis; if (!is_null($options) && is_array($options)) { diff --git a/vendor/simplepie/simplepie/library/SimplePie/Caption.php b/vendor/simplepie/simplepie/library/SimplePie/Caption.php index abf07de1b..854857603 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Caption.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Caption.php @@ -131,10 +131,8 @@ class SimplePie_Caption { return $this->endTime; } - else - { - return null; - } + + return null; } /** @@ -149,10 +147,8 @@ class SimplePie_Caption { return $this->lang; } - else - { - return null; - } + + return null; } /** @@ -166,10 +162,8 @@ class SimplePie_Caption { return $this->startTime; } - else - { - return null; - } + + return null; } /** @@ -183,10 +177,8 @@ class SimplePie_Caption { return $this->text; } - else - { - return null; - } + + return null; } /** @@ -200,10 +192,7 @@ class SimplePie_Caption { return $this->type; } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php index ff35de614..b86dfa33c 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php @@ -120,24 +120,18 @@ class SimplePie_Content_Type_Sniffer { return $return; } - else - { - return $official; - } + + return $official; } elseif ($official === 'text/html') { return $this->feed_or_html(); } - else - { - return $official; - } - } - else - { - return $this->unknown(); + + return $official; } + + return $this->unknown(); } /** @@ -158,10 +152,8 @@ class SimplePie_Content_Type_Sniffer { return 'application/octect-stream'; } - else - { - return 'text/plain'; - } + + return 'text/plain'; } /** @@ -207,10 +199,8 @@ class SimplePie_Content_Type_Sniffer { return 'image/vnd.microsoft.icon'; } - else - { - return $this->text_or_binary(); - } + + return $this->text_or_binary(); } /** @@ -241,10 +231,8 @@ class SimplePie_Content_Type_Sniffer { return 'image/vnd.microsoft.icon'; } - else - { - return false; - } + + return false; } /** @@ -328,4 +316,3 @@ class SimplePie_Content_Type_Sniffer return 'text/html'; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php index 3f3d07d3b..a57f323e6 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php @@ -103,10 +103,8 @@ class SimplePie_Copyright { return $this->url; } - else - { - return null; - } + + return null; } /** @@ -120,10 +118,7 @@ class SimplePie_Copyright { return $this->label; } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Credit.php b/vendor/simplepie/simplepie/library/SimplePie/Credit.php index 9bad9ef34..064a1b864 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Credit.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Credit.php @@ -112,10 +112,8 @@ class SimplePie_Credit { return $this->role; } - else - { - return null; - } + + return null; } /** @@ -129,10 +127,8 @@ class SimplePie_Credit { return $this->scheme; } - else - { - return null; - } + + return null; } /** @@ -146,10 +142,7 @@ class SimplePie_Credit { return $this->name; } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php index de3f2cb53..773481a8c 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php @@ -117,10 +117,8 @@ class SimplePie_Decode_HTML_Entities $this->consumed .= $this->data[$this->position]; return $this->data[$this->position++]; } - else - { - return false; - } + + return false; } /** @@ -139,10 +137,8 @@ class SimplePie_Decode_HTML_Entities $this->position += $len; return $data; } - else - { - return false; - } + + return false; } /** @@ -612,4 +608,3 @@ class SimplePie_Decode_HTML_Entities } } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php index 15060e193..ddbbc3c92 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php @@ -282,10 +282,8 @@ class SimplePie_Enclosure { return $this->bitrate; } - else - { - return null; - } + + return null; } /** @@ -301,10 +299,8 @@ class SimplePie_Enclosure { return $captions[$key]; } - else - { - return null; - } + + return null; } /** @@ -318,10 +314,8 @@ class SimplePie_Enclosure { return $this->captions; } - else - { - return null; - } + + return null; } /** @@ -337,10 +331,8 @@ class SimplePie_Enclosure { return $categories[$key]; } - else - { - return null; - } + + return null; } /** @@ -354,10 +346,8 @@ class SimplePie_Enclosure { return $this->categories; } - else - { - return null; - } + + return null; } /** @@ -371,10 +361,8 @@ class SimplePie_Enclosure { return $this->channels; } - else - { - return null; - } + + return null; } /** @@ -388,10 +376,8 @@ class SimplePie_Enclosure { return $this->copyright; } - else - { - return null; - } + + return null; } /** @@ -407,10 +393,8 @@ class SimplePie_Enclosure { return $credits[$key]; } - else - { - return null; - } + + return null; } /** @@ -424,10 +408,8 @@ class SimplePie_Enclosure { return $this->credits; } - else - { - return null; - } + + return null; } /** @@ -441,10 +423,8 @@ class SimplePie_Enclosure { return $this->description; } - else - { - return null; - } + + return null; } /** @@ -462,15 +442,11 @@ class SimplePie_Enclosure $time = SimplePie_Misc::time_hms($this->duration); return $time; } - else - { - return $this->duration; - } - } - else - { - return null; + + return $this->duration; } + + return null; } /** @@ -484,10 +460,8 @@ class SimplePie_Enclosure { return $this->expression; } - else - { - return 'full'; - } + + return 'full'; } /** @@ -519,10 +493,8 @@ class SimplePie_Enclosure { return $this->framerate; } - else - { - return null; - } + + return null; } /** @@ -549,10 +521,8 @@ class SimplePie_Enclosure { return $hashes[$key]; } - else - { - return null; - } + + return null; } /** @@ -566,10 +536,8 @@ class SimplePie_Enclosure { return $this->hashes; } - else - { - return null; - } + + return null; } /** @@ -583,10 +551,8 @@ class SimplePie_Enclosure { return $this->height; } - else - { - return null; - } + + return null; } /** @@ -601,10 +567,8 @@ class SimplePie_Enclosure { return $this->lang; } - else - { - return null; - } + + return null; } /** @@ -620,10 +584,8 @@ class SimplePie_Enclosure { return $keywords[$key]; } - else - { - return null; - } + + return null; } /** @@ -637,10 +599,8 @@ class SimplePie_Enclosure { return $this->keywords; } - else - { - return null; - } + + return null; } /** @@ -654,10 +614,8 @@ class SimplePie_Enclosure { return $this->length; } - else - { - return null; - } + + return null; } /** @@ -671,10 +629,8 @@ class SimplePie_Enclosure { return urldecode($this->link); } - else - { - return null; - } + + return null; } /** @@ -689,10 +645,8 @@ class SimplePie_Enclosure { return $this->medium; } - else - { - return null; - } + + return null; } /** @@ -707,10 +661,8 @@ class SimplePie_Enclosure { return $this->player; } - else - { - return null; - } + + return null; } /** @@ -726,10 +678,8 @@ class SimplePie_Enclosure { return $ratings[$key]; } - else - { - return null; - } + + return null; } /** @@ -743,10 +693,8 @@ class SimplePie_Enclosure { return $this->ratings; } - else - { - return null; - } + + return null; } /** @@ -762,10 +710,8 @@ class SimplePie_Enclosure { return $restrictions[$key]; } - else - { - return null; - } + + return null; } /** @@ -779,10 +725,8 @@ class SimplePie_Enclosure { return $this->restrictions; } - else - { - return null; - } + + return null; } /** @@ -796,10 +740,8 @@ class SimplePie_Enclosure { return $this->samplingrate; } - else - { - return null; - } + + return null; } /** @@ -814,10 +756,8 @@ class SimplePie_Enclosure { return round($length/1048576, 2); } - else - { - return null; - } + + return null; } /** @@ -833,10 +773,8 @@ class SimplePie_Enclosure { return $thumbnails[$key]; } - else - { - return null; - } + + return null; } /** @@ -850,10 +788,8 @@ class SimplePie_Enclosure { return $this->thumbnails; } - else - { - return null; - } + + return null; } /** @@ -867,10 +803,8 @@ class SimplePie_Enclosure { return $this->title; } - else - { - return null; - } + + return null; } /** @@ -885,10 +819,8 @@ class SimplePie_Enclosure { return $this->type; } - else - { - return null; - } + + return null; } /** @@ -902,10 +834,8 @@ class SimplePie_Enclosure { return $this->width; } - else - { - return null; - } + + return null; } /** @@ -1365,15 +1295,10 @@ class SimplePie_Enclosure { return 'mp3'; } - else - { - return null; - } - } - else - { - return $type; + + return null; } + + return $type; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php index 2bb0a3b44..c73e0fbc9 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/File.php +++ b/vendor/simplepie/simplepie/library/SimplePie/File.php @@ -71,7 +71,7 @@ class SimplePie_File { $idn = new idna_convert(); $parsed = SimplePie_Misc::parse_url($url); - $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], NULL); } $this->url = $url; $this->permanent_url = $url; diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php index e982c206f..7d6188dd1 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php @@ -155,15 +155,13 @@ class SimplePie_HTTP_Parser { return true; } - else - { - $this->http_version = ''; - $this->status_code = ''; - $this->reason = ''; - $this->headers = array(); - $this->body = ''; - return false; - } + + $this->http_version = ''; + $this->status_code = ''; + $this->reason = ''; + $this->headers = array(); + $this->body = ''; + return false; } /** diff --git a/vendor/simplepie/simplepie/library/SimplePie/IRI.php b/vendor/simplepie/simplepie/library/SimplePie/IRI.php index 2b3fbaf07..ffba232b1 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/IRI.php +++ b/vendor/simplepie/simplepie/library/SimplePie/IRI.php @@ -211,10 +211,8 @@ class SimplePie_IRI { return $this->normalization[$this->scheme][$name]; } - else - { - return $return; - } + + return $return; } /** @@ -225,14 +223,7 @@ class SimplePie_IRI */ public function __isset($name) { - if (method_exists($this, 'get_' . $name) || isset($this->$name)) - { - return true; - } - else - { - return false; - } + return method_exists($this, 'get_' . $name) || isset($this->$name); } /** @@ -356,10 +347,8 @@ class SimplePie_IRI $target->scheme_normalization(); return $target; } - else - { - return false; - } + + return false; } } @@ -396,11 +385,9 @@ class SimplePie_IRI } return $match; } - else - { - // This can occur when a paragraph is accidentally parsed as a URI - return false; - } + + // This can occur when a paragraph is accidentally parsed as a URI + return false; } /** @@ -804,7 +791,7 @@ class SimplePie_IRI public function set_iri($iri, $clear_cache = false) { static $cache; - if ($clear_cache) + if ($clear_cache) { $cache = null; return; @@ -830,30 +817,28 @@ class SimplePie_IRI $return) = $cache[$iri]; return $return; } - else - { - $parsed = $this->parse_iri((string) $iri); - if (!$parsed) - { - return false; - } - $return = $this->set_scheme($parsed['scheme']) - && $this->set_authority($parsed['authority']) - && $this->set_path($parsed['path']) - && $this->set_query($parsed['query']) - && $this->set_fragment($parsed['fragment']); - - $cache[$iri] = array($this->scheme, - $this->iuserinfo, - $this->ihost, - $this->port, - $this->ipath, - $this->iquery, - $this->ifragment, - $return); - return $return; + $parsed = $this->parse_iri((string) $iri); + if (!$parsed) + { + return false; } + + $return = $this->set_scheme($parsed['scheme']) + && $this->set_authority($parsed['authority']) + && $this->set_path($parsed['path']) + && $this->set_query($parsed['query']) + && $this->set_fragment($parsed['fragment']); + + $cache[$iri] = array($this->scheme, + $this->iuserinfo, + $this->ihost, + $this->port, + $this->ipath, + $this->iquery, + $this->ifragment, + $return); + return $return; } /** @@ -915,42 +900,40 @@ class SimplePie_IRI return $return; } + + $remaining = $authority; + if (($iuserinfo_end = strrpos($remaining, '@')) !== false) + { + $iuserinfo = substr($remaining, 0, $iuserinfo_end); + $remaining = substr($remaining, $iuserinfo_end + 1); + } else { - $remaining = $authority; - if (($iuserinfo_end = strrpos($remaining, '@')) !== false) - { - $iuserinfo = substr($remaining, 0, $iuserinfo_end); - $remaining = substr($remaining, $iuserinfo_end + 1); - } - else - { - $iuserinfo = null; - } - if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) - { - if (($port = substr($remaining, $port_start + 1)) === false) - { - $port = null; - } - $remaining = substr($remaining, 0, $port_start); - } - else + $iuserinfo = null; + } + if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) + { + if (($port = substr($remaining, $port_start + 1)) === false) { $port = null; } + $remaining = substr($remaining, 0, $port_start); + } + else + { + $port = null; + } - $return = $this->set_userinfo($iuserinfo) && - $this->set_host($remaining) && - $this->set_port($port); + $return = $this->set_userinfo($iuserinfo) && + $this->set_host($remaining) && + $this->set_port($port); - $cache[$authority] = array($this->iuserinfo, - $this->ihost, - $this->port, - $return); + $cache[$authority] = array($this->iuserinfo, + $this->ihost, + $this->port, + $return); - return $return; - } + return $return; } /** @@ -1050,11 +1033,9 @@ class SimplePie_IRI $this->scheme_normalization(); return true; } - else - { - $this->port = null; - return false; - } + + $this->port = null; + return false; } /** @@ -1066,7 +1047,7 @@ class SimplePie_IRI public function set_path($ipath, $clear_cache = false) { static $cache; - if ($clear_cache) + if ($clear_cache) { $cache = null; return; @@ -1185,7 +1166,7 @@ class SimplePie_IRI { $iri .= $this->ipath; } - elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') + elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') { $iri .= $this->normalization[$this->scheme]['ipath']; } @@ -1229,16 +1210,14 @@ class SimplePie_IRI { $iauthority .= $this->ihost; } - if ($this->port !== null) + if ($this->port !== null && $this->port !== 0) { $iauthority .= ':' . $this->port; } return $iauthority; } - else - { - return null; - } + + return null; } /** @@ -1251,7 +1230,7 @@ class SimplePie_IRI $iauthority = $this->get_iauthority(); if (is_string($iauthority)) return $this->to_uri($iauthority); - else - return $iauthority; + + return $iauthority; } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php index 2083e7a92..9b9c1f5db 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Item.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php @@ -147,10 +147,8 @@ class SimplePie_Item { return $this->data['child'][$namespace][$tag]; } - else - { - return null; - } + + return null; } /** @@ -366,10 +364,8 @@ class SimplePie_Item { return $this->get_content(true); } - else - { - return null; - } + + return null; } /** @@ -407,18 +403,16 @@ class SimplePie_Item { return $this->get_description(true); } - else - { - return null; - } + + return null; } - + /** * Get the media:thumbnail of the item * * Uses `` * - * + * * @return array|null */ public function get_thumbnail() @@ -435,7 +429,7 @@ class SimplePie_Item } } return $this->data['thumbnail']; - } + } /** * Get a category for the item @@ -451,10 +445,8 @@ class SimplePie_Item { return $categories[$key]; } - else - { - return null; - } + + return null; } /** @@ -519,10 +511,8 @@ class SimplePie_Item { return array_unique($categories); } - else - { - return null; - } + + return null; } /** @@ -539,10 +529,8 @@ class SimplePie_Item { return $authors[$key]; } - else - { - return null; - } + + return null; } /** @@ -559,10 +547,8 @@ class SimplePie_Item { return $contributors[$key]; } - else - { - return null; - } + + return null; } /** @@ -571,7 +557,7 @@ class SimplePie_Item * Uses `` * * @since 1.1 - * @return array|null List of {@see SimplePie_Author} objects + * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects */ public function get_contributors() { @@ -625,10 +611,8 @@ class SimplePie_Item { return array_unique($contributors); } - else - { - return null; - } + + return null; } /** @@ -637,7 +621,7 @@ class SimplePie_Item * Uses ``, ``, `` or `` * * @since Beta 2 - * @return array|null List of {@see SimplePie_Author} objects + * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects */ public function get_authors() { @@ -715,10 +699,8 @@ class SimplePie_Item { return $authors; } - else - { - return null; - } + + return null; } /** @@ -743,10 +725,8 @@ class SimplePie_Item { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } /** @@ -825,10 +805,8 @@ class SimplePie_Item return date($date_format, $this->data['date']['parsed']); } } - else - { - return null; - } + + return null; } /** @@ -876,10 +854,8 @@ class SimplePie_Item return date($date_format, $this->data['updated']['parsed']); } } - else - { - return null; - } + + return null; } /** @@ -905,10 +881,8 @@ class SimplePie_Item { return strftime($date_format, $date); } - else - { - return null; - } + + return null; } /** @@ -969,10 +943,8 @@ class SimplePie_Item { return $enclosure->get_link(); } - else - { - return null; - } + + return null; } /** @@ -990,10 +962,8 @@ class SimplePie_Item { return $links[$key]; } - else - { - return null; - } + + return null; } /** @@ -1073,10 +1043,8 @@ class SimplePie_Item { return $this->data['links'][$rel]; } - else - { - return null; - } + + return null; } /** @@ -1096,10 +1064,8 @@ class SimplePie_Item { return $enclosures[$key]; } - else - { - return null; - } + + return null; } /** @@ -2922,10 +2888,8 @@ class SimplePie_Item { return $this->data['enclosures']; } - else - { - return null; - } + + return null; } /** @@ -2950,10 +2914,8 @@ class SimplePie_Item { return (float) $match[1]; } - else - { - return null; - } + + return null; } /** @@ -2982,10 +2944,8 @@ class SimplePie_Item { return (float) $match[2]; } - else - { - return null; - } + + return null; } /** @@ -3000,10 +2960,7 @@ class SimplePie_Item { return $this->registry->create('Source', array($this, $return[0])); } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Locator.php b/vendor/simplepie/simplepie/library/SimplePie/Locator.php index bc314c2cd..3876a2da6 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Locator.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Locator.php @@ -62,14 +62,18 @@ class SimplePie_Locator var $base_location = 0; var $checked_feeds = 0; var $max_checked_feeds = 10; + var $force_fsockopen = false; + var $curl_options = array(); protected $registry; - public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10) + public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = array()) { $this->file = $file; $this->useragent = $useragent; $this->timeout = $timeout; $this->max_checked_feeds = $max_checked_feeds; + $this->force_fsockopen = $force_fsockopen; + $this->curl_options = $curl_options; if (class_exists('DOMDocument')) { @@ -154,14 +158,8 @@ class SimplePie_Locator { $mime_types[] = 'text/html'; } - if (in_array($sniffed, $mime_types)) - { - return true; - } - else - { - return false; - } + + return in_array($sniffed, $mime_types); } elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) { @@ -210,10 +208,8 @@ class SimplePie_Locator { return array_values($feeds); } - else - { - return null; - } + + return null; } protected function search_elements_by_tag($name, &$done, $feeds) @@ -254,7 +250,7 @@ class SimplePie_Locator $headers = array( 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', ); - $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent)); + $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options)); if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true)) { $feeds[$href] = $feed; @@ -384,7 +380,7 @@ class SimplePie_Locator $headers = array( 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', ); - $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent)); + $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options)); if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) { return array($feed); @@ -412,7 +408,7 @@ class SimplePie_Locator $headers = array( 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', ); - $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent)); + $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options)); if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) { return array($feed); @@ -426,4 +422,3 @@ class SimplePie_Locator return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Misc.php b/vendor/simplepie/simplepie/library/SimplePie/Misc.php index 2e3107eb4..2a2ecc575 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Misc.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Misc.php @@ -217,10 +217,8 @@ class SimplePie_Misc { return substr_replace($url, 'itpc', 0, 4); } - else - { - return $url; - } + + return $url; } public static function array_merge_recursive($array1, $array2) @@ -234,9 +232,9 @@ class SimplePie_Misc else { $array1[$key] = $value; - } + } } - + return $array1; } @@ -276,10 +274,8 @@ class SimplePie_Misc { return chr($integer); } - else - { - return strtoupper($match[0]); - } + + return strtoupper($match[0]); } /** @@ -343,11 +339,9 @@ class SimplePie_Misc { return $return; } + // If we can't do anything, just fail - else - { - return false; - } + return false; } protected static function change_encoding_mbstring($data, $input, $output) @@ -1858,10 +1852,8 @@ class SimplePie_Misc { return trim($mime); } - else - { - return trim(substr($mime, 0, $pos)); - } + + return trim(substr($mime, 0, $pos)); } public static function atom_03_construct_type($attribs) @@ -1894,10 +1886,8 @@ class SimplePie_Misc return SIMPLEPIE_CONSTRUCT_NONE | $mode; } } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - } + + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; } public static function atom_10_construct_type($attribs) @@ -1947,10 +1937,8 @@ class SimplePie_Misc return SIMPLEPIE_CONSTRUCT_BASE64; } } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT; - } + + return SIMPLEPIE_CONSTRUCT_TEXT; } public static function is_isegment_nz_nc($string) @@ -2007,11 +1995,9 @@ class SimplePie_Misc { return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); } - else - { - // U+FFFD REPLACEMENT CHARACTER - return "\xEF\xBF\xBD"; - } + + // U+FFFD REPLACEMENT CHARACTER + return "\xEF\xBF\xBD"; } /** @@ -2215,10 +2201,8 @@ function embed_wmedia(width, height, link) { { return filemtime(dirname(__FILE__) . '/Core.php'); } - else - { - return filemtime(__FILE__); - } + + return filemtime(__FILE__); } /** @@ -2276,4 +2260,3 @@ function embed_wmedia(width, height, link) { // No-op } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php index 47658aff2..a054e8be5 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php @@ -173,10 +173,8 @@ class SimplePie_Net_IPv6 { return implode(':', $ip_parts); } - else - { - return $ip_parts[0]; - } + + return $ip_parts[0]; } /** @@ -200,10 +198,8 @@ class SimplePie_Net_IPv6 $ipv4_part = substr($ip, $pos + 1); return array($ipv6_part, $ipv4_part); } - else - { - return array($ip, ''); - } + + return array($ip, ''); } /** @@ -253,10 +249,8 @@ class SimplePie_Net_IPv6 } return true; } - else - { - return false; - } + + return false; } /** diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php index 1f2156655..b29274c64 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php @@ -694,10 +694,8 @@ class SimplePie_Parse_Date return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; } - else - { - return false; - } + + return false; } /** @@ -848,10 +846,8 @@ class SimplePie_Parse_Date return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; } - else - { - return false; - } + + return false; } /** @@ -913,10 +909,8 @@ class SimplePie_Parse_Date return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; } - else - { - return false; - } + + return false; } /** @@ -955,10 +949,8 @@ class SimplePie_Parse_Date $month = $this->month[strtolower($match[2])]; return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); } - else - { - return false; - } + + return false; } /** @@ -974,10 +966,7 @@ class SimplePie_Parse_Date { return false; } - else - { - return $strtotime; - } + + return $strtotime; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php index df1234023..3cef2287d 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php @@ -176,76 +176,72 @@ class SimplePie_Parser xml_parser_free($xml); return $return; } - else + + libxml_clear_errors(); + $xml = new XMLReader(); + $xml->xml($data); + while (@$xml->read()) { - libxml_clear_errors(); - $xml = new XMLReader(); - $xml->xml($data); - while (@$xml->read()) + switch ($xml->nodeType) { - switch ($xml->nodeType) - { - case constant('XMLReader::END_ELEMENT'): + case constant('XMLReader::END_ELEMENT'): + if ($xml->namespaceURI !== '') + { + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; + } + else + { + $tagName = $xml->localName; + } + $this->tag_close(null, $tagName); + break; + case constant('XMLReader::ELEMENT'): + $empty = $xml->isEmptyElement; + if ($xml->namespaceURI !== '') + { + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; + } + else + { + $tagName = $xml->localName; + } + $attributes = array(); + while ($xml->moveToNextAttribute()) + { if ($xml->namespaceURI !== '') { - $tagName = $xml->namespaceURI . $this->separator . $xml->localName; + $attrName = $xml->namespaceURI . $this->separator . $xml->localName; } else { - $tagName = $xml->localName; + $attrName = $xml->localName; } + $attributes[$attrName] = $xml->value; + } + $this->tag_open(null, $tagName, $attributes); + if ($empty) + { $this->tag_close(null, $tagName); - break; - case constant('XMLReader::ELEMENT'): - $empty = $xml->isEmptyElement; - if ($xml->namespaceURI !== '') - { - $tagName = $xml->namespaceURI . $this->separator . $xml->localName; - } - else - { - $tagName = $xml->localName; - } - $attributes = array(); - while ($xml->moveToNextAttribute()) - { - if ($xml->namespaceURI !== '') - { - $attrName = $xml->namespaceURI . $this->separator . $xml->localName; - } - else - { - $attrName = $xml->localName; - } - $attributes[$attrName] = $xml->value; - } - $this->tag_open(null, $tagName, $attributes); - if ($empty) - { - $this->tag_close(null, $tagName); - } - break; - case constant('XMLReader::TEXT'): + } + break; + case constant('XMLReader::TEXT'): - case constant('XMLReader::CDATA'): - $this->cdata(null, $xml->value); - break; - } - } - if ($error = libxml_get_last_error()) - { - $this->error_code = $error->code; - $this->error_string = $error->message; - $this->current_line = $error->line; - $this->current_column = $error->column; - return false; - } - else - { - return true; + case constant('XMLReader::CDATA'): + $this->cdata(null, $xml->value); + break; } } + if ($error = libxml_get_last_error()) + { + $this->error_code = $error->code; + $this->error_string = $error->message; + $this->current_line = $error->line; + $this->current_column = $error->column; + return false; + } + + return true; } public function get_error_code() @@ -662,4 +658,4 @@ class SimplePie_Parser // html is allowed, but the xml specification says they must be declared. return ' ]>'; } -} \ No newline at end of file +} diff --git a/vendor/simplepie/simplepie/library/SimplePie/Rating.php b/vendor/simplepie/simplepie/library/SimplePie/Rating.php index eaf57080c..108dd22bf 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Rating.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Rating.php @@ -103,10 +103,8 @@ class SimplePie_Rating { return $this->scheme; } - else - { - return null; - } + + return null; } /** @@ -120,9 +118,7 @@ class SimplePie_Rating { return $this->value; } - else - { - return null; - } + + return null; } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php index 001a5cd28..803d84fde 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php @@ -112,10 +112,8 @@ class SimplePie_Restriction { return $this->relationship; } - else - { - return null; - } + + return null; } /** @@ -129,10 +127,8 @@ class SimplePie_Restriction { return $this->type; } - else - { - return null; - } + + return null; } /** @@ -146,9 +142,7 @@ class SimplePie_Restriction { return $this->value; } - else - { - return null; - } + + return null; } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php index 5a11721df..40b066266 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php @@ -354,7 +354,7 @@ class SimplePie_Sanitize } else { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); + trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Source.php b/vendor/simplepie/simplepie/library/SimplePie/Source.php index 1a66a392d..8fac13ef7 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Source.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Source.php @@ -79,10 +79,8 @@ class SimplePie_Source { return $this->data['child'][$namespace][$tag]; } - else - { - return null; - } + + return null; } public function get_base($element = array()) @@ -130,10 +128,8 @@ class SimplePie_Source { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } public function get_category($key = 0) @@ -143,10 +139,8 @@ class SimplePie_Source { return $categories[$key]; } - else - { - return null; - } + + return null; } public function get_categories() @@ -200,10 +194,8 @@ class SimplePie_Source { return array_unique($categories); } - else - { - return null; - } + + return null; } public function get_author($key = 0) @@ -213,10 +205,8 @@ class SimplePie_Source { return $authors[$key]; } - else - { - return null; - } + + return null; } public function get_authors() @@ -283,10 +273,8 @@ class SimplePie_Source { return array_unique($authors); } - else - { - return null; - } + + return null; } public function get_contributor($key = 0) @@ -296,10 +284,8 @@ class SimplePie_Source { return $contributors[$key]; } - else - { - return null; - } + + return null; } public function get_contributors() @@ -354,10 +340,8 @@ class SimplePie_Source { return array_unique($contributors); } - else - { - return null; - } + + return null; } public function get_link($key = 0, $rel = 'alternate') @@ -367,10 +351,8 @@ class SimplePie_Source { return $links[$key]; } - else - { - return null; - } + + return null; } /** @@ -449,10 +431,8 @@ class SimplePie_Source { return $this->data['links'][$rel]; } - else - { - return null; - } + + return null; } public function get_description() @@ -493,10 +473,8 @@ class SimplePie_Source { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); } - else - { - return null; - } + + return null; } public function get_copyright() @@ -521,10 +499,8 @@ class SimplePie_Source { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } public function get_language() @@ -545,10 +521,8 @@ class SimplePie_Source { return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); } - else - { - return null; - } + + return null; } public function get_latitude() @@ -561,10 +535,8 @@ class SimplePie_Source { return (float) $match[1]; } - else - { - return null; - } + + return null; } public function get_longitude() @@ -581,10 +553,8 @@ class SimplePie_Source { return (float) $match[2]; } - else - { - return null; - } + + return null; } public function get_image_url() @@ -601,10 +571,7 @@ class SimplePie_Source { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); } - else - { - return null; - } + + return null; } } - diff --git a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php index 99e751672..18ca1b79b 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php +++ b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php @@ -136,13 +136,11 @@ class SimplePie_XML_Declaration_Parser { return true; } - else - { - $this->version = ''; - $this->encoding = ''; - $this->standalone = ''; - return false; - } + + $this->version = ''; + $this->encoding = ''; + $this->standalone = ''; + return false; } /** diff --git a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php index 0e8bc8fc6..f4aeafa28 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php +++ b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php @@ -338,10 +338,8 @@ class SimplePie_gzdecode { return false; } - else - { - $this->position = $this->compressed_size - 8; - } + + $this->position = $this->compressed_size - 8; // Check CRC of data $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); @@ -362,9 +360,7 @@ class SimplePie_gzdecode // Wow, against all odds, we've actually got a valid gzip string return true; } - else - { - return false; - } + + return false; } } -- cgit v1.2.3 From 07792adc56840b178d8fb029113dd6598ce7fc10 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Tue, 28 Aug 2018 12:06:36 +0200 Subject: add paragonie and symfonie since ramsey/uuid appears to require them --- vendor/paragonie/random_compat/LICENSE | 22 ++ vendor/paragonie/random_compat/build-phar.sh | 5 + vendor/paragonie/random_compat/composer.json | 34 +++ .../random_compat/dist/random_compat.phar.pubkey | 5 + .../dist/random_compat.phar.pubkey.asc | 11 + vendor/paragonie/random_compat/lib/random.php | 32 +++ .../paragonie/random_compat/other/build_phar.php | 57 ++++++ vendor/paragonie/random_compat/psalm-autoload.php | 9 + vendor/paragonie/random_compat/psalm.xml | 19 ++ vendor/symfony/polyfill-ctype/Ctype.php | 227 +++++++++++++++++++++ vendor/symfony/polyfill-ctype/LICENSE | 19 ++ vendor/symfony/polyfill-ctype/README.md | 12 ++ vendor/symfony/polyfill-ctype/bootstrap.php | 26 +++ vendor/symfony/polyfill-ctype/composer.json | 34 +++ 14 files changed, 512 insertions(+) create mode 100644 vendor/paragonie/random_compat/LICENSE create mode 100644 vendor/paragonie/random_compat/build-phar.sh create mode 100644 vendor/paragonie/random_compat/composer.json create mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey create mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc create mode 100644 vendor/paragonie/random_compat/lib/random.php create mode 100644 vendor/paragonie/random_compat/other/build_phar.php create mode 100644 vendor/paragonie/random_compat/psalm-autoload.php create mode 100644 vendor/paragonie/random_compat/psalm.xml create mode 100644 vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 vendor/symfony/polyfill-ctype/LICENSE create mode 100644 vendor/symfony/polyfill-ctype/README.md create mode 100644 vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 vendor/symfony/polyfill-ctype/composer.json diff --git a/vendor/paragonie/random_compat/LICENSE b/vendor/paragonie/random_compat/LICENSE new file mode 100644 index 000000000..45c7017df --- /dev/null +++ b/vendor/paragonie/random_compat/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Paragon Initiative Enterprises + +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. + diff --git a/vendor/paragonie/random_compat/build-phar.sh b/vendor/paragonie/random_compat/build-phar.sh new file mode 100644 index 000000000..b4a5ba31c --- /dev/null +++ b/vendor/paragonie/random_compat/build-phar.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) ) + +php -dphar.readonly=0 "$basedir/other/build_phar.php" $* \ No newline at end of file diff --git a/vendor/paragonie/random_compat/composer.json b/vendor/paragonie/random_compat/composer.json new file mode 100644 index 000000000..1fa8de9f1 --- /dev/null +++ b/vendor/paragonie/random_compat/composer.json @@ -0,0 +1,34 @@ +{ + "name": "paragonie/random_compat", + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "random", + "polyfill", + "pseudorandom" + ], + "license": "MIT", + "type": "library", + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "support": { + "issues": "https://github.com/paragonie/random_compat/issues", + "email": "info@paragonie.com", + "source": "https://github.com/paragonie/random_compat" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "vimeo/psalm": "^1", + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + } +} diff --git a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey new file mode 100644 index 000000000..eb50ebfcd --- /dev/null +++ b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm +pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p ++h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc +-----END PUBLIC KEY----- diff --git a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc new file mode 100644 index 000000000..6a1d7f300 --- /dev/null +++ b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.22 (MingW32) + +iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip +QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg +1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW +NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA +NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV +JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74= +=B6+8 +-----END PGP SIGNATURE----- diff --git a/vendor/paragonie/random_compat/lib/random.php b/vendor/paragonie/random_compat/lib/random.php new file mode 100644 index 000000000..c7731a56f --- /dev/null +++ b/vendor/paragonie/random_compat/lib/random.php @@ -0,0 +1,32 @@ +buildFromDirectory(dirname(__DIR__).'/lib'); +rename( + dirname(__DIR__).'/lib/index.php', + dirname(__DIR__).'/lib/random.php' +); + +/** + * If we pass an (optional) path to a private key as a second argument, we will + * sign the Phar with OpenSSL. + * + * If you leave this out, it will produce an unsigned .phar! + */ +if ($argc > 1) { + if (!@is_readable($argv[1])) { + echo 'Could not read the private key file:', $argv[1], "\n"; + exit(255); + } + $pkeyFile = file_get_contents($argv[1]); + + $private = openssl_get_privatekey($pkeyFile); + if ($private !== false) { + $pkey = ''; + openssl_pkey_export($private, $pkey); + $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey); + + /** + * Save the corresponding public key to the file + */ + if (!@is_readable($dist.'/random_compat.phar.pubkey')) { + $details = openssl_pkey_get_details($private); + file_put_contents( + $dist.'/random_compat.phar.pubkey', + $details['key'] + ); + } + } else { + echo 'An error occurred reading the private key from OpenSSL.', "\n"; + exit(255); + } +} diff --git a/vendor/paragonie/random_compat/psalm-autoload.php b/vendor/paragonie/random_compat/psalm-autoload.php new file mode 100644 index 000000000..d71d1b818 --- /dev/null +++ b/vendor/paragonie/random_compat/psalm-autoload.php @@ -0,0 +1,9 @@ + + + + + + + + + + + + + + + diff --git a/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 000000000..58414dc73 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,227 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param string|int $int + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/vendor/symfony/polyfill-ctype/LICENSE b/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 000000000..ad399a798 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018 Fabien Potencier + +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. diff --git a/vendor/symfony/polyfill-ctype/README.md b/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 000000000..8add1ab00 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 000000000..14d1d0faa --- /dev/null +++ b/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } + function ctype_print($text) { return p\Ctype::ctype_print($text); } + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } + function ctype_space($text) { return p\Ctype::ctype_space($text); } + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 000000000..094f8d867 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + } +} -- cgit v1.2.3 From 7ecb337405aa1ca9327487eecaa352059ee65052 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Tue, 28 Aug 2018 22:43:37 -0700 Subject: redirect stdout/stderr on cron command --- Zotlabs/Daemon/Notifier.php | 2 ++ install/INSTALL.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index fa2368a92..f74c8f11c 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -559,6 +559,8 @@ class Notifier { foreach($dhubs as $hub) { + logger('notifier_hub: ' . $hub['hubloc_url'],LOGGER_DEBUG); + if($hub['hubloc_network'] !== 'zot') { $narr = [ 'channel' => $channel, diff --git a/install/INSTALL.txt b/install/INSTALL.txt index 421656023..fe2484d7a 100644 --- a/install/INSTALL.txt +++ b/install/INSTALL.txt @@ -230,7 +230,7 @@ Change "/base/directory", and "/path/to/php" as appropriate for your situation. If you are using a Linux server, run "crontab -e" and add a line like the one shown, substituting for your unique paths and settings: -*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php Zotlabs/Daemon/Master.php Cron +*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 You can generally find the location of PHP by executing "which php". If you have troubles with this section please contact your hosting provider for -- cgit v1.2.3 From 42093aedcf9af8433ad9764116b98182e4fba658 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 29 Aug 2018 13:57:36 +0200 Subject: db update to get rid of bogus activitypub xchans which got created due to a bug in the pubcrawl addon --- Zotlabs/Update/_1219.php | 26 ++++++++++++++++++++++++++ boot.php | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Zotlabs/Update/_1219.php diff --git a/Zotlabs/Update/_1219.php b/Zotlabs/Update/_1219.php new file mode 100644 index 000000000..be2534001 --- /dev/null +++ b/Zotlabs/Update/_1219.php @@ -0,0 +1,26 @@ + Date: Wed, 29 Aug 2018 08:58:49 -0400 Subject: Add dreport_process hook --- include/zot.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/zot.php b/include/zot.php index 5c79dd4fa..52102e147 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1118,6 +1118,7 @@ function zot_process_response($hub, $arr, $outq) { } foreach($x['delivery_report'] as $xx) { + call_hooks('dreport_process',$xx); if(is_array($xx) && array_key_exists('message_id',$xx) && delivery_report_is_storable($xx)) { q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ", dbesc($xx['message_id']), -- cgit v1.2.3 From 70d6d2f2db21c001b8f56a86339a005fbad81ebd Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Wed, 29 Aug 2018 10:02:04 -0400 Subject: Micro-optimization to call_hooks() --- include/plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/plugin.php b/include/plugin.php index 23cb2b5f6..ea3c67c2f 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -432,7 +432,7 @@ function insert_hook($hook, $fn, $version = 0, $priority = 0) { function call_hooks($name, &$data = null) { $a = 0; - if((is_array(App::$hooks)) && (array_key_exists($name, App::$hooks))) { + if (isset(App::$hooks[$name])) { foreach(App::$hooks[$name] as $hook) { $origfn = $hook[1]; if($hook[0]) -- cgit v1.2.3 From d98ed6874947fd6a70dcf3fddd48b1676df01c43 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 29 Aug 2018 16:16:17 +0200 Subject: html-to-markdown adds a backslash infront of a hash after each new line - manualy remove those --- include/markdown.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/markdown.php b/include/markdown.php index f4944e2cc..e5f5b9369 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -255,6 +255,9 @@ function bb_to_markdown($Text, $options = []) { $Text = html2markdown($Text); + //html2markdown adds backslashes infront of hashes after a new line. remove them + $Text = str_replace("\n\#", "\n#", $Text); + // It also adds backslashes to our attempt at getting around the html entity preservation for some weird reason. //$Text = str_replace(array('&\\_lt\\_;','&\\_gt\\_;','&\\_amp\\_;'),array('<','>','&'),$Text); @@ -374,4 +377,4 @@ class TableConverter implements ConverterInterface { return array('table', 'tr', 'thead', 'td', 'tbody'); } -} \ No newline at end of file +} -- cgit v1.2.3 From d377660b5a8800fdce33bbafcc166a8b2a6076d1 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 31 Aug 2018 20:26:31 +0200 Subject: update 1218: missing default value for pg --- Zotlabs/Update/_1218.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Update/_1218.php b/Zotlabs/Update/_1218.php index 67d8b49a5..07c7dba20 100644 --- a/Zotlabs/Update/_1218.php +++ b/Zotlabs/Update/_1218.php @@ -7,9 +7,9 @@ class _1218 { function run() { if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { - $r1 = q("ALTER TABLE hubloc add hubloc_id_url text NOT NULL"); + $r1 = q("ALTER TABLE hubloc add hubloc_id_url text NOT NULL DEFAULT ''"); $r2 = q("create index \"hubloc_id_url\" on hubloc (\"hubloc_id_url\")"); - $r3 = q("ALTER TABLE hubloc add hubloc_site_id text NOT NULL"); + $r3 = q("ALTER TABLE hubloc add hubloc_site_id text NOT NULL DEFAULT ''"); $r4 = q("create index \"hubloc_site_id\" on hubloc (\"hubloc_site_id\")"); $r = $r1 && $r2 && $r3 && $r4; -- cgit v1.2.3 From 4376f8f030ea36fd5fed263efcee3a5276af0da1 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sat, 1 Sep 2018 13:43:32 +0200 Subject: do not count sys channel in totals --- Zotlabs/Module/Admin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index 2df8dc25d..6edced9b5 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -109,7 +109,7 @@ class Admin extends \Zotlabs\Web\Controller { // available channels, primary and clones $channels = array(); - $r = q("SELECT COUNT(*) AS total, COUNT(CASE WHEN channel_primary = 1 THEN 1 ELSE NULL END) AS main, COUNT(CASE WHEN channel_primary = 0 THEN 1 ELSE NULL END) AS clones FROM channel WHERE channel_removed = 0"); + $r = q("SELECT COUNT(*) AS total, COUNT(CASE WHEN channel_primary = 1 THEN 1 ELSE NULL END) AS main, COUNT(CASE WHEN channel_primary = 0 THEN 1 ELSE NULL END) AS clones FROM channel WHERE channel_removed = 0 and channel_system = 0"); if ($r) { $channels['total'] = array('label' => t('Channels'), 'val' => $r[0]['total']); $channels['main'] = array('label' => t('Primary'), 'val' => $r[0]['main']); -- cgit v1.2.3 From e2824f925964fbfe160255de6e733b4c2de3cecb Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Sat, 1 Sep 2018 13:45:05 -0400 Subject: Fix: Authors unable to comment on posts they authored when under owned by others in certain circumstances. --- Zotlabs/Module/Item.php | 12 +++++++----- include/zot.php | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 640b4fa5c..a24d6da9c 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -29,7 +29,7 @@ use \Zotlabs\Lib as Zlib; class Item extends \Zotlabs\Web\Controller { function post() { - + // This will change. Figure out who the observer is and whether or not // they have permission to post here. Else ignore the post. @@ -237,10 +237,12 @@ class Item extends \Zotlabs\Web\Controller { if($parent) { logger('mod_item: item_post parent=' . $parent); $can_comment = false; - if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])) - $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); - else - $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); + + $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); + if (!$can_comment) { + if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])==1 ) + $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); + } if(! $can_comment) { notice( t('Permission denied.') . EOL) ; diff --git a/include/zot.php b/include/zot.php index 52102e147..3523dd2ec 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1808,8 +1808,21 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $ else { $arr['item_wall'] = 0; } - - if((! perm_is_allowed($channel['channel_id'],$sender['hash'],$perm)) && (! $tag_delivery) && (! $local_public)) { + + $allowed = (perm_is_allowed($channel['channel_id'],$sender['hash'],$perm) && (! $tag_delivery) && (! $local_public)); + + if(! $allowed && $perm == 'post_comments') { +logger("Channel = ".intval($channel['channel_id'])); + $parent = q("select * from item where mid = '%s' and uid = %d limit 1", + dbesc($arr['parent_mid']), + intval($channel['channel_id']) + ); + if ($parent) { + $allowed = can_comment_on_post($d['hash'],$parent[0]); + } + } + + if (! $allowed) { logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); $DR->update('permission denied'); $result[] = $DR->get(); -- cgit v1.2.3 From d66f58a550d61f17c46eca42cba84f45ae9c4628 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sat, 1 Sep 2018 21:09:04 +0200 Subject: fix undefined constant warning --- Zotlabs/Module/Filestorage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Module/Filestorage.php b/Zotlabs/Module/Filestorage.php index cd9ab601d..23bd63f95 100644 --- a/Zotlabs/Module/Filestorage.php +++ b/Zotlabs/Module/Filestorage.php @@ -128,7 +128,7 @@ class Filestorage extends \Zotlabs\Web\Controller { } } - if(json_return) + if($json_return) json_return_and_die([ 'success' => true ]); goaway(dirname($url)); -- cgit v1.2.3 From 41ccb61c2e2f2123ae510a39ebd048a56832825e Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Mon, 3 Sep 2018 18:14:17 +0200 Subject: Revert "Fix: Authors unable to comment on posts they authored when under owned by others in certain circumstances." This reverts commit e2824f925964fbfe160255de6e733b4c2de3cecb. Reverting because it breaks forum mentions. --- Zotlabs/Module/Item.php | 12 +++++------- include/zot.php | 17 ++--------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index a24d6da9c..640b4fa5c 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -29,7 +29,7 @@ use \Zotlabs\Lib as Zlib; class Item extends \Zotlabs\Web\Controller { function post() { - + // This will change. Figure out who the observer is and whether or not // they have permission to post here. Else ignore the post. @@ -237,12 +237,10 @@ class Item extends \Zotlabs\Web\Controller { if($parent) { logger('mod_item: item_post parent=' . $parent); $can_comment = false; - - $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); - if (!$can_comment) { - if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])==1 ) - $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); - } + if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])) + $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); + else + $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); if(! $can_comment) { notice( t('Permission denied.') . EOL) ; diff --git a/include/zot.php b/include/zot.php index 3523dd2ec..52102e147 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1808,21 +1808,8 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $ else { $arr['item_wall'] = 0; } - - $allowed = (perm_is_allowed($channel['channel_id'],$sender['hash'],$perm) && (! $tag_delivery) && (! $local_public)); - - if(! $allowed && $perm == 'post_comments') { -logger("Channel = ".intval($channel['channel_id'])); - $parent = q("select * from item where mid = '%s' and uid = %d limit 1", - dbesc($arr['parent_mid']), - intval($channel['channel_id']) - ); - if ($parent) { - $allowed = can_comment_on_post($d['hash'],$parent[0]); - } - } - - if (! $allowed) { + + if((! perm_is_allowed($channel['channel_id'],$sender['hash'],$perm)) && (! $tag_delivery) && (! $local_public)) { logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); $DR->update('permission denied'); $result[] = $DR->get(); -- cgit v1.2.3 From 9446e0348efa151ef7d75fa8206bb578633273dd Mon Sep 17 00:00:00 2001 From: "M.Dent" Date: Tue, 4 Sep 2018 07:54:24 -0400 Subject: Corrected resubmit of fixes to Authors unable to comment on posts they authored when owned by others. --- Zotlabs/Module/Item.php | 12 +++++++----- include/zot.php | 29 ++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 640b4fa5c..a24d6da9c 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -29,7 +29,7 @@ use \Zotlabs\Lib as Zlib; class Item extends \Zotlabs\Web\Controller { function post() { - + // This will change. Figure out who the observer is and whether or not // they have permission to post here. Else ignore the post. @@ -237,10 +237,12 @@ class Item extends \Zotlabs\Web\Controller { if($parent) { logger('mod_item: item_post parent=' . $parent); $can_comment = false; - if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])) - $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); - else - $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); + + $can_comment = can_comment_on_post($observer['xchan_hash'],$parent_item); + if (!$can_comment) { + if((array_key_exists('owner',$parent_item)) && intval($parent_item['owner']['abook_self'])==1 ) + $can_comment = perm_is_allowed($profile_uid,$observer['xchan_hash'],'post_comments'); + } if(! $can_comment) { notice( t('Permission denied.') . EOL) ; diff --git a/include/zot.php b/include/zot.php index 52102e147..e8ac2df02 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1808,13 +1808,28 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $ else { $arr['item_wall'] = 0; } - - if((! perm_is_allowed($channel['channel_id'],$sender['hash'],$perm)) && (! $tag_delivery) && (! $local_public)) { - logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); - $DR->update('permission denied'); - $result[] = $DR->get(); - continue; - } + + + if ((! $tag_delivery) && (! $local_public)) { + $allowed = (perm_is_allowed($channel['channel_id'],$sender['hash'],$perm)); + + if((! $allowed) && $perm == 'post_comments') { + $parent = q("select * from item where mid = '%s' and uid = %d limit 1", + dbesc($arr['parent_mid']), + intval($channel['channel_id']) + ); + if ($parent) { + $allowed = can_comment_on_post($d['hash'],$parent[0]); + } + } + + if (! $allowed) { + logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); + $DR->update('permission denied'); + $result[] = $DR->get(); + continue; + } + } if($arr['mid'] != $arr['parent_mid']) { -- cgit v1.2.3 From a821682c8c165077947781bca2064922884f6e7d Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 12:17:32 +0200 Subject: instead of not displaying the cover-photo at all after first page load, load the page with the cover slided up. change pointer to n-resize if cover is not slid. --- Zotlabs/Widget/Cover_photo.php | 6 ++++-- view/css/widgets.css | 1 - view/tpl/cover_photo_widget.tpl | 30 +++++++++++++++++++++++++----- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Zotlabs/Widget/Cover_photo.php b/Zotlabs/Widget/Cover_photo.php index af1ae5c7f..965566523 100644 --- a/Zotlabs/Widget/Cover_photo.php +++ b/Zotlabs/Widget/Cover_photo.php @@ -21,9 +21,9 @@ class Cover_photo { return ''; // only show cover photos once per login session - + $hide_cover = false; if(array_key_exists('channels_visited',$_SESSION) && is_array($_SESSION['channels_visited']) && in_array($channel_id,$_SESSION['channels_visited'])) { - return EMPTY_STR; + $hide_cover = true; } if(! array_key_exists('channels_visited',$_SESSION)) { $_SESSION['channels_visited'] = []; @@ -53,6 +53,7 @@ class Cover_photo { $subtitle = str_replace('@','@',$channel['xchan_addr']); $c = get_cover_photo($channel_id,'html'); + $c = str_replace('src=', 'data-src=', $c); if($c) { $photo_html = (($style) ? str_replace('alt=',' style="' . $style . '" alt=',$c) : $c); @@ -62,6 +63,7 @@ class Cover_photo { '$title' => $title, '$subtitle' => $subtitle, '$hovertitle' => t('Click to show more'), + '$hide_cover' => $hide_cover )); } return $o; diff --git a/view/css/widgets.css b/view/css/widgets.css index e330c38e1..995647d1c 100644 --- a/view/css/widgets.css +++ b/view/css/widgets.css @@ -142,7 +142,6 @@ li:hover .group-edit-icon { position: relative; width: 100%; height: auto; - cursor: pointer; } #cover-photo-caption { diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index 3aaad5ae5..ed708ffb5 100755 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -2,16 +2,27 @@ var aside_padding_top; var section_padding_top; var coverSlid = false; + var hide_cover = Boolean({{$hide_cover}}); $(document).ready(function() { + if(! $('#cover-photo').length) + return; aside_padding_top = parseInt($('aside').css('padding-top')); section_padding_top = parseInt($('section').css('padding-top')); $(document).on('click mouseup keyup', slideUpCover); - if($('#cover-photo').length && $(window).width() > 755) { + if($(window).width() > 755) { + datasrc2src('#cover-photo > img'); + + if(hide_cover) { + hideCover(); + coverSlid = true; + } + if($(window).scrollTop() < $('#cover-photo').height()) { + $('body').css('cursor', 'n-resize'); $('.navbar').removeClass('fixed-top'); $('main').css('margin-top', - $('nav').outerHeight(true) + 'px'); $('main').css('opacity', 0); @@ -24,32 +35,34 @@ }); $(window).scroll(function () { - if($('#cover-photo').length && $(window).width() > 755 && $(window).scrollTop() >= $('#cover-photo').height()) { + if($(window).width() > 755 && $(window).scrollTop() >= $('#cover-photo').height()) { + $('body').css('cursor', ''); $('.navbar').addClass('fixed-top'); $('main').css('margin-top', ''); $('main').css('opacity', 1); coverSlid = true; } - else if ($('#cover-photo').length && $(window).width() > 755 && $(window).scrollTop() < $('#cover-photo').height()){ + else if ($(window).width() > 755 && $(window).scrollTop() < $('#cover-photo').height()){ if(coverSlid) { $(window).scrollTop(Math.ceil($('#cover-photo').height())); setTimeout(function(){ coverSlid = false; }, 1000); } else { if($(window).scrollTop() < $('#cover-photo').height()) { + $('body').css('cursor', 'n-resize'); $('.navbar').removeClass('fixed-top'); $('main').css('margin-top', - $('nav').outerHeight(true) + 'px'); $('main').css('opacity', 0); } } } - if($('#cover-photo').length && $('main').css('opacity') < 1) { + if($('main').css('opacity') < 1) { $('main').css('opacity', ($(window).scrollTop()/$('#cover-photo').height()).toFixed(1)); } }); $(window).resize(function () { - if($('#cover-photo').length && $(window).width() < 755) { + if($(window).width() < 755) { $('#cover-photo').remove(); $('.navbar').addClass('fixed-top'); $('main').css('opacity', 1); @@ -65,6 +78,13 @@ $('html, body').animate({scrollTop: Math.ceil($('#cover-photo').height()) + 'px' }, 'fast'); return; } + + function hideCover() { + if(coverSlid) { + return; + } + window.scrollTo(0, Math.ceil($('#cover-photo').height())); + }
-- cgit v1.2.3 From 75e8aa8aee9c735308ed36bef5648cdceff6351e Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 12:19:52 +0200 Subject: bump version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 6c56a7dc0..54c49cf6b 100755 --- a/boot.php +++ b/boot.php @@ -50,7 +50,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '3.7.1' ); +define ( 'STD_VERSION', '3.7.2' ); define ( 'ZOT_REVISION', '6.0a' ); -- cgit v1.2.3 From 1753e404668b272a284bc922d3102acf04a6d6d1 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 12:32:53 +0200 Subject: Revert "Fix jumpy sidebars" This reverts commit 79eb6d39423c47c8c7809ed34cdc88effbb6e97e. --- view/theme/redbasic/css/style.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 943b27637..82d0cf761 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -45,9 +45,6 @@ main { margin-left: auto; margin-right: auto; max-width: $main_widthpx; -} - -main #region_2 { margin-bottom: $bottom_margin; } -- cgit v1.2.3 From e494a76b33baae47aee671951cc4459a3f225c86 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 12:34:30 +0200 Subject: revert "Add bottom margin on aside elements and main to allow for viewport footer." This reverts commit 1d7d604016e6728725c4b857cec85c3d5a050268. --- view/theme/redbasic/css/style.css | 8 +------- view/theme/redbasic/php/style.php | 6 +----- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 82d0cf761..970e4bc89 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -33,19 +33,13 @@ aside #region_1 { } aside #left_aside_wrapper { - /*margin-bottom: 10px;*/ - margin-bottom: $bottom_margin; -} -aside #right_aside_wrapper { - /*margin-bottom: 10px;*/ - margin-bottom: $bottom_margin; + margin-bottom: 10px; } main { margin-left: auto; margin-right: auto; max-width: $main_widthpx; - margin-bottom: $bottom_margin; } #overlay { diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php index 0631fa142..91cc0b85b 100644 --- a/view/theme/redbasic/php/style.php +++ b/view/theme/redbasic/php/style.php @@ -106,8 +106,6 @@ if(! $top_photo) $top_photo = '2.3rem'; if(! $reply_photo) $reply_photo = '2.3rem'; -if(! $bottom_margin) - $bottom_margin = '200px'; // Apply the settings if(file_exists('view/theme/redbasic/css/style.css')) { @@ -152,9 +150,7 @@ if(file_exists('view/theme/redbasic/css/style.css')) { '$pmenu_top' => $pmenu_top, '$pmenu_reply' => $pmenu_reply, '$main_width' => $main_width, - '$aside_width' => $aside_width, - '$bottom_margin' => $bottom_margin - + '$aside_width' => $aside_width ); echo str_replace(array_keys($options), array_values($options), $x); -- cgit v1.2.3 From 4f82428a207d426a5cace7c3749655b391e6c156 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 14:31:34 +0200 Subject: hide cover photo by default and show it only if conditions are met --- view/theme/redbasic/css/style.css | 3 ++- view/tpl/cover_photo_widget.tpl | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 970e4bc89..0a879cb71 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -32,7 +32,8 @@ aside #region_1 { border-right: 1px solid transparent; } -aside #left_aside_wrapper { +aside #left_aside_wrapper, +aside #right_aside_wrapper { margin-bottom: 10px; } diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index ed708ffb5..2de3c74be 100755 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -14,6 +14,7 @@ $(document).on('click mouseup keyup', slideUpCover); if($(window).width() > 755) { + $('#cover-photo').removeClass('d-none'); datasrc2src('#cover-photo > img'); if(hide_cover) { @@ -87,7 +88,7 @@ } -
+
{{$photo_html}}

{{$title}}

-- cgit v1.2.3 From ea381d918021a33a73df40de95fd0c57f0edc5c2 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 5 Sep 2018 14:44:06 +0200 Subject: move str_replace inside if clause --- Zotlabs/Widget/Cover_photo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Widget/Cover_photo.php b/Zotlabs/Widget/Cover_photo.php index 965566523..955048992 100644 --- a/Zotlabs/Widget/Cover_photo.php +++ b/Zotlabs/Widget/Cover_photo.php @@ -53,9 +53,9 @@ class Cover_photo { $subtitle = str_replace('@','@',$channel['xchan_addr']); $c = get_cover_photo($channel_id,'html'); - $c = str_replace('src=', 'data-src=', $c); if($c) { + $c = str_replace('src=', 'data-src=', $c); $photo_html = (($style) ? str_replace('alt=',' style="' . $style . '" alt=',$c) : $c); $o = replace_macros(get_markup_template('cover_photo_widget.tpl'),array( -- cgit v1.2.3 From bc4a92b702618aa83991ea65eb24d653cfc6601a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 5 Sep 2018 19:43:07 -0700 Subject: detect and automatically repair duplicate plugin hook scenarios. --- include/plugin.php | 56 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/include/plugin.php b/include/plugin.php index ea3c67c2f..9757be356 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -109,11 +109,16 @@ function install_plugin($plugin) { $plugin_admin = (function_exists($plugin . '_plugin_admin') ? 1 : 0); - q("INSERT INTO addon (aname, installed, tstamp, plugin_admin) VALUES ( '%s', 1, %d , %d ) ", - dbesc($plugin), - intval($t), - $plugin_admin + $d = q("select * from addon where aname = '%s' limit 1", + dbesc($plugin) ); + if(! $d) { + q("INSERT INTO addon (aname, installed, tstamp, plugin_admin) VALUES ( '%s', 1, %d , %d ) ", + dbesc($plugin), + intval($t), + $plugin_admin + ); + } load_plugin($plugin); } @@ -366,28 +371,47 @@ function unregister_hook($hook, $file, $function) { return $r; } - -// -// It might not be obvious but themes can manually add hooks to the App::$hooks -// array in their theme_init() and use this to customise the app behaviour. -// UPDATE: use insert_hook($hookname,$function_name) to do this -// +/** + * @brief loads all active hooks into memory + * alters: App::$hooks + * Called during initialisation + * Duplicated hooks are removed and the duplicates ignored + * + * It might not be obvious but themes can manually add hooks to the App::$hooks + * array in their theme_init() and use this to customise the app behaviour. + * use insert_hook($hookname,$function_name) to do this. + */ function load_hooks() { - App::$hooks = array(); + App::$hooks = []; $r = q("SELECT * FROM hook WHERE true ORDER BY priority DESC"); if($r) { - foreach($r as $rr) { - if(! array_key_exists($rr['hook'],App::$hooks)) - App::$hooks[$rr['hook']] = array(); - App::$hooks[$rr['hook']][] = array($rr['file'],$rr['fn'],$rr['priority'],$rr['hook_version']); + foreach($r as $rv) { + $duplicated = false; + if(! array_key_exists($rv['hook'],App::$hooks)) { + App::$hooks[$rv['hook']] = []; + } + else { + foreach(App::$hooks[$rv['hook']] as $h) { + if($h[0] === $rv['file'] && $h[1] === $rv['fn']) { + $duplicated = true; + q("delete from hook where id = %d", + intval($rv['id']) + ); + logger('duplicate hook ' . $h[1] . ' removed'); + } + } + } + if(! $duplicated) { + App::$hooks[$rv['hook']][] = [ $rv['file'], $rv['fn'], $rv['priority'], $rv['hook_version']]; + } } } - //logger('hooks: ' . print_r(App::$hooks,true)); + // logger('hooks: ' . print_r(App::$hooks,true)); } /** -- cgit v1.2.3 From 673a2f67f16c00042aaf1394e42e88e2ad4dc20b Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 6 Sep 2018 10:08:55 +0200 Subject: sticky-kit: improve handling --- view/php/default.php | 4 ++-- view/theme/redbasic/js/redbasic.js | 18 ++---------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/view/php/default.php b/view/php/default.php index 06cecc56f..70b8daecf 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -10,12 +10,12 @@
- +
- +
diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c905c92cb..70d196a02 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -18,26 +18,12 @@ $(document).ready(function() { $('#css3-calc').remove(); // Remove the test element if($(window).width() >= 992) { - $('#left_aside_wrapper').stick_in_parent({ - offset_top: parseInt($('aside').css('padding-top')), - parent: 'main', - spacer: '#left_aside_spacer' - }); - } - - if($(window).width() >= 992) { - $('#right_aside_wrapper').stick_in_parent({ + $('#left_aside_wrapper, #right_aside_wrapper').stick_in_parent({ offset_top: parseInt($('aside').css('padding-top')), - parent: 'main', - spacer: '#right_aside_spacer' + parent: 'main' }); } - - $('#notifications_wrapper.fs #notifications').stick_in_parent({ - parent: '#notifications_wrapper' - }); - $('#expand-aside').on('click', toggleAside); $('section').on('click', function() { -- cgit v1.2.3 From 78c847ef7db90dc8dac7724e8671f1219e34befa Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 6 Sep 2018 11:14:08 +0200 Subject: improve notification handling on small screens --- view/tpl/notifications_widget.tpl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 068441997..99a0191b2 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -5,10 +5,14 @@ $(document).ready(function() { notifications_parent = $('#notifications_wrapper')[0].parentElement.id; $('.notifications-btn').click(function() { - if($('#notifications_wrapper').hasClass('fs')) + if($('#notifications_wrapper').hasClass('fs')) { $('#notifications_wrapper').prependTo('#' + notifications_parent); - else + $('body').css('overflow', 'visible'); + } + else { $('#notifications_wrapper').prependTo('section'); + $('body').css('overflow', 'hidden'); + } $('#notifications_wrapper').toggleClass('fs'); if($('#navbar-collapse-2').hasClass('show')){ -- cgit v1.2.3 From 5135f236c2ff57a7002a2b1e27b7b61e8bf3d1f7 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 6 Sep 2018 11:30:50 +0200 Subject: improve cover-photo handling --- view/tpl/cover_photo_widget.tpl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index 2de3c74be..7972b8e81 100755 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -19,7 +19,6 @@ if(hide_cover) { hideCover(); - coverSlid = true; } if($(window).scrollTop() < $('#cover-photo').height()) { @@ -36,7 +35,7 @@ }); $(window).scroll(function () { - if($(window).width() > 755 && $(window).scrollTop() >= $('#cover-photo').height()) { + if($(window).width() > 755 && $(window).scrollTop() > ($('#cover-photo').height() - 1)) { $('body').css('cursor', ''); $('.navbar').addClass('fixed-top'); $('main').css('margin-top', ''); -- cgit v1.2.3 From c53d3a4b3aec46921ce3b903aa5b0cce6b169c68 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 6 Sep 2018 11:44:47 +0200 Subject: bump version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 54c49cf6b..93963648e 100755 --- a/boot.php +++ b/boot.php @@ -50,7 +50,7 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '3.7.2' ); +define ( 'STD_VERSION', '3.7.3' ); define ( 'ZOT_REVISION', '6.0a' ); -- cgit v1.2.3 From 6a338e28b281e30bfa5be788957e86e0de0060f1 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Thu, 6 Sep 2018 14:27:56 +0200 Subject: -1 has issues in some browsers --- view/tpl/cover_photo_widget.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index 7972b8e81..e8af6f6dc 100755 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -35,7 +35,7 @@ }); $(window).scroll(function () { - if($(window).width() > 755 && $(window).scrollTop() > ($('#cover-photo').height() - 1)) { + if($(window).width() > 755 && $(window).scrollTop() > $('#cover-photo').height()) { $('body').css('cursor', ''); $('.navbar').addClass('fixed-top'); $('main').css('margin-top', ''); -- cgit v1.2.3 From d31251c54e0be4400465c18cc12a5f51a7b896c6 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 7 Sep 2018 10:07:29 +0200 Subject: overflow should be auto not visible --- view/tpl/notifications_widget.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 99a0191b2..b37ef40da 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -7,7 +7,7 @@ $('.notifications-btn').click(function() { if($('#notifications_wrapper').hasClass('fs')) { $('#notifications_wrapper').prependTo('#' + notifications_parent); - $('body').css('overflow', 'visible'); + $('body').css('overflow', 'auto'); } else { $('#notifications_wrapper').prependTo('section'); -- cgit v1.2.3 From bb42ec2bfc0826dde3e3915566c4689762b128d7 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 7 Sep 2018 10:39:15 +0200 Subject: apps: change page title to available/installed, display install action label in button and use different icons for installable and updateable apps --- Zotlabs/Lib/Apps.php | 3 ++- Zotlabs/Module/Apps.php | 2 +- view/tpl/app.tpl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 1d9fe48e6..860a799ef 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -500,7 +500,8 @@ class Apps { '$icon' => $icon, '$hosturl' => $hosturl, '$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''), - '$install' => (($hosturl && in_array($mode, ['view','install'])) ? $install_action : ''), + '$installed' => $installed, + '$action_label' => (($hosturl && in_array($mode, ['view','install'])) ? $install_action : ''), '$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''), '$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : ''), '$undelete' => ((local_channel() && $installed && $mode == 'edit') ? t('Undelete') : ''), diff --git a/Zotlabs/Module/Apps.php b/Zotlabs/Module/Apps.php index 78c8d99ae..11025ce6e 100644 --- a/Zotlabs/Module/Apps.php +++ b/Zotlabs/Module/Apps.php @@ -47,7 +47,7 @@ class Apps extends \Zotlabs\Web\Controller { return replace_macros(get_markup_template('myapps.tpl'), array( '$sitename' => get_config('system','sitename'), '$cat' => $cat, - '$title' => t('Apps'), + '$title' => (($available) ? t('Available Apps') : t('Installed Apps')), '$apps' => $apps, '$authed' => ((local_channel()) ? true : false), '$manage' => (($available) ? '' : t('Manage apps')), diff --git a/view/tpl/app.tpl b/view/tpl/app.tpl index 7d2e46c59..3245a86e0 100644 --- a/view/tpl/app.tpl +++ b/view/tpl/app.tpl @@ -11,11 +11,11 @@
{{/if}} - {{if $install || $update || $delete || $feature}} + {{if $action_label || $update || $delete || $feature}}
- {{if $install}}{{/if}} + {{if $action_label}}{{/if}} {{if $edit}}{{/if}} {{if $delete}}{{/if}} {{if $feature}}{{/if}} -- cgit v1.2.3 From 54fa28441c5f0bdcd9687615f4a6b7a0fab024a3 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Fri, 7 Sep 2018 11:26:02 +0200 Subject: install bootstrap via composer --- Zotlabs/Render/Comanche.php | 4 +- composer.json | 3 +- composer.lock | 53 +- library/bootstrap/css/bootstrap-grid.css | 1912 --- library/bootstrap/css/bootstrap-grid.css.map | 1 - library/bootstrap/css/bootstrap-grid.min.css | 7 - library/bootstrap/css/bootstrap-grid.min.css.map | 1 - library/bootstrap/css/bootstrap-reboot.css | 330 - library/bootstrap/css/bootstrap-reboot.css.map | 1 - library/bootstrap/css/bootstrap-reboot.min.css | 8 - library/bootstrap/css/bootstrap-reboot.min.css.map | 1 - library/bootstrap/css/bootstrap.css | 8950 ------------- library/bootstrap/css/bootstrap.css.map | 1 - library/bootstrap/css/bootstrap.min.css | 7 - library/bootstrap/css/bootstrap.min.css.map | 1 - library/bootstrap/js/bootstrap.bundle.js | 6433 ---------- library/bootstrap/js/bootstrap.bundle.js.map | 1 - library/bootstrap/js/bootstrap.bundle.min.js | 7 - library/bootstrap/js/bootstrap.bundle.min.js.map | 1 - library/bootstrap/js/bootstrap.js | 3925 ------ library/bootstrap/js/bootstrap.js.map | 1 - library/bootstrap/js/bootstrap.min.js | 7 - library/bootstrap/js/bootstrap.min.js.map | 1 - vendor/composer/autoload_classmap.php | 1 + vendor/composer/autoload_static.php | 1 + vendor/composer/installed.json | 53 + vendor/twbs/bootstrap/.babelrc.js | 20 + vendor/twbs/bootstrap/.browserslistrc | 13 + vendor/twbs/bootstrap/.editorconfig | 14 + vendor/twbs/bootstrap/.eslintignore | 5 + vendor/twbs/bootstrap/.eslintrc.json | 233 + vendor/twbs/bootstrap/.gitattributes | 18 + vendor/twbs/bootstrap/.github/CONTRIBUTING.md | 243 + .../twbs/bootstrap/.github/ISSUE_TEMPLATE/bug.md | 11 + .../bootstrap/.github/ISSUE_TEMPLATE/bug_report.md | 17 + .../bootstrap/.github/ISSUE_TEMPLATE/feature.md | 9 + .../.github/ISSUE_TEMPLATE/feature_request.md | 15 + vendor/twbs/bootstrap/.github/SUPPORT.md | 11 + vendor/twbs/bootstrap/.gitignore | 48 + vendor/twbs/bootstrap/.stylelintignore | 4 + vendor/twbs/bootstrap/.stylelintrc | 274 + vendor/twbs/bootstrap/.travis.yml | 33 + vendor/twbs/bootstrap/CNAME | 1 + vendor/twbs/bootstrap/CODE_OF_CONDUCT.md | 46 + vendor/twbs/bootstrap/Gemfile | 8 + vendor/twbs/bootstrap/LICENSE | 22 + vendor/twbs/bootstrap/README.md | 177 + vendor/twbs/bootstrap/_config.yml | 63 + vendor/twbs/bootstrap/build/.eslintrc.json | 20 + vendor/twbs/bootstrap/build/.htmllintrc | 44 + vendor/twbs/bootstrap/build/build-plugins.js | 81 + vendor/twbs/bootstrap/build/change-version.js | 104 + vendor/twbs/bootstrap/build/gcp-key.json.enc | Bin 0 -> 2304 bytes vendor/twbs/bootstrap/build/generate-sri.js | 60 + vendor/twbs/bootstrap/build/lint-vars.js | 82 + vendor/twbs/bootstrap/build/postcss.config.js | 14 + vendor/twbs/bootstrap/build/rollup.config.js | 53 + vendor/twbs/bootstrap/build/sauce_browsers.json | 65 + vendor/twbs/bootstrap/build/saucelabs-unit-test.js | 116 + vendor/twbs/bootstrap/build/ship.sh | 70 + vendor/twbs/bootstrap/build/vnu-jar.js | 68 + vendor/twbs/bootstrap/build/workbox.config.json | 8 + vendor/twbs/bootstrap/build/workbox.js | 58 + vendor/twbs/bootstrap/composer.json | 37 + vendor/twbs/bootstrap/dist/css/bootstrap-grid.css | 1912 +++ .../twbs/bootstrap/dist/css/bootstrap-grid.css.map | 1 + .../twbs/bootstrap/dist/css/bootstrap-grid.min.css | 7 + .../bootstrap/dist/css/bootstrap-grid.min.css.map | 1 + .../twbs/bootstrap/dist/css/bootstrap-reboot.css | 331 + .../bootstrap/dist/css/bootstrap-reboot.css.map | 1 + .../bootstrap/dist/css/bootstrap-reboot.min.css | 8 + .../dist/css/bootstrap-reboot.min.css.map | 1 + vendor/twbs/bootstrap/dist/css/bootstrap.css | 9030 +++++++++++++ vendor/twbs/bootstrap/dist/css/bootstrap.css.map | 1 + vendor/twbs/bootstrap/dist/css/bootstrap.min.css | 7 + .../twbs/bootstrap/dist/css/bootstrap.min.css.map | 1 + vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js | 6461 ++++++++++ .../twbs/bootstrap/dist/js/bootstrap.bundle.js.map | 1 + .../twbs/bootstrap/dist/js/bootstrap.bundle.min.js | 7 + .../bootstrap/dist/js/bootstrap.bundle.min.js.map | 1 + vendor/twbs/bootstrap/dist/js/bootstrap.js | 3944 ++++++ vendor/twbs/bootstrap/dist/js/bootstrap.js.map | 1 + vendor/twbs/bootstrap/dist/js/bootstrap.min.js | 7 + vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map | 1 + vendor/twbs/bootstrap/js/dist/alert.js | 204 + vendor/twbs/bootstrap/js/dist/alert.js.map | 1 + vendor/twbs/bootstrap/js/dist/button.js | 192 + vendor/twbs/bootstrap/js/dist/button.js.map | 1 + vendor/twbs/bootstrap/js/dist/carousel.js | 567 + vendor/twbs/bootstrap/js/dist/carousel.js.map | 1 + vendor/twbs/bootstrap/js/dist/collapse.js | 431 + vendor/twbs/bootstrap/js/dist/collapse.js.map | 1 + vendor/twbs/bootstrap/js/dist/dropdown.js | 552 + vendor/twbs/bootstrap/js/dist/dropdown.js.map | 1 + vendor/twbs/bootstrap/js/dist/index.js | 23 + vendor/twbs/bootstrap/js/dist/index.js.map | 1 + vendor/twbs/bootstrap/js/dist/modal.js | 634 + vendor/twbs/bootstrap/js/dist/modal.js.map | 1 + vendor/twbs/bootstrap/js/dist/popover.js | 266 + vendor/twbs/bootstrap/js/dist/popover.js.map | 1 + vendor/twbs/bootstrap/js/dist/scrollspy.js | 379 + vendor/twbs/bootstrap/js/dist/scrollspy.js.map | 1 + vendor/twbs/bootstrap/js/dist/tab.js | 278 + vendor/twbs/bootstrap/js/dist/tab.js.map | 1 + vendor/twbs/bootstrap/js/dist/tooltip.js | 734 ++ vendor/twbs/bootstrap/js/dist/tooltip.js.map | 1 + vendor/twbs/bootstrap/js/dist/util.js | 144 + vendor/twbs/bootstrap/js/dist/util.js.map | 1 + vendor/twbs/bootstrap/js/src/alert.js | 183 + vendor/twbs/bootstrap/js/src/button.js | 175 + vendor/twbs/bootstrap/js/src/carousel.js | 520 + vendor/twbs/bootstrap/js/src/collapse.js | 398 + vendor/twbs/bootstrap/js/src/dropdown.js | 494 + vendor/twbs/bootstrap/js/src/index.js | 50 + vendor/twbs/bootstrap/js/src/modal.js | 579 + vendor/twbs/bootstrap/js/src/popover.js | 188 + vendor/twbs/bootstrap/js/src/scrollspy.js | 332 + vendor/twbs/bootstrap/js/src/tab.js | 264 + vendor/twbs/bootstrap/js/src/tooltip.js | 725 ++ vendor/twbs/bootstrap/js/src/util.js | 152 + vendor/twbs/bootstrap/nuget/MyGet.ps1 | 18 + vendor/twbs/bootstrap/nuget/bootstrap.nuspec | 33 + vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec | 33 + vendor/twbs/bootstrap/package-lock.json | 12814 +++++++++++++++++++ vendor/twbs/bootstrap/package.js | 19 + vendor/twbs/bootstrap/package.json | 217 + vendor/twbs/bootstrap/sache.json | 5 + vendor/twbs/bootstrap/scss/_alert.scss | 51 + vendor/twbs/bootstrap/scss/_badge.scss | 47 + vendor/twbs/bootstrap/scss/_breadcrumb.scss | 41 + vendor/twbs/bootstrap/scss/_button-group.scss | 172 + vendor/twbs/bootstrap/scss/_buttons.scss | 143 + vendor/twbs/bootstrap/scss/_card.scss | 301 + vendor/twbs/bootstrap/scss/_carousel.scss | 236 + vendor/twbs/bootstrap/scss/_close.scss | 35 + vendor/twbs/bootstrap/scss/_code.scss | 48 + vendor/twbs/bootstrap/scss/_custom-forms.scss | 433 + vendor/twbs/bootstrap/scss/_dropdown.scss | 166 + vendor/twbs/bootstrap/scss/_forms.scss | 333 + vendor/twbs/bootstrap/scss/_functions.scss | 86 + vendor/twbs/bootstrap/scss/_grid.scss | 52 + vendor/twbs/bootstrap/scss/_images.scss | 42 + vendor/twbs/bootstrap/scss/_input-group.scss | 173 + vendor/twbs/bootstrap/scss/_jumbotron.scss | 16 + vendor/twbs/bootstrap/scss/_list-group.scss | 115 + vendor/twbs/bootstrap/scss/_media.scss | 8 + vendor/twbs/bootstrap/scss/_mixins.scss | 41 + vendor/twbs/bootstrap/scss/_modal.scss | 180 + vendor/twbs/bootstrap/scss/_nav.scss | 118 + vendor/twbs/bootstrap/scss/_navbar.scss | 299 + vendor/twbs/bootstrap/scss/_pagination.scss | 78 + vendor/twbs/bootstrap/scss/_popover.scss | 183 + vendor/twbs/bootstrap/scss/_print.scss | 141 + vendor/twbs/bootstrap/scss/_progress.scss | 34 + vendor/twbs/bootstrap/scss/_reboot.scss | 483 + vendor/twbs/bootstrap/scss/_root.scss | 19 + vendor/twbs/bootstrap/scss/_tables.scss | 187 + vendor/twbs/bootstrap/scss/_tooltip.scss | 115 + vendor/twbs/bootstrap/scss/_transitions.scss | 22 + vendor/twbs/bootstrap/scss/_type.scss | 125 + vendor/twbs/bootstrap/scss/_utilities.scss | 15 + vendor/twbs/bootstrap/scss/_variables.scss | 952 ++ vendor/twbs/bootstrap/scss/bootstrap-grid.scss | 32 + vendor/twbs/bootstrap/scss/bootstrap-reboot.scss | 12 + vendor/twbs/bootstrap/scss/bootstrap.scss | 42 + vendor/twbs/bootstrap/scss/mixins/_alert.scss | 13 + .../bootstrap/scss/mixins/_background-variant.scss | 21 + vendor/twbs/bootstrap/scss/mixins/_badge.scss | 12 + .../twbs/bootstrap/scss/mixins/_border-radius.scss | 35 + vendor/twbs/bootstrap/scss/mixins/_box-shadow.scss | 5 + .../twbs/bootstrap/scss/mixins/_breakpoints.scss | 123 + vendor/twbs/bootstrap/scss/mixins/_buttons.scss | 109 + vendor/twbs/bootstrap/scss/mixins/_caret.scss | 66 + vendor/twbs/bootstrap/scss/mixins/_clearfix.scss | 7 + vendor/twbs/bootstrap/scss/mixins/_float.scss | 11 + vendor/twbs/bootstrap/scss/mixins/_forms.scss | 147 + vendor/twbs/bootstrap/scss/mixins/_gradients.scss | 45 + .../bootstrap/scss/mixins/_grid-framework.scss | 67 + vendor/twbs/bootstrap/scss/mixins/_grid.scss | 52 + vendor/twbs/bootstrap/scss/mixins/_hover.scss | 37 + vendor/twbs/bootstrap/scss/mixins/_image.scss | 36 + vendor/twbs/bootstrap/scss/mixins/_list-group.scss | 21 + vendor/twbs/bootstrap/scss/mixins/_lists.scss | 7 + .../twbs/bootstrap/scss/mixins/_nav-divider.scss | 10 + vendor/twbs/bootstrap/scss/mixins/_pagination.scss | 22 + vendor/twbs/bootstrap/scss/mixins/_reset-text.scss | 17 + vendor/twbs/bootstrap/scss/mixins/_resize.scss | 6 + .../twbs/bootstrap/scss/mixins/_screen-reader.scss | 33 + vendor/twbs/bootstrap/scss/mixins/_size.scss | 6 + vendor/twbs/bootstrap/scss/mixins/_table-row.scss | 30 + .../twbs/bootstrap/scss/mixins/_text-emphasis.scss | 14 + vendor/twbs/bootstrap/scss/mixins/_text-hide.scss | 13 + .../twbs/bootstrap/scss/mixins/_text-truncate.scss | 8 + vendor/twbs/bootstrap/scss/mixins/_transition.scss | 13 + vendor/twbs/bootstrap/scss/mixins/_visibility.scss | 7 + vendor/twbs/bootstrap/scss/utilities/_align.scss | 8 + .../twbs/bootstrap/scss/utilities/_background.scss | 19 + vendor/twbs/bootstrap/scss/utilities/_borders.scss | 59 + .../twbs/bootstrap/scss/utilities/_clearfix.scss | 3 + vendor/twbs/bootstrap/scss/utilities/_display.scss | 38 + vendor/twbs/bootstrap/scss/utilities/_embed.scss | 52 + vendor/twbs/bootstrap/scss/utilities/_flex.scss | 51 + vendor/twbs/bootstrap/scss/utilities/_float.scss | 9 + .../twbs/bootstrap/scss/utilities/_position.scss | 37 + .../bootstrap/scss/utilities/_screenreaders.scss | 11 + vendor/twbs/bootstrap/scss/utilities/_shadows.scss | 6 + vendor/twbs/bootstrap/scss/utilities/_sizing.scss | 12 + vendor/twbs/bootstrap/scss/utilities/_spacing.scss | 51 + vendor/twbs/bootstrap/scss/utilities/_text.scss | 58 + .../twbs/bootstrap/scss/utilities/_visibility.scss | 11 + vendor/twbs/bootstrap/site/_data/breakpoints.yml | 29 + vendor/twbs/bootstrap/site/_data/browser-bugs.yml | 451 + .../twbs/bootstrap/site/_data/browser-features.yml | 139 + vendor/twbs/bootstrap/site/_data/colors.yml | 26 + vendor/twbs/bootstrap/site/_data/examples.yml | 55 + vendor/twbs/bootstrap/site/_data/grays.yml | 18 + vendor/twbs/bootstrap/site/_data/nav.yml | 86 + vendor/twbs/bootstrap/site/_data/theme-colors.yml | 16 + vendor/twbs/bootstrap/site/_data/translations.yml | 19 + vendor/twbs/bootstrap/site/_includes/ads.html | 1 + vendor/twbs/bootstrap/site/_includes/bugify.html | 42 + .../site/_includes/callout-danger-async-methods.md | 8 + .../callout-info-mediaqueries-breakpoints.md | 4 + ...callout-warning-color-assistive-technologies.md | 6 + vendor/twbs/bootstrap/site/_includes/callout.html | 9 + .../twbs/bootstrap/site/_includes/docs-navbar.html | 62 + .../bootstrap/site/_includes/docs-sidebar.html | 57 + vendor/twbs/bootstrap/site/_includes/example.html | 23 + vendor/twbs/bootstrap/site/_includes/favicons.html | 9 + vendor/twbs/bootstrap/site/_includes/footer.html | 12 + vendor/twbs/bootstrap/site/_includes/header.html | 37 + .../bootstrap/site/_includes/icons/bootstrap.svg | 1 + .../bootstrap/site/_includes/icons/download.svg | 1 + .../twbs/bootstrap/site/_includes/icons/github.svg | 1 + .../twbs/bootstrap/site/_includes/icons/import.svg | 1 + .../bootstrap/site/_includes/icons/lightning.svg | 1 + .../twbs/bootstrap/site/_includes/icons/menu.svg | 1 + .../twbs/bootstrap/site/_includes/icons/slack.svg | 1 + .../bootstrap/site/_includes/icons/twitter.svg | 1 + vendor/twbs/bootstrap/site/_includes/scripts.html | 26 + vendor/twbs/bootstrap/site/_includes/skippy.html | 5 + vendor/twbs/bootstrap/site/_includes/social.html | 18 + vendor/twbs/bootstrap/site/_layouts/default.html | 22 + vendor/twbs/bootstrap/site/_layouts/docs.html | 34 + vendor/twbs/bootstrap/site/_layouts/examples.html | 16 + vendor/twbs/bootstrap/site/_layouts/redirect.html | 38 + vendor/twbs/bootstrap/site/_layouts/simple.html | 12 + vendor/twbs/bootstrap/site/docs/4.1/about/brand.md | 78 + .../twbs/bootstrap/site/docs/4.1/about/license.md | 34 + .../twbs/bootstrap/site/docs/4.1/about/overview.md | 28 + .../bootstrap/site/docs/4.1/about/translations.md | 18 + .../docs/4.1/assets/brand/bootstrap-outline.svg | 4 + .../docs/4.1/assets/brand/bootstrap-punchout.svg | 4 + .../4.1/assets/brand/bootstrap-social-logo.png | Bin 0 -> 23959 bytes .../docs/4.1/assets/brand/bootstrap-social.png | Bin 0 -> 231733 bytes .../site/docs/4.1/assets/brand/bootstrap-solid.svg | 4 + .../site/docs/4.1/assets/css/docs.min.css | 8 + .../site/docs/4.1/assets/css/docs.min.css.map | 1 + .../site/docs/4.1/assets/img/bootstrap-stack.png | Bin 0 -> 52160 bytes .../site/docs/4.1/assets/img/bootstrap-themes.png | Bin 0 -> 80588 bytes .../assets/img/favicons/android-chrome-192x192.png | Bin 0 -> 1935 bytes .../assets/img/favicons/android-chrome-512x512.png | Bin 0 -> 4269 bytes .../4.1/assets/img/favicons/apple-touch-icon.png | Bin 0 -> 1738 bytes .../docs/4.1/assets/img/favicons/browserconfig.xml | 11 + .../docs/4.1/assets/img/favicons/favicon-16x16.png | Bin 0 -> 310 bytes .../docs/4.1/assets/img/favicons/favicon-32x32.png | Bin 0 -> 491 bytes .../docs/4.1/assets/img/favicons/manifest.json | 22 + .../4.1/assets/img/favicons/mstile-144x144.png | Bin 0 -> 1479 bytes .../4.1/assets/img/favicons/mstile-150x150.png | Bin 0 -> 1428 bytes .../4.1/assets/img/favicons/mstile-310x150.png | Bin 0 -> 1746 bytes .../4.1/assets/img/favicons/mstile-310x310.png | Bin 0 -> 3085 bytes .../docs/4.1/assets/img/favicons/mstile-70x70.png | Bin 0 -> 1104 bytes .../4.1/assets/img/favicons/safari-pinned-tab.svg | 4 + .../site/docs/4.1/assets/js/.eslintrc.json | 26 + .../bootstrap/site/docs/4.1/assets/js/docs.min.js | 28 + .../site/docs/4.1/assets/js/src/application.js | 112 + .../assets/js/src/ie-emulation-modes-warning.js | 47 + .../bootstrap/site/docs/4.1/assets/js/src/pwa.js | 21 + .../site/docs/4.1/assets/js/src/search.js | 42 + .../site/docs/4.1/assets/js/vendor/anchor.min.js | 6 + .../docs/4.1/assets/js/vendor/clipboard.min.js | 7 + .../site/docs/4.1/assets/js/vendor/holder.min.js | 13 + .../docs/4.1/assets/js/vendor/jquery-slim.min.js | 2 + .../site/docs/4.1/assets/js/vendor/popper.min.js | 5 + .../bootstrap/site/docs/4.1/assets/scss/_ads.scss | 38 + .../site/docs/4.1/assets/scss/_algolia.scss | 141 + .../site/docs/4.1/assets/scss/_anchor.scss | 10 + .../site/docs/4.1/assets/scss/_brand.scss | 110 + .../site/docs/4.1/assets/scss/_browser-bugs.scss | 12 + .../site/docs/4.1/assets/scss/_buttons.scss | 37 + .../site/docs/4.1/assets/scss/_callouts.scss | 40 + .../site/docs/4.1/assets/scss/_clipboard-js.scss | 39 + .../site/docs/4.1/assets/scss/_colors.scss | 24 + .../docs/4.1/assets/scss/_component-examples.scss | 411 + .../site/docs/4.1/assets/scss/_content.scss | 119 + .../site/docs/4.1/assets/scss/_examples.scss | 24 + .../site/docs/4.1/assets/scss/_footer.scss | 40 + .../site/docs/4.1/assets/scss/_masthead.scss | 56 + .../bootstrap/site/docs/4.1/assets/scss/_nav.scss | 76 + .../site/docs/4.1/assets/scss/_sidebar.scss | 166 + .../site/docs/4.1/assets/scss/_skiplink.scss | 14 + .../site/docs/4.1/assets/scss/_syntax.scss | 78 + .../site/docs/4.1/assets/scss/_variables.scss | 9 + .../bootstrap/site/docs/4.1/assets/scss/docs.scss | 52 + .../twbs/bootstrap/site/docs/4.1/browser-bugs.md | 64 + .../bootstrap/site/docs/4.1/components/alerts.md | 115 + .../bootstrap/site/docs/4.1/components/badge.md | 82 + .../site/docs/4.1/components/breadcrumb.md | 58 + .../site/docs/4.1/components/button-group.md | 207 + .../bootstrap/site/docs/4.1/components/buttons.md | 164 + .../bootstrap/site/docs/4.1/components/card.md | 682 + .../bootstrap/site/docs/4.1/components/carousel.md | 334 + .../bootstrap/site/docs/4.1/components/collapse.md | 249 + .../site/docs/4.1/components/dropdowns.md | 861 ++ .../bootstrap/site/docs/4.1/components/forms.md | 1296 ++ .../site/docs/4.1/components/input-group.md | 361 + .../site/docs/4.1/components/jumbotron.md | 31 + .../site/docs/4.1/components/list-group.md | 377 + .../bootstrap/site/docs/4.1/components/modal.md | 675 + .../bootstrap/site/docs/4.1/components/navbar.md | 579 + .../bootstrap/site/docs/4.1/components/navs.md | 658 + .../site/docs/4.1/components/pagination.md | 170 + .../bootstrap/site/docs/4.1/components/popovers.md | 353 + .../bootstrap/site/docs/4.1/components/progress.md | 146 + .../site/docs/4.1/components/scrollspy.md | 333 + .../bootstrap/site/docs/4.1/components/tooltips.md | 354 + .../twbs/bootstrap/site/docs/4.1/content/code.md | 55 + .../bootstrap/site/docs/4.1/content/figures.md | 28 + .../twbs/bootstrap/site/docs/4.1/content/images.md | 84 + .../twbs/bootstrap/site/docs/4.1/content/reboot.md | 364 + .../twbs/bootstrap/site/docs/4.1/content/tables.md | 831 ++ .../bootstrap/site/docs/4.1/content/typography.md | 331 + .../site/docs/4.1/examples/.eslintrc.json | 11 + .../bootstrap/site/docs/4.1/examples/.stylelintrc | 12 + .../site/docs/4.1/examples/album/album.css | 37 + .../site/docs/4.1/examples/album/index.html | 232 + .../bootstrap/site/docs/4.1/examples/blog/blog.css | 125 + .../site/docs/4.1/examples/blog/index.html | 231 + .../site/docs/4.1/examples/carousel/carousel.css | 91 + .../site/docs/4.1/examples/carousel/index.html | 188 + .../docs/4.1/examples/checkout/form-validation.css | 5 + .../site/docs/4.1/examples/checkout/index.html | 268 + .../site/docs/4.1/examples/cover/cover.css | 106 + .../site/docs/4.1/examples/cover/index.html | 57 + .../site/docs/4.1/examples/dashboard/dashboard.css | 100 + .../site/docs/4.1/examples/dashboard/index.html | 303 + .../examples/floating-labels/floating-labels.css | 105 + .../docs/4.1/examples/floating-labels/index.html | 46 + .../bootstrap/site/docs/4.1/examples/grid/grid.css | 27 + .../site/docs/4.1/examples/grid/index.html | 135 + .../bootstrap/site/docs/4.1/examples/index.html | 22 + .../site/docs/4.1/examples/jumbotron/index.html | 103 + .../site/docs/4.1/examples/jumbotron/jumbotron.css | 4 + .../docs/4.1/examples/navbar-bottom/index.html | 60 + .../site/docs/4.1/examples/navbar-fixed/index.html | 61 + .../4.1/examples/navbar-fixed/navbar-top-fixed.css | 5 + .../docs/4.1/examples/navbar-static/index.html | 61 + .../docs/4.1/examples/navbar-static/navbar-top.css | 4 + .../site/docs/4.1/examples/navbars/index.html | 347 + .../site/docs/4.1/examples/navbars/navbar.css | 7 + .../site/docs/4.1/examples/offcanvas/index.html | 159 + .../site/docs/4.1/examples/offcanvas/offcanvas.css | 75 + .../site/docs/4.1/examples/offcanvas/offcanvas.js | 7 + .../site/docs/4.1/examples/pricing/index.html | 142 + .../site/docs/4.1/examples/pricing/pricing.css | 20 + .../site/docs/4.1/examples/product/index.html | 178 + .../site/docs/4.1/examples/product/product.css | 74 + .../site/docs/4.1/examples/screenshots/album.png | Bin 0 -> 26370 bytes .../site/docs/4.1/examples/screenshots/blog.png | Bin 0 -> 36944 bytes .../docs/4.1/examples/screenshots/carousel.png | Bin 0 -> 31465 bytes .../docs/4.1/examples/screenshots/checkout.png | Bin 0 -> 28180 bytes .../site/docs/4.1/examples/screenshots/cover.png | Bin 0 -> 17953 bytes .../docs/4.1/examples/screenshots/dashboard.png | Bin 0 -> 26556 bytes .../4.1/examples/screenshots/floating-labels.png | Bin 0 -> 11053 bytes .../site/docs/4.1/examples/screenshots/grid.png | Bin 0 -> 33860 bytes .../docs/4.1/examples/screenshots/jumbotron.png | Bin 0 -> 38408 bytes .../4.1/examples/screenshots/navbar-bottom.png | Bin 0 -> 11316 bytes .../docs/4.1/examples/screenshots/navbar-fixed.png | Bin 0 -> 13616 bytes .../4.1/examples/screenshots/navbar-static.png | Bin 0 -> 14893 bytes .../site/docs/4.1/examples/screenshots/navbars.png | Bin 0 -> 27187 bytes .../docs/4.1/examples/screenshots/offcanvas.png | Bin 0 -> 23975 bytes .../site/docs/4.1/examples/screenshots/pricing.png | Bin 0 -> 29128 bytes .../site/docs/4.1/examples/screenshots/product.png | Bin 0 -> 27953 bytes .../site/docs/4.1/examples/screenshots/sign-in.png | Bin 0 -> 5680 bytes .../4.1/examples/screenshots/starter-template.png | Bin 0 -> 11334 bytes .../examples/screenshots/sticky-footer-navbar.png | Bin 0 -> 15836 bytes .../4.1/examples/screenshots/sticky-footer.png | Bin 0 -> 9665 bytes .../site/docs/4.1/examples/sign-in/index.html | 36 + .../site/docs/4.1/examples/sign-in/signin.css | 44 + .../docs/4.1/examples/starter-template/index.html | 71 + .../examples/starter-template/starter-template.css | 7 + .../4.1/examples/sticky-footer-navbar/index.html | 69 + .../sticky-footer-navbar/sticky-footer-navbar.css | 37 + .../docs/4.1/examples/sticky-footer/index.html | 34 + .../4.1/examples/sticky-footer/sticky-footer.css | 28 + .../docs/4.1/examples/tooltip-viewport/index.html | 45 + .../examples/tooltip-viewport/tooltip-viewport.css | 26 + .../examples/tooltip-viewport/tooltip-viewport.js | 32 + .../site/docs/4.1/getting-started/accessibility.md | 57 + .../docs/4.1/getting-started/best-practices.md | 21 + .../docs/4.1/getting-started/browsers-devices.md | 193 + .../site/docs/4.1/getting-started/build-tools.md | 57 + .../site/docs/4.1/getting-started/contents.md | 138 + .../site/docs/4.1/getting-started/download.md | 100 + .../site/docs/4.1/getting-started/introduction.md | 145 + .../site/docs/4.1/getting-started/javascript.md | 136 + .../site/docs/4.1/getting-started/theming.md | 442 + .../site/docs/4.1/getting-started/webpack.md | 94 + vendor/twbs/bootstrap/site/docs/4.1/layout/grid.md | 790 ++ .../bootstrap/site/docs/4.1/layout/media-object.md | 144 + .../bootstrap/site/docs/4.1/layout/overview.md | 189 + .../site/docs/4.1/layout/utilities-for-layout.md | 25 + vendor/twbs/bootstrap/site/docs/4.1/migration.md | 336 + .../bootstrap/site/docs/4.1/utilities/borders.md | 75 + .../bootstrap/site/docs/4.1/utilities/clearfix.md | 39 + .../site/docs/4.1/utilities/close-icon.md | 16 + .../bootstrap/site/docs/4.1/utilities/colors.md | 61 + .../bootstrap/site/docs/4.1/utilities/display.md | 100 + .../bootstrap/site/docs/4.1/utilities/embed.md | 50 + .../twbs/bootstrap/site/docs/4.1/utilities/flex.md | 570 + .../bootstrap/site/docs/4.1/utilities/float.md | 57 + .../site/docs/4.1/utilities/image-replacement.md | 33 + .../bootstrap/site/docs/4.1/utilities/position.md | 45 + .../site/docs/4.1/utilities/screenreaders.md | 26 + .../bootstrap/site/docs/4.1/utilities/shadows.md | 19 + .../bootstrap/site/docs/4.1/utilities/sizing.md | 43 + .../bootstrap/site/docs/4.1/utilities/spacing.md | 83 + .../twbs/bootstrap/site/docs/4.1/utilities/text.md | 92 + .../site/docs/4.1/utilities/vertical-align.md | 40 + .../site/docs/4.1/utilities/visibility.md | 33 + vendor/twbs/bootstrap/site/index.html | 83 + vendor/twbs/bootstrap/site/robots.txt | 9 + vendor/twbs/bootstrap/site/sw.js | 5 + view/theme/redbasic/php/theme_init.php | 4 +- 434 files changed, 73945 insertions(+), 21602 deletions(-) delete mode 100644 library/bootstrap/css/bootstrap-grid.css delete mode 100644 library/bootstrap/css/bootstrap-grid.css.map delete mode 100644 library/bootstrap/css/bootstrap-grid.min.css delete mode 100644 library/bootstrap/css/bootstrap-grid.min.css.map delete mode 100644 library/bootstrap/css/bootstrap-reboot.css delete mode 100644 library/bootstrap/css/bootstrap-reboot.css.map delete mode 100644 library/bootstrap/css/bootstrap-reboot.min.css delete mode 100644 library/bootstrap/css/bootstrap-reboot.min.css.map delete mode 100644 library/bootstrap/css/bootstrap.css delete mode 100644 library/bootstrap/css/bootstrap.css.map delete mode 100644 library/bootstrap/css/bootstrap.min.css delete mode 100644 library/bootstrap/css/bootstrap.min.css.map delete mode 100644 library/bootstrap/js/bootstrap.bundle.js delete mode 100644 library/bootstrap/js/bootstrap.bundle.js.map delete mode 100644 library/bootstrap/js/bootstrap.bundle.min.js delete mode 100644 library/bootstrap/js/bootstrap.bundle.min.js.map delete mode 100644 library/bootstrap/js/bootstrap.js delete mode 100644 library/bootstrap/js/bootstrap.js.map delete mode 100644 library/bootstrap/js/bootstrap.min.js delete mode 100644 library/bootstrap/js/bootstrap.min.js.map create mode 100644 vendor/twbs/bootstrap/.babelrc.js create mode 100644 vendor/twbs/bootstrap/.browserslistrc create mode 100644 vendor/twbs/bootstrap/.editorconfig create mode 100644 vendor/twbs/bootstrap/.eslintignore create mode 100644 vendor/twbs/bootstrap/.eslintrc.json create mode 100644 vendor/twbs/bootstrap/.gitattributes create mode 100644 vendor/twbs/bootstrap/.github/CONTRIBUTING.md create mode 100644 vendor/twbs/bootstrap/.github/ISSUE_TEMPLATE/bug.md create mode 100644 vendor/twbs/bootstrap/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 vendor/twbs/bootstrap/.github/ISSUE_TEMPLATE/feature.md create mode 100644 vendor/twbs/bootstrap/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 vendor/twbs/bootstrap/.github/SUPPORT.md create mode 100644 vendor/twbs/bootstrap/.gitignore create mode 100644 vendor/twbs/bootstrap/.stylelintignore create mode 100644 vendor/twbs/bootstrap/.stylelintrc create mode 100644 vendor/twbs/bootstrap/.travis.yml create mode 100644 vendor/twbs/bootstrap/CNAME create mode 100644 vendor/twbs/bootstrap/CODE_OF_CONDUCT.md create mode 100644 vendor/twbs/bootstrap/Gemfile create mode 100644 vendor/twbs/bootstrap/LICENSE create mode 100644 vendor/twbs/bootstrap/README.md create mode 100644 vendor/twbs/bootstrap/_config.yml create mode 100644 vendor/twbs/bootstrap/build/.eslintrc.json create mode 100644 vendor/twbs/bootstrap/build/.htmllintrc create mode 100644 vendor/twbs/bootstrap/build/build-plugins.js create mode 100644 vendor/twbs/bootstrap/build/change-version.js create mode 100644 vendor/twbs/bootstrap/build/gcp-key.json.enc create mode 100644 vendor/twbs/bootstrap/build/generate-sri.js create mode 100644 vendor/twbs/bootstrap/build/lint-vars.js create mode 100644 vendor/twbs/bootstrap/build/postcss.config.js create mode 100644 vendor/twbs/bootstrap/build/rollup.config.js create mode 100644 vendor/twbs/bootstrap/build/sauce_browsers.json create mode 100644 vendor/twbs/bootstrap/build/saucelabs-unit-test.js create mode 100644 vendor/twbs/bootstrap/build/ship.sh create mode 100644 vendor/twbs/bootstrap/build/vnu-jar.js create mode 100644 vendor/twbs/bootstrap/build/workbox.config.json create mode 100644 vendor/twbs/bootstrap/build/workbox.js create mode 100644 vendor/twbs/bootstrap/composer.json create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-grid.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap.css.map create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap.min.css create mode 100644 vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.js create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.js.map create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.min.js create mode 100644 vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/alert.js create mode 100644 vendor/twbs/bootstrap/js/dist/alert.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/button.js create mode 100644 vendor/twbs/bootstrap/js/dist/button.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/carousel.js create mode 100644 vendor/twbs/bootstrap/js/dist/carousel.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/collapse.js create mode 100644 vendor/twbs/bootstrap/js/dist/collapse.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/dropdown.js create mode 100644 vendor/twbs/bootstrap/js/dist/dropdown.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/index.js create mode 100644 vendor/twbs/bootstrap/js/dist/index.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/modal.js create mode 100644 vendor/twbs/bootstrap/js/dist/modal.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/popover.js create mode 100644 vendor/twbs/bootstrap/js/dist/popover.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/scrollspy.js create mode 100644 vendor/twbs/bootstrap/js/dist/scrollspy.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/tab.js create mode 100644 vendor/twbs/bootstrap/js/dist/tab.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/tooltip.js create mode 100644 vendor/twbs/bootstrap/js/dist/tooltip.js.map create mode 100644 vendor/twbs/bootstrap/js/dist/util.js create mode 100644 vendor/twbs/bootstrap/js/dist/util.js.map create mode 100644 vendor/twbs/bootstrap/js/src/alert.js create mode 100644 vendor/twbs/bootstrap/js/src/button.js create mode 100644 vendor/twbs/bootstrap/js/src/carousel.js create mode 100644 vendor/twbs/bootstrap/js/src/collapse.js create mode 100644 vendor/twbs/bootstrap/js/src/dropdown.js create mode 100644 vendor/twbs/bootstrap/js/src/index.js create mode 100644 vendor/twbs/bootstrap/js/src/modal.js create mode 100644 vendor/twbs/bootstrap/js/src/popover.js create mode 100644 vendor/twbs/bootstrap/js/src/scrollspy.js create mode 100644 vendor/twbs/bootstrap/js/src/tab.js create mode 100644 vendor/twbs/bootstrap/js/src/tooltip.js create mode 100644 vendor/twbs/bootstrap/js/src/util.js create mode 100644 vendor/twbs/bootstrap/nuget/MyGet.ps1 create mode 100644 vendor/twbs/bootstrap/nuget/bootstrap.nuspec create mode 100644 vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec create mode 100644 vendor/twbs/bootstrap/package-lock.json create mode 100644 vendor/twbs/bootstrap/package.js create mode 100644 vendor/twbs/bootstrap/package.json create mode 100644 vendor/twbs/bootstrap/sache.json create mode 100644 vendor/twbs/bootstrap/scss/_alert.scss create mode 100644 vendor/twbs/bootstrap/scss/_badge.scss create mode 100644 vendor/twbs/bootstrap/scss/_breadcrumb.scss create mode 100644 vendor/twbs/bootstrap/scss/_button-group.scss create mode 100644 vendor/twbs/bootstrap/scss/_buttons.scss create mode 100644 vendor/twbs/bootstrap/scss/_card.scss create mode 100644 vendor/twbs/bootstrap/scss/_carousel.scss create mode 100644 vendor/twbs/bootstrap/scss/_close.scss create mode 100644 vendor/twbs/bootstrap/scss/_code.scss create mode 100644 vendor/twbs/bootstrap/scss/_custom-forms.scss create mode 100644 vendor/twbs/bootstrap/scss/_dropdown.scss create mode 100644 vendor/twbs/bootstrap/scss/_forms.scss create mode 100644 vendor/twbs/bootstrap/scss/_functions.scss create mode 100644 vendor/twbs/bootstrap/scss/_grid.scss create mode 100644 vendor/twbs/bootstrap/scss/_images.scss create mode 100644 vendor/twbs/bootstrap/scss/_input-group.scss create mode 100644 vendor/twbs/bootstrap/scss/_jumbotron.scss create mode 100644 vendor/twbs/bootstrap/scss/_list-group.scss create mode 100644 vendor/twbs/bootstrap/scss/_media.scss create mode 100644 vendor/twbs/bootstrap/scss/_mixins.scss create mode 100644 vendor/twbs/bootstrap/scss/_modal.scss create mode 100644 vendor/twbs/bootstrap/scss/_nav.scss create mode 100644 vendor/twbs/bootstrap/scss/_navbar.scss create mode 100644 vendor/twbs/bootstrap/scss/_pagination.scss create mode 100644 vendor/twbs/bootstrap/scss/_popover.scss create mode 100644 vendor/twbs/bootstrap/scss/_print.scss create mode 100644 vendor/twbs/bootstrap/scss/_progress.scss create mode 100644 vendor/twbs/bootstrap/scss/_reboot.scss create mode 100644 vendor/twbs/bootstrap/scss/_root.scss create mode 100644 vendor/twbs/bootstrap/scss/_tables.scss create mode 100644 vendor/twbs/bootstrap/scss/_tooltip.scss create mode 100644 vendor/twbs/bootstrap/scss/_transitions.scss create mode 100644 vendor/twbs/bootstrap/scss/_type.scss create mode 100644 vendor/twbs/bootstrap/scss/_utilities.scss create mode 100644 vendor/twbs/bootstrap/scss/_variables.scss create mode 100644 vendor/twbs/bootstrap/scss/bootstrap-grid.scss create mode 100644 vendor/twbs/bootstrap/scss/bootstrap-reboot.scss create mode 100644 vendor/twbs/bootstrap/scss/bootstrap.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_alert.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_background-variant.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_badge.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_border-radius.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_box-shadow.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_breakpoints.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_buttons.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_caret.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_clearfix.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_float.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_forms.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_gradients.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_grid-framework.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_grid.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_hover.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_image.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_list-group.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_lists.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_nav-divider.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_pagination.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_reset-text.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_resize.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_screen-reader.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_size.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_table-row.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_text-emphasis.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_text-hide.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_text-truncate.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_transition.scss create mode 100644 vendor/twbs/bootstrap/scss/mixins/_visibility.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_align.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_background.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_borders.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_clearfix.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_display.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_embed.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_flex.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_float.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_position.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_screenreaders.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_shadows.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_sizing.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_spacing.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_text.scss create mode 100644 vendor/twbs/bootstrap/scss/utilities/_visibility.scss create mode 100644 vendor/twbs/bootstrap/site/_data/breakpoints.yml create mode 100644 vendor/twbs/bootstrap/site/_data/browser-bugs.yml create mode 100644 vendor/twbs/bootstrap/site/_data/browser-features.yml create mode 100644 vendor/twbs/bootstrap/site/_data/colors.yml create mode 100644 vendor/twbs/bootstrap/site/_data/examples.yml create mode 100644 vendor/twbs/bootstrap/site/_data/grays.yml create mode 100644 vendor/twbs/bootstrap/site/_data/nav.yml create mode 100644 vendor/twbs/bootstrap/site/_data/theme-colors.yml create mode 100644 vendor/twbs/bootstrap/site/_data/translations.yml create mode 100644 vendor/twbs/bootstrap/site/_includes/ads.html create mode 100644 vendor/twbs/bootstrap/site/_includes/bugify.html create mode 100644 vendor/twbs/bootstrap/site/_includes/callout-danger-async-methods.md create mode 100644 vendor/twbs/bootstrap/site/_includes/callout-info-mediaqueries-breakpoints.md create mode 100644 vendor/twbs/bootstrap/site/_includes/callout-warning-color-assistive-technologies.md create mode 100644 vendor/twbs/bootstrap/site/_includes/callout.html create mode 100644 vendor/twbs/bootstrap/site/_includes/docs-navbar.html create mode 100644 vendor/twbs/bootstrap/site/_includes/docs-sidebar.html create mode 100644 vendor/twbs/bootstrap/site/_includes/example.html create mode 100644 vendor/twbs/bootstrap/site/_includes/favicons.html create mode 100644 vendor/twbs/bootstrap/site/_includes/footer.html create mode 100644 vendor/twbs/bootstrap/site/_includes/header.html create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/download.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/github.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/import.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/lightning.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/menu.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/slack.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/icons/twitter.svg create mode 100644 vendor/twbs/bootstrap/site/_includes/scripts.html create mode 100644 vendor/twbs/bootstrap/site/_includes/skippy.html create mode 100644 vendor/twbs/bootstrap/site/_includes/social.html create mode 100644 vendor/twbs/bootstrap/site/_layouts/default.html create mode 100644 vendor/twbs/bootstrap/site/_layouts/docs.html create mode 100644 vendor/twbs/bootstrap/site/_layouts/examples.html create mode 100644 vendor/twbs/bootstrap/site/_layouts/redirect.html create mode 100644 vendor/twbs/bootstrap/site/_layouts/simple.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/about/brand.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/about/license.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/about/overview.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/about/translations.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-outline.svg create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-punchout.svg create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social-logo.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-solid.svg create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css.map create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-stack.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-themes.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-192x192.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-512x512.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/apple-touch-icon.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/browserconfig.xml create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-16x16.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-32x32.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/manifest.json create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-144x144.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-150x150.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x150.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x310.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-70x70.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/safari-pinned-tab.svg create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/.eslintrc.json create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/docs.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/application.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/ie-emulation-modes-warning.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/pwa.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/search.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/anchor.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/clipboard.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/holder.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/jquery-slim.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/popper.min.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_ads.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_algolia.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_anchor.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_brand.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_browser-bugs.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_buttons.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_callouts.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_clipboard-js.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_colors.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_component-examples.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_content.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_examples.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_footer.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_masthead.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_nav.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_sidebar.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_skiplink.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_syntax.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_variables.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/assets/scss/docs.scss create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/browser-bugs.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/alerts.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/badge.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/breadcrumb.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/button-group.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/buttons.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/card.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/carousel.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/collapse.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/dropdowns.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/forms.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/input-group.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/jumbotron.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/list-group.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/modal.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/navbar.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/navs.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/pagination.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/popovers.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/progress.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/scrollspy.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/components/tooltips.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/code.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/figures.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/images.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/reboot.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/tables.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/content/typography.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/.eslintrc.json create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/.stylelintrc create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/album/album.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/album/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/blog/blog.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/blog/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/carousel/carousel.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/carousel/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/checkout/form-validation.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/checkout/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/cover/cover.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/cover/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/dashboard/dashboard.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/dashboard/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/floating-labels/floating-labels.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/floating-labels/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/grid/grid.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/grid/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/jumbotron/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/jumbotron/jumbotron.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbar-bottom/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbar-fixed/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbar-fixed/navbar-top-fixed.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbar-static/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbar-static/navbar-top.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbars/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/navbars/navbar.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/offcanvas/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/offcanvas/offcanvas.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/offcanvas/offcanvas.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/pricing/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/pricing/pricing.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/product/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/product/product.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/album.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/blog.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/carousel.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/checkout.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/cover.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/dashboard.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/floating-labels.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/grid.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/jumbotron.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/navbar-bottom.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/navbar-fixed.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/navbar-static.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/navbars.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/offcanvas.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/pricing.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/product.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/sign-in.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/starter-template.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/sticky-footer-navbar.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/screenshots/sticky-footer.png create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sign-in/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sign-in/signin.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/starter-template/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/starter-template/starter-template.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sticky-footer-navbar/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sticky-footer-navbar/sticky-footer-navbar.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sticky-footer/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/sticky-footer/sticky-footer.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/tooltip-viewport/index.html create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/tooltip-viewport/tooltip-viewport.css create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/examples/tooltip-viewport/tooltip-viewport.js create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/accessibility.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/best-practices.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/browsers-devices.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/build-tools.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/contents.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/download.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/introduction.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/javascript.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/theming.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/getting-started/webpack.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/layout/grid.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/layout/media-object.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/layout/overview.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/layout/utilities-for-layout.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/migration.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/borders.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/clearfix.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/close-icon.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/colors.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/display.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/embed.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/flex.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/float.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/image-replacement.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/position.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/screenreaders.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/shadows.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/sizing.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/spacing.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/text.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/vertical-align.md create mode 100644 vendor/twbs/bootstrap/site/docs/4.1/utilities/visibility.md create mode 100644 vendor/twbs/bootstrap/site/index.html create mode 100644 vendor/twbs/bootstrap/site/robots.txt create mode 100644 vendor/twbs/bootstrap/site/sw.js diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php index f58dba60e..cf87cc7d7 100644 --- a/Zotlabs/Render/Comanche.php +++ b/Zotlabs/Render/Comanche.php @@ -441,7 +441,7 @@ class Comanche { $path = 'view/js/jquery.js'; break; case 'bootstrap': - $path = 'library/bootstrap/js/bootstrap.min.js'; + $path = 'vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js'; break; case 'foundation': $path = 'library/foundation/js/foundation.js'; @@ -466,7 +466,7 @@ class Comanche { switch($s) { case 'bootstrap': - $path = 'library/bootstrap/css/bootstrap.min.css'; + $path = 'vendor/twbs/bootstrap/dist/css/bootstrap.min.css'; break; case 'foundation': $path = 'library/foundation/css/foundation.min.css'; diff --git a/composer.json b/composer.json index 33bc56fa7..b2aec5332 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,8 @@ "commerceguys/intl": "~0.7", "lukasreschke/id3parser": "^0.0.1", "smarty/smarty": "~3.1", - "ramsey/uuid": "^3.8" + "ramsey/uuid": "^3.8", + "twbs/bootstrap": "4.1.3" }, "require-dev" : { "phpunit/phpunit" : "@stable", diff --git a/composer.lock b/composer.lock index 35a024712..d352ad29a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "38911748179833a57ee1b46a0af8e518", + "content-hash": "b7862124a9afe837c7eef8ee66f02ff4", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -1110,6 +1110,57 @@ "portable" ], "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "twbs/bootstrap", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "3b558734382ce58b51e5fc676453bfd53bba9201" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/3b558734382ce58b51e5fc676453bfd53bba9201", + "reference": "3b558734382ce58b51e5fc676453bfd53bba9201", + "shasum": "" + }, + "replace": { + "twitter/bootstrap": "self.version" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + }, + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + } + ], + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "homepage": "https://getbootstrap.com/", + "keywords": [ + "JS", + "css", + "framework", + "front-end", + "mobile-first", + "responsive", + "sass", + "web" + ], + "time": "2018-07-24T15:54:34+00:00" } ], "packages-dev": [ diff --git a/library/bootstrap/css/bootstrap-grid.css b/library/bootstrap/css/bootstrap-grid.css deleted file mode 100644 index 6798f23d2..000000000 --- a/library/bootstrap/css/bootstrap-grid.css +++ /dev/null @@ -1,1912 +0,0 @@ -/*! - * Bootstrap Grid v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -@-ms-viewport { - width: device-width; -} - -html { - box-sizing: border-box; - -ms-overflow-style: scrollbar; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, -.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, -.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, -.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, -.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, -.col-xl-auto { - position: relative; - width: 100%; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} - -.col { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; -} - -.col-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; -} - -.col-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - -ms-flex-order: -1; - order: -1; -} - -.order-last { - -ms-flex-order: 13; - order: 13; -} - -.order-0 { - -ms-flex-order: 0; - order: 0; -} - -.order-1 { - -ms-flex-order: 1; - order: 1; -} - -.order-2 { - -ms-flex-order: 2; - order: 2; -} - -.order-3 { - -ms-flex-order: 3; - order: 3; -} - -.order-4 { - -ms-flex-order: 4; - order: 4; -} - -.order-5 { - -ms-flex-order: 5; - order: 5; -} - -.order-6 { - -ms-flex-order: 6; - order: 6; -} - -.order-7 { - -ms-flex-order: 7; - order: 7; -} - -.order-8 { - -ms-flex-order: 8; - order: 8; -} - -.order-9 { - -ms-flex-order: 9; - order: 9; -} - -.order-10 { - -ms-flex-order: 10; - order: 10; -} - -.order-11 { - -ms-flex-order: 11; - order: 11; -} - -.order-12 { - -ms-flex-order: 12; - order: 12; -} - -.offset-1 { - margin-left: 8.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-sm-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-sm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-sm-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - -ms-flex-order: -1; - order: -1; - } - .order-sm-last { - -ms-flex-order: 13; - order: 13; - } - .order-sm-0 { - -ms-flex-order: 0; - order: 0; - } - .order-sm-1 { - -ms-flex-order: 1; - order: 1; - } - .order-sm-2 { - -ms-flex-order: 2; - order: 2; - } - .order-sm-3 { - -ms-flex-order: 3; - order: 3; - } - .order-sm-4 { - -ms-flex-order: 4; - order: 4; - } - .order-sm-5 { - -ms-flex-order: 5; - order: 5; - } - .order-sm-6 { - -ms-flex-order: 6; - order: 6; - } - .order-sm-7 { - -ms-flex-order: 7; - order: 7; - } - .order-sm-8 { - -ms-flex-order: 8; - order: 8; - } - .order-sm-9 { - -ms-flex-order: 9; - order: 9; - } - .order-sm-10 { - -ms-flex-order: 10; - order: 10; - } - .order-sm-11 { - -ms-flex-order: 11; - order: 11; - } - .order-sm-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-md-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-md-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - -ms-flex-order: -1; - order: -1; - } - .order-md-last { - -ms-flex-order: 13; - order: 13; - } - .order-md-0 { - -ms-flex-order: 0; - order: 0; - } - .order-md-1 { - -ms-flex-order: 1; - order: 1; - } - .order-md-2 { - -ms-flex-order: 2; - order: 2; - } - .order-md-3 { - -ms-flex-order: 3; - order: 3; - } - .order-md-4 { - -ms-flex-order: 4; - order: 4; - } - .order-md-5 { - -ms-flex-order: 5; - order: 5; - } - .order-md-6 { - -ms-flex-order: 6; - order: 6; - } - .order-md-7 { - -ms-flex-order: 7; - order: 7; - } - .order-md-8 { - -ms-flex-order: 8; - order: 8; - } - .order-md-9 { - -ms-flex-order: 9; - order: 9; - } - .order-md-10 { - -ms-flex-order: 10; - order: 10; - } - .order-md-11 { - -ms-flex-order: 11; - order: 11; - } - .order-md-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-lg-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-lg-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - -ms-flex-order: -1; - order: -1; - } - .order-lg-last { - -ms-flex-order: 13; - order: 13; - } - .order-lg-0 { - -ms-flex-order: 0; - order: 0; - } - .order-lg-1 { - -ms-flex-order: 1; - order: 1; - } - .order-lg-2 { - -ms-flex-order: 2; - order: 2; - } - .order-lg-3 { - -ms-flex-order: 3; - order: 3; - } - .order-lg-4 { - -ms-flex-order: 4; - order: 4; - } - .order-lg-5 { - -ms-flex-order: 5; - order: 5; - } - .order-lg-6 { - -ms-flex-order: 6; - order: 6; - } - .order-lg-7 { - -ms-flex-order: 7; - order: 7; - } - .order-lg-8 { - -ms-flex-order: 8; - order: 8; - } - .order-lg-9 { - -ms-flex-order: 9; - order: 9; - } - .order-lg-10 { - -ms-flex-order: 10; - order: 10; - } - .order-lg-11 { - -ms-flex-order: 11; - order: 11; - } - .order-lg-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-xl-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-xl-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-xl-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - -ms-flex-order: -1; - order: -1; - } - .order-xl-last { - -ms-flex-order: 13; - order: 13; - } - .order-xl-0 { - -ms-flex-order: 0; - order: 0; - } - .order-xl-1 { - -ms-flex-order: 1; - order: 1; - } - .order-xl-2 { - -ms-flex-order: 2; - order: 2; - } - .order-xl-3 { - -ms-flex-order: 3; - order: 3; - } - .order-xl-4 { - -ms-flex-order: 4; - order: 4; - } - .order-xl-5 { - -ms-flex-order: 5; - order: 5; - } - .order-xl-6 { - -ms-flex-order: 6; - order: 6; - } - .order-xl-7 { - -ms-flex-order: 7; - order: 7; - } - .order-xl-8 { - -ms-flex-order: 8; - order: 8; - } - .order-xl-9 { - -ms-flex-order: 9; - order: 9; - } - .order-xl-10 { - -ms-flex-order: 10; - order: 10; - } - .order-xl-11 { - -ms-flex-order: 11; - order: 11; - } - .order-xl-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: -ms-flexbox !important; - display: flex !important; -} - -.d-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-sm-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-md-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-lg-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-xl-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-print-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -.flex-row { - -ms-flex-direction: row !important; - flex-direction: row !important; -} - -.flex-column { - -ms-flex-direction: column !important; - flex-direction: column !important; -} - -.flex-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; -} - -.flex-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; -} - -.flex-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; -} - -.flex-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; -} - -.flex-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; -} - -.flex-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; -} - -.justify-content-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; -} - -.justify-content-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; -} - -.justify-content-center { - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.justify-content-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; -} - -.justify-content-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; -} - -.align-items-start { - -ms-flex-align: start !important; - align-items: flex-start !important; -} - -.align-items-end { - -ms-flex-align: end !important; - align-items: flex-end !important; -} - -.align-items-center { - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-items-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; -} - -.align-items-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; -} - -.align-content-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; -} - -.align-content-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-content-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; -} - -.align-content-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; -} - -.align-content-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; -} - -.align-self-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; -} - -.align-self-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; -} - -.align-self-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - align-self: center !important; -} - -.align-self-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; -} - -.align-self-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-sm-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-sm-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-sm-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-sm-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-sm-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-sm-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-sm-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-sm-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-sm-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-sm-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-sm-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-sm-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-sm-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-sm-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-sm-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-sm-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-sm-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-sm-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-sm-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-sm-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-sm-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-sm-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-sm-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-sm-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-sm-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-sm-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-sm-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-md-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-md-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-md-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-md-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-md-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-md-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-md-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-md-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-md-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-md-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-md-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-md-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-md-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-md-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-md-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-md-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-md-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-md-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-md-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-md-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-md-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-md-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-md-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-md-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-md-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-md-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-md-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-md-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-md-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-lg-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-lg-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-lg-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-lg-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-lg-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-lg-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-lg-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-lg-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-lg-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-lg-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-lg-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-lg-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-lg-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-lg-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-lg-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-lg-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-lg-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-lg-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-lg-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-lg-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-lg-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-lg-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-lg-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-lg-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-lg-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-lg-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-lg-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-xl-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-xl-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-xl-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-xl-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-xl-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-xl-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-xl-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-xl-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-xl-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-xl-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-xl-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-xl-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-xl-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-xl-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-xl-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-xl-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-xl-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-xl-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-xl-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-xl-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-xl-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-xl-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-xl-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-xl-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-xl-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-xl-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-xl-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} -/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-grid.css.map b/library/bootstrap/css/bootstrap-grid.css.map deleted file mode 100644 index 8922d4ce7..000000000 --- a/library/bootstrap/css/bootstrap-grid.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGD;EAAgB,oBAAmB;CCApC;;ADGD;EACE,uBAAsB;EACtB,8BAA6B;CAC9B;;AAED;;;EAGE,oBAAmB;CACpB;;AEfC;ECAA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDDhB;;AEoDC;EFvDF;ICYI,iBEuKK;GHhLR;CDyBF;;AG2BG;EFvDF;ICYI,iBEwKK;GHjLR;CD+BF;;AGqBG;EFvDF;ICYI,iBEyKK;GHlLR;CDqCF;;AGeG;EFvDF;ICYI,kBE0KM;GHnLT;CD2CF;;AClCC;ECZA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDUhB;;AAQD;ECJA,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,oBAAuC;EACvC,mBAAsC;CDGrC;;AAID;EACE,gBAAe;EACf,eAAc;CAOf;;AATD;;EAMI,iBAAgB;EAChB,gBAAe;CAChB;;AIlCH;;;;;;EACE,mBAAkB;EAClB,YAAW;EACX,gBAAe;EACf,oBAA4B;EAC5B,mBAA2B;CAC5B;;AAkBG;EACE,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,gBAAe;CAChB;;AACD;EACE,mBAAc;EAAd,eAAc;EACd,YAAW;EACX,gBAAe;CAChB;;AAGC;EHFN,wBAAsC;EAAtC,oBAAsC;EAItC,qBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,mBAAsC;EAAtC,eAAsC;EAItC,gBAAuC;CGAhC;;AAGH;EAAwB,mBAAS;EAAT,UAAS;CAAK;;AAEtC;EAAuB,mBAAmB;EAAnB,UAAmB;CAAI;;AAG5C;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAMnC;EHTR,uBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AFDP;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CL2VV;;AG5VG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLyeV;;AG1eG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLunBV;;AGxnBG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLqwBV;;AMxzBG;EAA2B,yBAAwB;CAAK;;AACxD;EAA2B,2BAA0B;CAAK;;AAC1D;EAA2B,iCAAgC;CAAK;;AAChE;EAA2B,0BAAyB;CAAK;;AACzD;EAA2B,0BAAyB;CAAK;;AACzD;EAA2B,8BAA6B;CAAK;;AAC7D;EAA2B,+BAA8B;CAAK;;AAC9D;EAA2B,gCAAwB;EAAxB,yBAAwB;CAAK;;AACxD;EAA2B,uCAA+B;EAA/B,gCAA+B;CAAK;;AH0C/D;EGlDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CNk3BlE;;AGx0BG;EGlDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CNg5BlE;;AGt2BG;EGlDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CN86BlE;;AGp4BG;EGlDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CN48BlE;;AMn8BD;EACE;IAAwB,yBAAwB;GAAK;EACrD;IAAwB,2BAA0B;GAAK;EACvD;IAAwB,iCAAgC;GAAK;EAC7D;IAAwB,0BAAyB;GAAK;EACtD;IAAwB,0BAAyB;GAAK;EACtD;IAAwB,8BAA6B;GAAK;EAC1D;IAAwB,+BAA8B;GAAK;EAC3D;IAAwB,gCAAwB;IAAxB,yBAAwB;GAAK;EACrD;IAAwB,uCAA+B;IAA/B,gCAA+B;GAAK;CNw9B7D;;AOl/BG;EAAgC,mCAA8B;EAA9B,+BAA8B;CAAK;;AACnE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAK;;AACtE;EAAgC,2CAAsC;EAAtC,uCAAsC;CAAK;;AAC3E;EAAgC,8CAAyC;EAAzC,0CAAyC;CAAK;;AAE9E;EAA8B,+BAA0B;EAA1B,2BAA0B;CAAK;;AAC7D;EAA8B,iCAA4B;EAA5B,6BAA4B;CAAK;;AAC/D;EAA8B,uCAAkC;EAAlC,mCAAkC;CAAK;;AACrE;EAA8B,8BAAyB;EAAzB,0BAAyB;CAAK;;AAC5D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAK;;AAC1D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAK;;AAC1D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAK;;AAC5D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAK;;AAE5D;EAAoC,gCAAsC;EAAtC,uCAAsC;CAAK;;AAC/E;EAAoC,8BAAoC;EAApC,qCAAoC;CAAK;;AAC7E;EAAoC,iCAAkC;EAAlC,mCAAkC;CAAK;;AAC3E;EAAoC,kCAAyC;EAAzC,0CAAyC;CAAK;;AAClF;EAAoC,qCAAwC;EAAxC,yCAAwC;CAAK;;AAEjF;EAAiC,iCAAkC;EAAlC,mCAAkC;CAAK;;AACxE;EAAiC,+BAAgC;EAAhC,iCAAgC;CAAK;;AACtE;EAAiC,kCAA8B;EAA9B,+BAA8B;CAAK;;AACpE;EAAiC,oCAAgC;EAAhC,iCAAgC;CAAK;;AACtE;EAAiC,mCAA+B;EAA/B,gCAA+B;CAAK;;AAErE;EAAkC,qCAAoC;EAApC,qCAAoC;CAAK;;AAC3E;EAAkC,mCAAkC;EAAlC,mCAAkC;CAAK;;AACzE;EAAkC,sCAAgC;EAAhC,iCAAgC;CAAK;;AACvE;EAAkC,uCAAuC;EAAvC,wCAAuC;CAAK;;AAC9E;EAAkC,0CAAsC;EAAtC,uCAAsC;CAAK;;AAC7E;EAAkC,uCAAiC;EAAjC,kCAAiC;CAAK;;AAExE;EAAgC,qCAA2B;EAA3B,4BAA2B;CAAK;;AAChE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAK;;AACtE;EAAgC,oCAA+B;EAA/B,gCAA+B;CAAK;;AACpE;EAAgC,uCAA6B;EAA7B,8BAA6B;CAAK;;AAClE;EAAgC,yCAA+B;EAA/B,gCAA+B;CAAK;;AACpE;EAAgC,wCAA8B;EAA9B,+BAA8B;CAAK;;AJYnE;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CP6rCtE;;AGjrCG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CPsyCtE;;AG1xCG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CP+4CtE;;AGn4CG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CPw/CtE","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-grid.min.css b/library/bootstrap/css/bootstrap-grid.min.css deleted file mode 100644 index 79c746da5..000000000 --- a/library/bootstrap/css/bootstrap-grid.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap Grid v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */@-ms-viewport{width:device-width}html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}} -/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-grid.min.css.map b/library/bootstrap/css/bootstrap-grid.min.css.map deleted file mode 100644 index 62f971ad3..000000000 --- a/library/bootstrap/css/bootstrap-grid.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"AAAA;;;;;AAQE,cAAgB,MAAA,aAGlB,KACE,WAAA,WACA,mBAAA,UAGF,ECCA,QADA,SDGE,WAAA,QEdA,WCAA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KCmDE,yBFvDF,WCYI,UAAA,OC2CF,yBFvDF,WCYI,UAAA,OC2CF,yBFvDF,WCYI,UAAA,OC2CF,0BFvDF,WCYI,UAAA,QDAJ,iBCZA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KDkBA,KCJA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDOA,YACE,aAAA,EACA,YAAA,EAFF,iBD2CF,0BCrCM,cAAA,EACA,aAAA,EGjCJ,KAAA,OAAA,QAAA,QAAA,QAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OJ2EF,UAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFkJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,aAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aI9EI,SAAA,SACA,MAAA,KACA,WAAA,IACA,cAAA,KACA,aAAA,KAmBE,KACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,UACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,OFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,QFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,QFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,QFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,aAAwB,eAAA,GAAA,MAAA,GAExB,YAAuB,eAAA,GAAA,MAAA,GAGrB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAMtB,UFTR,YAAA,UESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,UFTR,YAAA,WESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,UFTR,YAAA,WESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,WFTR,YAAA,WESQ,WFTR,YAAA,WCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,0BC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YGxCE,QAA2B,QAAA,eAC3B,UAA2B,QAAA,iBAC3B,gBAA2B,QAAA,uBAC3B,SAA2B,QAAA,gBAC3B,SAA2B,QAAA,gBAC3B,aAA2B,QAAA,oBAC3B,cAA2B,QAAA,qBAC3B,QAA2B,QAAA,sBAAA,QAAA,eAC3B,eAA2B,QAAA,6BAAA,QAAA,sBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,0BElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBAS/B,aACE,cAAwB,QAAA,eACxB,gBAAwB,QAAA,iBACxB,sBAAwB,QAAA,uBACxB,eAAwB,QAAA,gBACxB,eAAwB,QAAA,gBACxB,mBAAwB,QAAA,oBACxB,oBAAwB,QAAA,qBACxB,cAAwB,QAAA,sBAAA,QAAA,eACxB,qBAAwB,QAAA,6BAAA,QAAA,uBC1BtB,UAAgC,mBAAA,cAAA,eAAA,cAChC,aAAgC,mBAAA,iBAAA,eAAA,iBAChC,kBAAgC,mBAAA,sBAAA,eAAA,sBAChC,qBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,WAA8B,cAAA,eAAA,UAAA,eAC9B,aAA8B,cAAA,iBAAA,UAAA,iBAC9B,mBAA8B,cAAA,uBAAA,UAAA,uBAC9B,WAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAE9B,uBAAoC,cAAA,gBAAA,gBAAA,qBACpC,qBAAoC,cAAA,cAAA,gBAAA,mBACpC,wBAAoC,cAAA,iBAAA,gBAAA,iBACpC,yBAAoC,cAAA,kBAAA,gBAAA,wBACpC,wBAAoC,cAAA,qBAAA,gBAAA,uBAEpC,mBAAiC,eAAA,gBAAA,YAAA,qBACjC,iBAAiC,eAAA,cAAA,YAAA,mBACjC,oBAAiC,eAAA,iBAAA,YAAA,iBACjC,sBAAiC,eAAA,mBAAA,YAAA,mBACjC,qBAAiC,eAAA,kBAAA,YAAA,kBAEjC,qBAAkC,mBAAA,gBAAA,cAAA,qBAClC,mBAAkC,mBAAA,cAAA,cAAA,mBAClC,sBAAkC,mBAAA,iBAAA,cAAA,iBAClC,uBAAkC,mBAAA,kBAAA,cAAA,wBAClC,sBAAkC,mBAAA,qBAAA,cAAA,uBAClC,uBAAkC,mBAAA,kBAAA,cAAA,kBAElC,iBAAgC,oBAAA,eAAA,WAAA,eAChC,kBAAgC,oBAAA,gBAAA,WAAA,qBAChC,gBAAgC,oBAAA,cAAA,WAAA,mBAChC,mBAAgC,oBAAA,iBAAA,WAAA,iBAChC,qBAAgC,oBAAA,mBAAA,WAAA,mBAChC,oBAAgC,oBAAA,kBAAA,WAAA,kBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,0BGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA","sourcesContent":["/*!\n * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-reboot.css b/library/bootstrap/css/bootstrap-reboot.css deleted file mode 100644 index 9f0f40ff1..000000000 --- a/library/bootstrap/css/bootstrap-reboot.css +++ /dev/null @@ -1,330 +0,0 @@ -/*! - * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) - */ -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; - -webkit-tap-highlight-color: transparent; -} - -@-ms-viewport { - width: device-width; -} - -article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #fff; -} - -[tabindex="-1"]:focus { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -dfn { - font-style: italic; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; -} - -a:hover { - color: #0056b3; - text-decoration: underline; -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):focus { - outline: 0; -} - -pre, -code, -kbd, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg:not(:root) { - overflow: hidden; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type="radio"], -input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} -/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-reboot.css.map b/library/bootstrap/css/bootstrap-reboot.css.map deleted file mode 100644 index ee4c73925..000000000 --- a/library/bootstrap/css/bootstrap-reboot.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","../../scss/_variables.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;GAMG;ACcH;;;EAGE,uBAAsB;CACvB;;AAED;EACE,wBAAuB;EACvB,kBAAiB;EACjB,+BAA8B;EAC9B,2BAA0B;EAC1B,8BAA6B;EAC7B,yCCXa;CDYd;;AAIC;EACE,oBAAmB;CEdtB;;AFoBD;EACE,eAAc;CACf;;AAUD;EACE,UAAS;EACT,kKC+KgL;ED9KhL,gBCmLgC;EDlLhC,iBCuL+B;EDtL/B,iBC0L+B;EDzL/B,eC1CgB;ED2ChB,iBAAgB;EAChB,uBCrDa;CDsDd;;AExBD;EFgCE,sBAAqB;CACtB;;AAQD;EACE,wBAAuB;EACvB,UAAS;EACT,kBAAiB;CAClB;;AAYD;EACE,cAAa;EACb,sBC4JyC;CD3J1C;;AAOD;EACE,cAAa;EACb,oBCiD8B;CDhD/B;;AASD;;EAEE,2BAA0B;EAC1B,0CAAiC;EAAjC,kCAAiC;EACjC,aAAY;EACZ,iBAAgB;CACjB;;AAED;EACE,oBAAmB;EACnB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;;EAGE,cAAa;EACb,oBAAmB;CACpB;;AAED;;;;EAIE,iBAAgB;CACjB;;AAED;EACE,iBC+F+B;CD9FhC;;AAED;EACE,qBAAoB;EACpB,eAAc;CACf;;AAED;EACE,iBAAgB;CACjB;;AAED;EACE,mBAAkB;CACnB;;AAGD;;EAEE,oBAAmB;CACpB;;AAGD;EACE,eAAc;CACf;;AAOD;;EAEE,mBAAkB;EAClB,eAAc;EACd,eAAc;EACd,yBAAwB;CACzB;;AAED;EAAM,eAAc;CAAK;;AACzB;EAAM,WAAU;CAAK;;AAOrB;EACE,eClKe;EDmKf,sBChD8B;EDiD9B,8BAA6B;EAC7B,sCAAqC;CAMtC;;AGnMC;EHgME,eCpDgD;EDqDhD,2BCpDiC;CE7Ib;;AH2MxB;EACE,eAAc;EACd,sBAAqB;CAUtB;;AGnNC;EH4ME,eAAc;EACd,sBAAqB;CG1MtB;;AHoMH;EAUI,WAAU;CACX;;AASH;;;;EAIE,kCAAiC;EACjC,eAAc;CACf;;AAGD;EAEE,cAAa;EAEb,oBAAmB;EAEnB,eAAc;EAGd,8BAA6B;CAC9B;;AAOD;EAEE,iBAAgB;CACjB;;AAOD;EACE,uBAAsB;EACtB,mBAAkB;CACnB;;AAED;EACE,iBAAgB;CACjB;;AAOD;EACE,0BAAyB;CAC1B;;AAED;EACE,qBCckC;EDblC,wBCakC;EDZlC,eCnRgB;EDoRhB,iBAAgB;EAChB,qBAAoB;CACrB;;AAED;EAGE,oBAAmB;CACpB;;AAOD;EAEE,sBAAqB;EACrB,sBC+E2C;CD9E5C;;AAKD;EACE,iBAAgB;CACjB;;AAMD;EACE,oBAAmB;EACnB,2CAA0C;CAC3C;;AAED;;;;;EAKE,UAAS;EACT,qBAAoB;EACpB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;EAEE,kBAAiB;CAClB;;AAED;;EAEE,qBAAoB;CACrB;;AAKD;;;;EAIE,2BAA0B;CAC3B;;AAGD;;;;EAIE,WAAU;EACV,mBAAkB;CACnB;;AAED;;EAEE,uBAAsB;EACtB,WAAU;CACX;;AAGD;;;;EASE,4BAA2B;CAC5B;;AAED;EACE,eAAc;EAEd,iBAAgB;CACjB;;AAED;EAME,aAAY;EAEZ,WAAU;EACV,UAAS;EACT,UAAS;CACV;;AAID;EACE,eAAc;EACd,YAAW;EACX,gBAAe;EACf,WAAU;EACV,qBAAoB;EACpB,kBAAiB;EACjB,qBAAoB;EACpB,eAAc;EACd,oBAAmB;CACpB;;AAED;EACE,yBAAwB;CACzB;;AEpID;;EFyIE,aAAY;CACb;;AErID;EF4IE,qBAAoB;EACpB,yBAAwB;CACzB;;AEzID;;EFiJE,yBAAwB;CACzB;;AAOD;EACE,cAAa;EACb,2BAA0B;CAC3B;;AAMD;EACE,sBAAqB;CACtB;;AAED;EACE,mBAAkB;EAClB,gBAAe;CAChB;;AAED;EACE,cAAa;CACd;;AEtJD;EF2JE,yBAAwB;CACzB","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","/*!\n * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-reboot.min.css b/library/bootstrap/css/bootstrap-reboot.min.css deleted file mode 100644 index eb965cc50..000000000 --- a/library/bootstrap/css/bootstrap-reboot.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) - */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} -/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap-reboot.min.css.map b/library/bootstrap/css/bootstrap-reboot.min.css.map deleted file mode 100644 index e5a961ac4..000000000 --- a/library/bootstrap/css/bootstrap-reboot.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;ACoBA,ECXA,QADA,SDeE,WAAA,WAGF,KACE,YAAA,WACA,YAAA,KACA,yBAAA,KACA,qBAAA,KACA,mBAAA,UACA,4BAAA,YAKA,cACE,MAAA,aAMJ,QAAA,MAAA,OAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,IAAA,QACE,QAAA,MAWF,KACE,OAAA,EACA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,kBACA,UAAA,KACA,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,KACA,iBAAA,KEvBF,sBFgCE,QAAA,YASF,GACE,WAAA,YACA,OAAA,EACA,SAAA,QAaF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAQF,EACE,WAAA,EACA,cAAA,KChDF,0BD0DA,YAEE,gBAAA,UACA,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,cAAA,EAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QCrDF,GDwDA,GCzDA,GD4DE,WAAA,EACA,cAAA,KAGF,MCxDA,MACA,MAFA,MD6DE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAGF,IACE,WAAA,OAIF,EC1DA,OD4DE,YAAA,OAIF,MACE,UAAA,IAQF,IChEA,IDkEE,SAAA,SACA,UAAA,IACA,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAON,EACE,MAAA,QACA,gBAAA,KACA,iBAAA,YACA,6BAAA,QG7LA,QHgME,MAAA,QACA,gBAAA,UAUJ,8BACE,MAAA,QACA,gBAAA,KGzMA,oCAAA,oCH4ME,MAAA,QACA,gBAAA,KANJ,oCAUI,QAAA,EClEJ,KACA,ID2EA,IC1EA,KD8EE,YAAA,SAAA,CAAA,UACA,UAAA,IAIF,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAGA,mBAAA,UAQF,OAEE,OAAA,EAAA,EAAA,KAQF,IACE,eAAA,OACA,aAAA,KAGF,eACE,SAAA,OAQF,MACE,gBAAA,SAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAGE,WAAA,QAQF,MAEE,QAAA,aACA,cAAA,MAMF,OACE,cAAA,EAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBC9GF,ODiHA,MC/GA,SADA,OAEA,SDmHE,OAAA,EACA,YAAA,QACA,UAAA,QACA,YAAA,QAGF,OCjHA,MDmHE,SAAA,QAGF,OCjHA,ODmHE,eAAA,KC7GF,aACA,cDkHA,OCpHA,mBDwHE,mBAAA,OCjHF,gCACA,+BACA,gCDmHA,yBAIE,QAAA,EACA,aAAA,KClHF,qBDqHA,kBAEE,WAAA,WACA,QAAA,EAIF,iBCrHA,2BACA,kBAFA,iBD+HE,mBAAA,QAGF,SACE,SAAA,KAEA,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAKF,OACE,QAAA,MACA,MAAA,KACA,UAAA,KACA,QAAA,EACA,cAAA,MACA,UAAA,OACA,YAAA,QACA,MAAA,QACA,YAAA,OAGF,SACE,eAAA,SEnIF,yCDEA,yCDuIE,OAAA,KEpIF,cF4IE,eAAA,KACA,mBAAA,KExIF,4CDEA,yCD+IE,mBAAA,KAQF,6BACE,KAAA,QACA,mBAAA,OAOF,OACE,QAAA,aAGF,QACE,QAAA,UACA,OAAA,QAGF,SACE,QAAA,KErJF,SF2JE,QAAA","sourcesContent":["/*!\n * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","/*!\n * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap.css b/library/bootstrap/css/bootstrap.css deleted file mode 100644 index 7220f3c05..000000000 --- a/library/bootstrap/css/bootstrap.css +++ /dev/null @@ -1,8950 +0,0 @@ -/*! - * Bootstrap v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #007bff; - --secondary: #6c757d; - --success: #28a745; - --info: #17a2b8; - --warning: #ffc107; - --danger: #dc3545; - --light: #f8f9fa; - --dark: #343a40; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; - -webkit-tap-highlight-color: transparent; -} - -@-ms-viewport { - width: device-width; -} - -article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #fff; -} - -[tabindex="-1"]:focus { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -dfn { - font-style: italic; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; -} - -a:hover { - color: #0056b3; - text-decoration: underline; -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):focus { - outline: 0; -} - -pre, -code, -kbd, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg:not(:root) { - overflow: hidden; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type="radio"], -input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - margin-bottom: 0.5rem; - font-family: inherit; - font-weight: 500; - line-height: 1.2; - color: inherit; -} - -h1, .h1 { - font-size: 2.5rem; -} - -h2, .h2 { - font-size: 2rem; -} - -h3, .h3 { - font-size: 1.75rem; -} - -h4, .h4 { - font-size: 1.5rem; -} - -h5, .h5 { - font-size: 1.25rem; -} - -h6, .h6 { - font-size: 1rem; -} - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2; -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2; -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); -} - -small, -.small { - font-size: 80%; - font-weight: 400; -} - -mark, -.mark { - padding: 0.2em; - background-color: #fcf8e3; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} - -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d; -} - -.blockquote-footer::before { - content: "\2014 \00A0"; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #6c757d; -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -code { - font-size: 87.5%; - color: #e83e8c; - word-break: break-word; -} - -a > code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: 0.2rem; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; -} - -pre { - display: block; - font-size: 87.5%; - color: #212529; -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, -.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, -.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, -.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, -.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, -.col-xl-auto { - position: relative; - width: 100%; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} - -.col { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; -} - -.col-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; -} - -.col-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - -ms-flex-order: -1; - order: -1; -} - -.order-last { - -ms-flex-order: 13; - order: 13; -} - -.order-0 { - -ms-flex-order: 0; - order: 0; -} - -.order-1 { - -ms-flex-order: 1; - order: 1; -} - -.order-2 { - -ms-flex-order: 2; - order: 2; -} - -.order-3 { - -ms-flex-order: 3; - order: 3; -} - -.order-4 { - -ms-flex-order: 4; - order: 4; -} - -.order-5 { - -ms-flex-order: 5; - order: 5; -} - -.order-6 { - -ms-flex-order: 6; - order: 6; -} - -.order-7 { - -ms-flex-order: 7; - order: 7; -} - -.order-8 { - -ms-flex-order: 8; - order: 8; -} - -.order-9 { - -ms-flex-order: 9; - order: 9; -} - -.order-10 { - -ms-flex-order: 10; - order: 10; -} - -.order-11 { - -ms-flex-order: 11; - order: 11; -} - -.order-12 { - -ms-flex-order: 12; - order: 12; -} - -.offset-1 { - margin-left: 8.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-sm-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-sm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-sm-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - -ms-flex-order: -1; - order: -1; - } - .order-sm-last { - -ms-flex-order: 13; - order: 13; - } - .order-sm-0 { - -ms-flex-order: 0; - order: 0; - } - .order-sm-1 { - -ms-flex-order: 1; - order: 1; - } - .order-sm-2 { - -ms-flex-order: 2; - order: 2; - } - .order-sm-3 { - -ms-flex-order: 3; - order: 3; - } - .order-sm-4 { - -ms-flex-order: 4; - order: 4; - } - .order-sm-5 { - -ms-flex-order: 5; - order: 5; - } - .order-sm-6 { - -ms-flex-order: 6; - order: 6; - } - .order-sm-7 { - -ms-flex-order: 7; - order: 7; - } - .order-sm-8 { - -ms-flex-order: 8; - order: 8; - } - .order-sm-9 { - -ms-flex-order: 9; - order: 9; - } - .order-sm-10 { - -ms-flex-order: 10; - order: 10; - } - .order-sm-11 { - -ms-flex-order: 11; - order: 11; - } - .order-sm-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-md-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-md-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - -ms-flex-order: -1; - order: -1; - } - .order-md-last { - -ms-flex-order: 13; - order: 13; - } - .order-md-0 { - -ms-flex-order: 0; - order: 0; - } - .order-md-1 { - -ms-flex-order: 1; - order: 1; - } - .order-md-2 { - -ms-flex-order: 2; - order: 2; - } - .order-md-3 { - -ms-flex-order: 3; - order: 3; - } - .order-md-4 { - -ms-flex-order: 4; - order: 4; - } - .order-md-5 { - -ms-flex-order: 5; - order: 5; - } - .order-md-6 { - -ms-flex-order: 6; - order: 6; - } - .order-md-7 { - -ms-flex-order: 7; - order: 7; - } - .order-md-8 { - -ms-flex-order: 8; - order: 8; - } - .order-md-9 { - -ms-flex-order: 9; - order: 9; - } - .order-md-10 { - -ms-flex-order: 10; - order: 10; - } - .order-md-11 { - -ms-flex-order: 11; - order: 11; - } - .order-md-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-lg-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-lg-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - -ms-flex-order: -1; - order: -1; - } - .order-lg-last { - -ms-flex-order: 13; - order: 13; - } - .order-lg-0 { - -ms-flex-order: 0; - order: 0; - } - .order-lg-1 { - -ms-flex-order: 1; - order: 1; - } - .order-lg-2 { - -ms-flex-order: 2; - order: 2; - } - .order-lg-3 { - -ms-flex-order: 3; - order: 3; - } - .order-lg-4 { - -ms-flex-order: 4; - order: 4; - } - .order-lg-5 { - -ms-flex-order: 5; - order: 5; - } - .order-lg-6 { - -ms-flex-order: 6; - order: 6; - } - .order-lg-7 { - -ms-flex-order: 7; - order: 7; - } - .order-lg-8 { - -ms-flex-order: 8; - order: 8; - } - .order-lg-9 { - -ms-flex-order: 9; - order: 9; - } - .order-lg-10 { - -ms-flex-order: 10; - order: 10; - } - .order-lg-11 { - -ms-flex-order: 11; - order: 11; - } - .order-lg-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .col-xl-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-xl-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-xl-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - -ms-flex-order: -1; - order: -1; - } - .order-xl-last { - -ms-flex-order: 13; - order: 13; - } - .order-xl-0 { - -ms-flex-order: 0; - order: 0; - } - .order-xl-1 { - -ms-flex-order: 1; - order: 1; - } - .order-xl-2 { - -ms-flex-order: 2; - order: 2; - } - .order-xl-3 { - -ms-flex-order: 3; - order: 3; - } - .order-xl-4 { - -ms-flex-order: 4; - order: 4; - } - .order-xl-5 { - -ms-flex-order: 5; - order: 5; - } - .order-xl-6 { - -ms-flex-order: 6; - order: 6; - } - .order-xl-7 { - -ms-flex-order: 7; - order: 7; - } - .order-xl-8 { - -ms-flex-order: 8; - order: 8; - } - .order-xl-9 { - -ms-flex-order: 9; - order: 9; - } - .order-xl-10 { - -ms-flex-order: 10; - order: 10; - } - .order-xl-11 { - -ms-flex-order: 11; - order: 11; - } - .order-xl-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 1rem; - background-color: transparent; -} - -.table th, -.table td { - padding: 0.75rem; - vertical-align: top; - border-top: 1px solid #dee2e6; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; -} - -.table tbody + tbody { - border-top: 2px solid #dee2e6; -} - -.table .table { - background-color: #fff; -} - -.table-sm th, -.table-sm td { - padding: 0.3rem; -} - -.table-bordered { - border: 1px solid #dee2e6; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #dee2e6; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-borderless th, -.table-borderless td, -.table-borderless thead th, -.table-borderless tbody + tbody { - border: 0; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} - -.table-hover tbody tr:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-primary, -.table-primary > th, -.table-primary > td { - background-color: #b8daff; -} - -.table-hover .table-primary:hover { - background-color: #9fcdff; -} - -.table-hover .table-primary:hover > td, -.table-hover .table-primary:hover > th { - background-color: #9fcdff; -} - -.table-secondary, -.table-secondary > th, -.table-secondary > td { - background-color: #d6d8db; -} - -.table-hover .table-secondary:hover { - background-color: #c8cbcf; -} - -.table-hover .table-secondary:hover > td, -.table-hover .table-secondary:hover > th { - background-color: #c8cbcf; -} - -.table-success, -.table-success > th, -.table-success > td { - background-color: #c3e6cb; -} - -.table-hover .table-success:hover { - background-color: #b1dfbb; -} - -.table-hover .table-success:hover > td, -.table-hover .table-success:hover > th { - background-color: #b1dfbb; -} - -.table-info, -.table-info > th, -.table-info > td { - background-color: #bee5eb; -} - -.table-hover .table-info:hover { - background-color: #abdde5; -} - -.table-hover .table-info:hover > td, -.table-hover .table-info:hover > th { - background-color: #abdde5; -} - -.table-warning, -.table-warning > th, -.table-warning > td { - background-color: #ffeeba; -} - -.table-hover .table-warning:hover { - background-color: #ffe8a1; -} - -.table-hover .table-warning:hover > td, -.table-hover .table-warning:hover > th { - background-color: #ffe8a1; -} - -.table-danger, -.table-danger > th, -.table-danger > td { - background-color: #f5c6cb; -} - -.table-hover .table-danger:hover { - background-color: #f1b0b7; -} - -.table-hover .table-danger:hover > td, -.table-hover .table-danger:hover > th { - background-color: #f1b0b7; -} - -.table-light, -.table-light > th, -.table-light > td { - background-color: #fdfdfe; -} - -.table-hover .table-light:hover { - background-color: #ececf6; -} - -.table-hover .table-light:hover > td, -.table-hover .table-light:hover > th { - background-color: #ececf6; -} - -.table-dark, -.table-dark > th, -.table-dark > td { - background-color: #c6c8ca; -} - -.table-hover .table-dark:hover { - background-color: #b9bbbe; -} - -.table-hover .table-dark:hover > td, -.table-hover .table-dark:hover > th { - background-color: #b9bbbe; -} - -.table-active, -.table-active > th, -.table-active > td { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover > td, -.table-hover .table-active:hover > th { - background-color: rgba(0, 0, 0, 0.075); -} - -.table .thead-dark th { - color: #fff; - background-color: #212529; - border-color: #32383e; -} - -.table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.table-dark { - color: #fff; - background-color: #212529; -} - -.table-dark th, -.table-dark td, -.table-dark thead th { - border-color: #32383e; -} - -.table-dark.table-bordered { - border: 0; -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, 0.05); -} - -.table-dark.table-hover tbody tr:hover { - background-color: rgba(255, 255, 255, 0.075); -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .table-responsive-sm > .table-bordered { - border: 0; - } -} - -@media (max-width: 767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .table-responsive-md > .table-bordered { - border: 0; - } -} - -@media (max-width: 991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .table-responsive-lg > .table-bordered { - border: 0; - } -} - -@media (max-width: 1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .table-responsive-xl > .table-bordered { - border: 0; - } -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; -} - -.table-responsive > .table-bordered { - border: 0; -} - -.form-control { - display: block; - width: 100%; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - color: #495057; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media screen and (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:disabled, .form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} - -select.form-control:not([size]):not([multiple]) { - height: calc(2.25rem + 2px); -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.form-control-file, -.form-control-range { - display: block; - width: 100%; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.875rem; - line-height: 1.5; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: 0.375rem; - padding-bottom: 0.375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} - -.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, -.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text, -.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, -.input-group-sm > .input-group-prepend > .form-control-plaintext.btn, -.input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, -.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, -.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, -.input-group-lg > .input-group-prepend > .form-control-plaintext.btn, -.input-group-lg > .input-group-append > .form-control-plaintext.btn { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm, .input-group-sm > .form-control, -.input-group-sm > .input-group-prepend > .input-group-text, -.input-group-sm > .input-group-append > .input-group-text, -.input-group-sm > .input-group-prepend > .btn, -.input-group-sm > .input-group-append > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), -.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), -.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), -.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), -.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) { - height: calc(1.8125rem + 2px); -} - -.form-control-lg, .input-group-lg > .form-control, -.input-group-lg > .input-group-prepend > .input-group-text, -.input-group-lg > .input-group-append > .input-group-text, -.input-group-lg > .input-group-prepend > .btn, -.input-group-lg > .input-group-append > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), -.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), -.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), -.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), -.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) { - height: calc(2.875rem + 2px); -} - -.form-group { - margin-bottom: 1rem; -} - -.form-text { - display: block; - margin-top: 0.25rem; -} - -.form-row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; -} - -.form-row > .col, -.form-row > [class*="col-"] { - padding-right: 5px; - padding-left: 5px; -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem; -} - -.form-check-input { - position: absolute; - margin-top: 0.3rem; - margin-left: -1.25rem; -} - -.form-check-input:disabled ~ .form-check-label { - color: #6c757d; -} - -.form-check-label { - margin-bottom: 0; -} - -.form-check-inline { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - padding-left: 0; - margin-right: 0.75rem; -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: 0.3125rem; - margin-left: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #28a745; -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #fff; - background-color: rgba(40, 167, 69, 0.8); - border-radius: .2rem; -} - -.was-validated .form-control:valid, .form-control.is-valid, .was-validated -.custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; -} - -.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated -.custom-select:valid:focus, -.custom-select.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .form-control:valid ~ .valid-feedback, -.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, -.form-control.is-valid ~ .valid-tooltip, .was-validated -.custom-select:valid ~ .valid-feedback, -.was-validated -.custom-select:valid ~ .valid-tooltip, -.custom-select.is-valid ~ .valid-feedback, -.custom-select.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { - color: #28a745; -} - -.was-validated .form-check-input:valid ~ .valid-feedback, -.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, -.form-check-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { - color: #28a745; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - background-color: #71dd8a; -} - -.was-validated .custom-control-input:valid ~ .valid-feedback, -.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, -.custom-control-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { - background-color: #34ce57; -} - -.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before { - border-color: inherit; -} - -.was-validated .custom-file-input:valid ~ .valid-feedback, -.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, -.custom-file-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #dc3545; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #fff; - background-color: rgba(220, 53, 69, 0.8); - border-radius: .2rem; -} - -.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated -.custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; -} - -.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated -.custom-select:invalid:focus, -.custom-select.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .form-control:invalid ~ .invalid-feedback, -.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, -.form-control.is-invalid ~ .invalid-tooltip, .was-validated -.custom-select:invalid ~ .invalid-feedback, -.was-validated -.custom-select:invalid ~ .invalid-tooltip, -.custom-select.is-invalid ~ .invalid-feedback, -.custom-select.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { - color: #dc3545; -} - -.was-validated .form-check-input:invalid ~ .invalid-feedback, -.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, -.form-check-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { - color: #dc3545; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - background-color: #efa2a9; -} - -.was-validated .custom-control-input:invalid ~ .invalid-feedback, -.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, -.custom-control-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { - background-color: #e4606d; -} - -.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before { - border-color: inherit; -} - -.was-validated .custom-file-input:invalid ~ .invalid-feedback, -.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, -.custom-file-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.form-inline { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; -} - -.form-inline .form-check { - width: 100%; -} - -@media (min-width: 576px) { - .form-inline label { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - margin-bottom: 0; - } - .form-inline .form-group { - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; - margin-bottom: 0; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-plaintext { - display: inline-block; - } - .form-inline .input-group, - .form-inline .custom-select { - width: auto; - } - .form-inline .form-check { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: auto; - padding-left: 0; - } - .form-inline .form-check-input { - position: relative; - margin-top: 0; - margin-right: 0.25rem; - margin-left: 0; - } - .form-inline .custom-control { - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - } - .form-inline .custom-control-label { - margin-bottom: 0; - } -} - -.btn { - display: inline-block; - font-weight: 400; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media screen and (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} - -.btn:hover, .btn:focus { - text-decoration: none; -} - -.btn:focus, .btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.btn.disabled, .btn:disabled { - opacity: 0.65; -} - -.btn:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { - background-image: none; -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none; -} - -.btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:hover { - color: #fff; - background-color: #0069d9; - border-color: #0062cc; -} - -.btn-primary:focus, .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-primary.disabled, .btn-primary:disabled { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, -.show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #0062cc; - border-color: #005cbf; -} - -.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:hover { - color: #fff; - background-color: #5a6268; - border-color: #545b62; -} - -.btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-secondary.disabled, .btn-secondary:disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, -.show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #545b62; - border-color: #4e555b; -} - -.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:hover { - color: #fff; - background-color: #218838; - border-color: #1e7e34; -} - -.btn-success:focus, .btn-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-success.disabled, .btn-success:disabled { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, -.show > .btn-success.dropdown-toggle { - color: #fff; - background-color: #1e7e34; - border-color: #1c7430; -} - -.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:hover { - color: #fff; - background-color: #138496; - border-color: #117a8b; -} - -.btn-info:focus, .btn-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-info.disabled, .btn-info:disabled { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, -.show > .btn-info.dropdown-toggle { - color: #fff; - background-color: #117a8b; - border-color: #10707f; -} - -.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-warning { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:hover { - color: #212529; - background-color: #e0a800; - border-color: #d39e00; -} - -.btn-warning:focus, .btn-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-warning.disabled, .btn-warning:disabled { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, -.show > .btn-warning.dropdown-toggle { - color: #212529; - background-color: #d39e00; - border-color: #c69500; -} - -.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:hover { - color: #fff; - background-color: #c82333; - border-color: #bd2130; -} - -.btn-danger:focus, .btn-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-danger.disabled, .btn-danger:disabled { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, -.show > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #bd2130; - border-color: #b21f2d; -} - -.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-light { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:hover { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; -} - -.btn-light:focus, .btn-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-light.disabled, .btn-light:disabled { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, -.show > .btn-light.dropdown-toggle { - color: #212529; - background-color: #dae0e5; - border-color: #d3d9df; -} - -.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:hover { - color: #fff; - background-color: #23272b; - border-color: #1d2124; -} - -.btn-dark:focus, .btn-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-dark.disabled, .btn-dark:disabled { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, -.show > .btn-dark.dropdown-toggle { - color: #fff; - background-color: #1d2124; - border-color: #171a1d; -} - -.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-primary { - color: #007bff; - background-color: transparent; - background-image: none; - border-color: #007bff; -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:focus, .btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-primary.disabled, .btn-outline-primary:disabled { - color: #007bff; - background-color: transparent; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, -.show > .btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-secondary { - color: #6c757d; - background-color: transparent; - background-image: none; - border-color: #6c757d; -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:focus, .btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, -.show > .btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-success { - color: #28a745; - background-color: transparent; - background-image: none; - border-color: #28a745; -} - -.btn-outline-success:hover { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:focus, .btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-success.disabled, .btn-outline-success:disabled { - color: #28a745; - background-color: transparent; -} - -.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, -.show > .btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-info { - color: #17a2b8; - background-color: transparent; - background-image: none; - border-color: #17a2b8; -} - -.btn-outline-info:hover { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:focus, .btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-info.disabled, .btn-outline-info:disabled { - color: #17a2b8; - background-color: transparent; -} - -.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, -.show > .btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-warning { - color: #ffc107; - background-color: transparent; - background-image: none; - border-color: #ffc107; -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:focus, .btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-warning.disabled, .btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, -.show > .btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-danger { - color: #dc3545; - background-color: transparent; - background-image: none; - border-color: #dc3545; -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:focus, .btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-danger.disabled, .btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, -.show > .btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-light { - color: #f8f9fa; - background-color: transparent; - background-image: none; - border-color: #f8f9fa; -} - -.btn-outline-light:hover { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:focus, .btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-light.disabled, .btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, -.show > .btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-dark { - color: #343a40; - background-color: transparent; - background-image: none; - border-color: #343a40; -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:focus, .btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-dark.disabled, .btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, -.show > .btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-link { - font-weight: 400; - color: #007bff; - background-color: transparent; -} - -.btn-link:hover { - color: #0056b3; - text-decoration: underline; - background-color: transparent; - border-color: transparent; -} - -.btn-link:focus, .btn-link.focus { - text-decoration: underline; - border-color: transparent; - box-shadow: none; -} - -.btn-link:disabled, .btn-link.disabled { - color: #6c757d; - pointer-events: none; -} - -.btn-lg, .btn-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.btn-sm, .btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 0.5rem; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - transition: opacity 0.15s linear; -} - -@media screen and (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} - -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} - -@media screen and (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropright, -.dropdown, -.dropleft { - position: relative; -} - -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} - -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; -} - -.dropdown-menu-right { - right: 0; - left: auto; -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: 0.125rem; -} - -.dropup .dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: 0.125rem; -} - -.dropright .dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-toggle::after { - vertical-align: 0; -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: 0.125rem; -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} - -.dropleft .dropdown-toggle::after { - display: none; -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - width: 0; - height: 0; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { - right: auto; - bottom: auto; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0; -} - -.dropdown-item:hover, .dropdown-item:focus { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; -} - -.dropdown-item.active, .dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff; -} - -.dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1.5rem; - margin-bottom: 0; - font-size: 0.875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1.5rem; - color: #212529; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -ms-inline-flexbox; - display: inline-flex; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - -ms-flex: 0 1 auto; - flex: 0 1 auto; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover { - z-index: 1; -} - -.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 1; -} - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group, -.btn-group-vertical .btn + .btn, -.btn-group-vertical .btn + .btn-group, -.btn-group-vertical .btn-group + .btn, -.btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.btn-toolbar .input-group { - width: auto; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.btn-group > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} - -.dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: center; - justify-content: center; -} - -.btn-group-vertical .btn, -.btn-group-vertical .btn-group { - width: 100%; -} - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.btn-group-toggle > .btn, -.btn-group-toggle > .btn-group > .btn { - margin-bottom: 0; -} - -.btn-group-toggle > .btn input[type="radio"], -.btn-group-toggle > .btn input[type="checkbox"], -.btn-group-toggle > .btn-group > .btn input[type="radio"], -.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} - -.input-group { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100%; -} - -.input-group > .form-control, -.input-group > .custom-select, -.input-group > .custom-file { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0; -} - -.input-group > .form-control:focus, -.input-group > .custom-select:focus, -.input-group > .custom-file:focus { - z-index: 3; -} - -.input-group > .form-control + .form-control, -.input-group > .form-control + .custom-select, -.input-group > .form-control + .custom-file, -.input-group > .custom-select + .form-control, -.input-group > .custom-select + .custom-select, -.input-group > .custom-select + .custom-file, -.input-group > .custom-file + .form-control, -.input-group > .custom-file + .custom-select, -.input-group > .custom-file + .custom-file { - margin-left: -1px; -} - -.input-group > .form-control:not(:last-child), -.input-group > .custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .form-control:not(:first-child), -.input-group > .custom-select:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group > .custom-file { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; -} - -.input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .custom-file:not(:first-child) .custom-file-label, -.input-group > .custom-file:not(:first-child) .custom-file-label::after { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group-prepend, -.input-group-append { - display: -ms-flexbox; - display: flex; -} - -.input-group-prepend .btn, -.input-group-append .btn { - position: relative; - z-index: 2; -} - -.input-group-prepend .btn + .btn, -.input-group-prepend .btn + .input-group-text, -.input-group-prepend .input-group-text + .input-group-text, -.input-group-prepend .input-group-text + .btn, -.input-group-append .btn + .btn, -.input-group-append .btn + .input-group-text, -.input-group-append .input-group-text + .input-group-text, -.input-group-append .input-group-text + .btn { - margin-left: -1px; -} - -.input-group-prepend { - margin-right: -1px; -} - -.input-group-append { - margin-left: -1px; -} - -.input-group-text { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: 0.375rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-text input[type="radio"], -.input-group-text input[type="checkbox"] { - margin-top: 0; -} - -.input-group > .input-group-prepend > .btn, -.input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, -.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .input-group-append > .btn, -.input-group > .input-group-append > .input-group-text, -.input-group > .input-group-prepend:not(:first-child) > .btn, -.input-group > .input-group-prepend:not(:first-child) > .input-group-text, -.input-group > .input-group-prepend:first-child > .btn:not(:first-child), -.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.custom-control { - position: relative; - display: block; - min-height: 1.5rem; - padding-left: 1.5rem; -} - -.custom-control-inline { - display: -ms-inline-flexbox; - display: inline-flex; - margin-right: 1rem; -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0; -} - -.custom-control-input:checked ~ .custom-control-label::before { - color: #fff; - background-color: #007bff; -} - -.custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-control-input:active ~ .custom-control-label::before { - color: #fff; - background-color: #b3d7ff; -} - -.custom-control-input:disabled ~ .custom-control-label { - color: #6c757d; -} - -.custom-control-input:disabled ~ .custom-control-label::before { - background-color: #e9ecef; -} - -.custom-control-label { - margin-bottom: 0; -} - -.custom-control-label::before { - position: absolute; - top: 0.25rem; - left: 0; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - content: ""; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: #dee2e6; -} - -.custom-control-label::after { - position: absolute; - top: 0.25rem; - left: 0; - display: block; - width: 1rem; - height: 1rem; - content: ""; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; -} - -.custom-checkbox .custom-control-label::before { - border-radius: 0.25rem; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { - background-color: #007bff; -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); -} - -.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-radio .custom-control-label::before { - border-radius: 50%; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); -} - -.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(2.25rem + 2px); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); -} - -.custom-select:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.custom-select[multiple], .custom-select[size]:not([size="1"]) { - height: auto; - padding-right: 0.75rem; - background-image: none; -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef; -} - -.custom-select::-ms-expand { - opacity: 0; -} - -.custom-select-sm { - height: calc(1.8125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; -} - -.custom-select-lg { - height: calc(2.875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(2.25rem + 2px); - margin-bottom: 0; -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(2.25rem + 2px); - margin: 0; - opacity: 0; -} - -.custom-file-input:focus ~ .custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-file-input:focus ~ .custom-file-label::after { - border-color: #80bdff; -} - -.custom-file-input:lang(en) ~ .custom-file-label::after { - content: "Browse"; -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(2.25rem + 2px); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(calc(2.25rem + 2px) - 1px * 2); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - content: "Browse"; - background-color: #e9ecef; - border-left: 1px solid #ced4da; - border-radius: 0 0.25rem 0.25rem 0; -} - -.custom-range { - width: 100%; - padding-left: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-range:focus { - outline: none; -} - -.custom-range::-moz-focus-outer { - border: 0; -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-appearance: none; - appearance: none; -} - -.custom-range::-webkit-slider-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -moz-appearance: none; - appearance: none; -} - -.custom-range::-moz-range-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - appearance: none; -} - -.custom-range::-ms-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-ms-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: 0.5rem; -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem; -} - -.nav { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: 0.5rem 1rem; -} - -.nav-link:hover, .nav-link:focus { - text-decoration: none; -} - -.nav-link.disabled { - color: #6c757d; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} - -.nav-tabs .nav-item { - margin-bottom: -1px; -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills .nav-link { - border-radius: 0.25rem; -} - -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: #fff; - background-color: #007bff; -} - -.nav-fill .nav-item { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - text-align: center; -} - -.nav-justified .nav-item { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - text-align: center; -} - -.tab-content > .tab-pane { - display: none; -} - -.tab-content > .active { - display: block; -} - -.navbar { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 0.5rem 1rem; -} - -.navbar > .container, -.navbar > .container-fluid { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.navbar-brand { - display: inline-block; - padding-top: 0.3125rem; - padding-bottom: 0.3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap; -} - -.navbar-brand:hover, .navbar-brand:focus { - text-decoration: none; -} - -.navbar-nav { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0; -} - -.navbar-nav .dropdown-menu { - position: static; - float: none; -} - -.navbar-text { - display: inline-block; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.navbar-collapse { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-align: center; - align-items: center; -} - -.navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.navbar-toggler:hover, .navbar-toggler:focus { - text-decoration: none; -} - -.navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} - -@media (max-width: 575.98px) { - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 576px) { - .navbar-expand-sm { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-sm .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-sm .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-sm .navbar-toggler { - display: none; - } -} - -@media (max-width: 767.98px) { - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 768px) { - .navbar-expand-md { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-md .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-md .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-md .navbar-toggler { - display: none; - } -} - -@media (max-width: 991.98px) { - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 992px) { - .navbar-expand-lg { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-lg .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-lg .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-lg .navbar-toggler { - display: none; - } -} - -@media (max-width: 1199.98px) { - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 1200px) { - .navbar-expand-xl { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-xl .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-xl .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-xl .navbar-toggler { - display: none; - } -} - -.navbar-expand { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid { - padding-right: 0; - padding-left: 0; -} - -.navbar-expand .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} - -.navbar-expand .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; -} - -.navbar-expand .navbar-toggler { - display: none; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} - -.navbar-light .navbar-nav .show > .nav-link, -.navbar-light .navbar-nav .active > .nav-link, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.5); - border-color: rgba(0, 0, 0, 0.1); -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #fff; -} - -.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { - color: #fff; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} - -.navbar-dark .navbar-nav .show > .nav-link, -.navbar-dark .navbar-nav .active > .nav-link, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-text a { - color: #fff; -} - -.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { - color: #fff; -} - -.card { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; -} - -.card > hr { - margin-right: 0; - margin-left: 0; -} - -.card > .list-group:first-child .list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.card > .list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.card-body { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1.25rem; -} - -.card-title { - margin-bottom: 0.75rem; -} - -.card-subtitle { - margin-top: -0.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link + .card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: 0.75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; -} - -.card-header + .list-group .list-group-item:first-child { - border-top: 0; -} - -.card-footer { - padding: 0.75rem 1.25rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); -} - -.card-header-tabs { - margin-right: -0.625rem; - margin-bottom: -0.75rem; - margin-left: -0.625rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.625rem; - margin-left: -0.625rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; -} - -.card-img { - width: 100%; - border-radius: calc(0.25rem - 1px); -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card-deck { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; -} - -.card-deck .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-deck { - -ms-flex-flow: row wrap; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px; - } - .card-deck .card { - display: -ms-flexbox; - display: flex; - -ms-flex: 1 0 0%; - flex: 1 0 0%; - -ms-flex-direction: column; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px; - } -} - -.card-group { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; -} - -.card-group > .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-group { - -ms-flex-flow: row wrap; - flex-flow: row wrap; - } - .card-group > .card { - -ms-flex: 1 0 0%; - flex: 1 0 0%; - margin-bottom: 0; - } - .card-group > .card + .card { - margin-left: 0; - border-left: 0; - } - .card-group > .card:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group > .card:first-child .card-img-top, - .card-group > .card:first-child .card-header { - border-top-right-radius: 0; - } - .card-group > .card:first-child .card-img-bottom, - .card-group > .card:first-child .card-footer { - border-bottom-right-radius: 0; - } - .card-group > .card:last-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group > .card:last-child .card-img-top, - .card-group > .card:last-child .card-header { - border-top-left-radius: 0; - } - .card-group > .card:last-child .card-img-bottom, - .card-group > .card:last-child .card-footer { - border-bottom-left-radius: 0; - } - .card-group > .card:only-child { - border-radius: 0.25rem; - } - .card-group > .card:only-child .card-img-top, - .card-group > .card:only-child .card-header { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; - } - .card-group > .card:only-child .card-img-bottom, - .card-group > .card:only-child .card-footer { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; - } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { - border-radius: 0; - } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { - border-radius: 0; - } -} - -.card-columns .card { - margin-bottom: 0.75rem; -} - -@media (min-width: 576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1; - } - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.accordion .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; -} - -.accordion .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; -} - -.accordion .card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.accordion .card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.breadcrumb { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.5rem; -} - -.breadcrumb-item + .breadcrumb-item::before { - display: inline-block; - padding-right: 0.5rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: none; -} - -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: -ms-flexbox; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 0.25rem; -} - -.page-link { - position: relative; - display: block; - padding: 0.5rem 0.75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6; -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.page-link:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.page-item.active .page-link { - z-index: 1; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5; -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.25em 0.4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; -} - -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.badge-pill { - padding-right: 0.6em; - padding-left: 0.6em; - border-radius: 10rem; -} - -.badge-primary { - color: #fff; - background-color: #007bff; -} - -.badge-primary[href]:hover, .badge-primary[href]:focus { - color: #fff; - text-decoration: none; - background-color: #0062cc; -} - -.badge-secondary { - color: #fff; - background-color: #6c757d; -} - -.badge-secondary[href]:hover, .badge-secondary[href]:focus { - color: #fff; - text-decoration: none; - background-color: #545b62; -} - -.badge-success { - color: #fff; - background-color: #28a745; -} - -.badge-success[href]:hover, .badge-success[href]:focus { - color: #fff; - text-decoration: none; - background-color: #1e7e34; -} - -.badge-info { - color: #fff; - background-color: #17a2b8; -} - -.badge-info[href]:hover, .badge-info[href]:focus { - color: #fff; - text-decoration: none; - background-color: #117a8b; -} - -.badge-warning { - color: #212529; - background-color: #ffc107; -} - -.badge-warning[href]:hover, .badge-warning[href]:focus { - color: #212529; - text-decoration: none; - background-color: #d39e00; -} - -.badge-danger { - color: #fff; - background-color: #dc3545; -} - -.badge-danger[href]:hover, .badge-danger[href]:focus { - color: #fff; - text-decoration: none; - background-color: #bd2130; -} - -.badge-light { - color: #212529; - background-color: #f8f9fa; -} - -.badge-light[href]:hover, .badge-light[href]:focus { - color: #212529; - text-decoration: none; - background-color: #dae0e5; -} - -.badge-dark { - color: #fff; - background-color: #343a40; -} - -.badge-dark[href]:hover, .badge-dark[href]:focus { - color: #fff; - text-decoration: none; - background-color: #1d2124; -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 0.3rem; -} - -@media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} - -.alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 4rem; -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} - -.alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} - -.alert-primary hr { - border-top-color: #9fcdff; -} - -.alert-primary .alert-link { - color: #002752; -} - -.alert-secondary { - color: #383d41; - background-color: #e2e3e5; - border-color: #d6d8db; -} - -.alert-secondary hr { - border-top-color: #c8cbcf; -} - -.alert-secondary .alert-link { - color: #202326; -} - -.alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} - -.alert-success hr { - border-top-color: #b1dfbb; -} - -.alert-success .alert-link { - color: #0b2e13; -} - -.alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} - -.alert-info hr { - border-top-color: #abdde5; -} - -.alert-info .alert-link { - color: #062c33; -} - -.alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} - -.alert-warning hr { - border-top-color: #ffe8a1; -} - -.alert-warning .alert-link { - color: #533f03; -} - -.alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} - -.alert-danger hr { - border-top-color: #f1b0b7; -} - -.alert-danger .alert-link { - color: #491217; -} - -.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} - -.alert-light hr { - border-top-color: #ececf6; -} - -.alert-light .alert-link { - color: #686868; -} - -.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -.alert-dark hr { - border-top-color: #b9bbbe; -} - -.alert-dark .alert-link { - color: #040505; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -.progress { - display: -ms-flexbox; - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.75rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.progress-bar { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-pack: center; - justify-content: center; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - transition: width 0.6s ease; -} - -@media screen and (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; -} - -.media { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; -} - -.media-body { - -ms-flex: 1; - flex: 1; -} - -.list-group { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} - -.list-group-item-action:hover, .list-group-item-action:focus { - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} - -.list-group-item { - position: relative; - display: block; - padding: 0.75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} - -.list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.list-group-item:hover, .list-group-item:focus { - z-index: 1; - text-decoration: none; -} - -.list-group-item.disabled, .list-group-item:disabled { - color: #6c757d; - background-color: #fff; -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0; -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0; -} - -.list-group-flush:last-child .list-group-item:last-child { - border-bottom: 0; -} - -.list-group-item-primary { - color: #004085; - background-color: #b8daff; -} - -.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #004085; - background-color: #9fcdff; -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #004085; - border-color: #004085; -} - -.list-group-item-secondary { - color: #383d41; - background-color: #d6d8db; -} - -.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #383d41; - background-color: #c8cbcf; -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #383d41; - border-color: #383d41; -} - -.list-group-item-success { - color: #155724; - background-color: #c3e6cb; -} - -.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { - color: #155724; - background-color: #b1dfbb; -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #155724; - border-color: #155724; -} - -.list-group-item-info { - color: #0c5460; - background-color: #bee5eb; -} - -.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { - color: #0c5460; - background-color: #abdde5; -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #0c5460; - border-color: #0c5460; -} - -.list-group-item-warning { - color: #856404; - background-color: #ffeeba; -} - -.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { - color: #856404; - background-color: #ffe8a1; -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #856404; - border-color: #856404; -} - -.list-group-item-danger { - color: #721c24; - background-color: #f5c6cb; -} - -.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { - color: #721c24; - background-color: #f1b0b7; -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #721c24; - border-color: #721c24; -} - -.list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} - -.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { - color: #818182; - background-color: #ececf6; -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #818182; - border-color: #818182; -} - -.list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} - -.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { - color: #1b1e21; - background-color: #b9bbbe; -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #1b1e21; - border-color: #1b1e21; -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5; -} - -.close:hover, .close:focus { - color: #000; - text-decoration: none; - opacity: .75; -} - -.close:not(:disabled):not(.disabled) { - cursor: pointer; -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - outline: 0; -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; -} - -.modal.fade .modal-dialog { - transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; - transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; - -webkit-transform: translate(0, -25%); - transform: translate(0, -25%); -} - -@media screen and (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} - -.modal.show .modal-dialog { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); -} - -.modal-dialog-centered { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - min-height: calc(100% - (0.5rem * 2)); -} - -.modal-content { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop.show { - opacity: 0.5; -} - -.modal-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 1rem; - border-bottom: 1px solid #e9ecef; - border-top-left-radius: 0.3rem; - border-top-right-radius: 0.3rem; -} - -.modal-header .close { - padding: 1rem; - margin: -1rem -1rem -1rem auto; -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5; -} - -.modal-body { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1rem; -} - -.modal-footer { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #e9ecef; -} - -.modal-footer > :not(:first-child) { - margin-left: .25rem; -} - -.modal-footer > :not(:last-child) { - margin-right: .25rem; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); - } - .modal-sm { - max-width: 300px; - } -} - -@media (min-width: 992px) { - .modal-lg { - max-width: 800px; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.875rem; - word-wrap: break-word; - opacity: 0; -} - -.tooltip.show { - opacity: 0.9; -} - -.tooltip .arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} - -.tooltip .arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { - padding: 0.4rem 0; -} - -.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { - bottom: 0; -} - -.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { - top: 0; - border-width: 0.4rem 0.4rem 0; - border-top-color: #000; -} - -.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { - padding: 0 0.4rem; -} - -.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { - left: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { - right: 0; - border-width: 0.4rem 0.4rem 0.4rem 0; - border-right-color: #000; -} - -.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { - padding: 0.4rem 0; -} - -.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { - top: 0; -} - -.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { - bottom: 0; - border-width: 0 0.4rem 0.4rem; - border-bottom-color: #000; -} - -.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { - padding: 0 0.4rem; -} - -.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { - right: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { - left: 0; - border-width: 0.4rem 0 0.4rem 0.4rem; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 0.25rem 0.5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; - margin: 0 0.3rem; -} - -.popover .arrow::before, .popover .arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top, .bs-popover-auto[x-placement^="top"] { - margin-bottom: 0.5rem; -} - -.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { - bottom: calc((0.5rem + 1px) * -1); -} - -.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, -.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { - border-width: 0.5rem 0.5rem 0; -} - -.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: 0; - border-top-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { - bottom: 1px; - border-top-color: #fff; -} - -.bs-popover-right, .bs-popover-auto[x-placement^="right"] { - margin-left: 0.5rem; -} - -.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { - left: calc((0.5rem + 1px) * -1); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, -.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { - border-width: 0.5rem 0.5rem 0.5rem 0; -} - -.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { - left: 0; - border-right-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { - left: 1px; - border-right-color: #fff; -} - -.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { - margin-top: 0.5rem; -} - -.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { - top: calc((0.5rem + 1px) * -1); -} - -.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, -.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { - border-width: 0 0.5rem 0.5rem 0.5rem; -} - -.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: 0; - border-bottom-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { - top: 1px; - border-bottom-color: #fff; -} - -.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f7f7f7; -} - -.bs-popover-left, .bs-popover-auto[x-placement^="left"] { - margin-right: 0.5rem; -} - -.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { - right: calc((0.5rem + 1px) * -1); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, -.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { - border-width: 0.5rem 0 0.5rem 0.5rem; -} - -.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { - right: 0; - border-left-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { - right: 1px; - border-left-color: #fff; -} - -.popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - color: inherit; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-item { - position: relative; - display: none; - -ms-flex-align: center; - align-items: center; - width: 100%; - transition: -webkit-transform 0.6s ease; - transition: transform 0.6s ease; - transition: transform 0.6s ease, -webkit-transform 0.6s ease; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; -} - -@media screen and (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; -} - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - -webkit-transform: translateX(0); - transform: translateX(0); -} - -@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.carousel-item-next, -.active.carousel-item-right { - -webkit-transform: translateX(100%); - transform: translateX(100%); -} - -@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { - .carousel-item-next, - .active.carousel-item-right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.carousel-item-prev, -.active.carousel-item-left { - -webkit-transform: translateX(-100%); - transform: translateX(-100%); -} - -@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { - .carousel-item-prev, - .active.carousel-item-left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-duration: .6s; - transition-property: opacity; -} - -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right { - opacity: 1; -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - opacity: 0; -} - -.carousel-fade .carousel-item-next, -.carousel-fade .carousel-item-prev, -.carousel-fade .carousel-item.active, -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-prev { - -webkit-transform: translateX(0); - transform: translateX(0); -} - -@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { - .carousel-fade .carousel-item-next, - .carousel-fade .carousel-item-prev, - .carousel-fade .carousel-item.active, - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-prev { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: 0.5; -} - -.carousel-control-prev:hover, .carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 20px; - height: 20px; - background: transparent no-repeat center center; - background-size: 100% 100%; -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 10px; - left: 0; - z-index: 15; - display: -ms-flexbox; - display: flex; - -ms-flex-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none; -} - -.carousel-indicators li { - position: relative; - -ms-flex: 0 1 auto; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - background-color: rgba(255, 255, 255, 0.5); -} - -.carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} - -.carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} - -.carousel-indicators .active { - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; -} - -.align-baseline { - vertical-align: baseline !important; -} - -.align-top { - vertical-align: top !important; -} - -.align-middle { - vertical-align: middle !important; -} - -.align-bottom { - vertical-align: bottom !important; -} - -.align-text-bottom { - vertical-align: text-bottom !important; -} - -.align-text-top { - vertical-align: text-top !important; -} - -.bg-primary { - background-color: #007bff !important; -} - -a.bg-primary:hover, a.bg-primary:focus, -button.bg-primary:hover, -button.bg-primary:focus { - background-color: #0062cc !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -a.bg-secondary:hover, a.bg-secondary:focus, -button.bg-secondary:hover, -button.bg-secondary:focus { - background-color: #545b62 !important; -} - -.bg-success { - background-color: #28a745 !important; -} - -a.bg-success:hover, a.bg-success:focus, -button.bg-success:hover, -button.bg-success:focus { - background-color: #1e7e34 !important; -} - -.bg-info { - background-color: #17a2b8 !important; -} - -a.bg-info:hover, a.bg-info:focus, -button.bg-info:hover, -button.bg-info:focus { - background-color: #117a8b !important; -} - -.bg-warning { - background-color: #ffc107 !important; -} - -a.bg-warning:hover, a.bg-warning:focus, -button.bg-warning:hover, -button.bg-warning:focus { - background-color: #d39e00 !important; -} - -.bg-danger { - background-color: #dc3545 !important; -} - -a.bg-danger:hover, a.bg-danger:focus, -button.bg-danger:hover, -button.bg-danger:focus { - background-color: #bd2130 !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -a.bg-light:hover, a.bg-light:focus, -button.bg-light:hover, -button.bg-light:focus { - background-color: #dae0e5 !important; -} - -.bg-dark { - background-color: #343a40 !important; -} - -a.bg-dark:hover, a.bg-dark:focus, -button.bg-dark:hover, -button.bg-dark:focus { - background-color: #1d2124 !important; -} - -.bg-white { - background-color: #fff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-right { - border-right: 1px solid #dee2e6 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-left { - border-left: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-right-0 { - border-right: 0 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-left-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #007bff !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #28a745 !important; -} - -.border-info { - border-color: #17a2b8 !important; -} - -.border-warning { - border-color: #ffc107 !important; -} - -.border-danger { - border-color: #dc3545 !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #343a40 !important; -} - -.border-white { - border-color: #fff !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-right { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-left { - border-top-left-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: -ms-flexbox !important; - display: flex !important; -} - -.d-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-sm-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-md-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-lg-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-xl-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: -ms-flexbox !important; - display: flex !important; - } - .d-print-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden; -} - -.embed-responsive::before { - display: block; - content: ""; -} - -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} - -.embed-responsive-21by9::before { - padding-top: 42.857143%; -} - -.embed-responsive-16by9::before { - padding-top: 56.25%; -} - -.embed-responsive-4by3::before { - padding-top: 75%; -} - -.embed-responsive-1by1::before { - padding-top: 100%; -} - -.flex-row { - -ms-flex-direction: row !important; - flex-direction: row !important; -} - -.flex-column { - -ms-flex-direction: column !important; - flex-direction: column !important; -} - -.flex-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; -} - -.flex-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; -} - -.flex-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; -} - -.flex-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; -} - -.flex-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; -} - -.flex-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; -} - -.justify-content-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; -} - -.justify-content-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; -} - -.justify-content-center { - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.justify-content-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; -} - -.justify-content-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; -} - -.align-items-start { - -ms-flex-align: start !important; - align-items: flex-start !important; -} - -.align-items-end { - -ms-flex-align: end !important; - align-items: flex-end !important; -} - -.align-items-center { - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-items-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; -} - -.align-items-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; -} - -.align-content-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; -} - -.align-content-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-content-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; -} - -.align-content-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; -} - -.align-content-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; -} - -.align-self-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; -} - -.align-self-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; -} - -.align-self-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - align-self: center !important; -} - -.align-self-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; -} - -.align-self-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-sm-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-sm-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-sm-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-sm-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-sm-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-sm-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-sm-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-sm-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-sm-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-sm-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-sm-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-sm-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-sm-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-sm-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-sm-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-sm-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-sm-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-sm-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-sm-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-sm-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-sm-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-sm-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-sm-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-sm-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-sm-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-sm-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-sm-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-md-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-md-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-md-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-md-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-md-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-md-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-md-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-md-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-md-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-md-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-md-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-md-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-md-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-md-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-md-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-md-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-md-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-md-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-md-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-md-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-md-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-md-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-md-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-md-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-md-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-md-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-md-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-md-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-md-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-lg-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-lg-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-lg-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-lg-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-lg-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-lg-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-lg-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-lg-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-lg-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-lg-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-lg-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-lg-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-lg-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-lg-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-lg-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-lg-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-lg-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-lg-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-lg-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-lg-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-lg-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-lg-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-lg-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-lg-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-lg-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-lg-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-lg-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-xl-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-xl-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-xl-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-xl-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-xl-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-xl-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-xl-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-xl-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-xl-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-xl-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-xl-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-xl-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-xl-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-xl-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-xl-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-xl-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-xl-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-xl-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-xl-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-xl-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-xl-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-xl-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-xl-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-xl-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-xl-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-xl-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-xl-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -.float-left { - float: left !important; -} - -.float-right { - float: right !important; -} - -.float-none { - float: none !important; -} - -@media (min-width: 576px) { - .float-sm-left { - float: left !important; - } - .float-sm-right { - float: right !important; - } - .float-sm-none { - float: none !important; - } -} - -@media (min-width: 768px) { - .float-md-left { - float: left !important; - } - .float-md-right { - float: right !important; - } - .float-md-none { - float: none !important; - } -} - -@media (min-width: 992px) { - .float-lg-left { - float: left !important; - } - .float-lg-right { - float: right !important; - } - .float-lg-none { - float: none !important; - } -} - -@media (min-width: 1200px) { - .float-xl-left { - float: left !important; - } - .float-xl-right { - float: right !important; - } - .float-xl-none { - float: none !important; - } -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} - -@supports ((position: -webkit-sticky) or (position: sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.w-25 { - width: 25% !important; -} - -.w-50 { - width: 50% !important; -} - -.w-75 { - width: 75% !important; -} - -.w-100 { - width: 100% !important; -} - -.w-auto { - width: auto !important; -} - -.h-25 { - height: 25% !important; -} - -.h-50 { - height: 50% !important; -} - -.h-75 { - height: 75% !important; -} - -.h-100 { - height: 100% !important; -} - -.h-auto { - height: auto !important; -} - -.mw-100 { - max-width: 100% !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.m-0 { - margin: 0 !important; -} - -.mt-0, -.my-0 { - margin-top: 0 !important; -} - -.mr-0, -.mx-0 { - margin-right: 0 !important; -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important; -} - -.ml-0, -.mx-0 { - margin-left: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1, -.my-1 { - margin-top: 0.25rem !important; -} - -.mr-1, -.mx-1 { - margin-right: 0.25rem !important; -} - -.mb-1, -.my-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1, -.mx-1 { - margin-left: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2, -.my-2 { - margin-top: 0.5rem !important; -} - -.mr-2, -.mx-2 { - margin-right: 0.5rem !important; -} - -.mb-2, -.my-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2, -.mx-2 { - margin-left: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.mt-3, -.my-3 { - margin-top: 1rem !important; -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important; -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important; -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important; -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important; -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important; -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.mt-5, -.my-5 { - margin-top: 3rem !important; -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important; -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important; -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0, -.py-0 { - padding-top: 0 !important; -} - -.pr-0, -.px-0 { - padding-right: 0 !important; -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important; -} - -.pl-0, -.px-0 { - padding-left: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1, -.py-1 { - padding-top: 0.25rem !important; -} - -.pr-1, -.px-1 { - padding-right: 0.25rem !important; -} - -.pb-1, -.py-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1, -.px-1 { - padding-left: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2, -.py-2 { - padding-top: 0.5rem !important; -} - -.pr-2, -.px-2 { - padding-right: 0.5rem !important; -} - -.pb-2, -.py-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2, -.px-2 { - padding-left: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.pt-3, -.py-3 { - padding-top: 1rem !important; -} - -.pr-3, -.px-3 { - padding-right: 1rem !important; -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important; -} - -.pl-3, -.px-3 { - padding-left: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important; -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.pt-5, -.py-5 { - padding-top: 3rem !important; -} - -.pr-5, -.px-5 { - padding-right: 3rem !important; -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important; -} - -.pl-5, -.px-5 { - padding-left: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto, -.my-auto { - margin-top: auto !important; -} - -.mr-auto, -.mx-auto { - margin-right: auto !important; -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important; -} - -.ml-auto, -.mx-auto { - margin-left: auto !important; -} - -@media (min-width: 576px) { - .m-sm-0 { - margin: 0 !important; - } - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important; - } - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important; - } - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important; - } - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .mt-sm-1, - .my-sm-1 { - margin-top: 0.25rem !important; - } - .mr-sm-1, - .mx-sm-1 { - margin-right: 0.25rem !important; - } - .mb-sm-1, - .my-sm-1 { - margin-bottom: 0.25rem !important; - } - .ml-sm-1, - .mx-sm-1 { - margin-left: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .mt-sm-2, - .my-sm-2 { - margin-top: 0.5rem !important; - } - .mr-sm-2, - .mx-sm-2 { - margin-right: 0.5rem !important; - } - .mb-sm-2, - .my-sm-2 { - margin-bottom: 0.5rem !important; - } - .ml-sm-2, - .mx-sm-2 { - margin-left: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important; - } - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important; - } - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important; - } - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important; - } - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important; - } - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important; - } - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important; - } - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important; - } - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important; - } - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important; - } - .p-sm-0 { - padding: 0 !important; - } - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important; - } - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important; - } - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important; - } - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .pt-sm-1, - .py-sm-1 { - padding-top: 0.25rem !important; - } - .pr-sm-1, - .px-sm-1 { - padding-right: 0.25rem !important; - } - .pb-sm-1, - .py-sm-1 { - padding-bottom: 0.25rem !important; - } - .pl-sm-1, - .px-sm-1 { - padding-left: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .pt-sm-2, - .py-sm-2 { - padding-top: 0.5rem !important; - } - .pr-sm-2, - .px-sm-2 { - padding-right: 0.5rem !important; - } - .pb-sm-2, - .py-sm-2 { - padding-bottom: 0.5rem !important; - } - .pl-sm-2, - .px-sm-2 { - padding-left: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important; - } - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important; - } - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important; - } - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important; - } - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important; - } - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important; - } - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important; - } - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important; - } - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important; - } - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important; - } - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important; - } - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important; - } -} - -@media (min-width: 768px) { - .m-md-0 { - margin: 0 !important; - } - .mt-md-0, - .my-md-0 { - margin-top: 0 !important; - } - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important; - } - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important; - } - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .mt-md-1, - .my-md-1 { - margin-top: 0.25rem !important; - } - .mr-md-1, - .mx-md-1 { - margin-right: 0.25rem !important; - } - .mb-md-1, - .my-md-1 { - margin-bottom: 0.25rem !important; - } - .ml-md-1, - .mx-md-1 { - margin-left: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .mt-md-2, - .my-md-2 { - margin-top: 0.5rem !important; - } - .mr-md-2, - .mx-md-2 { - margin-right: 0.5rem !important; - } - .mb-md-2, - .my-md-2 { - margin-bottom: 0.5rem !important; - } - .ml-md-2, - .mx-md-2 { - margin-left: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important; - } - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important; - } - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important; - } - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important; - } - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important; - } - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important; - } - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important; - } - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important; - } - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important; - } - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important; - } - .p-md-0 { - padding: 0 !important; - } - .pt-md-0, - .py-md-0 { - padding-top: 0 !important; - } - .pr-md-0, - .px-md-0 { - padding-right: 0 !important; - } - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important; - } - .pl-md-0, - .px-md-0 { - padding-left: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .pt-md-1, - .py-md-1 { - padding-top: 0.25rem !important; - } - .pr-md-1, - .px-md-1 { - padding-right: 0.25rem !important; - } - .pb-md-1, - .py-md-1 { - padding-bottom: 0.25rem !important; - } - .pl-md-1, - .px-md-1 { - padding-left: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .pt-md-2, - .py-md-2 { - padding-top: 0.5rem !important; - } - .pr-md-2, - .px-md-2 { - padding-right: 0.5rem !important; - } - .pb-md-2, - .py-md-2 { - padding-bottom: 0.5rem !important; - } - .pl-md-2, - .px-md-2 { - padding-left: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important; - } - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important; - } - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important; - } - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important; - } - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important; - } - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important; - } - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important; - } - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important; - } - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important; - } - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mt-md-auto, - .my-md-auto { - margin-top: auto !important; - } - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important; - } - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important; - } - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important; - } -} - -@media (min-width: 992px) { - .m-lg-0 { - margin: 0 !important; - } - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important; - } - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important; - } - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important; - } - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .mt-lg-1, - .my-lg-1 { - margin-top: 0.25rem !important; - } - .mr-lg-1, - .mx-lg-1 { - margin-right: 0.25rem !important; - } - .mb-lg-1, - .my-lg-1 { - margin-bottom: 0.25rem !important; - } - .ml-lg-1, - .mx-lg-1 { - margin-left: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .mt-lg-2, - .my-lg-2 { - margin-top: 0.5rem !important; - } - .mr-lg-2, - .mx-lg-2 { - margin-right: 0.5rem !important; - } - .mb-lg-2, - .my-lg-2 { - margin-bottom: 0.5rem !important; - } - .ml-lg-2, - .mx-lg-2 { - margin-left: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important; - } - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important; - } - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important; - } - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important; - } - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important; - } - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important; - } - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important; - } - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important; - } - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important; - } - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important; - } - .p-lg-0 { - padding: 0 !important; - } - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important; - } - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important; - } - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important; - } - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .pt-lg-1, - .py-lg-1 { - padding-top: 0.25rem !important; - } - .pr-lg-1, - .px-lg-1 { - padding-right: 0.25rem !important; - } - .pb-lg-1, - .py-lg-1 { - padding-bottom: 0.25rem !important; - } - .pl-lg-1, - .px-lg-1 { - padding-left: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .pt-lg-2, - .py-lg-2 { - padding-top: 0.5rem !important; - } - .pr-lg-2, - .px-lg-2 { - padding-right: 0.5rem !important; - } - .pb-lg-2, - .py-lg-2 { - padding-bottom: 0.5rem !important; - } - .pl-lg-2, - .px-lg-2 { - padding-left: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important; - } - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important; - } - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important; - } - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important; - } - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important; - } - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important; - } - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important; - } - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important; - } - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important; - } - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important; - } - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important; - } - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important; - } -} - -@media (min-width: 1200px) { - .m-xl-0 { - margin: 0 !important; - } - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important; - } - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important; - } - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important; - } - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .mt-xl-1, - .my-xl-1 { - margin-top: 0.25rem !important; - } - .mr-xl-1, - .mx-xl-1 { - margin-right: 0.25rem !important; - } - .mb-xl-1, - .my-xl-1 { - margin-bottom: 0.25rem !important; - } - .ml-xl-1, - .mx-xl-1 { - margin-left: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .mt-xl-2, - .my-xl-2 { - margin-top: 0.5rem !important; - } - .mr-xl-2, - .mx-xl-2 { - margin-right: 0.5rem !important; - } - .mb-xl-2, - .my-xl-2 { - margin-bottom: 0.5rem !important; - } - .ml-xl-2, - .mx-xl-2 { - margin-left: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important; - } - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important; - } - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important; - } - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important; - } - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important; - } - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important; - } - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important; - } - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important; - } - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important; - } - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important; - } - .p-xl-0 { - padding: 0 !important; - } - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important; - } - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important; - } - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important; - } - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .pt-xl-1, - .py-xl-1 { - padding-top: 0.25rem !important; - } - .pr-xl-1, - .px-xl-1 { - padding-right: 0.25rem !important; - } - .pb-xl-1, - .py-xl-1 { - padding-bottom: 0.25rem !important; - } - .pl-xl-1, - .px-xl-1 { - padding-left: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .pt-xl-2, - .py-xl-2 { - padding-top: 0.5rem !important; - } - .pr-xl-2, - .px-xl-2 { - padding-right: 0.5rem !important; - } - .pb-xl-2, - .py-xl-2 { - padding-bottom: 0.5rem !important; - } - .pl-xl-2, - .px-xl-2 { - padding-left: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important; - } - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important; - } - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important; - } - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important; - } - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important; - } - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important; - } - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important; - } - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important; - } - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -.text-justify { - text-align: justify !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.text-left { - text-align: left !important; -} - -.text-right { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -@media (min-width: 576px) { - .text-sm-left { - text-align: left !important; - } - .text-sm-right { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} - -@media (min-width: 768px) { - .text-md-left { - text-align: left !important; - } - .text-md-right { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} - -@media (min-width: 992px) { - .text-lg-left { - text-align: left !important; - } - .text-lg-right { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} - -@media (min-width: 1200px) { - .text-xl-left { - text-align: left !important; - } - .text-xl-right { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-light { - font-weight: 300 !important; -} - -.font-weight-normal { - font-weight: 400 !important; -} - -.font-weight-bold { - font-weight: 700 !important; -} - -.font-italic { - font-style: italic !important; -} - -.text-white { - color: #fff !important; -} - -.text-primary { - color: #007bff !important; -} - -a.text-primary:hover, a.text-primary:focus { - color: #0062cc !important; -} - -.text-secondary { - color: #6c757d !important; -} - -a.text-secondary:hover, a.text-secondary:focus { - color: #545b62 !important; -} - -.text-success { - color: #28a745 !important; -} - -a.text-success:hover, a.text-success:focus { - color: #1e7e34 !important; -} - -.text-info { - color: #17a2b8 !important; -} - -a.text-info:hover, a.text-info:focus { - color: #117a8b !important; -} - -.text-warning { - color: #ffc107 !important; -} - -a.text-warning:hover, a.text-warning:focus { - color: #d39e00 !important; -} - -.text-danger { - color: #dc3545 !important; -} - -a.text-danger:hover, a.text-danger:focus { - color: #bd2130 !important; -} - -.text-light { - color: #f8f9fa !important; -} - -a.text-light:hover, a.text-light:focus { - color: #dae0e5 !important; -} - -.text-dark { - color: #343a40 !important; -} - -a.text-dark:hover, a.text-dark:focus { - color: #1d2124 !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -@media print { - *, - *::before, - *::after { - text-shadow: none !important; - box-shadow: none !important; - } - a:not(.btn) { - text-decoration: underline; - } - abbr[title]::after { - content: " (" attr(title) ")"; - } - pre { - white-space: pre-wrap !important; - } - pre, - blockquote { - border: 1px solid #adb5bd; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - @page { - size: a3; - } - body { - min-width: 992px !important; - } - .container { - min-width: 992px !important; - } - .navbar { - display: none; - } - .badge { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #dee2e6 !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/library/bootstrap/css/bootstrap.css.map b/library/bootstrap/css/bootstrap.css.map deleted file mode 100644 index e75d56a9c..000000000 --- a/library/bootstrap/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/mixins/_clearfix.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/mixins/_float.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/mixins/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"AAAA;;;;;GAKG;ACLH;EAGI,gBAAe;EAAf,kBAAe;EAAf,kBAAe;EAAf,gBAAe;EAAf,eAAe;EAAf,kBAAe;EAAf,kBAAe;EAAf,iBAAe;EAAf,gBAAe;EAAf,gBAAe;EAAf,cAAe;EAAf,gBAAe;EAAf,qBAAe;EAIf,mBAAe;EAAf,qBAAe;EAAf,mBAAe;EAAf,gBAAe;EAAf,mBAAe;EAAf,kBAAe;EAAf,iBAAe;EAAf,gBAAe;EAIf,mBAAkC;EAAlC,uBAAkC;EAAlC,uBAAkC;EAAlC,uBAAkC;EAAlC,wBAAkC;EAKpC,+KAA0B;EAC1B,8GAAyB;CAC1B;;ACED;;;EAGE,uBAAsB;CACvB;;AAED;EACE,wBAAuB;EACvB,kBAAiB;EACjB,+BAA8B;EAC9B,2BAA0B;EAC1B,8BAA6B;EAC7B,yCCXa;CDYd;;AAIC;EACE,oBAAmB;CEgBtB;;AFVD;EACE,eAAc;CACf;;AAUD;EACE,UAAS;EACT,kKC+KgL;ED9KhL,gBCmLgC;EDlLhC,iBCuL+B;EDtL/B,iBC0L+B;EDzL/B,eC1CgB;ED2ChB,iBAAgB;EAChB,uBCrDa;CDsDd;;AEMD;EFEE,sBAAqB;CACtB;;AAQD;EACE,wBAAuB;EACvB,UAAS;EACT,kBAAiB;CAClB;;AAYD;EACE,cAAa;EACb,sBC4JyC;CD3J1C;;AAOD;EACE,cAAa;EACb,oBCiD8B;CDhD/B;;AASD;;EAEE,2BAA0B;EAC1B,0CAAiC;EAAjC,kCAAiC;EACjC,aAAY;EACZ,iBAAgB;CACjB;;AAED;EACE,oBAAmB;EACnB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;;EAGE,cAAa;EACb,oBAAmB;CACpB;;AAED;;;;EAIE,iBAAgB;CACjB;;AAED;EACE,iBC+F+B;CD9FhC;;AAED;EACE,qBAAoB;EACpB,eAAc;CACf;;AAED;EACE,iBAAgB;CACjB;;AAED;EACE,mBAAkB;CACnB;;AAGD;;EAEE,oBAAmB;CACpB;;AAGD;EACE,eAAc;CACf;;AAOD;;EAEE,mBAAkB;EAClB,eAAc;EACd,eAAc;EACd,yBAAwB;CACzB;;AAED;EAAM,eAAc;CAAK;;AACzB;EAAM,WAAU;CAAK;;AAOrB;EACE,eClKe;EDmKf,sBChD8B;EDiD9B,8BAA6B;EAC7B,sCAAqC;CAMtC;;AGnMC;EHgME,eCpDgD;EDqDhD,2BCpDiC;CE7Ib;;AH2MxB;EACE,eAAc;EACd,sBAAqB;CAUtB;;AGnNC;EH4ME,eAAc;EACd,sBAAqB;CG1MtB;;AHoMH;EAUI,WAAU;CACX;;AASH;;;;EAIE,kCAAiC;EACjC,eAAc;CACf;;AAGD;EAEE,cAAa;EAEb,oBAAmB;EAEnB,eAAc;EAGd,8BAA6B;CAC9B;;AAOD;EAEE,iBAAgB;CACjB;;AAOD;EACE,uBAAsB;EACtB,mBAAkB;CACnB;;AAED;EACE,iBAAgB;CACjB;;AAOD;EACE,0BAAyB;CAC1B;;AAED;EACE,qBCckC;EDblC,wBCakC;EDZlC,eCnRgB;EDoRhB,iBAAgB;EAChB,qBAAoB;CACrB;;AAED;EAGE,oBAAmB;CACpB;;AAOD;EAEE,sBAAqB;EACrB,sBC+E2C;CD9E5C;;AAKD;EACE,iBAAgB;CACjB;;AAMD;EACE,oBAAmB;EACnB,2CAA0C;CAC3C;;AAED;;;;;EAKE,UAAS;EACT,qBAAoB;EACpB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;EAEE,kBAAiB;CAClB;;AAED;;EAEE,qBAAoB;CACrB;;AAKD;;;;EAIE,2BAA0B;CAC3B;;AAGD;;;;EAIE,WAAU;EACV,mBAAkB;CACnB;;AAED;;EAEE,uBAAsB;EACtB,WAAU;CACX;;AAGD;;;;EASE,4BAA2B;CAC5B;;AAED;EACE,eAAc;EAEd,iBAAgB;CACjB;;AAED;EAME,aAAY;EAEZ,WAAU;EACV,UAAS;EACT,UAAS;CACV;;AAID;EACE,eAAc;EACd,YAAW;EACX,gBAAe;EACf,WAAU;EACV,qBAAoB;EACpB,kBAAiB;EACjB,qBAAoB;EACpB,eAAc;EACd,oBAAmB;CACpB;;AAED;EACE,yBAAwB;CACzB;;AEtGD;;EF2GE,aAAY;CACb;;AEvGD;EF8GE,qBAAoB;EACpB,yBAAwB;CACzB;;AE3GD;;EFmHE,yBAAwB;CACzB;;AAOD;EACE,cAAa;EACb,2BAA0B;CAC3B;;AAMD;EACE,sBAAqB;CACtB;;AAED;EACE,mBAAkB;EAClB,gBAAe;CAChB;;AAED;EACE,cAAa;CACd;;AExHD;EF6HE,yBAAwB;CACzB;;AI3dD;;EAEE,sBHwPyC;EGvPzC,qBHwPmC;EGvPnC,iBHwP+B;EGvP/B,iBHwP+B;EGvP/B,eHwPmC;CGvPpC;;AAED;EAAU,kBH0OyC;CG1Ob;;AACtC;EAAU,gBH0OuC;CG1OX;;AACtC;EAAU,mBH0O0C;CG1Od;;AACtC;EAAU,kBH0OyC;CG1Ob;;AACtC;EAAU,mBH0O0C;CG1Od;;AACtC;EAAU,gBH0NwB;CG1NI;;AAEtC;EACE,mBH0PoD;EGzPpD,iBH0P+B;CGzPhC;;AAGD;EACE,gBHyOgC;EGxOhC,iBH6O+B;EG5O/B,iBHoO+B;CGnOhC;;AACD;EACE,kBHqOkC;EGpOlC,iBHyO+B;EGxO/B,iBH+N+B;CG9NhC;;AACD;EACE,kBHiOkC;EGhOlC,iBHqO+B;EGpO/B,iBH0N+B;CGzNhC;;AACD;EACE,kBH6NkC;EG5NlC,iBHiO+B;EGhO/B,iBHqN+B;CGpNhC;;AAOD;EACE,iBH8DW;EG7DX,oBH6DW;EG5DX,UAAS;EACT,yCHrCa;CGsCd;;AAOD;;EAEE,eHgN+B;EG/M/B,iBH8K+B;CG7KhC;;AAED;;EAEE,eHoNgC;EGnNhC,0BH4NmC;CG3NpC;;AAOD;EC/EE,gBAAe;EACf,iBAAgB;CDgFjB;;AAGD;ECpFE,gBAAe;EACf,iBAAgB;CDqFjB;;AACD;EACE,sBAAqB;CAKtB;;AAND;EAII,qBHsM+B;CGrMhC;;AASH;EACE,eAAc;EACd,0BAAyB;CAC1B;;AAGD;EACE,oBHKW;EGJX,mBHwKoD;CGvKrD;;AAED;EACE,eAAc;EACd,eAAc;EACd,eHtGgB;CG2GjB;;AARD;EAMI,uBAAsB;CACvB;;AEpHH;ECIE,gBAAe;EAGf,aAAY;CDLb;;AAID;EACE,iBLq0BwC;EKp0BxC,uBLJa;EKKb,0BLFgB;EOVd,uBP8MgC;EMvMlC,gBAAe;EAGf,aAAY;CDQb;;AAMD;EAEE,sBAAqB;CACtB;;AAED;EACE,sBAA4B;EAC5B,eAAc;CACf;;AAED;EACE,eLszBqC;EKrzBrC,eLvBgB;CKwBjB;;AGxCD;;;;EAIE,kGRqOgH;CQpOjH;;AAGD;EACE,iBRs4BuC;EQr4BvC,eR4Be;EQ3Bf,uBAAsB;CAMvB;;AAHC;EACE,eAAc;CACf;;AAIH;EACE,uBR83BuC;EQ73BvC,iBRy3BuC;EQx3BvC,YRba;EQcb,0BRLgB;EOhBd,sBPgN+B;CQjLlC;;AAdD;EASI,WAAU;EACV,gBAAe;EACf,iBRoN6B;CQlN9B;;AAIH;EACE,eAAc;EACd,iBRw2BuC;EQv2BvC,eRrBgB;CQ6BjB;;AAXD;EAOI,mBAAkB;EAClB,eAAc;EACd,mBAAkB;CACnB;;AAIH;EACE,kBRq2BuC;EQp2BvC,mBAAkB;CACnB;;AClDC;ECAA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDDhB;;AEoDC;EFvDF;ICYI,iBVuKK;GShLR;CR8iBF;;AU1fG;EFvDF;ICYI,iBVwKK;GSjLR;CRojBF;;AUhgBG;EFvDF;ICYI,iBVyKK;GSlLR;CR0jBF;;AUtgBG;EFvDF;ICYI,kBV0KM;GSnLT;CRgkBF;;AQvjBC;ECZA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDUhB;;AAQD;ECJA,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,oBAAuC;EACvC,mBAAsC;CDGrC;;AAID;EACE,gBAAe;EACf,eAAc;CAOf;;AATD;;EAMI,iBAAgB;EAChB,gBAAe;CAChB;;AGlCH;;;;;;EACE,mBAAkB;EAClB,YAAW;EACX,gBAAe;EACf,oBAA4B;EAC5B,mBAA2B;CAC5B;;AAkBG;EACE,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,gBAAe;CAChB;;AACD;EACE,mBAAc;EAAd,eAAc;EACd,YAAW;EACX,gBAAe;CAChB;;AAGC;EFFN,wBAAsC;EAAtC,oBAAsC;EAItC,qBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,mBAAsC;EAAtC,eAAsC;EAItC,gBAAuC;CEAhC;;AAGH;EAAwB,mBAAS;EAAT,UAAS;CAAK;;AAEtC;EAAuB,mBAAmB;EAAnB,UAAmB;CAAI;;AAG5C;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAMnC;EFTR,uBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;ADDP;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CXg3BV;;AUj3BG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CX8/BV;;AU//BG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CX4oCV;;AU7oCG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAK;EAEtC;IAAuB,mBAAmB;IAAnB,UAAmB;GAAI;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CX0xCV;;AYn1CD;EACE,YAAW;EACX,gBAAe;EACf,oBb8GW;Ea7GX,8Bb2SuC;CatRxC;;AAzBD;;EAQI,iBboSgC;EanShC,oBAAmB;EACnB,8BbAc;CaCf;;AAXH;EAcI,uBAAsB;EACtB,iCbLc;CaMf;;AAhBH;EAmBI,8BbTc;CaUf;;AApBH;EAuBI,uBbhBW;CaiBZ;;AAQH;;EAGI,gBb0Q+B;CazQhC;;AAQH;EACE,0BbnCgB;CagDjB;;AAdD;;EAKI,0BbvCc;CawCf;;AANH;;EAWM,yBAA8C;CAC/C;;AAIL;;;;EAKI,UAAS;CACV;;AAOH;EAEI,sCb1DW;Ca2DZ;;AAQH;EAGM,uCbtES;CETS;;AYPtB;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AAKH;EAKM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,uCdYS;CcXV;;AAKH;EAKM,uCAJsC;CZJtB;;AYGtB;;EASQ,uCARoC;CASrC;;ADyFT;EAGM,Yb1GS;Ea2GT,0BblGY;EamGZ,sBb0MgD;CazMjD;;AANL;EAWM,eb3GY;Ea4GZ,0BbjHY;EakHZ,sBbjHY;CakHb;;AAIL;EACE,Yb1Ha;Ea2Hb,0BblHgB;Ca2IjB;;AA3BD;;;EAOI,sBbsLkD;CarLnD;;AARH;EAWI,UAAS;CACV;;AAZH;EAgBM,4CbzIS;Ca0IV;;AAjBL;EAuBQ,6CbhJO;CECS;;AS6DpB;EEmGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbD;IAUM,UAAS;GACV;CZo5CR;;AUlgDG;EEmGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbD;IAUM,UAAS;GACV;CZi6CR;;AU/gDG;EEmGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbD;IAUM,UAAS;GACV;CZ86CR;;AU5hDG;EEmGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbD;IAUM,UAAS;GACV;CZ27CR;;AY38CD;EAOQ,eAAc;EACd,YAAW;EACX,iBAAgB;EAChB,kCAAiC;EACjC,6CAA4C;CAO/C;;AAlBL;EAeU,UAAS;CACV;;AGjLT;EACE,eAAc;EACd,YAAW;EACX,0BhBoUkC;EgBnUlC,gBhBoOgC;EgBnOhC,iBhB4O+B;EgB3O/B,ehBMgB;EgBLhB,uBhBFa;EgBGb,6BAA4B;EAC5B,0BhBAgB;EgBKd,uBhB8LgC;EiB7M9B,yEjB+a4F;CgB5XjG;;AC/CC;EDHF;ICII,iBAAgB;GD8CnB;Cf0lDA;;Ae5oDD;EAyBI,8BAA6B;EAC7B,UAAS;CACV;;AEpBD;EACE,elBIc;EkBHd,uBlBJW;EkBKX,sBlBiZsE;EkBhZtE,WAAU;EAKR,iDlBcW;CkBZd;;AFlBH;EAkCI,ehBvBc;EgByBd,WAAU;CACX;;AArCH;EAkCI,ehBvBc;EgByBd,WAAU;CACX;;AArCH;EAkCI,ehBvBc;EgByBd,WAAU;CACX;;AArCH;EAkCI,ehBvBc;EgByBd,WAAU;CACX;;AArCH;EAkCI,ehBvBc;EgByBd,WAAU;CACX;;AArCH;EA8CI,0BhBvCc;EgByCd,WAAU;CACX;;AAGH;EAEI,4BhBgX0F;CgB/W3F;;AAHH;EAWI,ehBnDc;EgBoDd,uBhB3DW;CgB4DZ;;AAIH;;EAEE,eAAc;EACd,YAAW;CACZ;;AASD;EACE,kCAA+D;EAC/D,qCAAkE;EAClE,iBAAgB;EAChB,mBAAkB;EAClB,iBhB0J+B;CgBzJhC;;AAED;EACE,gCAAkE;EAClE,mCAAqE;EACrE,mBhB4IoD;EgB3IpD,iBhBwG+B;CgBvGhC;;AAED;EACE,iCAAkE;EAClE,oCAAqE;EACrE,oBhBsIoD;EgBrIpD,iBhBkG+B;CgBjGhC;;AAQD;EACE,eAAc;EACd,YAAW;EACX,sBhBqNmC;EgBpNnC,yBhBoNmC;EgBnNnC,iBAAgB;EAChB,iBhB6H+B;EgB5H/B,ehBvGgB;EgBwGhB,8BAA6B;EAC7B,0BAAyB;EACzB,oBAAmC;CAOpC;;AAjBD;;;;;;;;;EAcI,iBAAgB;EAChB,gBAAe;CAChB;;AAYH;;;;;EACE,wBhBoMiC;EgBnMjC,oBhB8FoD;EgB7FpD,iBhB0D+B;EOzM7B,sBPgN+B;CgB/DlC;;AAED;;;;;EAEI,8BhBsR6F;CgBrR9F;;AAGH;;;;;EACE,qBhB2LgC;EgB1LhC,mBhBgFoD;EgB/EpD,iBhB4C+B;EOxM7B,sBP+M+B;CgBjDlC;;AAED;;;;;EAEI,6BhB4Q6F;CgB3Q9F;;AASH;EACE,oBhB8Q0C;CgB7Q3C;;AAED;EACE,eAAc;EACd,oBhBgQ4C;CgB/P7C;;AAOD;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,mBAAkB;EAClB,kBAAiB;CAOlB;;AAXD;;EAQI,mBAAkB;EAClB,kBAAiB;CAClB;;AAQH;EACE,mBAAkB;EAClB,eAAc;EACd,sBhBqO6C;CgBpO9C;;AAED;EACE,mBAAkB;EAClB,mBhBiO2C;EgBhO3C,sBhB+N6C;CgB1N9C;;AARD;EAMI,ehB3Mc;CgB4Mf;;AAGH;EACE,iBAAgB;CACjB;;AAED;EACE,4BAAoB;EAApB,qBAAoB;EACpB,uBAAmB;EAAnB,oBAAmB;EACnB,gBAAe;EACf,sBhBoN4C;CgB3M7C;;AAbD;EAQI,iBAAgB;EAChB,cAAa;EACb,wBhB+M4C;EgB9M5C,eAAc;CACf;;AEnND;EACE,cAAa;EACb,YAAW;EACX,oBlBsZ0C;EkBrZ1C,elBmP6B;EkBlP7B,elBSa;CkBRd;;AAED;EACE,mBAAkB;EAClB,UAAS;EACT,WAAU;EACV,cAAa;EACb,gBAAe;EACf,eAAc;EACd,kBAAiB;EACjB,mBAAkB;EAClB,eAAc;EACd,YlBpCW;EkBqCX,yClBLa;EkBMb,qBAAoB;CACrB;;AAIC;;;EAEE,sBlBbW;CkBwBZ;;AAbD;;;EAKI,sBlBhBS;EkBiBT,iDlBjBS;CkBkBV;;AAPH;;;;;;;;EAWI,eAAc;CACf;;AAKH;EAGI,elB/BS;CkBgCV;;AAJH;;;EAQI,eAAc;CACf;;AAKH;EAGI,elB7CS;CkBkDV;;AARH;EAMM,0BAAsC;CACvC;;AAPL;;;EAYI,eAAc;CACf;;AAbH;EC/EA,0BDgG+C;CAC1C;;AAlBL;EAuBM,iElBjEO;CkBkER;;AAOL;EAGI,sBlB5ES;CkB+EV;;AANH;EAKgB,sBAAqB;CAAK;;AAL1C;;;EAUI,eAAc;CACf;;AAXH;EAeM,iDlBxFO;CkByFR;;AAvGP;EACE,cAAa;EACb,YAAW;EACX,oBlBsZ0C;EkBrZ1C,elBmP6B;EkBlP7B,elBMa;CkBLd;;AAED;EACE,mBAAkB;EAClB,UAAS;EACT,WAAU;EACV,cAAa;EACb,gBAAe;EACf,eAAc;EACd,kBAAiB;EACjB,mBAAkB;EAClB,eAAc;EACd,YlBpCW;EkBqCX,yClBRa;EkBSb,qBAAoB;CACrB;;AAIC;;;EAEE,sBlBhBW;CkB2BZ;;AAbD;;;EAKI,sBlBnBS;EkBoBT,iDlBpBS;CkBqBV;;AAPH;;;;;;;;EAWI,eAAc;CACf;;AAKH;EAGI,elBlCS;CkBmCV;;AAJH;;;EAQI,eAAc;CACf;;AAKH;EAGI,elBhDS;CkBqDV;;AARH;EAMM,0BAAsC;CACvC;;AAPL;;;EAYI,eAAc;CACf;;AAbH;EC/EA,0BDgG+C;CAC1C;;AAlBL;EAuBM,iElBpEO;CkBqER;;AAOL;EAGI,sBlB/ES;CkBkFV;;AANH;EAKgB,sBAAqB;CAAK;;AAL1C;;;EAUI,eAAc;CACf;;AAXH;EAeM,iDlB3FO;CkB4FR;;AFmIT;EACE,qBAAa;EAAb,cAAa;EACb,wBAAmB;EAAnB,oBAAmB;EACnB,uBAAmB;EAAnB,oBAAmB;CAoEpB;;AAvED;EASI,YAAW;CACZ;;ALrNC;EK2MJ;IAeM,qBAAa;IAAb,cAAa;IACb,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;IACvB,iBAAgB;GACjB;EAnBL;IAuBM,qBAAa;IAAb,cAAa;IACb,mBAAc;IAAd,eAAc;IACd,wBAAmB;IAAnB,oBAAmB;IACnB,uBAAmB;IAAnB,oBAAmB;IACnB,iBAAgB;GACjB;EA5BL;IAgCM,sBAAqB;IACrB,YAAW;IACX,uBAAsB;GACvB;EAnCL;IAuCM,sBAAqB;GACtB;EAxCL;;IA4CM,YAAW;GACZ;EA7CL;IAkDM,qBAAa;IAAb,cAAa;IACb,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;IACvB,YAAW;IACX,gBAAe;GAChB;EAvDL;IAyDM,mBAAkB;IAClB,cAAa;IACb,sBhBwHwC;IgBvHxC,eAAc;GACf;EA7DL;IAgEM,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;GACxB;EAlEL;IAoEM,iBAAgB;GACjB;CfsvDJ;;AmB5jED;EACE,sBAAqB;EACrB,iBpB2O+B;EoB1O/B,mBAAkB;EAClB,oBAAmB;EACnB,uBAAsB;EACtB,0BAAiB;EAAjB,uBAAiB;EAAjB,sBAAiB;EAAjB,kBAAiB;EACjB,8BAA2C;ECsF3C,0BrB0OkC;EqBzOlC,gBrB0IgC;EqBzIhC,iBrBkJ+B;EqB/I7B,uBrB0GgC;EiB7M9B,sIjB4X6I;CoBhVlJ;;AHxCC;EGHF;IHII,iBAAgB;GGuCnB;CnBsiEA;;ACvkEC;EkBGE,sBAAqB;ClBAtB;;AkBbH;EAkBI,WAAU;EACV,iDpBWa;CoBVd;;AApBH;EAyBI,cpBsV6B;CoBpV9B;;AA3BH;EA+BI,gBAAe;CAChB;;AAhCH;EAoCI,uBAAsB;CAMvB;;AAIH;;EAEE,qBAAoB;CACrB;;AAQC;ECzDA,YrBKa;EmBLX,0BnB8Ba;EqB5Bf,sBrB4Be;CoB6Bd;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBaW;CqBXd;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBKa;EqBJb,sBrBIa;CqBHd;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBdS;CqBgBZ;;ADWH;ECzDA,YrBKa;EmBLX,0BnBWc;EqBThB,sBrBSgB;CoBgDf;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,kDrBNY;CqBQf;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBdc;EqBed,sBrBfc;CqBgBf;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,kDrBjCU;CqBmCb;;ADWH;ECzDA,YrBKa;EmBLX,0BnBqCa;EqBnCf,sBrBmCe;CoBsBd;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBoBW;CqBlBd;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBYa;EqBXb,sBrBWa;CqBVd;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBPS;CqBSZ;;ADWH;ECzDA,YrBKa;EmBLX,0BnBuCa;EqBrCf,sBrBqCe;CoBoBd;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,iDrBsBW;CqBpBd;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBca;EqBbb,sBrBaa;CqBZd;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,iDrBLS;CqBOZ;;ADWH;ECzDA,erBcgB;EmBdd,0BnBoCa;EqBlCf,sBrBkCe;CoBuBd;;AlBrDD;EmBAE,erBQc;EmBdd,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBmBW;CqBjBd;;AAGD;EAEE,erBVc;EqBWd,0BrBWa;EqBVb,sBrBUa;CqBTd;;AAED;;EAGE,erBlBc;EqBmBd,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBRS;CqBUZ;;ADWH;ECzDA,YrBKa;EmBLX,0BnBkCa;EqBhCf,sBrBgCe;CoByBd;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBiBW;CqBfd;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBSa;EqBRb,sBrBQa;CqBPd;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBVS;CqBYZ;;ADWH;ECzDA,erBcgB;EmBdd,0BnBMc;EqBJhB,sBrBIgB;CoBqDf;;AlBrDD;EmBAE,erBQc;EmBdd,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,kDrBXY;CqBaf;;AAGD;EAEE,erBVc;EqBWd,0BrBnBc;EqBoBd,sBrBpBc;CqBqBf;;AAED;;EAGE,erBlBc;EqBmBd,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,kDrBtCU;CqBwCb;;ADWH;ECzDA,YrBKa;EmBLX,0BnBac;EqBXhB,sBrBWgB;CoB8Cf;;AlBrDD;EmBAE,YrBDW;EmBLX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,+CrBJY;CqBMf;;AAGD;EAEE,YrBnBW;EqBoBX,0BrBZc;EqBad,sBrBbc;CqBcf;;AAED;;EAGE,YrB3BW;EqB4BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,+CrB/BU;CqBiCb;;ADiBH;ECZA,erBrBe;EqBsBf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBxBe;CoBmCd;;ACTD;EACE,YrBpDW;EqBqDX,0BrB5Ba;EqB6Bb,sBrB7Ba;CqB8Bd;;AAED;EAEE,gDrBlCa;CqBmCd;;AAED;EAEE,erBvCa;EqBwCb,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrB/Ca;EqBgDb,sBrBhDa;CqB0Dd;;AARC;;EAKI,gDrBvDS;CqByDZ;;ADxBH;ECZA,erBxCgB;EqByChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrB3CgB;CoBsDf;;ACTD;EACE,YrBpDW;EqBqDX,0BrB/Cc;EqBgDd,sBrBhDc;CqBiDf;;AAED;EAEE,kDrBrDc;CqBsDf;;AAED;EAEE,erB1Dc;EqB2Dd,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrBlEc;EqBmEd,sBrBnEc;CqB6Ef;;AARC;;EAKI,kDrB1EU;CqB4Eb;;ADxBH;ECZA,erBde;EqBef,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBjBe;CoB4Bd;;ACTD;EACE,YrBpDW;EqBqDX,0BrBrBa;EqBsBb,sBrBtBa;CqBuBd;;AAED;EAEE,gDrB3Ba;CqB4Bd;;AAED;EAEE,erBhCa;EqBiCb,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrBxCa;EqByCb,sBrBzCa;CqBmDd;;AARC;;EAKI,gDrBhDS;CqBkDZ;;ADxBH;ECZA,erBZe;EqBaf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBfe;CoB0Bd;;ACTD;EACE,YrBpDW;EqBqDX,0BrBnBa;EqBoBb,sBrBpBa;CqBqBd;;AAED;EAEE,iDrBzBa;CqB0Bd;;AAED;EAEE,erB9Ba;EqB+Bb,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrBtCa;EqBuCb,sBrBvCa;CqBiDd;;AARC;;EAKI,iDrB9CS;CqBgDZ;;ADxBH;ECZA,erBfe;EqBgBf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBlBe;CoB6Bd;;ACTD;EACE,erB3Cc;EqB4Cd,0BrBtBa;EqBuBb,sBrBvBa;CqBwBd;;AAED;EAEE,gDrB5Ba;CqB6Bd;;AAED;EAEE,erBjCa;EqBkCb,8BAA6B;CAC9B;;AAED;;EAGE,erB9Dc;EqB+Dd,0BrBzCa;EqB0Cb,sBrB1Ca;CqBoDd;;AARC;;EAKI,gDrBjDS;CqBmDZ;;ADxBH;ECZA,erBjBe;EqBkBf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBpBe;CoB+Bd;;ACTD;EACE,YrBpDW;EqBqDX,0BrBxBa;EqByBb,sBrBzBa;CqB0Bd;;AAED;EAEE,gDrB9Ba;CqB+Bd;;AAED;EAEE,erBnCa;EqBoCb,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrB3Ca;EqB4Cb,sBrB5Ca;CqBsDd;;AARC;;EAKI,gDrBnDS;CqBqDZ;;ADxBH;ECZA,erB7CgB;EqB8ChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBhDgB;CoB2Df;;ACTD;EACE,erB3Cc;EqB4Cd,0BrBpDc;EqBqDd,sBrBrDc;CqBsDf;;AAED;EAEE,kDrB1Dc;CqB2Df;;AAED;EAEE,erB/Dc;EqBgEd,8BAA6B;CAC9B;;AAED;;EAGE,erB9Dc;EqB+Dd,0BrBvEc;EqBwEd,sBrBxEc;CqBkFf;;AARC;;EAKI,kDrB/EU;CqBiFb;;ADxBH;ECZA,erBtCgB;EqBuChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBzCgB;CoBoDf;;ACTD;EACE,YrBpDW;EqBqDX,0BrB7Cc;EqB8Cd,sBrB9Cc;CqB+Cf;;AAED;EAEE,+CrBnDc;CqBoDf;;AAED;EAEE,erBxDc;EqByDd,8BAA6B;CAC9B;;AAED;;EAGE,YrBvEW;EqBwEX,0BrBhEc;EqBiEd,sBrBjEc;CqB2Ef;;AARC;;EAKI,+CrBxEU;CqB0Eb;;ADbL;EACE,iBpBkK+B;EoBjK/B,epB9Ce;EoB+Cf,8BAA6B;CAuB9B;;AlB9FC;EkB0EE,epBkEgD;EoBjEhD,2BpBkEiC;EoBjEjC,8BAA6B;EAC7B,0BAAyB;ClB7EL;;AkBoExB;EAcI,2BpB2DiC;EoB1DjC,0BAAyB;EACzB,iBAAgB;CACjB;;AAjBH;EAqBI,epBpFc;EoBqFd,qBAAoB;CACrB;;AAUH;ECdE,qBrBsPgC;EqBrPhC,mBrB2IoD;EqB1IpD,iBrBuG+B;EqBpG7B,sBrB2G+B;CoBhGlC;;AAED;EClBE,wBrBkPiC;EqBjPjC,oBrB4IoD;EqB3IpD,iBrBwG+B;EqBrG7B,sBrB4G+B;CoB7FlC;;AAOD;EACE,eAAc;EACd,YAAW;CAMZ;;AARD;EAMI,mBpBsP+B;CoBrPhC;;AAIH;;;EAII,YAAW;CACZ;;AE5IH;ELGM,iCjB2N2C;CsBxNhD;;ALCC;EKPF;ILQI,iBAAgB;GKFnB;CrBwsFA;;AqB9sFD;EAII,WAAU;CACX;;AAGH;EAEI,cAAa;CACd;;AAGH;EACE,mBAAkB;EAClB,UAAS;EACT,iBAAgB;ELdZ,8BjB4NwC;CsB5M7C;;ALZC;EKOF;ILNI,iBAAgB;GKWnB;CrBgtFA;;AsBpuFD;;;;EAIE,mBAAkB;CACnB;;ACuBG;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EAlCf,wBAA8B;EAC9B,sCAA4C;EAC5C,iBAAgB;EAChB,qCAA2C;CAuCxC;;AAkBD;EACE,eAAc;CACf;;ADjDL;EACE,mBAAkB;EAClB,UAAS;EACT,QAAO;EACP,cvB0jBsC;EuBzjBtC,cAAa;EACb,YAAW;EACX,iBvByhBuC;EuBxhBvC,kBAA8B;EAC9B,qBAA4B;EAC5B,gBvBsNgC;EuBrNhC,evBLgB;EuBMhB,iBAAgB;EAChB,iBAAgB;EAChB,uBvBjBa;EuBkBb,6BAA4B;EAC5B,sCvBTa;EOjBX,uBP8MgC;CuBjLnC;;AAED;EACE,SAAQ;EACR,WAAU;CACX;;AAID;EAEI,UAAS;EACT,aAAY;EACZ,cAAa;EACb,wBvBigBuC;CuBhgBxC;;AANH;ECZM,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EA3Bf,cAAa;EACb,sCAA4C;EAC5C,2BAAiC;EACjC,qCAA2C;CAgCxC;;ADDL;ECoBM,eAAc;CACf;;ADRL;EAEI,OAAM;EACN,YAAW;EACX,WAAU;EACV,cAAa;EACb,sBvBmfuC;CuBlfxC;;AAPH;ECzBM,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EApBf,oCAA0C;EAC1C,gBAAe;EACf,uCAA6C;EAC7C,yBAA+B;CAyB5B;;ADYL;ECOM,eAAc;CACf;;ADRL;EAYM,kBAAiB;CAClB;;AAIL;EAEI,OAAM;EACN,YAAW;EACX,WAAU;EACV,cAAa;EACb,uBvBkeuC;CuBjexC;;AAPH;EC1CM,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;CAQZ;;AD6BL;ECzBQ,cAAa;CACd;;ADwBP;ECrBQ,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,sBAAgC;EAChC,wBAAkC;EAClC,YAAW;EAlCjB,oCAA0C;EAC1C,0BAAgC;EAChC,uCAA6C;CAkCxC;;ADcP;ECVM,eAAc;CACf;;ADSL;EAYM,kBAAiB;CAClB;;AAML;EAKI,YAAW;EACX,aAAY;CACb;;AAKH;EElGE,UAAS;EACT,iBAAmB;EACnB,iBAAgB;EAChB,8BzBKgB;CuB4FjB;;AAKD;EACE,eAAc;EACd,YAAW;EACX,wBvBidwC;EuBhdxC,YAAW;EACX,iBvBgI+B;EuB/H/B,evBhGgB;EuBiGhB,oBAAmB;EACnB,oBAAmB;EACnB,8BAA6B;EAC7B,UAAS;CAwBV;;ArBhIC;EqB2GE,evB8bqD;EuB7brD,sBAAqB;EJtHrB,0BnBMc;CEOf;;AqB2FH;EAoBI,YvBvHW;EuBwHX,sBAAqB;EJ7HrB,0BnB8Ba;CuBiGd;;AAvBH;EA2BI,evBxHc;EuByHd,8BAA6B;CAK9B;;AAGH;EACE,eAAc;CACf;;AAGD;EACE,eAAc;EACd,uBvByawC;EuBxaxC,iBAAgB;EAChB,oBvBqFoD;EuBpFpD,evB3IgB;EuB4IhB,oBAAmB;CACpB;;AAGD;EACE,eAAc;EACd,wBvB+ZwC;EuB9ZxC,evBhJgB;CuBiJjB;;AGlKD;;EAEE,mBAAkB;EAClB,4BAAoB;EAApB,qBAAoB;EACpB,uBAAsB;CAyBvB;;AA7BD;;EAOI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;CAYf;;AApBH;;EAaM,WAAU;CxBJQ;;AwBTxB;;;;EAkBM,WAAU;CACX;;AAnBL;;;;;;;;EA2BI,kB1BiL6B;C0BhL9B;;AAIH;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,qBAA2B;EAA3B,4BAA2B;CAK5B;;AARD;EAMI,YAAW;CACZ;;AAGH;EAEI,eAAc;CACf;;AAHH;;EnB5BI,2BmBoC8B;EnBnC9B,8BmBmC8B;CAC/B;;AATH;;EnBdI,0BmB2B6B;EnB1B7B,6BmB0B6B;CAC9B;;AAeH;EACE,yBAAmC;EACnC,wBAAkC;CAWnC;;AAbD;;;EAOI,eAAc;CACf;;AAED;EACE,gBAAe;CAChB;;AAGH;EACE,wBAAsC;EACtC,uBAAqC;CACtC;;AAED;EACE,uBAAsC;EACtC,sBAAqC;CACtC;;AAmBD;EACE,2BAAsB;EAAtB,uBAAsB;EACtB,sBAAuB;EAAvB,wBAAuB;EACvB,sBAAuB;EAAvB,wBAAuB;CAyBxB;;AA5BD;;EAOI,YAAW;CACZ;;AARH;;;;EAcI,iB1B6E6B;E0B5E7B,eAAc;CACf;;AAhBH;;EnB5FI,8BmBiH+B;EnBhH/B,6BmBgH+B;CAChC;;AAtBH;;EnB1GI,0BmBoI4B;EnBnI5B,2BmBmI4B;CAC7B;;AAgBH;;EAGI,iBAAgB;CAQjB;;AAXH;;;;EAOM,mBAAkB;EAClB,uBAAsB;EACtB,qBAAoB;CACrB;;ACnKL;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,wBAAoB;EAApB,qBAAoB;EACpB,YAAW;CAyCZ;;AA9CD;;;EAUI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;EAGd,UAAS;EACT,iBAAgB;CAYjB;;AA3BH;;;EAmBM,WAAU;CACX;;AApBL;;;;;;;;;EAyBM,kB3BgL2B;C2B/K5B;;AA1BL;;EpBWI,2BoBoBmD;EpBnBnD,8BoBmBmD;CAAK;;AA/B5D;;EpByBI,0BoBOmD;EpBNnD,6BoBMmD;CAAK;;AAhC5D;EAsCI,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;CAMpB;;AA7CH;;EpBWI,2BoB+B6E;EpB9B7E,8BoB8B6E;CAAK;;AA1CtF;;EpByBI,0BoBmB6E;EpBlB7E,6BoBkB6E;CAAK;;AAWtF;;EAEE,qBAAa;EAAb,cAAa;CAgBd;;AAlBD;;EAQI,mBAAkB;EAClB,WAAU;CACX;;AAVH;;;;;;;;EAgBI,kB3BkI6B;C2BjI9B;;AAGH;EAAuB,mB3B8HU;C2B9H4B;;AAC7D;EAAsB,kB3B6HW;C2B7H0B;;AAQ3D;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,0B3BgPkC;E2B/OlC,iBAAgB;EAChB,gB3B+IgC;E2B9IhC,iB3BmJ+B;E2BlJ/B,iB3BsJ+B;E2BrJ/B,e3BhFgB;E2BiFhB,mBAAkB;EAClB,oBAAmB;EACnB,0B3BxFgB;E2ByFhB,0B3BvFgB;EOXd,uBP8MgC;C2BpGnC;;AApBD;;EAkBI,cAAa;CACd;;AAiCH;;;;;;EpB7HI,2BoBmI4B;EpBlI5B,8BoBkI4B;CAC/B;;AAED;;;;;;EpBxHI,0BoB8H2B;EpB7H3B,6BoB6H2B;CAC9B;;ACrJD;EACE,mBAAkB;EAClB,eAAc;EACd,mBAAsC;EACtC,qB5Bwb4C;C4Bvb7C;;AAED;EACE,4BAAoB;EAApB,qBAAoB;EACpB,mB5Bob0C;C4Bnb3C;;AAED;EACE,mBAAkB;EAClB,YAAW;EACX,WAAU;CA4BX;;AA/BD;EAMI,Y5BhBW;EmBLX,0BnB8Ba;C4BNd;;AATH;EAaI,iE5BEa;C4BDd;;AAdH;EAiBI,Y5B3BW;E4B4BX,0B5Bib8E;C4B/a/E;;AApBH;EAwBM,e5B5BY;C4BiCb;;AA7BL;EA2BQ,0B5BnCU;C4BoCX;;AASP;EACE,iBAAgB;CA8BjB;;AA/BD;EAKI,mBAAkB;EAClB,aAA+D;EAC/D,QAAO;EACP,eAAc;EACd,Y5BqYwC;E4BpYxC,a5BoYwC;E4BnYxC,qBAAoB;EACpB,YAAW;EACX,0BAAiB;EAAjB,uBAAiB;EAAjB,sBAAiB;EAAjB,kBAAiB;EACjB,0B5B1Dc;C4B4Df;;AAhBH;EAoBI,mBAAkB;EAClB,aAA+D;EAC/D,QAAO;EACP,eAAc;EACd,Y5BsXwC;E4BrXxC,a5BqXwC;E4BpXxC,YAAW;EACX,6BAA4B;EAC5B,mCAAkC;EAClC,yB5BmX2C;C4BlX5C;;AAQH;ErB5FI,uBP8MgC;C4B/GjC;;AAHH;ET1FI,0BnB8Ba;C4BoEZ;;AARL;EAUM,2Nb9DqI;Ca+DtI;;AAXL;ET1FI,0BnB8Ba;C4B8EZ;;AAlBL;EAoBM,wKbxEqI;CayEtI;;AArBL;EA0BM,yC5BtFW;C4BuFZ;;AA3BL;EA6BM,yC5BzFW;C4B0FZ;;AAQL;EAEI,mB5B2V+C;C4B1VhD;;AAHH;EThII,0BnB8Ba;C4B0GZ;;AARL;EAUM,qKbpGqI;CaqGtI;;AAXL;EAgBM,yC5BlHW;C4BmHZ;;AAWL;EACE,sBAAqB;EACrB,YAAW;EACX,4B5BuQ4F;E4BtQ5F,2C5BiUwC;E4BhUxC,iB5BgF+B;E4B/E/B,e5BtJgB;E4BuJhB,uBAAsB;EACtB,uNAAsG;EACtG,0B5BoU0C;E4BnU1C,0B5B7JgB;E4B+Jd,uB5BoCgC;E4BhClC,yBAAgB;EAAhB,sBAAgB;EAAhB,iBAAgB;CAkCjB;;AAlDD;EAmBI,sB5B4OsE;E4B3OtE,WAAU;EACV,mF5B0OsE;C4B/NvE;;AAhCH;EA6BM,e5B7KY;E4B8KZ,uB5BrLS;C4BsLV;;AA/BL;EAoCI,aAAY;EACZ,uB5BgSsC;E4B/RtC,uBAAsB;CACvB;;AAvCH;EA0CI,e5B3Lc;E4B4Ld,0B5BhMc;C4BiMf;;AA5CH;EAgDI,WAAU;CACX;;AAGH;EACE,8B5BwN+F;E4BvN/F,sB5B8QyC;E4B7QzC,yB5B6QyC;E4B5QzC,e5B+RqC;C4B9RtC;;AAED;EACE,6B5BoN+F;E4BnN/F,sB5BuQyC;E4BtQzC,yB5BsQyC;E4BrQzC,gB5B2RsC;C4B1RvC;;AAOD;EACE,mBAAkB;EAClB,sBAAqB;EACrB,YAAW;EACX,4B5B+L4F;E4B9L5F,iBAAgB;CACjB;;AAED;EACE,mBAAkB;EAClB,WAAU;EACV,YAAW;EACX,4B5BuL4F;E4BtL5F,UAAS;EACT,WAAU;CAgBX;;AAtBD;EASI,sB5BuKsE;E4BtKtE,iD5BvNa;C4B4Nd;;AAfH;EAaM,sB5BmKoE;C4BlKrE;;AAdL;EAmBM,kB5B2RQ;C4B1RT;;AAIL;EACE,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,QAAO;EACP,WAAU;EACV,4B5B6J4F;E4B5J5F,0B5B6DkC;E4B5DlC,iB5B1B+B;E4B2B/B,e5BhQgB;E4BiQhB,uB5BxQa;E4ByQb,0B5BrQgB;EOXd,uBP8MgC;C4BsFnC;;AA/BD;EAgBI,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,UAAS;EACT,WAAU;EACV,eAAc;EACd,4CAAuE;EACvE,0B5B6CgC;E4B5ChC,iB5B1C6B;E4B2C7B,e5BhRc;E4BiRd,kBAAiB;ET7RjB,0BnBOc;E4BwRd,+B5BtRc;EOXd,mCqBkSgF;CACjF;;AASH;EACE,YAAW;EACX,gBAAe;EACf,8BAA6B;EAC7B,yBAAgB;EAAhB,sBAAgB;EAAhB,iBAAgB;CA+GjB;;AAnHD;EAOI,cAAa;CACd;;AARH;EAWI,UAAS;CACV;;AAZH;EAeI,Y5BuMsC;E4BtMtC,a5BsMsC;E4BrMtC,qBAA6C;ET3T7C,0BnB8Ba;E4B+Rb,U5BsMmC;EOrgBnC,oBPsgBsC;E4BpMtC,yBAAgB;EAAhB,iBAAgB;CAUjB;;AAhCH;EAyBM,cAAa;EACb,iE5BtSW;C4BuSZ;;AA3BL;ET1SI,0BnBugBoE;C4B9LnE;;AA/BL;EAmCI,Y5B4KoC;E4B3KpC,e5B4KqC;E4B3KrC,mBAAkB;EAClB,gB5B2KuC;E4B1KvC,0B5BzUc;E4B0Ud,0BAAyB;ErBpVzB,oBP+foC;C4BxKrC;;AA3CH;EA8CI,Y5BwKsC;E4BvKtC,a5BuKsC;EmBhgBtC,0BnB8Ba;E4B6Tb,U5BwKmC;EOrgBnC,oBPsgBsC;E4BtKtC,sBAAgB;EAAhB,iBAAgB;CAUjB;;AA9DH;EAuDM,cAAa;EACb,iE5BpUW;C4BqUZ;;AAzDL;ET1SI,0BnBugBoE;C4BhKnE;;AA7DL;EAiEI,Y5B8IoC;E4B7IpC,e5B8IqC;E4B7IrC,mBAAkB;EAClB,gB5B6IuC;E4B5IvC,0B5BvWc;E4BwWd,0BAAyB;ErBlXzB,oBP+foC;C4B1IrC;;AAzEH;EA4EI,Y5B0IsC;E4BzItC,a5ByIsC;EmBhgBtC,0BnB8Ba;E4B2Vb,U5B0ImC;EOrgBnC,oBPsgBsC;E4BxItC,iBAAgB;CAUjB;;AA5FH;EAqFM,cAAa;EACb,iE5BlWW;C4BmWZ;;AAvFL;ET1SI,0BnBugBoE;C4BlInE;;AA3FL;EA+FI,Y5BgHoC;E4B/GpC,e5BgHqC;E4B/GrC,mBAAkB;EAClB,gB5B+GuC;E4B9GvC,8BAA6B;EAC7B,0BAAyB;EACzB,qBAA+C;CAEhD;;AAvGH;EA0GI,0B5B5Yc;EOVd,oBP+foC;C4BvGrC;;AA5GH;EA+GI,mBAAkB;EAClB,0B5BlZc;EOVd,oBP+foC;C4BjGrC;;AC7ZH;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,gBAAe;EACf,iBAAgB;EAChB,iBAAgB;CACjB;;AAED;EACE,eAAc;EACd,qB7BwkBsC;C6B9jBvC;;A3BTC;E2BEE,sBAAqB;C3BCtB;;A2BNH;EAUI,e7BNc;C6BOf;;AAOH;EACE,iC7BlBgB;C6BoDjB;;AAnCD;EAII,oB7B4K6B;C6B3K9B;;AALH;EAQI,8BAAgD;EtB7BhD,gCPwMgC;EOvMhC,iCPuMgC;C6B/JjC;;AApBH;EAYM,sC7B7BY;CEKf;;A2BYH;EAgBM,e7B9BY;E6B+BZ,8BAA6B;EAC7B,0BAAyB;CAC1B;;AAnBL;;EAwBI,e7BrCc;E6BsCd,uB7B7CW;E6B8CX,mC7B9CW;C6B+CZ;;AA3BH;EA+BI,iB7BiJ6B;EOrM7B,0BsBsD4B;EtBrD5B,2BsBqD4B;CAC7B;;AAQH;EtBrEI,uBP8MgC;C6BtIjC;;AAHH;;EAOI,Y7BrEW;E6BsEX,0B7B7Ca;C6B8Cd;;AAQH;EAEI,mBAAc;EAAd,eAAc;EACd,mBAAkB;CACnB;;AAGH;EAEI,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,mBAAkB;CACnB;;AAQH;EAEI,cAAa;CACd;;AAHH;EAKI,eAAc;CACf;;ACnGH;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,uBAAmB;EAAnB,oBAAmB;EACnB,uBAA8B;EAA9B,+BAA8B;EAC9B,qB9B8FW;C8BnFZ;;AAjBD;;EAYI,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,uBAAmB;EAAnB,oBAAmB;EACnB,uBAA8B;EAA9B,+BAA8B;CAC/B;;AAQH;EACE,sBAAqB;EACrB,uB9BykB+E;E8BxkB/E,0B9BwkB+E;E8BvkB/E,mB9BwEW;E8BvEX,mB9BiMoD;E8BhMpD,qBAAoB;EACpB,oBAAmB;CAKpB;;A5BrCC;E4BmCE,sBAAqB;C5BhCtB;;A4ByCH;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,gBAAe;EACf,iBAAgB;EAChB,iBAAgB;CAWjB;;AAhBD;EAQI,iBAAgB;EAChB,gBAAe;CAChB;;AAVH;EAaI,iBAAgB;EAChB,YAAW;CACZ;;AAQH;EACE,sBAAqB;EACrB,oB9BigBuC;E8BhgBvC,uB9BggBuC;C8B/fxC;;AAWD;EACE,8BAAgB;EAAhB,iBAAgB;EAChB,qBAAY;EAAZ,aAAY;EAGZ,uBAAmB;EAAnB,oBAAmB;CACpB;;AAGD;EACE,yB9B2gBwC;E8B1gBxC,mB9BkIoD;E8BjIpD,eAAc;EACd,8BAA6B;EAC7B,8BAAuC;EvB5GrC,uBP8MgC;C8BvFnC;;A5B3GC;E4BoGE,sBAAqB;C5BjGtB;;A4BwFH;EAcI,gBAAe;CAChB;;AAKH;EACE,sBAAqB;EACrB,aAAY;EACZ,cAAa;EACb,uBAAsB;EACtB,YAAW;EACX,oCAAmC;EACnC,2BAA0B;CAC3B;;AnB9DG;EmBuEA;;IAIM,iBAAgB;IAChB,gBAAe;GAChB;C7BmjHR;;AU7oHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CD;IAcM,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBL;IAiBQ,mBAAkB;GACnB;EAlBP;IAqBQ,sB9Byc6B;I8Bxc7B,qB9Bwc6B;G8Bvc9B;EAvBP;;IA6BM,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BL;IAiCM,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCL;IAwCM,cAAa;GACd;C7B4iHR;;AU5pHG;EmBuEA;;IAIM,iBAAgB;IAChB,gBAAe;GAChB;C7BulHR;;AUjrHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CD;IAcM,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBL;IAiBQ,mBAAkB;GACnB;EAlBP;IAqBQ,sB9Byc6B;I8Bxc7B,qB9Bwc6B;G8Bvc9B;EAvBP;;IA6BM,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BL;IAiCM,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCL;IAwCM,cAAa;GACd;C7BglHR;;AUhsHG;EmBuEA;;IAIM,iBAAgB;IAChB,gBAAe;GAChB;C7B2nHR;;AUrtHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CD;IAcM,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBL;IAiBQ,mBAAkB;GACnB;EAlBP;IAqBQ,sB9Byc6B;I8Bxc7B,qB9Bwc6B;G8Bvc9B;EAvBP;;IA6BM,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BL;IAiCM,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCL;IAwCM,cAAa;GACd;C7BonHR;;AUpuHG;EmBuEA;;IAIM,iBAAgB;IAChB,gBAAe;GAChB;C7B+pHR;;AUzvHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CD;IAcM,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBL;IAiBQ,mBAAkB;GACnB;EAlBP;IAqBQ,sB9Byc6B;I8Bxc7B,qB9Bwc6B;G8Bvc9B;EAvBP;;IA6BM,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BL;IAiCM,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCL;IAwCM,cAAa;GACd;C7BwpHR;;A6BtsHD;EAeQ,0BAAqB;EAArB,sBAAqB;EACrB,qBAA2B;EAA3B,4BAA2B;CAgC9B;;AAhDL;;EASU,iBAAgB;EAChB,gBAAe;CAChB;;AAXT;EAmBU,wBAAmB;EAAnB,oBAAmB;CAUpB;;AA7BT;EAsBY,mBAAkB;CACnB;;AAvBX;EA0BY,sB9Byc6B;E8Bxc7B,qB9Bwc6B;C8Bvc9B;;AA5BX;;EAkCU,sBAAiB;EAAjB,kBAAiB;CAClB;;AAnCT;EAsCU,gCAAwB;EAAxB,yBAAwB;EAGxB,8BAAgB;EAAhB,iBAAgB;CACjB;;AA1CT;EA6CU,cAAa;CACd;;AAYT;EAEI,0B9BlLW;C8BuLZ;;AAPH;EAKM,0B9BrLS;CEFZ;;A4BkLH;EAWM,0B9B3LS;C8BoMV;;AApBL;EAcQ,0B9B9LO;CEFZ;;A4BkLH;EAkBQ,0B9BlMO;C8BmMR;;AAnBP;;;;EA0BM,0B9B1MS;C8B2MV;;AA3BL;EA+BI,0B9B/MW;E8BgNX,iC9BhNW;C8BiNZ;;AAjCH;EAoCI,sQ9B6ZmS;C8B5ZpS;;AArCH;EAwCI,0B9BxNW;C8BgOZ;;AAhDH;EA0CM,0B9B1NS;C8B+NV;;AA/CL;EA6CQ,0B9B7NO;CEFZ;;A4BsOH;EAEI,Y9BhPW;C8BqPZ;;AAPH;EAKM,Y9BnPS;CEQZ;;A4BsOH;EAWM,gC9BzPS;C8BkQV;;AApBL;EAcQ,iC9B5PO;CEQZ;;A4BsOH;EAkBQ,iC9BhQO;C8BiQR;;AAnBP;;;;EA0BM,Y9BxQS;C8ByQV;;AA3BL;EA+BI,gC9B7QW;E8B8QX,uC9B9QW;C8B+QZ;;AAjCH;EAoCI,4Q9BkWkS;C8BjWnS;;AArCH;EAwCI,gC9BtRW;C8B8RZ;;AAhDH;EA0CM,Y9BxRS;C8B6RV;;AA/CL;EA6CQ,Y9B3RO;CEQZ;;A6BfH;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,aAAY;EACZ,sBAAqB;EACrB,uB/BCa;E+BAb,4BAA2B;EAC3B,uC/BSa;EOjBX,uBP8MgC;C+BnLnC;;AA3BD;EAYI,gBAAe;EACf,eAAc;CACf;;AAdH;ExBMI,gCPwMgC;EOvMhC,iCPuMgC;C+B3L/B;;AAnBL;ExBoBI,oCP0LgC;EOzLhC,mCPyLgC;C+BrL/B;;AAIL;EAGE,mBAAc;EAAd,eAAc;EACd,iB/B4oByC;C+B3oB1C;;AAED;EACE,uB/BuoBwC;C+BtoBzC;;AAED;EACE,sBAAgC;EAChC,iBAAgB;CACjB;;AAED;EACE,iBAAgB;CACjB;;A7BvCC;E6B2CE,sBAAqB;C7B3CD;;A6ByCxB;EAMI,qB/BsnBuC;C+BrnBxC;;AAOH;EACE,yB/B6mByC;E+B5mBzC,iBAAgB;EAChB,sC/BjDa;E+BkDb,8C/BlDa;C+B6Dd;;AAfD;ExB/DI,2DwBsE8E;CAC/E;;AARH;EAYM,cAAa;CACd;;AAIL;EACE,yB/B4lByC;E+B3lBzC,sC/BjEa;E+BkEb,2C/BlEa;C+BuEd;;AARD;ExBhFI,2DPirBoF;C+B1lBrF;;AAQH;EACE,wBAAkC;EAClC,wB/B2kBwC;E+B1kBxC,uBAAiC;EACjC,iBAAgB;CACjB;;AAED;EACE,wBAAkC;EAClC,uBAAiC;CAClC;;AAGD;EACE,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,iB/BmkByC;C+BlkB1C;;AAED;EACE,YAAW;ExBtHT,mCPirBoF;C+BzjBvF;;AAGD;EACE,YAAW;ExBtHT,4CP2qBoF;EO1qBpF,6CP0qBoF;C+BnjBvF;;AAED;EACE,YAAW;ExB7GT,gDP6pBoF;EO5pBpF,+CP4pBoF;C+B9iBvF;;AAKD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;CAqBvB;;AAvBD;EAKI,oB/B0iBwD;C+BziBzD;;ApBtFC;EoBgFJ;IASI,wBAAmB;IAAnB,oBAAmB;IACnB,oB/BqiBwD;I+BpiBxD,mB/BoiBwD;G+BxhB3D;EAvBD;IAcM,qBAAa;IAAb,cAAa;IAEb,iBAAY;IAAZ,aAAY;IACZ,2BAAsB;IAAtB,uBAAsB;IACtB,mB/B6hBsD;I+B5hBtD,iBAAgB;IAChB,kB/B2hBsD;G+B1hBvD;C9Bm8HJ;;A8B17HD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;CA4EvB;;AA9ED;EAOI,oB/B0gBwD;C+BzgBzD;;ApBtHC;EoB8GJ;IAWI,wBAAmB;IAAnB,oBAAmB;GAmEtB;EA9ED;IAgBM,iBAAY;IAAZ,aAAY;IACZ,iBAAgB;GA2DjB;EA5EL;IAoBQ,eAAc;IACd,eAAc;GACf;EAtBP;IxBzJI,2BwBoLoC;IxBnLpC,8BwBmLoC;GAU/B;EArCT;;IA+BY,2BAA0B;GAC3B;EAhCX;;IAmCY,8BAA6B;GAC9B;EApCX;IxB3II,0BwBmLmC;IxBlLnC,6BwBkLmC;GAU9B;EAlDT;;IA4CY,0BAAyB;GAC1B;EA7CX;;IAgDY,6BAA4B;GAC7B;EAjDX;IxBtKI,uBP8MgC;G+BuB3B;EA/DT;;IxBhKI,gCPwMgC;IOvMhC,iCPuMgC;G+BkBzB;EA1DX;;IxBlJI,oCP0LgC;IOzLhC,mCPyLgC;G+BsBzB;EA9DX;IxBtKI,iBwBwO8B;GAQzB;EA1ET;;;;IxBtKI,iBwB8OgC;GACzB;C9Bs7HV;;A8B16HD;EAEI,uB/B+asC;C+B9avC;;ApBtMC;EoBmMJ;IAMI,wB/BybiC;I+BzbjC,qB/BybiC;I+BzbjC,gB/BybiC;I+BxbjC,4B/BybuC;I+BzbvC,yB/BybuC;I+BzbvC,oB/BybuC;I+BxbvC,WAAU;IACV,UAAS;GAOZ;EAhBD;IAYM,sBAAqB;IACrB,YAAW;GACZ;C9B66HJ;;A8Bp6HD;EAEI,iBAAgB;EAChB,iBAAgB;CACjB;;AAJH;EAQM,iBAAgB;CACjB;;AATL;EAaI,iBAAgB;EAChB,8BAA6B;EAC7B,6BAA4B;CAC7B;;AAhBH;EAmBI,0BAAyB;EACzB,2BAA0B;CAC3B;;AC3SH;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,sBhCi2BsC;EgCh2BtC,oBhCm2BsC;EgCl2BtC,iBAAgB;EAChB,0BhCOgB;EOTd,uBP8MgC;CgC1MnC;;AAED;EAGI,qBhCw1BqC;CgCh1BtC;;AAXH;EAMM,sBAAqB;EACrB,sBhCo1BmC;EgCn1BnC,ehCDY;EgCEZ,ahCy1BuC;CgCx1BxC;;AAVL;EAoBI,2BAA0B;CAC3B;;AArBH;EAwBI,sBAAqB;CACtB;;AAzBH;EA4BI,ehCrBc;CgCsBf;;ACvCH;EACE,qBAAa;EAAb,cAAa;E7BGb,gBAAe;EACf,iBAAgB;EGDd,uBP8MgC;CiC9MnC;;AAED;EACE,mBAAkB;EAClB,eAAc;EACd,wBjCmoBwC;EiCloBxC,kBjCqM+B;EiCpM/B,kBjCsoBsC;EiCroBtC,ejCwBe;EiCvBf,uBjCFa;EiCGb,0BjCAgB;CiCoBjB;;AA5BD;EAWI,WAAU;EACV,ejCsIgD;EiCrIhD,sBAAqB;EACrB,0BjCPc;EiCQd,sBjCPc;CiCQf;;AAhBH;EAmBI,WAAU;EACV,WjC+nBiC;EiC9nBjC,iDjCSa;CiCRd;;AAtBH;EA0BI,gBAAe;CAChB;;AAGH;EAGM,eAAc;E1BRhB,gCPmLgC;EOlLhC,mCPkLgC;CiCzK/B;;AALL;E1BnBI,iCPiMgC;EOhMhC,oCPgMgC;CiCpK/B;;AAVL;EAcI,WAAU;EACV,YjCxCW;EiCyCX,0BjChBa;EiCiBb,sBjCjBa;CiCkBd;;AAlBH;EAqBI,ejCxCc;EiCyCd,qBAAoB;EAEpB,aAAY;EACZ,uBjClDW;EiCmDX,sBjChDc;CiCiDf;;AC5DD;EACE,wBlC4oBsC;EkC3oBtC,mBlC0OkD;EkCzOlD,iBlCsM6B;CkCrM9B;;AAIG;E3BoBF,+BPoL+B;EOnL/B,kCPmL+B;CkCtM5B;;AAGD;E3BCF,gCPkM+B;EOjM/B,mCPiM+B;CkCjM5B;;AAfL;EACE,wBlC0oBqC;EkCzoBrC,oBlC2OkD;EkC1OlD,iBlCuM6B;CkCtM9B;;AAIG;E3BoBF,+BPqL+B;EOpL/B,kCPoL+B;CkCvM5B;;AAGD;E3BCF,gCPmM+B;EOlM/B,mCPkM+B;CkClM5B;;ACbP;EACE,sBAAqB;EACrB,sBnC4uBsC;EmC3uBtC,enCwuBqC;EmCvuBrC,iBnC2O+B;EmC1O/B,eAAc;EACd,mBAAkB;EAClB,oBAAmB;EACnB,yBAAwB;E5BTtB,uBP8MgC;CmC9LnC;;AAfD;EAaI,cAAa;CACd;;AAIH;EACE,mBAAkB;EAClB,UAAS;CACV;;AAMD;EACE,qBnCqtBsC;EmCptBtC,oBnCotBsC;EOlvBpC,qBPqvBqC;CmCrtBxC;;AAOC;EC1CA,YpCUa;EoCTb,0BpCkCe;CmCSd;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCUa;EoCTb,0BpCegB;CmC4Bf;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCUa;EoCTb,0BpCyCe;CmCEd;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCUa;EoCTb,0BpC2Ce;CmCAd;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,epCmBgB;EoClBhB,0BpCwCe;CmCGd;;AjC7BD;EkCVI,epCcY;EoCbZ,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCUa;EoCTb,0BpCsCe;CmCKd;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,epCmBgB;EoClBhB,0BpCUgB;CmCiCf;;AjC7BD;EkCVI,epCcY;EoCbZ,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCUa;EoCTb,0BpCiBgB;CmC0Bf;;AjC7BD;EkCVI,YpCKS;EoCJT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AmCnBH;EACE,mBAAoD;EACpD,oBrCwqBsC;EqCvqBtC,0BrCUgB;EOTd,sBP+M+B;CqC1MlC;;A1BmDG;E0B5DJ;IAOI,mBrCmqBoC;GqCjqBvC;CpCo8IA;;AoCl8ID;EACE,iBAAgB;EAChB,gBAAe;E9BTb,iB8BUsB;CACzB;;ACXD;EACE,mBAAkB;EAClB,yBtC2xByC;EsC1xBzC,oBtC2xBsC;EsC1xBtC,8BAA6C;E/BJ3C,uBP8MgC;CsCxMnC;;AAGD;EAEE,eAAc;CACf;;AAGD;EACE,iBtCgO+B;CsC/NhC;;AAOD;EACE,oBAAwD;CAUzD;;AAXD;EAKI,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,yBtC6vBuC;EsC5vBvC,eAAc;CACf;;AASD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ACXH;EACE;IAAO,4BAAuC;GvCmmJ7C;EuClmJD;IAAK,yBAAwB;GvCqmJ5B;CACF;;AuCxmJD;EACE;IAAO,4BAAuC;GvCmmJ7C;EuClmJD;IAAK,yBAAwB;GvCqmJ5B;CACF;;AuCnmJD;EACE,qBAAa;EAAb,cAAa;EACb,axCuyBsC;EwCtyBtC,iBAAgB;EAChB,mBxCsyByD;EwCryBzD,0BxCGgB;EOTd,uBP8MgC;CwCrMnC;;AAED;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,sBAAuB;EAAvB,wBAAuB;EACvB,YxCRa;EwCSb,mBAAkB;EAClB,oBAAmB;EACnB,0BxCce;EiB/BX,4BjBizB4C;CwC9xBjD;;AvBfC;EuBMF;IvBLI,iBAAgB;GuBcnB;CvC0mJA;;AuCxmJD;ErBiBE,sMAA6I;EqBf7I,2BxCkxBsC;CwCjxBvC;;AAED;EACE,2DxCqxBoD;EwCrxBpD,mDxCqxBoD;CwCpxBrD;;ACjCD;EACE,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;CACxB;;AAED;EACE,YAAO;EAAP,QAAO;CACR;;ACHD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EAGtB,gBAAe;EACf,iBAAgB;CACjB;;AAQD;EACE,YAAW;EACX,e1CHgB;E0CIhB,oBAAmB;CAapB;;AxCnBC;EwCUE,e1CRc;E0CSd,sBAAqB;EACrB,0B1ChBc;CEOf;;AwCAH;EAaI,e1CZc;E0Cad,0B1CpBc;C0CqBf;;AAQH;EACE,mBAAkB;EAClB,eAAc;EACd,yB1CmxByC;E0CjxBzC,oB1CgK+B;E0C/J/B,uB1CrCa;E0CsCb,uC1C5Ba;C0CyDd;;AApCD;EnChCI,gCPwMgC;EOvMhC,iCPuMgC;C0C7JjC;;AAXH;EAcI,iBAAgB;EnChChB,oCP0LgC;EOzLhC,mCPyLgC;C0CxJjC;;AxC1CD;EwC6CE,WAAU;EACV,sBAAqB;CxC3CtB;;AwCuBH;EAyBI,e1ClDc;E0CmDd,uB1CzDW;C0C0DZ;;AA3BH;EA+BI,WAAU;EACV,Y1C/DW;E0CgEX,0B1CvCa;E0CwCb,sB1CxCa;C0CyCd;;AASH;EAEI,gBAAe;EACf,eAAc;EnCrFd,iBmCsFwB;CACzB;;AALH;EASM,cAAa;CACd;;AAVL;EAeM,iBAAgB;CACjB;;ACnGH;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CHO;E2CIP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;ACjBP;EACE,aAAY;EACZ,kB5Cu4BuD;E4Ct4BvD,iB5CiP+B;E4ChP/B,eAAc;EACd,Y5CgBa;E4Cfb,0B5CKa;E4CJb,YAAW;CAYZ;;A1CHC;E0CNE,Y5CWW;E4CVX,sBAAqB;EACrB,aAAY;C1COb;;A0CnBH;EAiBI,gBAAe;CAChB;;AASH;EACE,WAAU;EACV,8BAA6B;EAC7B,UAAS;EACT,yBAAwB;CACzB;;ACzBD;EACE,iBAAgB;CACjB;;AAGD;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c7C8jBsC;E6C7jBtC,cAAa;EACb,iBAAgB;EAGhB,WAAU;CASX;;AAJC;EACE,mBAAkB;EAClB,iBAAgB;CACjB;;AAIH;EACE,mBAAkB;EAClB,YAAW;EACX,e7C2tBuC;E6CztBvC,qBAAoB;CAUrB;;AAPC;E5BtCI,4CjBoxBoD;EiBpxBpD,oCjBoxBoD;EiBpxBpD,qEjBoxBoD;E6C5uBtD,sCAA6B;EAA7B,8BAA6B;CAC9B;;A5BrCD;E4BkCA;I5BjCE,iBAAgB;G4BoCjB;C5Cm3JF;;A4Cl3JC;EACE,mCAA0B;EAA1B,2BAA0B;CAC3B;;AAGH;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,sCAAsD;CACvD;;AAGD;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,YAAW;EAEX,qBAAoB;EACpB,uB7CvDa;E6CwDb,6BAA4B;EAC5B,qC7C/Ca;EOjBX,sBP+M+B;E6C3IjC,WAAU;CACX;;AAGD;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c7C6fsC;E6C5ftC,uB7C9Da;C6CmEd;;AAZD;EAUW,WAAU;CAAK;;AAV1B;EAWW,a7CurB2B;C6CvrBS;;AAK/C;EACE,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;EACvB,uBAA8B;EAA9B,+BAA8B;EAC9B,c7CmrBsC;E6ClrBtC,iC7CpFgB;EOHd,+BPyM+B;EOxM/B,gCPwM+B;C6C1GlC;;AAbD;EASI,c7C8qBoC;E6C5qBpC,+BAAuF;CACxF;;AAIH;EACE,iBAAgB;EAChB,iB7CyI+B;C6CxIhC;;AAID;EACE,mBAAkB;EAGlB,mBAAc;EAAd,eAAc;EACd,c7CuoBsC;C6CtoBvC;;AAGD;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,mBAAyB;EAAzB,0BAAyB;EACzB,c7C+nBsC;E6C9nBtC,8B7CpHgB;C6CyHjB;;AAVD;EAQyB,oBAAmB;CAAK;;AARjD;EASwB,qBAAoB;CAAK;;AAIjD;EACE,mBAAkB;EAClB,aAAY;EACZ,YAAW;EACX,aAAY;EACZ,iBAAgB;CACjB;;AlCnFG;EkCwFF;IACE,iB7CioBqC;I6ChoBrC,qBAAyC;GAC1C;EAED;IACE,uCAA8D;GAC/D;EAMD;IAAY,iB7CsnB2B;G6CtnBH;C5Cw2JrC;;AU78JG;EkC0GF;IAAY,iB7C+mB2B;G6C/mBH;C5Cy2JrC;;A6C9gKD;EACE,mBAAkB;EAClB,c9C+kBsC;E8C9kBtC,eAAc;EACd,U9CwsBmC;E+C5sBnC,kK/CwOgL;E+CtOhL,mBAAkB;EAClB,iB/C+O+B;E+C9O/B,iB/CkP+B;E+CjP/B,iBAAgB;EAChB,kBAAiB;EACjB,sBAAqB;EACrB,kBAAiB;EACjB,qBAAoB;EACpB,uBAAsB;EACtB,mBAAkB;EAClB,qBAAoB;EACpB,oBAAmB;EACnB,iBAAgB;EDNhB,oB9CuOoD;E8CrOpD,sBAAqB;EACrB,WAAU;CAiBX;;AA5BD;EAaW,a9C4rB2B;C8C5rBE;;AAbxC;EAgBI,mBAAkB;EAClB,eAAc;EACd,c9C4rBqC;E8C3rBrC,e9C4rBqC;C8CprBtC;;AA3BH;EAsBM,mBAAkB;EAClB,YAAW;EACX,0BAAyB;EACzB,oBAAmB;CACpB;;AAIL;EACE,kBAAgC;CAWjC;;AAZD;EAII,UAAS;CAOV;;AAXH;EAOM,OAAM;EACN,8BAAgE;EAChE,uB9CnBS;C8CoBV;;AAIL;EACE,kB9CkqBuC;C8CrpBxC;;AAdD;EAII,QAAO;EACP,c9C8pBqC;E8C7pBrC,e9C4pBqC;C8CrpBtC;;AAbH;EASM,SAAQ;EACR,qCAA2F;EAC3F,yB9CnCS;C8CoCV;;AAIL;EACE,kBAAgC;CAWjC;;AAZD;EAII,OAAM;CAOP;;AAXH;EAOM,UAAS;EACT,8B9C2oBmC;E8C1oBnC,0B9CjDS;C8CkDV;;AAIL;EACE,kB9CooBuC;C8CvnBxC;;AAdD;EAII,SAAQ;EACR,c9CgoBqC;E8C/nBrC,e9C8nBqC;C8CvnBtC;;AAbH;EASM,QAAO;EACP,qC9C2nBmC;E8C1nBnC,wB9CjES;C8CkEV;;AAoBL;EACE,iB9C0lBuC;E8CzlBvC,wB9C+lBuC;E8C9lBvC,Y9CnGa;E8CoGb,mBAAkB;EAClB,uB9C3Fa;EOjBX,uBP8MgC;C8ChGnC;;AElHD;EACE,mBAAkB;EAClB,OAAM;EACN,QAAO;EACP,chD6kBsC;EgD5kBtC,eAAc;EACd,iBhDktBuC;E+CvtBvC,kK/CwOgL;E+CtOhL,mBAAkB;EAClB,iB/C+O+B;E+C9O/B,iB/CkP+B;E+CjP/B,iBAAgB;EAChB,kBAAiB;EACjB,sBAAqB;EACrB,kBAAiB;EACjB,qBAAoB;EACpB,uBAAsB;EACtB,mBAAkB;EAClB,qBAAoB;EACpB,oBAAmB;EACnB,iBAAgB;ECLhB,oBhDsOoD;EgDpOpD,sBAAqB;EACrB,uBhDFa;EgDGb,6BAA4B;EAC5B,qChDMa;EOjBX,sBP+M+B;CgDhLlC;;AAnCD;EAoBI,mBAAkB;EAClB,eAAc;EACd,YhDitBoC;EgDhtBpC,ehDitBqC;EgDhtBrC,iBhD2L+B;CgDjLhC;;AAlCH;EA4BM,mBAAkB;EAClB,eAAc;EACd,YAAW;EACX,0BAAyB;EACzB,oBAAmB;CACpB;;AAIL;EACE,sBhDksBuC;CgD9qBxC;;AArBD;EAII,kCAAwE;CACzE;;AALH;;EASI,8BAAgE;CACjE;;AAVH;EAaI,UAAS;EACT,sChDwrBmE;CgDvrBpE;;AAfH;EAkBI,YhDwJ6B;EgDvJ7B,uBhD7CW;CgD8CZ;;AAGH;EACE,oBhD2qBuC;CgDppBxC;;AAxBD;EAII,gCAAsE;EACtE,chDuqBqC;EgDtqBrC,ahDqqBoC;EgDpqBpC,iBAA2B;CAC5B;;AARH;;EAYI,qCAA2F;CAC5F;;AAbH;EAgBI,QAAO;EACP,wChD8pBmE;CgD7pBpE;;AAlBH;EAqBI,UhD8H6B;EgD7H7B,yBhDvEW;CgDwEZ;;AAGH;EACE,mBhDipBuC;CgDjnBxC;;AAjCD;EAII,+BAAqE;CACtE;;AALH;;EASI,qCAA2F;CAC5F;;AAVH;EAaI,OAAM;EACN,yChDuoBmE;CgDtoBpE;;AAfH;EAkBI,ShDuG6B;EgDtG7B,0BhD9FW;CgD+FZ;;AApBH;EAwBI,mBAAkB;EAClB,OAAM;EACN,UAAS;EACT,eAAc;EACd,YhDqnBoC;EgDpnBpC,qBAAwC;EACxC,YAAW;EACX,iChDymBuD;CgDxmBxD;;AAGH;EACE,qBhD8mBuC;CgDvlBxC;;AAxBD;EAII,iCAAuE;EACvE,chD0mBqC;EgDzmBrC,ahDwmBoC;EgDvmBpC,iBAA2B;CAC5B;;AARH;;EAYI,qChDmmBqC;CgDlmBtC;;AAbH;EAgBI,SAAQ;EACR,uChDimBmE;CgDhmBpE;;AAlBH;EAqBI,WhDiE6B;EgDhE7B,wBhDpIW;CgDqIZ;;AAoBH;EACE,wBhD4jBwC;EgD3jBxC,iBAAgB;EAChB,gBhDuEgC;EgDtEhC,ehD4FmC;EgD3FnC,0BhDqjByD;EgDpjBzD,iCAAyE;EzChKvE,2CyCiKyE;EzChKzE,4CyCgKyE;CAM5E;;AAbD;EAWI,cAAa;CACd;;AAGH;EACE,wBhD6iBwC;EgD5iBxC,ehDjKgB;CgDkKjB;;AC5KD;EACE,mBAAkB;CACnB;;AAED;EACE,mBAAkB;EAClB,YAAW;EACX,iBAAgB;CACjB;;AAED;EACE,mBAAkB;EAClB,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,YAAW;EhCnBP,wCjB+3BgD;EiB/3BhD,gCjB+3BgD;EiB/3BhD,6DjB+3BgD;EiD12BpD,oCAA2B;EAA3B,4BAA2B;EAC3B,4BAAmB;EAAnB,oBAAmB;CACpB;;AhCnBC;EgCWF;IhCVI,iBAAgB;GgCkBnB;ChD0yKA;;AgDxyKD;;;EAGE,eAAc;CACf;;AAED;;EAEE,mBAAkB;EAClB,OAAM;CACP;;AAED;;EAEE,iCAAwB;EAAxB,yBAAwB;CAKzB;;AAHyC;EAJ1C;;IAKI,wCAA+B;IAA/B,gCAA+B;GAElC;ChD6yKA;;AgD3yKD;;EAEE,oCAA2B;EAA3B,4BAA2B;CAK5B;;AAHyC;EAJ1C;;IAKI,2CAAkC;IAAlC,mCAAkC;GAErC;ChDgzKA;;AgD9yKD;;EAEE,qCAA4B;EAA5B,6BAA4B;CAK7B;;AAHyC;EAJ1C;;IAKI,4CAAmC;IAAnC,oCAAmC;GAEtC;ChDmzKA;;AgD5yKD;EAEI,WAAU;EACV,yBAAwB;EACxB,6BAA4B;CAC7B;;AALH;;;EAUI,WAAU;CACX;;AAXH;;EAeI,WAAU;CACX;;AAhBH;;;;;EAuBI,iCAAwB;EAAxB,yBAAwB;CAKzB;;AAHyC;EAzB5C;;;;;IA0BM,wCAA+B;IAA/B,gCAA+B;GAElC;ChDmzKF;;AgD3yKD;;EAEE,mBAAkB;EAClB,OAAM;EACN,UAAS;EAET,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,sBAAuB;EAAvB,wBAAuB;EACvB,WjD6vBqC;EiD5vBrC,YjD7Ga;EiD8Gb,mBAAkB;EAClB,ajD2vBoC;CiDhvBrC;;A/CrHC;;;E+CgHE,YjDrHW;EiDsHX,sBAAqB;EACrB,WAAU;EACV,YAAW;C/ChHZ;;A+CmHH;EACE,QAAO;CAIR;;AACD;EACE,SAAQ;CAIT;;AAGD;;EAEE,sBAAqB;EACrB,YjDwuBsC;EiDvuBtC,ajDuuBsC;EiDtuBtC,gDAA+C;EAC/C,2BAA0B;CAC3B;;AACD;EACE,iNlCjHyI;CkCkH1I;;AACD;EACE,iNlCpHyI;CkCqH1I;;AAQD;EACE,mBAAkB;EAClB,SAAQ;EACR,aAAY;EACZ,QAAO;EACP,YAAW;EACX,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;EACvB,gBAAe;EAEf,kBjDisBqC;EiDhsBrC,iBjDgsBqC;EiD/rBrC,iBAAgB;CAoCjB;;AAhDD;EAeI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;EACd,YjD6rBoC;EiD5rBpC,YjD6rBmC;EiD5rBnC,kBjD6rBmC;EiD5rBnC,iBjD4rBmC;EiD3rBnC,oBAAmB;EACnB,2CjDpLW;CiDyMZ;;AA3CH;EA0BM,mBAAkB;EAClB,WAAU;EACV,QAAO;EACP,sBAAqB;EACrB,YAAW;EACX,aAAY;EACZ,YAAW;CACZ;;AAjCL;EAmCM,mBAAkB;EAClB,cAAa;EACb,QAAO;EACP,sBAAqB;EACrB,YAAW;EACX,aAAY;EACZ,YAAW;CACZ;;AA1CL;EA8CI,uBjD5MW;CiD6MZ;;AAQH;EACE,mBAAkB;EAClB,WAA6C;EAC7C,aAAY;EACZ,UAA4C;EAC5C,YAAW;EACX,kBAAiB;EACjB,qBAAoB;EACpB,YjD7Na;EiD8Nb,mBAAkB;CACnB;;ACxOD;EAAqB,oCAAmC;CAAK;;AAC7D;EAAqB,+BAA8B;CAAK;;AACxD;EAAqB,kCAAiC;CAAK;;AAC3D;EAAqB,kCAAiC;CAAK;;AAC3D;EAAqB,uCAAsC;CAAK;;AAChE;EAAqB,oCAAmC;CAAK;;ACF3D;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AkDPH;EACE,kCAAmC;CACpC;;AAED;EACE,yCAAwC;CACzC;;ACZD;EAAkB,qCAAoD;CAAI;;AAC1E;EAAkB,yCAAwD;CAAI;;AAC9E;EAAkB,2CAA0D;CAAI;;AAChF;EAAkB,4CAA2D;CAAI;;AACjF;EAAkB,0CAAyD;CAAI;;AAE/E;EAAmB,qBAAoB;CAAK;;AAC5C;EAAmB,yBAAwB;CAAK;;AAChD;EAAmB,2BAA0B;CAAK;;AAClD;EAAmB,4BAA2B;CAAK;;AACnD;EAAmB,0BAAyB;CAAK;;AAG/C;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAGH;EACE,8BAA+B;CAChC;;AAMD;EACE,kCAAwC;CACzC;;AACD;EACE,2CAAiD;EACjD,4CAAkD;CACnD;;AACD;EACE,4CAAkD;EAClD,+CAAqD;CACtD;;AACD;EACE,+CAAqD;EACrD,8CAAoD;CACrD;;AACD;EACE,2CAAiD;EACjD,8CAAoD;CACrD;;AAED;EACE,8BAA6B;CAC9B;;AAED;EACE,4BAA2B;CAC5B;;ACzDC;EACE,eAAc;EACd,YAAW;EACX,YAAW;CACZ;;ACKC;EAA2B,yBAAwB;CAAK;;AACxD;EAA2B,2BAA0B;CAAK;;AAC1D;EAA2B,iCAAgC;CAAK;;AAChE;EAA2B,0BAAyB;CAAK;;AACzD;EAA2B,0BAAyB;CAAK;;AACzD;EAA2B,8BAA6B;CAAK;;AAC7D;EAA2B,+BAA8B;CAAK;;AAC9D;EAA2B,gCAAwB;EAAxB,yBAAwB;CAAK;;AACxD;EAA2B,uCAA+B;EAA/B,gCAA+B;CAAK;;A5C0C/D;E4ClDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CtDwxLlE;;AU9uLG;E4ClDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CtDszLlE;;AU5wLG;E4ClDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CtDo1LlE;;AU1yLG;E4ClDA;IAA2B,yBAAwB;GAAK;EACxD;IAA2B,2BAA0B;GAAK;EAC1D;IAA2B,iCAAgC;GAAK;EAChE;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,0BAAyB;GAAK;EACzD;IAA2B,8BAA6B;GAAK;EAC7D;IAA2B,+BAA8B;GAAK;EAC9D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAK;EACxD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAK;CtDk3LlE;;AsDz2LD;EACE;IAAwB,yBAAwB;GAAK;EACrD;IAAwB,2BAA0B;GAAK;EACvD;IAAwB,iCAAgC;GAAK;EAC7D;IAAwB,0BAAyB;GAAK;EACtD;IAAwB,0BAAyB;GAAK;EACtD;IAAwB,8BAA6B;GAAK;EAC1D;IAAwB,+BAA8B;GAAK;EAC3D;IAAwB,gCAAwB;IAAxB,yBAAwB;GAAK;EACrD;IAAwB,uCAA+B;IAA/B,gCAA+B;GAAK;CtD83L7D;;AuDh6LD;EACE,mBAAkB;EAClB,eAAc;EACd,YAAW;EACX,WAAU;EACV,iBAAgB;CAoBjB;;AAzBD;EAQI,eAAc;EACd,YAAW;CACZ;;AAVH;;;;;EAiBI,mBAAkB;EAClB,OAAM;EACN,UAAS;EACT,QAAO;EACP,YAAW;EACX,aAAY;EACZ,UAAS;CACV;;AAGH;EAEI,wBAA+B;CAChC;;AAGH;EAEI,oBAA+B;CAChC;;AAGH;EAEI,iBAA8B;CAC/B;;AAGH;EAEI,kBAA8B;CAC/B;;ACxCC;EAAgC,mCAA8B;EAA9B,+BAA8B;CAAK;;AACnE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAK;;AACtE;EAAgC,2CAAsC;EAAtC,uCAAsC;CAAK;;AAC3E;EAAgC,8CAAyC;EAAzC,0CAAyC;CAAK;;AAE9E;EAA8B,+BAA0B;EAA1B,2BAA0B;CAAK;;AAC7D;EAA8B,iCAA4B;EAA5B,6BAA4B;CAAK;;AAC/D;EAA8B,uCAAkC;EAAlC,mCAAkC;CAAK;;AACrE;EAA8B,8BAAyB;EAAzB,0BAAyB;CAAK;;AAC5D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAK;;AAC1D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAK;;AAC1D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAK;;AAC5D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAK;;AAE5D;EAAoC,gCAAsC;EAAtC,uCAAsC;CAAK;;AAC/E;EAAoC,8BAAoC;EAApC,qCAAoC;CAAK;;AAC7E;EAAoC,iCAAkC;EAAlC,mCAAkC;CAAK;;AAC3E;EAAoC,kCAAyC;EAAzC,0CAAyC;CAAK;;AAClF;EAAoC,qCAAwC;EAAxC,yCAAwC;CAAK;;AAEjF;EAAiC,iCAAkC;EAAlC,mCAAkC;CAAK;;AACxE;EAAiC,+BAAgC;EAAhC,iCAAgC;CAAK;;AACtE;EAAiC,kCAA8B;EAA9B,+BAA8B;CAAK;;AACpE;EAAiC,oCAAgC;EAAhC,iCAAgC;CAAK;;AACtE;EAAiC,mCAA+B;EAA/B,gCAA+B;CAAK;;AAErE;EAAkC,qCAAoC;EAApC,qCAAoC;CAAK;;AAC3E;EAAkC,mCAAkC;EAAlC,mCAAkC;CAAK;;AACzE;EAAkC,sCAAgC;EAAhC,iCAAgC;CAAK;;AACvE;EAAkC,uCAAuC;EAAvC,wCAAuC;CAAK;;AAC9E;EAAkC,0CAAsC;EAAtC,uCAAsC;CAAK;;AAC7E;EAAkC,uCAAiC;EAAjC,kCAAiC;CAAK;;AAExE;EAAgC,qCAA2B;EAA3B,4BAA2B;CAAK;;AAChE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAK;;AACtE;EAAgC,oCAA+B;EAA/B,gCAA+B;CAAK;;AACpE;EAAgC,uCAA6B;EAA7B,8BAA6B;CAAK;;AAClE;EAAgC,yCAA+B;EAA/B,gCAA+B;CAAK;;AACpE;EAAgC,wCAA8B;EAA9B,+BAA8B;CAAK;;A9CYnE;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CxD8oMtE;;AUloMG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CxDuvMtE;;AU3uMG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CxDg2MtE;;AUp1MG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAK;EACnE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAK;EAC3E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAK;EAE9E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAK;EAC7D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAK;EAC/D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAK;EACrE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAK;EAC1D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAC5D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAK;EAE5D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAK;EAC/E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAK;EAC7E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAK;EAC3E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAK;EAClF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAK;EAEjF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAK;EACxE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAK;EACpE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAK;EACtE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAK;EAErE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAK;EAC3E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAK;EACzE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAK;EACvE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAK;EAC9E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAK;EAC7E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAK;EAExE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAK;EAChE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAK;EACtE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAK;EAClE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAK;EACpE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAK;CxDy8MtE;;AyDr/MG;ECDF,uBAAsB;CDC2B;;AAC/C;ECCF,wBAAuB;CDD2B;;AAChD;ECGF,uBAAsB;CDH2B;;A/CsD/C;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzD2gNlD;;AUr9MG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzDuhNlD;;AUj+MG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzDmiNlD;;AU7+MG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzD+iNlD;;A2D5iNC;EAAyB,4BAA8B;CAAI;;AAA3D;EAAyB,8BAA8B;CAAI;;AAA3D;EAAyB,8BAA8B;CAAI;;AAA3D;EAAyB,2BAA8B;CAAI;;AAA3D;EAAyB,oCAA8B;EAA9B,4BAA8B;CAAI;;AAK7D;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,QAAO;EACP,c5D2jBsC;C4D1jBvC;;AAED;EACE,gBAAe;EACf,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c5DmjBsC;C4DljBvC;;AAG6B;EAD9B;IAEI,yBAAgB;IAAhB,iBAAgB;IAChB,OAAM;IACN,c5D2iBoC;G4DziBvC;C3D6jNA;;A4D7lND;ECEE,mBAAkB;EAClB,WAAU;EACV,YAAW;EACX,WAAU;EACV,iBAAgB;EAChB,uBAAsB;EACtB,oBAAmB;EACnB,UAAS;CDPV;;ACiBC;EAEE,iBAAgB;EAChB,YAAW;EACX,aAAY;EACZ,kBAAiB;EACjB,WAAU;EACV,oBAAmB;CACpB;;AC7BH;EAAa,+DAAqC;CAAI;;AACtD;EAAU,yDAAkC;CAAI;;AAChD;EAAa,wDAAqC;CAAI;;AACtD;EAAe,4BAA2B;CAAK;;ACC3C;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,wBAA4B;CAAI;;AAAvD;EAAuB,wBAA4B;CAAI;;AAI3D;EAAU,2BAA0B;CAAK;;AACzC;EAAU,4BAA2B;CAAK;;ACAlC;EAAgC,qBAA4B;CAAI;;AAChE;;EAEE,yBAAoC;CACrC;;AACD;;EAEE,2BAAwC;CACzC;;AACD;;EAEE,4BAA0C;CAC3C;;AACD;;EAEE,0BAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,0BAA4B;CAAI;;AAChE;;EAEE,8BAAoC;CACrC;;AACD;;EAEE,gCAAwC;CACzC;;AACD;;EAEE,iCAA0C;CAC3C;;AACD;;EAEE,+BAAsC;CACvC;;AAhBD;EAAgC,wBAA4B;CAAI;;AAChE;;EAEE,4BAAoC;CACrC;;AACD;;EAEE,8BAAwC;CACzC;;AACD;;EAEE,+BAA0C;CAC3C;;AACD;;EAEE,6BAAsC;CACvC;;AAhBD;EAAgC,0BAA4B;CAAI;;AAChE;;EAEE,8BAAoC;CACrC;;AACD;;EAEE,gCAAwC;CACzC;;AACD;;EAEE,iCAA0C;CAC3C;;AACD;;EAEE,+BAAsC;CACvC;;AAhBD;EAAgC,wBAA4B;CAAI;;AAChE;;EAEE,4BAAoC;CACrC;;AACD;;EAEE,8BAAwC;CACzC;;AACD;;EAEE,+BAA0C;CAC3C;;AACD;;EAEE,6BAAsC;CACvC;;AAhBD;EAAgC,sBAA4B;CAAI;;AAChE;;EAEE,0BAAoC;CACrC;;AACD;;EAEE,4BAAwC;CACzC;;AACD;;EAEE,6BAA0C;CAC3C;;AACD;;EAEE,2BAAsC;CACvC;;AAhBD;EAAgC,4BAA4B;CAAI;;AAChE;;EAEE,gCAAoC;CACrC;;AACD;;EAEE,kCAAwC;CACzC;;AACD;;EAEE,mCAA0C;CAC3C;;AACD;;EAEE,iCAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,yBAA4B;CAAI;;AAChE;;EAEE,6BAAoC;CACrC;;AACD;;EAEE,+BAAwC;CACzC;;AACD;;EAEE,gCAA0C;CAC3C;;AACD;;EAEE,8BAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,yBAA4B;CAAI;;AAChE;;EAEE,6BAAoC;CACrC;;AACD;;EAEE,+BAAwC;CACzC;;AACD;;EAEE,gCAA0C;CAC3C;;AACD;;EAEE,8BAAsC;CACvC;;AAKL;EAAmB,wBAAuB;CAAK;;AAC/C;;EAEE,4BAA2B;CAC5B;;AACD;;EAEE,8BAA6B;CAC9B;;AACD;;EAEE,+BAA8B;CAC/B;;AACD;;EAEE,6BAA4B;CAC7B;;AtDYD;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAK;EAC/C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChEurOJ;;AU3qOG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAK;EAC/C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChEi7OJ;;AUr6OG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAK;EAC/C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChE2qPJ;;AU/pPG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAK;EAC/C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChEq6PJ;;AiE/8PD;EAAkB,kGlEoOgG;CkEpOzD;;AAIzD;EAAiB,+BAA8B;CAAK;;AACpD;EAAiB,+BAA8B;CAAK;;AACpD;ECRE,iBAAgB;EAChB,wBAAuB;EACvB,oBAAmB;CDMsB;;AAQvC;EAAwB,4BAA2B;CAAK;;AACxD;EAAwB,6BAA4B;CAAK;;AACzD;EAAwB,8BAA6B;CAAK;;AvDsC1D;EuDxCA;IAAwB,4BAA2B;GAAK;EACxD;IAAwB,6BAA4B;GAAK;EACzD;IAAwB,8BAA6B;GAAK;CjEy+P7D;;AUn8PG;EuDxCA;IAAwB,4BAA2B;GAAK;EACxD;IAAwB,6BAA4B;GAAK;EACzD;IAAwB,8BAA6B;GAAK;CjEq/P7D;;AU/8PG;EuDxCA;IAAwB,4BAA2B;GAAK;EACxD;IAAwB,6BAA4B;GAAK;EACzD;IAAwB,8BAA6B;GAAK;CjEigQ7D;;AU39PG;EuDxCA;IAAwB,4BAA2B;GAAK;EACxD;IAAwB,6BAA4B;GAAK;EACzD;IAAwB,8BAA6B;GAAK;CjE6gQ7D;;AiEvgQD;EAAmB,qCAAoC;CAAK;;AAC5D;EAAmB,qCAAoC;CAAK;;AAC5D;EAAmB,sCAAqC;CAAK;;AAI7D;EAAsB,4BAA0C;CAAI;;AACpE;EAAsB,4BAA2C;CAAI;;AACrE;EAAsB,4BAAyC;CAAI;;AACnE;EAAsB,8BAA6B;CAAK;;AAIxD;EAAc,uBAAwB;CAAI;;AEpCxC;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AgE4BH;EAAa,0BAA6B;CAAI;;AAC9C;EAAc,0BAA6B;CAAI;;AAE/C;EAAiB,qCAAkC;CAAI;;AACvD;EAAiB,2CAAkC;CAAI;;AAIvD;EGpDE,YAAW;EACX,mBAAkB;EAClB,kBAAiB;EACjB,8BAA6B;EAC7B,UAAS;CHkDV;;AIrDD;ECCE,+BAAkC;CDCnC;;AAED;ECHE,8BAAkC;CDKnC;;AECC;EACE;;;IAKE,6BAA4B;IAE5B,4BAA2B;GAC5B;EAED;IAEI,2BAA0B;GAC3B;EAQH;IACE,8BAA6B;GAC9B;EAaD;IACE,iCAAgC;GACjC;EACD;;IAEE,0BxErCY;IwEsCZ,yBAAwB;GACzB;EAOD;IACE,4BAA2B;GAC5B;EAED;;IAEE,yBAAwB;GACzB;EAED;;;IAGE,WAAU;IACV,UAAS;GACV;EAED;;IAEE,wBAAuB;GACxB;EAOD;IACE,SxEq0BgC;GC+yOnC;EuElnQC;IACE,4BAA2C;GAC5C;EACD;IACE,4BAA2C;GAC5C;EAGD;IACE,cAAa;GACd;EACD;IACE,uBxElFS;GwEmFV;EAED;IACE,qCAAoC;GAMrC;EAPD;;IAKI,kCAAmC;GACpC;EAEH;;IAGI,qCAAsC;GACvC;CvE+mQN","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","/*!\n * Bootstrap v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n color: inherit;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode,\nkbd,\npre,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 1rem;\n background-color: transparent;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table .table {\n background-color: #fff;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #212529;\n border-color: #32383e;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n height: calc(2.25rem + 2px);\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-lg > .input-group-append > .form-control-plaintext.btn {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) {\n height: calc(1.8125rem + 2px);\n}\n\n.form-control-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) {\n height: calc(2.875rem + 2px);\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip, .was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n background-color: #71dd8a;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n background-color: #efa2a9;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover, .btn:focus {\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active {\n background-image: none;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n background-color: transparent;\n background-image: none;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n background-color: transparent;\n background-image: none;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n background-color: transparent;\n background-image: none;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n background-color: transparent;\n background-image: none;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n background-color: transparent;\n background-image: none;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n background-color: transparent;\n background-image: none;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n background-color: transparent;\n background-image: none;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n background-color: transparent;\n background-image: none;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n background-color: transparent;\n border-color: transparent;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n border-color: transparent;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n margin-left: -1px;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file:focus {\n z-index: 3;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label,\n.input-group > .custom-file:not(:first-child) .custom-file-label::after {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n margin-bottom: 0;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: 0;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n user-select: none;\n background-color: #dee2e6;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: 0;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n background-size: 8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n opacity: 0;\n}\n\n.custom-select-sm {\n height: calc(1.8125rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 75%;\n}\n\n.custom-select-lg {\n height: calc(2.875rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 125%;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(2.25rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(2.25rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:focus ~ .custom-file-label::after {\n border-color: #80bdff;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(calc(2.25rem + 2px) - 1px * 2);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: 1px solid #ced4da;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n padding-left: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-webkit-slider-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-moz-range-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-ms-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:first-child .card-img-top,\n .card-group > .card:first-child .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:first-child .card-img-bottom,\n .card-group > .card:first-child .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:last-child .card-img-top,\n .card-group > .card:last-child .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:last-child .card-img-bottom,\n .card-group > .card:last-child .card-footer {\n border-bottom-left-radius: 0;\n }\n .card-group > .card:only-child {\n border-radius: 0.25rem;\n }\n .card-group > .card:only-child .card-img-top,\n .card-group > .card:only-child .card-header {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n .card-group > .card:only-child .card-img-bottom,\n .card-group > .card:only-child .card-footer {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {\n border-radius: 0;\n }\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {\n border-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-link:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\n.badge-primary[href]:hover, .badge-primary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #0062cc;\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\n.badge-secondary[href]:hover, .badge-secondary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #545b62;\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\n.badge-success[href]:hover, .badge-success[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1e7e34;\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.badge-info[href]:hover, .badge-info[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #117a8b;\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\n.badge-warning[href]:hover, .badge-warning[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #d39e00;\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\n.badge-danger[href]:hover, .badge-danger[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #bd2130;\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.badge-light[href]:hover, .badge-light[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #dae0e5;\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.badge-dark[href]:hover, .badge-dark[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1d2124;\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:hover, .list-group-item:focus {\n z-index: 1;\n text-decoration: none;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover, .close:focus {\n color: #000;\n text-decoration: none;\n opacity: .75;\n}\n\n.close:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -25%);\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: translate(0, 0);\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - (0.5rem * 2));\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem;\n border-bottom: 1px solid #e9ecef;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-centered {\n min-height: calc(100% - (1.75rem * 2));\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg {\n max-width: 800px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top .arrow, .bs-popover-auto[x-placement^=\"top\"] .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0;\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n bottom: 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n bottom: 1px;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right .arrow, .bs-popover-auto[x-placement^=\"right\"] .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0.5rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n left: 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n left: 1px;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n border-width: 0 0.5rem 0.5rem 0.5rem;\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n top: 0;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n top: 1px;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left .arrow, .bs-popover-auto[x-placement^=\"left\"] .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n border-width: 0.5rem 0 0.5rem 0.5rem;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n right: 0;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n right: 1px;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n color: inherit;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-item {\n position: relative;\n display: none;\n align-items: center;\n width: 100%;\n transition: transform 0.6s ease;\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n position: absolute;\n top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next,\n .active.carousel-item-right {\n transform: translate3d(100%, 0, 0);\n }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-prev,\n .active.carousel-item-left {\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-duration: .6s;\n transition-property: opacity;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n opacity: 0;\n}\n\n.carousel-fade .carousel-item-next,\n.carousel-fade .carousel-item-prev,\n.carousel-fade .carousel-item.active,\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-prev {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-fade .carousel-item-next,\n .carousel-fade .carousel-item-prev,\n .carousel-fade .carousel-item.active,\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-prev {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: .9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: transparent no-repeat center center;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 10px;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n position: relative;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n position: absolute;\n top: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators li::after {\n position: absolute;\n bottom: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators .active {\n background-color: #fff;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0062cc !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #545b62 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #1e7e34 !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #117a8b !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #d39e00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #bd2130 !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #dae0e5 !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #1d2124 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { font-size: $h1-font-size; }\nh2, .h2 { font-size: $h2-font-size; }\nh3, .h3 { font-size: $h3-font-size; }\nh4, .h4 { font-size: $h4-font-size; }\nh5, .h5 { font-size: $h5-font-size; }\nh6, .h6 { font-size: $h6-font-size; }\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n font-size: $display1-size;\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n font-size: $display2-size;\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n font-size: $display3-size;\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n font-size: $display4-size;\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n font-size: $small-font-size;\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n font-size: $blockquote-font-size;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%; // back to default font-size\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: ($spacer / 2);\n line-height: 1;\n}\n\n.figure-caption {\n font-size: $figure-caption-font-size;\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n// stylelint-disable indentation, media-query-list-comma-newline-after\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n}\n","// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n font-size: $code-font-size;\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n font-size: $kbd-font-size;\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n font-size: $code-font-size;\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: $spacer;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n\n .table {\n background-color: $body-bg;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: (2 * $table-border-width);\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, -9));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evalutating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map) {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $yiq-text-dark;\n } @else {\n @return $yiq-text-light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-size: $font-size-base;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @if $enable-rounded {\n // Manually use the if/else instead of the mixin to account for iOS override\n border-radius: $input-border-radius;\n } @else {\n // Otherwise undo the iOS default\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
'}),Rn=c({},Ci.DefaultType,{content:"(string|element|function)"}),Mn="fade",Wn=".popover-header",Fn=".popover-body",Un={HIDE:"hide"+kn,HIDDEN:"hidden"+kn,SHOW:(Hn="show")+kn,SHOWN:"shown"+kn,INSERTED:"inserted"+kn,CLICK:"click"+kn,FOCUSIN:"focusin"+kn,FOCUSOUT:"focusout"+kn,MOUSEENTER:"mouseenter"+kn,MOUSELEAVE:"mouseleave"+kn},Bn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Sn(this.getTipElement()).addClass(Pn+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Sn(this.config.template)[0],this.tip},r.setContent=function(){var t=Sn(this.getTipElement());this.setElementContent(t.find(Wn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Fn),e),t.removeClass(Mn+" "+Hn)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Sn(this.getTipElement()),e=t.attr("class").match(xn);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nvar cache = {};\n\nvar isIE = function () {\n var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';\n\n version = version.toString();\n if (cache.hasOwnProperty(version)) {\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(function (key) {\n return cache[key];\n });\n return cache[version];\n};\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // floor sides to avoid blurry text\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Util = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n const TRANSITION_END = 'transitionend'\n const MAX_UID = 1000000\n const MILLISECONDS_MULTIPLIER = 1000\n\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n const $selector = $(document).find(selector)\n return $selector.length > 0 ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n const floatTransitionDuration = parseFloat(transitionDuration)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n element = element || this._element\n\n const rootElement = this._getRootElement(element)\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = $(this._element).find(Selector.INPUT)[0]\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = $(rootElement).find(Selector.ACTIVE)[0]\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !$(this._element).hasClass(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if ($(this._element).find(Selector.NEXT_PREV)[0]) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM))\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0])\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement)\n .find(Selector.ACTIVE)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n $(Selector.DATA_RIDE).each(function () {\n const $carousel = $(this)\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray($(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const tabToggles = $(Selector.DATA_TOGGLE)\n for (let i = 0; i < tabToggles.length; i++) {\n const elem = tabToggles[i]\n const selector = Util.getSelectorFromElement(elem)\n if (selector !== null && $(selector).filter(element).length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = $.makeArray(\n $(this._parent)\n .find(Selector.ACTIVES)\n .filter(`[data-parent=\"${this._config.parent}\"]`)\n )\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length > 0) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n if (this._triggerArray.length > 0) {\n for (let i = 0; i < this._triggerArray.length; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $(selector)\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = $(this._config.parent)[0]\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n $(parent).find(selector).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length > 0) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? $(selector)[0] : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for
elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n $(selector).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n }\n\n const Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n this._menu = $(parent).find(Selector.MENU)[0]\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element).parent()\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets) || {}\n }\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = $.makeArray($(Selector.DATA_TOGGLE))\n for (let i = 0; i < toggles.length; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = $(parent).find(Selector.DATA_TOGGLE)[0]\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = $(parent).find(Selector.VISIBLE_ITEMS).get()\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top',\n NAVBAR_TOGGLER : '.navbar-toggler'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = $(element).find(Selector.DIALOG)[0]\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n $(this._backdrop).addClass(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const actualPadding = $(element)[0].style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(Selector.STICKY_CONTENT).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust navbar-toggler margin\n $(Selector.NAVBAR_TOGGLER).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const padding = $(element).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right')\n }\n })\n\n // Restore sticky content and navbar-toggler margin\n $(`${Selector.STICKY_CONTENT}, ${Selector.NAVBAR_TOGGLER}`).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(document.body).css('padding-right', padding).removeData('padding-right')\n }\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Modal.Default,\n ...$(this).data(),\n ...typeof config === 'object' && config\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = $(selector)[0]\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle())\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this.element).data(),\n ...config\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(data) {\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(data.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n }\n\n const DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = $.makeArray($(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = $(targetSelector)[0]\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $(queries.join(','))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
',trigger:"hover focus",title:"",delay:0,html:!(_e={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(de={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},pe="out",ve={HIDE:"hide"+he,HIDDEN:"hidden"+he,SHOW:(me="show")+he,SHOWN:"shown"+he,INSERTED:"inserted"+he,CLICK:"click"+he,FOCUSIN:"focusin"+he,FOCUSOUT:"focusout"+he,MOUSEENTER:"mouseenter"+he,MOUSELEAVE:"mouseleave"+he},Ee="fade",ye="show",Te=".tooltip-inner",Ce=".arrow",Ie="hover",Ae="focus",De="click",be="manual",Se=function(){function i(t,e){if("undefined"==typeof c)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=oe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(oe(this.getTipElement()).hasClass(ye))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),oe.removeData(this.element,this.constructor.DATA_KEY),oe(this.element).off(this.constructor.EVENT_KEY),oe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&oe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===oe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=oe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){oe(this.element).trigger(t);var n=oe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Cn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&oe(i).addClass(Ee);var s="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,o=this._getAttachment(s);this.addAttachmentClass(o);var a=!1===this.config.container?document.body:oe(this.config.container);oe(i).data(this.constructor.DATA_KEY,this),oe.contains(this.element.ownerDocument.documentElement,this.tip)||oe(i).appendTo(a),oe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new c(this.element,i,{placement:o,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Ce},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),oe(i).addClass(ye),"ontouchstart"in document.documentElement&&oe(document.body).children().on("mouseover",null,oe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,oe(e.element).trigger(e.constructor.Event.SHOWN),t===pe&&e._leave(null,e)};if(oe(this.tip).hasClass(Ee)){var h=Cn.getTransitionDurationFromElement(this.tip);oe(this.tip).one(Cn.TRANSITION_END,l).emulateTransitionEnd(h)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=oe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==me&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),oe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(oe(this.element).trigger(i),!i.isDefaultPrevented()){if(oe(n).removeClass(ye),"ontouchstart"in document.documentElement&&oe(document.body).children().off("mouseover",null,oe.noop),this._activeTrigger[De]=!1,this._activeTrigger[Ae]=!1,this._activeTrigger[Ie]=!1,oe(this.tip).hasClass(Ee)){var s=Cn.getTransitionDurationFromElement(n);oe(n).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){oe(this.getTipElement()).addClass(ue+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||oe(this.config.template)[0],this.tip},t.setContent=function(){var t=oe(this.getTipElement());this.setElementContent(t.find(Te),this.getTitle()),t.removeClass(Ee+" "+ye)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?oe(e).parent().is(t)||t.empty().append(e):t.text(oe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return _e[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)oe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==be){var e=t===Ie?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Ie?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;oe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}oe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=h({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||oe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ae:Ie]=!0),oe(e.getTipElement()).hasClass(ye)||e._hoverState===me?e._hoverState=me:(clearTimeout(e._timeout),e._hoverState=me,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===me&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||oe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ae:Ie]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=pe,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===pe&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=h({},this.constructor.Default,oe(this.element).data(),t)).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Cn.typeCheckConfig(ae,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=oe(this.getTipElement()),e=t.attr("class").match(fe);null!==e&&0

'}),He=h({},Nn.DefaultType,{content:"(string|element|function)"}),We="fade",xe=".popover-header",Ue=".popover-body",Ke={HIDE:"hide"+ke,HIDDEN:"hidden"+ke,SHOW:(Me="show")+ke,SHOWN:"shown"+ke,INSERTED:"inserted"+ke,CLICK:"click"+ke,FOCUSIN:"focusin"+ke,FOCUSOUT:"focusout"+ke,MOUSEENTER:"mouseenter"+ke,MOUSELEAVE:"mouseleave"+ke},Fe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){we(this.getTipElement()).addClass(Le+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||we(this.config.template)[0],this.tip},r.setContent=function(){var t=we(this.getTipElement());this.setElementContent(t.find(xe),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ue),e),t.removeClass(We+" "+Me)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=we(this.getTipElement()),e=t.attr("class").match(je);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n const TRANSITION_END = 'transitionend'\n const MAX_UID = 1000000\n const MILLISECONDS_MULTIPLIER = 1000\n\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n const $selector = $(document).find(selector)\n return $selector.length > 0 ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n const floatTransitionDuration = parseFloat(transitionDuration)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n element = element || this._element\n\n const rootElement = this._getRootElement(element)\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = $(this._element).find(Selector.INPUT)[0]\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = $(rootElement).find(Selector.ACTIVE)[0]\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !$(this._element).hasClass(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if ($(this._element).find(Selector.NEXT_PREV)[0]) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM))\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0])\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement)\n .find(Selector.ACTIVE)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n $(Selector.DATA_RIDE).each(function () {\n const $carousel = $(this)\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray($(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const tabToggles = $(Selector.DATA_TOGGLE)\n for (let i = 0; i < tabToggles.length; i++) {\n const elem = tabToggles[i]\n const selector = Util.getSelectorFromElement(elem)\n if (selector !== null && $(selector).filter(element).length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = $.makeArray(\n $(this._parent)\n .find(Selector.ACTIVES)\n .filter(`[data-parent=\"${this._config.parent}\"]`)\n )\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length > 0) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n if (this._triggerArray.length > 0) {\n for (let i = 0; i < this._triggerArray.length; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $(selector)\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = $(this._config.parent)[0]\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n $(parent).find(selector).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length > 0) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? $(selector)[0] : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n $(selector).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n }\n\n const Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n this._menu = $(parent).find(Selector.MENU)[0]\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element).parent()\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets) || {}\n }\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = $.makeArray($(Selector.DATA_TOGGLE))\n for (let i = 0; i < toggles.length; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = $(parent).find(Selector.DATA_TOGGLE)[0]\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = $(parent).find(Selector.VISIBLE_ITEMS).get()\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top',\n NAVBAR_TOGGLER : '.navbar-toggler'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = $(element).find(Selector.DIALOG)[0]\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n $(this._backdrop).addClass(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const actualPadding = $(element)[0].style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(Selector.STICKY_CONTENT).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust navbar-toggler margin\n $(Selector.NAVBAR_TOGGLER).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const padding = $(element).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right')\n }\n })\n\n // Restore sticky content and navbar-toggler margin\n $(`${Selector.STICKY_CONTENT}, ${Selector.NAVBAR_TOGGLER}`).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(document.body).css('padding-right', padding).removeData('padding-right')\n }\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Modal.Default,\n ...$(this).data(),\n ...typeof config === 'object' && config\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = $(selector)[0]\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle())\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this.element).data(),\n ...config\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(data) {\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(data.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n }\n\n const DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.1.0'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = $.makeArray($(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = $(targetSelector)[0]\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $(queries.join(','))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
',trigger:"hover focus",title:"",delay:0,html:!(An={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Dn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},Nn="out",kn={HIDE:"hide"+wn,HIDDEN:"hidden"+wn,SHOW:(On="show")+wn,SHOWN:"shown"+wn,INSERTED:"inserted"+wn,CLICK:"click"+wn,FOCUSIN:"focusin"+wn,FOCUSOUT:"focusout"+wn,MOUSEENTER:"mouseenter"+wn,MOUSELEAVE:"mouseleave"+wn},xn="fade",Pn="show",Ln=".tooltip-inner",jn=".arrow",Hn="hover",Mn="focus",Fn="click",Wn="manual",Rn=function(){function i(e,t){if("undefined"==typeof Ct)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=yn(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(yn(this.getTipElement()).hasClass(Pn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),yn.removeData(this.element,this.constructor.DATA_KEY),yn(this.element).off(this.constructor.EVENT_KEY),yn(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&yn(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===yn(this.element).css("display"))throw new Error("Please use show on visible elements");var e=yn.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){yn(this.element).trigger(e);var n=yn.contains(this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=we.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&yn(i).addClass(xn);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:yn(document).find(this.config.container);yn(i).data(this.constructor.DATA_KEY,this),yn.contains(this.element.ownerDocument.documentElement,this.tip)||yn(i).appendTo(a),yn(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Ct(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:jn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),yn(i).addClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().on("mouseover",null,yn.noop);var l=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,yn(t.element).trigger(t.constructor.Event.SHOWN),e===Nn&&t._leave(null,t)};if(yn(this.tip).hasClass(xn)){var c=we.getTransitionDurationFromElement(this.tip);yn(this.tip).one(we.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},e.hide=function(e){var t=this,n=this.getTipElement(),i=yn.Event(this.constructor.Event.HIDE),r=function(){t._hoverState!==On&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute("aria-describedby"),yn(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(yn(this.element).trigger(i),!i.isDefaultPrevented()){if(yn(n).removeClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().off("mouseover",null,yn.noop),this._activeTrigger[Fn]=!1,this._activeTrigger[Mn]=!1,this._activeTrigger[Hn]=!1,yn(this.tip).hasClass(xn)){var o=we.getTransitionDurationFromElement(n);yn(n).one(we.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){yn(this.getTipElement()).addClass(Tn+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||yn(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(yn(e.querySelectorAll(Ln)),this.getTitle()),yn(e).removeClass(xn+" "+Pn)},e.setElementContent=function(e,t){var n=this.config.html;"object"==typeof t&&(t.nodeType||t.jquery)?n?yn(t).parent().is(e)||e.empty().append(t):e.text(yn(t).text()):e[n?"html":"text"](t)},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e||(e="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},e._getAttachment=function(e){return An[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)yn(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==Wn){var t=e===Hn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Hn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;yn(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}yn(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==e)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Mn:Hn]=!0),yn(t.getTipElement()).hasClass(Pn)||t._hoverState===On?t._hoverState=On:(clearTimeout(t._timeout),t._hoverState=On,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===On&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Mn:Hn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Nn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Nn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){return"number"==typeof(e=l({},this.constructor.Default,yn(this.element).data(),"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),we.typeCheckConfig(En,e,this.constructor.DefaultType),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=yn(this.getTipElement()),t=e.attr("class").match(Sn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(yn(e).removeClass(xn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=yn(this).data(bn),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),yn(this).data(bn,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return In}},{key:"NAME",get:function(){return En}},{key:"DATA_KEY",get:function(){return bn}},{key:"Event",get:function(){return kn}},{key:"EVENT_KEY",get:function(){return wn}},{key:"DefaultType",get:function(){return Dn}}]),i}(),yn.fn[En]=Rn._jQueryInterface,yn.fn[En].Constructor=Rn,yn.fn[En].noConflict=function(){return yn.fn[En]=Cn,Rn._jQueryInterface},Rn),Qi=(Bn="popover",Kn="."+(qn="bs.popover"),Qn=(Un=t).fn[Bn],Yn="bs-popover",Vn=new RegExp("(^|\\s)"+Yn+"\\S+","g"),zn=l({},Ki.Default,{placement:"right",trigger:"click",content:"",template:''}),Gn=l({},Ki.DefaultType,{content:"(string|element|function)"}),Jn="fade",Xn=".popover-header",$n=".popover-body",ei={HIDE:"hide"+Kn,HIDDEN:"hidden"+Kn,SHOW:(Zn="show")+Kn,SHOWN:"shown"+Kn,INSERTED:"inserted"+Kn,CLICK:"click"+Kn,FOCUSIN:"focusin"+Kn,FOCUSOUT:"focusout"+Kn,MOUSEENTER:"mouseenter"+Kn,MOUSELEAVE:"mouseleave"+Kn},ti=function(e){var t,n;function i(){return e.apply(this,arguments)||this}n=e,(t=i).prototype=Object.create(n.prototype),(t.prototype.constructor=t).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(e){Un(this.getTipElement()).addClass(Yn+"-"+e)},r.getTipElement=function(){return this.tip=this.tip||Un(this.config.template)[0],this.tip},r.setContent=function(){var e=Un(this.getTipElement());this.setElementContent(e.find(Xn),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find($n),t),e.removeClass(Jn+" "+Zn)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var e=Un(this.getTipElement()),t=e.attr("class").match(Vn);null!==t&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||e= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Util = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n const TRANSITION_END = 'transitionend'\n const MAX_UID = 1000000\n const MILLISECONDS_MULTIPLIER = 1000\n\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n const floatTransitionDuration = parseFloat(transitionDuration)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => elem.getAttribute('data-parent') === this._config.parent)\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for
elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n }\n\n const Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets) || {}\n }\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(document).find(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this.element).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n }\n\n const DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n const TRANSITION_END = 'transitionend'\n const MAX_UID = 1000000\n const MILLISECONDS_MULTIPLIER = 1000\n\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n const floatTransitionDuration = parseFloat(transitionDuration)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => elem.getAttribute('data-parent') === this._config.parent)\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n }\n\n const Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets) || {}\n }\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(document).find(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this.element).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n }\n\n const DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
+{%- endif -%} + +{%- if include.hide_markup == null -%} + {%- highlight html -%} + {{- include.content | replace: 'data-src="holder.js', 'src="...' -}} + {%- endhighlight -%} +{%- endif -%} diff --git a/vendor/twbs/bootstrap/site/_includes/favicons.html b/vendor/twbs/bootstrap/site/_includes/favicons.html new file mode 100644 index 000000000..df4c15e64 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/favicons.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/twbs/bootstrap/site/_includes/footer.html b/vendor/twbs/bootstrap/site/_includes/footer.html new file mode 100644 index 000000000..8e16577c1 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/footer.html @@ -0,0 +1,12 @@ + diff --git a/vendor/twbs/bootstrap/site/_includes/header.html b/vendor/twbs/bootstrap/site/_includes/header.html new file mode 100644 index 000000000..b92a5790a --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/header.html @@ -0,0 +1,37 @@ + + + + + + + + {%- if page.title -%} + {{ page.title | smartify }} · {{ site.title | smartify }} + {%- else -%} + {{ site.title | smartify }} · {{ site.description | smartify }} + {%- endif -%} + + + +{% if site.github %} + +{% else %} + +{% endif %} + + +{% if page.layout == "docs" %} + +{% endif %} + + +{% include favicons.html %} + +{% include social.html %} + + + diff --git a/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg b/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg new file mode 100644 index 000000000..816028bd8 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg @@ -0,0 +1 @@ +Bootstrap diff --git a/vendor/twbs/bootstrap/site/_includes/icons/download.svg b/vendor/twbs/bootstrap/site/_includes/icons/download.svg new file mode 100644 index 000000000..aa5f3f1be --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/download.svg @@ -0,0 +1 @@ +Download icon diff --git a/vendor/twbs/bootstrap/site/_includes/icons/github.svg b/vendor/twbs/bootstrap/site/_includes/icons/github.svg new file mode 100644 index 000000000..5d6ad1804 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/github.svg @@ -0,0 +1 @@ +GitHub diff --git a/vendor/twbs/bootstrap/site/_includes/icons/import.svg b/vendor/twbs/bootstrap/site/_includes/icons/import.svg new file mode 100644 index 000000000..0a9dbb269 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/import.svg @@ -0,0 +1 @@ +Import icon diff --git a/vendor/twbs/bootstrap/site/_includes/icons/lightning.svg b/vendor/twbs/bootstrap/site/_includes/icons/lightning.svg new file mode 100644 index 000000000..be6f475ef --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/lightning.svg @@ -0,0 +1 @@ +Lightning icon diff --git a/vendor/twbs/bootstrap/site/_includes/icons/menu.svg b/vendor/twbs/bootstrap/site/_includes/icons/menu.svg new file mode 100644 index 000000000..03e15dc49 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/menu.svg @@ -0,0 +1 @@ +Menu diff --git a/vendor/twbs/bootstrap/site/_includes/icons/slack.svg b/vendor/twbs/bootstrap/site/_includes/icons/slack.svg new file mode 100644 index 000000000..3927fa458 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/slack.svg @@ -0,0 +1 @@ +Slack diff --git a/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg b/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg new file mode 100644 index 000000000..450c393b9 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg @@ -0,0 +1 @@ +Twitter diff --git a/vendor/twbs/bootstrap/site/_includes/scripts.html b/vendor/twbs/bootstrap/site/_includes/scripts.html new file mode 100644 index 000000000..92c6d01cd --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/scripts.html @@ -0,0 +1,26 @@ + + + + + +{%- if site.github -%} + +{%- else -%} + +{%- endif -%} + +{%- if page.layout == "docs" -%} + +{%- endif -%} + +{%- if site.github -%} + +{%- else -%} + + + + + + + +{%- endif -%} diff --git a/vendor/twbs/bootstrap/site/_includes/skippy.html b/vendor/twbs/bootstrap/site/_includes/skippy.html new file mode 100644 index 000000000..2c73089bc --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/skippy.html @@ -0,0 +1,5 @@ + +
+ Skip to main content +
+
diff --git a/vendor/twbs/bootstrap/site/_includes/social.html b/vendor/twbs/bootstrap/site/_includes/social.html new file mode 100644 index 000000000..277ee2313 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_includes/social.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/vendor/twbs/bootstrap/site/_layouts/default.html b/vendor/twbs/bootstrap/site/_layouts/default.html new file mode 100644 index 000000000..28f4cdccb --- /dev/null +++ b/vendor/twbs/bootstrap/site/_layouts/default.html @@ -0,0 +1,22 @@ + + + + {% include header.html %} + + + {% include skippy.html %} + + {% include docs-navbar.html %} + + {% if page.layout == "simple" or page.layout == "examples" %} + {{ content }} + {% else %} +
+ {{ content }} +
+ {% endif %} + + {% include footer.html %} + {% include scripts.html %} + + diff --git a/vendor/twbs/bootstrap/site/_layouts/docs.html b/vendor/twbs/bootstrap/site/_layouts/docs.html new file mode 100644 index 000000000..1d2125508 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_layouts/docs.html @@ -0,0 +1,34 @@ + + + + {% include header.html %} + + + {% include skippy.html %} + + {% include docs-navbar.html %} + +
+
+
+ {% include docs-sidebar.html %} +
+ + {% if page.toc %} +
+ {{ content | toc_only }} +
+ {% endif %} + +
+

{{ page.title | smartify }}

+

{{ page.description | smartify }}

+ {% include ads.html %} + {{ content }} +
+
+
+ + {% include scripts.html %} + + diff --git a/vendor/twbs/bootstrap/site/_layouts/examples.html b/vendor/twbs/bootstrap/site/_layouts/examples.html new file mode 100644 index 000000000..1f8fbcdec --- /dev/null +++ b/vendor/twbs/bootstrap/site/_layouts/examples.html @@ -0,0 +1,16 @@ +--- +layout: default +--- + +
+
+

{{ page.title | smartify }}

+

{{ page.description | smartify }}

+ Download source code +
+ {% include ads.html %} +
+ +
+ {{ content }} +
diff --git a/vendor/twbs/bootstrap/site/_layouts/redirect.html b/vendor/twbs/bootstrap/site/_layouts/redirect.html new file mode 100644 index 000000000..a30e77bf4 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_layouts/redirect.html @@ -0,0 +1,38 @@ + + + + + + Bootstrap · Content moved + + + + + + + +

Redirecting…

+ Click here if you are not redirected + + diff --git a/vendor/twbs/bootstrap/site/_layouts/simple.html b/vendor/twbs/bootstrap/site/_layouts/simple.html new file mode 100644 index 000000000..dfd9afd16 --- /dev/null +++ b/vendor/twbs/bootstrap/site/_layouts/simple.html @@ -0,0 +1,12 @@ +--- +layout: default +--- + +
+
+

{{ page.title | smartify }}

+

{{ page.description | smartify }}

+ {% include ads.html %} + {{ content }} +
+
diff --git a/vendor/twbs/bootstrap/site/docs/4.1/about/brand.md b/vendor/twbs/bootstrap/site/docs/4.1/about/brand.md new file mode 100644 index 000000000..084c36bd8 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/about/brand.md @@ -0,0 +1,78 @@ +--- +layout: docs +title: Brand guidelines +description: Documentation and examples for Bootstrap's logo and brand usage guidelines. +group: about +toc: true +--- + +Have a need for Bootstrap's brand resources? Great! We have only a few guidelines we follow, and in turn ask you to follow as well. These guidelines were inspired by MailChimp's [Brand Assets](https://mailchimp.com/about/brand-assets/). + +## Mark and logo + +Use either the Bootstrap mark (a capital **B**) or the standard logo (just **Bootstrap**). It should always appear in San Francisco Display Semibold. **Do not use the Twitter bird** in association with Bootstrap. + +
+
+ Bootstrap +
+
+ Bootstrap +
+
+
+
+ Bootstrap +
+
+ Bootstrap +
+
+ +## Download mark + +Download the Bootstrap mark in one of three styles, each available as an SVG file. Right click, Save as. + +
+
+ Bootstrap +
+
+ Bootstrap +
+
+ Bootstrap +
+
+ +## Name + +The project and framework should always be referred to as **Bootstrap**. No Twitter before it, no capital _s_, and no abbreviations except for one, a capital **B**. + +
+
+ Bootstrap + Right +
+
+ BootStrap + Wrong +
+
+ Twitter Bootstrap + Wrong +
+
+ +## Colors + +Our docs and branding use a handful of primary colors to differentiate what *is* Bootstrap from what *is in* Bootstrap. In other words, if it's purple, it's representative of Bootstrap. + +
+
+
+
+
+
+
+
diff --git a/vendor/twbs/bootstrap/site/docs/4.1/about/license.md b/vendor/twbs/bootstrap/site/docs/4.1/about/license.md new file mode 100644 index 000000000..39720029d --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/about/license.md @@ -0,0 +1,34 @@ +--- +layout: docs +title: License FAQs +description: Commonly asked questions about Bootstrap's open source license. +group: about +--- + +Bootstrap is released under the MIT license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions. + +#### It requires you to: + +* Keep the license and copyright notice included in Bootstrap's CSS and JavaScript files when you use them in your works + +#### It permits you to: + +- Freely download and use Bootstrap, in whole or in part, for personal, private, company internal, or commercial purposes +- Use Bootstrap in packages or distributions that you create +- Modify the source code +- Grant a sublicense to modify and distribute Bootstrap to third parties not included in the license + +#### It forbids you to: + +- Hold the authors and license owners liable for damages as Bootstrap is provided without warranty +- Hold the creators or copyright holders of Bootstrap liable +- Redistribute any piece of Bootstrap without proper attribution +- Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution +- Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question + +#### It does not require you to: + +- Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it +- Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged) + +The full Bootstrap license is located [in the project repository]({{ site.repo }}/blob/v{{ site.current_version }}/LICENSE) for more information. diff --git a/vendor/twbs/bootstrap/site/docs/4.1/about/overview.md b/vendor/twbs/bootstrap/site/docs/4.1/about/overview.md new file mode 100644 index 000000000..23dd7affe --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/about/overview.md @@ -0,0 +1,28 @@ +--- +layout: docs +title: About +description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved. +redirect_from: + - "/docs/4.1/about/" + - "/docs/4.1/history/" + - "/docs/4.1/team/" +group: about +--- + +## Team + +Bootstrap is maintained by a [small team of developers](https://github.com/orgs/twbs/people) on GitHub. We're actively looking to grow this team and would love to hear from you if you're excited about CSS at scale, writing and maintaining vanilla JavaScript plugins, and improving build tooling processes for frontend code. + +## History + +Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world. + +Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/2010/hack-week) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today. + +Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on , we've since had over [twenty releases]({{ site.repo }}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach. + +With Bootstrap 4, we once again rewrote the project to account for two key architectural changes: a migration to Sass and the move to CSS's flexbox. Our intention is to help in a small way to move the web development community forward by pushing for newer CSS properties, fewer dependencies, and new technologies across more modern browsers. + +## Get involved + +Get involved with Bootstrap development by [opening an issue]({{ site.repo }}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{ site.repo }}/blob/v{{ site.current_version }}/.github/CONTRIBUTING.md) for information on how we develop. diff --git a/vendor/twbs/bootstrap/site/docs/4.1/about/translations.md b/vendor/twbs/bootstrap/site/docs/4.1/about/translations.md new file mode 100644 index 000000000..576259d35 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/about/translations.md @@ -0,0 +1,18 @@ +--- +layout: docs +title: Translations +description: Links to community-translated Bootstrap documentation sites. +group: about +--- + +Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date. + + + +**We don't help organize or host translations, we just link to them.** + +Finished a new or better translation? Open a pull request to add it to our list. diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-outline.svg b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-outline.svg new file mode 100644 index 000000000..215be0585 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-punchout.svg b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-punchout.svg new file mode 100644 index 000000000..9f4f529cc --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-punchout.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social-logo.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social-logo.png new file mode 100644 index 000000000..fdd35e5d4 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social-logo.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social.png new file mode 100644 index 000000000..468ab5b59 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-social.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-solid.svg b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-solid.svg new file mode 100644 index 000000000..5d860a70e --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/brand/bootstrap-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css b/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css new file mode 100644 index 000000000..d83c39ff6 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css @@ -0,0 +1,8 @@ +/*! + * Bootstrap Docs (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */.bd-navbar{min-height:4rem;background-color:#563d7c;box-shadow:0 .5rem 1rem rgba(0,0,0,.05),inset 0 -1px 0 rgba(0,0,0,.1)}@media (max-width:991.98px){.bd-navbar{padding-right:.5rem;padding-left:.5rem}.bd-navbar .navbar-nav-scroll{max-width:100%;height:2.5rem;margin-top:.25rem;overflow:hidden;font-size:.875rem}.bd-navbar .navbar-nav-scroll .navbar-nav{padding-bottom:2rem;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}}@media (min-width:768px){@supports ((position:-webkit-sticky) or (position:sticky)){.bd-navbar{position:-webkit-sticky;position:sticky;top:0;z-index:1071}}}.bd-navbar .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem;color:#cbbde2}.bd-navbar .navbar-nav .nav-link.active,.bd-navbar .navbar-nav .nav-link:hover{color:#fff;background-color:transparent}.bd-navbar .navbar-nav .nav-link.active{font-weight:500}.bd-navbar .navbar-nav-svg{display:inline-block;width:1rem;height:1rem;vertical-align:text-top}.bd-navbar .dropdown-menu{font-size:.875rem}.bd-navbar .dropdown-item.active{font-weight:500;color:#212529;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:.4rem .6rem;background-size:.75rem .75rem}.bd-masthead{position:relative;padding:3rem 15px}.bd-masthead h1{line-height:1}.bd-masthead .btn{width:100%;padding:.8rem 2rem;font-size:1.25rem;font-weight:500}.bd-masthead .carbonad{margin-top:0!important;margin-bottom:-3rem!important}@media (min-width:576px){.bd-masthead{padding-top:5rem;padding-bottom:5rem}.bd-masthead .carbonad{margin-bottom:0!important}}@media (min-width:768px){.bd-masthead h1{font-size:4rem}.bd-masthead .carbonad{margin-top:3rem!important}}.half-rule{width:6rem;margin:2.5rem 0}.masthead-followup .bd-clipboard{display:none}.masthead-followup .highlight{padding:.5rem 0;background-color:transparent}#carbonads{position:static;display:block;max-width:400px;padding:15px 15px 15px 160px;margin:2rem 0;overflow:hidden;font-size:13px;line-height:1.4;text-align:left;background-color:rgba(0,0,0,.05)}#carbonads a{color:#333;text-decoration:none}@media (min-width:576px){#carbonads{max-width:330px;border-radius:4px}}.carbon-img{float:left;margin-left:-145px}.carbon-poweredby{display:block;color:#777!important}.bd-content{-ms-flex-order:1;order:1}.bd-content>h2[id],.bd-content>h3[id],.bd-content>h4[id]{pointer-events:none}.bd-content>h2[id]>a,.bd-content>h2[id]>div,.bd-content>h3[id]>a,.bd-content>h3[id]>div,.bd-content>h4[id]>a,.bd-content>h4[id]>div{pointer-events:auto}.bd-content>h2[id]::before,.bd-content>h3[id]::before,.bd-content>h4[id]::before{display:block;height:6rem;margin-top:-6rem;visibility:hidden;content:""}.bd-content>table{width:100%;max-width:100%;margin-bottom:1rem}@media (max-width:991.98px){.bd-content>table{display:block;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.bd-content>table.table-bordered{border:0}}.bd-content>table>tbody>tr>td,.bd-content>table>tbody>tr>th,.bd-content>table>tfoot>tr>td,.bd-content>table>tfoot>tr>th,.bd-content>table>thead>tr>td,.bd-content>table>thead>tr>th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6}.bd-content>table>tbody>tr>td>p:last-child,.bd-content>table>tbody>tr>th>p:last-child,.bd-content>table>tfoot>tr>td>p:last-child,.bd-content>table>tfoot>tr>th>p:last-child,.bd-content>table>thead>tr>td>p:last-child,.bd-content>table>thead>tr>th>p:last-child{margin-bottom:0}.bd-content>table td:first-child>code{white-space:nowrap}.bd-content>h2:not(:first-child){margin-top:3rem}.bd-content>h3{margin-top:1.5rem}.bd-content>ol li,.bd-content>ul li{margin-bottom:.25rem}@media (min-width:992px){.bd-content>ol,.bd-content>p,.bd-content>ul{max-width:80%}}.bd-title{margin-top:1rem;margin-bottom:.5rem;font-weight:300}@media (min-width:576px){.bd-title{font-size:3rem}}.bd-lead{font-size:1.125rem;font-weight:300}@media (min-width:576px){.bd-lead{max-width:80%;margin-bottom:1rem;font-size:1.5rem}}.bd-text-purple{color:#563d7c}.bd-text-purple-bright{color:#7952b3}#skippy{display:block;padding:1em;color:#fff;background-color:#563d7c;outline:0}#skippy .skiplink-text{padding:.5em;outline:1px dotted}.bd-toc{-ms-flex-order:2;order:2;padding-top:1.5rem;padding-bottom:1.5rem;font-size:.875rem}@supports ((position:-webkit-sticky) or (position:sticky)){.bd-toc{position:-webkit-sticky;position:sticky;top:4rem;height:calc(100vh - 4rem);overflow-y:auto}}.section-nav{padding-left:0;border-left:1px solid #eee}.section-nav ul{padding-left:1rem}.section-nav ul ul{display:none}.toc-entry{display:block}.toc-entry a{display:block;padding:.125rem 1.5rem;color:#99979c}.toc-entry a:hover{color:#007bff;text-decoration:none}.bd-sidebar{-ms-flex-order:0;order:0;border-bottom:1px solid rgba(0,0,0,.1)}@media (min-width:768px){.bd-sidebar{border-right:1px solid rgba(0,0,0,.1)}@supports ((position:-webkit-sticky) or (position:sticky)){.bd-sidebar{position:-webkit-sticky;position:sticky;top:4rem;z-index:1000;height:calc(100vh - 4rem)}}}@media (min-width:1200px){.bd-sidebar{-ms-flex:0 1 320px;flex:0 1 320px}}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:768px){@supports ((position:-webkit-sticky) or (position:sticky)){.bd-links{max-height:calc(100vh - 9rem);overflow-y:auto}}}@media (min-width:768px){.bd-links{display:block!important}}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px;border-bottom:1px solid rgba(0,0,0,.05)}.bd-search .form-control:focus{border-color:#7952b3;box-shadow:0 0 0 3px rgba(121,82,179,.25)}.bd-search-docs-toggle{line-height:1;color:#212529}.bd-sidenav{display:none}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:500;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}.bd-sidebar .nav>li>a{display:block;padding:.25rem 1.5rem;font-size:90%;color:rgba(0,0,0,.65)}.bd-sidebar .nav>li>a:hover{color:rgba(0,0,0,.85);text-decoration:none;background-color:transparent}.bd-sidebar .nav>.active:hover>a,.bd-sidebar .nav>.active>a{font-weight:500;color:rgba(0,0,0,.85);background-color:transparent}.bd-footer{font-size:85%;text-align:center;background-color:#f7f7f7}.bd-footer a{font-weight:500;color:#495057}.bd-footer a:focus,.bd-footer a:hover{color:#007bff}.bd-footer p{margin-bottom:0}@media (min-width:576px){.bd-footer{text-align:left}}.bd-footer-links{padding-left:0;margin-bottom:1rem}.bd-footer-links li{display:inline-block}.bd-footer-links li+li{margin-left:1rem}.bd-example-row .row>.col,.bd-example-row .row>[class^=col-]{padding-top:.75rem;padding-bottom:.75rem;background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.2)}.bd-example-row .row+.row{margin-top:1rem}.bd-example-row .flex-items-bottom,.bd-example-row .flex-items-middle,.bd-example-row .flex-items-top{min-height:6rem;background-color:rgba(255,0,0,.1)}.bd-example-row-flex-cols .row{min-height:10rem;background-color:rgba(255,0,0,.1)}.bd-highlight{background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.15)}.example-container{width:800px;width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.example-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.example-content-main{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:576px){.example-content-main{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}@media (min-width:992px){.example-content-main{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.example-content-secondary{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:576px){.example-content-secondary{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}@media (min-width:992px){.example-content-secondary{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}}.bd-example-container{min-width:16rem;max-width:25rem;margin-right:auto;margin-left:auto}.bd-example-container-header{height:3rem;margin-bottom:.5rem;background-color:#fff;border-radius:.25rem}.bd-example-container-sidebar{float:right;width:4rem;height:8rem;background-color:#80bdff;border-radius:.25rem}.bd-example-container-body{height:8rem;margin-right:4.5rem;background-color:#957bbe;border-radius:.25rem}.bd-example-container-fluid{max-width:none}.bd-example{position:relative;padding:1rem;margin:1rem -15px 0;border:solid #f8f9fa;border-width:.2rem 0 0}.bd-example::after{display:block;clear:both;content:""}@media (min-width:576px){.bd-example{padding:1.5rem;margin-right:0;margin-left:0;border-width:.2rem}}.bd-example+.clipboard+.highlight,.bd-example+.highlight{margin-top:0}.bd-example+p{margin-top:2rem}.bd-example .pos-f-t{position:relative;margin:-1rem}@media (min-width:576px){.bd-example .pos-f-t{margin:-1.5rem}}.bd-example .custom-file-input:lang(es)~.custom-file-label::after{content:"Elegir"}.bd-example>.form-control+.form-control{margin-top:.5rem}.bd-example>.alert+.alert,.bd-example>.nav+.nav,.bd-example>.navbar+.navbar,.bd-example>.progress+.btn,.bd-example>.progress+.progress{margin-top:1rem}.bd-example>.dropdown-menu:first-child{position:static;display:block}.bd-example>.form-group:last-child{margin-bottom:0}.bd-example>.close{float:none}.bd-example-type .table .type-info{color:#999;vertical-align:middle}.bd-example-type .table td{padding:1rem 0;border-color:#eee}.bd-example-type .table tr:first-child td{border-top:0}.bd-example-type h1,.bd-example-type h2,.bd-example-type h3,.bd-example-type h4,.bd-example-type h5,.bd-example-type h6{margin-top:0;margin-bottom:0}.bd-example-bg-classes p{padding:1rem}.bd-example>img+img{margin-left:.5rem}.bd-example>.btn-group{margin-top:.25rem;margin-bottom:.25rem}.bd-example>.btn-toolbar+.btn-toolbar{margin-top:.5rem}.bd-example-control-sizing input[type=text]+input[type=text],.bd-example-control-sizing select{margin-top:.5rem}.bd-example-form .input-group{margin-bottom:.5rem}.bd-example>textarea.form-control{resize:vertical}.bd-example>.list-group{max-width:400px}.bd-example .fixed-top,.bd-example .sticky-top{position:static;margin:-1rem -1rem 1rem}.bd-example .fixed-bottom{position:static;margin:1rem -1rem -1rem}@media (min-width:576px){.bd-example .fixed-top,.bd-example .sticky-top{margin:-1.5rem -1.5rem 1rem}.bd-example .fixed-bottom{margin:1rem -1.5rem -1.5rem}}.bd-example .pagination{margin-top:.5rem;margin-bottom:.5rem}.modal{z-index:1072}.modal .popover,.modal .tooltip{z-index:1073}.modal-backdrop{z-index:1071}.bd-example-modal{background-color:#fafafa}.bd-example-modal .modal{position:relative;top:auto;right:auto;bottom:auto;left:auto;z-index:1;display:block}.bd-example-modal .modal-dialog{left:auto;margin-right:auto;margin-left:auto}.bd-example-tabs .nav-tabs{margin-bottom:1rem}.bd-example-popover-static{padding-bottom:1.5rem;background-color:#f9f9f9}.bd-example-popover-static .popover{position:relative;display:block;float:left;width:260px;margin:1.25rem}.tooltip-demo a{white-space:nowrap}.bd-example-tooltip-static .tooltip{position:relative;display:inline-block;margin:10px 20px;opacity:1}.scrollspy-example{position:relative;height:200px;margin-top:.5rem;overflow:auto}.scrollspy-example-2{position:relative;height:350px;overflow:auto}.bd-example-border-utils [class^=border]{display:inline-block;width:5rem;height:5rem;margin:.25rem;background-color:#f5f5f5}.bd-example-border-utils-0 [class^=border]{border:1px solid #dee2e6}.highlight{padding:1rem;margin-top:1rem;margin-bottom:1rem;background-color:#f8f9fa;-ms-overflow-style:-ms-autohiding-scrollbar}@media (min-width:576px){.highlight{padding:1.5rem}}.bd-content .highlight{margin-right:-15px;margin-left:-15px}@media (min-width:576px){.bd-content .highlight{margin-right:0;margin-left:0}}.highlight pre{padding:0;margin-top:0;margin-bottom:0;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:#212529}.btn-bd-primary{font-weight:500;color:#7952b3;border-color:#7952b3}.btn-bd-primary:active,.btn-bd-primary:hover{color:#fff;background-color:#7952b3;border-color:#7952b3}.btn-bd-primary:focus{box-shadow:0 0 0 3px rgba(121,82,179,.25)}.btn-bd-download{font-weight:500;color:#ffe484;border-color:#ffe484}.btn-bd-download:active,.btn-bd-download:hover{color:#2a2730;background-color:#ffe484;border-color:#ffe484}.btn-bd-download:focus{box-shadow:0 0 0 3px rgba(255,228,132,.25)}.bd-callout{padding:1.25rem;margin-top:1.25rem;margin-bottom:1.25rem;border:1px solid #eee;border-left-width:.25rem;border-radius:.25rem}.bd-callout h4{margin-top:0;margin-bottom:.25rem}.bd-callout p:last-child{margin-bottom:0}.bd-callout code{border-radius:.25rem}.bd-callout+.bd-callout{margin-top:-.25rem}.bd-callout-info{border-left-color:#5bc0de}.bd-callout-info h4{color:#5bc0de}.bd-callout-warning{border-left-color:#f0ad4e}.bd-callout-warning h4{color:#f0ad4e}.bd-callout-danger{border-left-color:#d9534f}.bd-callout-danger h4{color:#d9534f}.bd-examples .img-thumbnail{margin-bottom:.75rem}.bd-examples h4{margin-bottom:.25rem}.bd-examples p{margin-bottom:1.25rem}@media (max-width:480px){.bd-examples{margin-right:-.75rem;margin-left:-.75rem}.bd-examples>[class^=col-]{padding-right:.75rem;padding-left:.75rem}}.bd-browser-bugs td p{margin-bottom:0}.bd-browser-bugs th:first-child{width:18%}.bd-brand-logos{display:table;width:100%;margin-bottom:1rem;overflow:hidden;color:#563d7c;background-color:#f9f9f9;border-radius:.25rem}.bd-brand-item{padding:4rem 0;text-align:center}.bd-brand-item+.bd-brand-item{border-top:1px solid #fff}.bd-brand-logos .inverse{color:#fff;background-color:#563d7c}.bd-brand-item h1,.bd-brand-item h3{margin-top:0;margin-bottom:0}.bd-brand-item .bd-booticon{margin-right:auto;margin-left:auto}@media (min-width:768px){.bd-brand-item{display:table-cell;width:1%}.bd-brand-item+.bd-brand-item{border-top:0;border-left:1px solid #fff}.bd-brand-item h1{font-size:4rem}}.color-swatches{margin:0 -5px;overflow:hidden}.color-swatch{float:left;width:4rem;height:4rem;margin-right:.25rem;margin-left:.25rem;border-radius:.25rem}@media (min-width:768px){.color-swatch{width:6rem;height:6rem}}.color-swatches .bd-purple{background-color:#563d7c}.color-swatches .bd-purple-light{background-color:#cbbde2}.color-swatches .bd-purple-lighter{background-color:#e5e1ea}.color-swatches .bd-gray{background-color:#f9f9f9}.swatch-blue{color:#fff;background-color:#007bff}.swatch-indigo{color:#fff;background-color:#6610f2}.swatch-purple{color:#fff;background-color:#6f42c1}.swatch-pink{color:#fff;background-color:#e83e8c}.swatch-red{color:#fff;background-color:#dc3545}.swatch-orange{color:#212529;background-color:#fd7e14}.swatch-yellow{color:#212529;background-color:#ffc107}.swatch-green{color:#fff;background-color:#28a745}.swatch-teal{color:#fff;background-color:#20c997}.swatch-cyan{color:#fff;background-color:#17a2b8}.swatch-white{color:#212529;background-color:#fff}.swatch-gray{color:#fff;background-color:#6c757d}.swatch-gray-dark{color:#fff;background-color:#343a40}.swatch-primary{color:#fff;background-color:#007bff}.swatch-secondary{color:#fff;background-color:#6c757d}.swatch-success{color:#fff;background-color:#28a745}.swatch-info{color:#fff;background-color:#17a2b8}.swatch-warning{color:#212529;background-color:#ffc107}.swatch-danger{color:#fff;background-color:#dc3545}.swatch-light{color:#212529;background-color:#f8f9fa}.swatch-dark{color:#fff;background-color:#343a40}.swatch-100{color:#212529;background-color:#f8f9fa}.swatch-200{color:#212529;background-color:#e9ecef}.swatch-300{color:#212529;background-color:#dee2e6}.swatch-400{color:#212529;background-color:#ced4da}.swatch-500{color:#212529;background-color:#adb5bd}.swatch-600{color:#fff;background-color:#6c757d}.swatch-700{color:#fff;background-color:#495057}.swatch-800{color:#fff;background-color:#343a40}.swatch-900{color:#fff;background-color:#212529}.bd-clipboard{position:relative;display:none;float:right}.bd-clipboard+.highlight{margin-top:0}.btn-clipboard{position:absolute;top:.5rem;right:.5rem;z-index:10;display:block;padding:.25rem .5rem;font-size:75%;color:#818a91;cursor:pointer;background-color:transparent;border:0;border-radius:.25rem}.btn-clipboard:hover{color:#fff;background-color:#027de7}@media (min-width:768px){.bd-clipboard{display:block}}.hll{background-color:#ffc}.c{color:#999}.k{color:#069}.o{color:#555}.cm{color:#999}.cp{color:#099}.c1{color:#999}.cs{color:#999}.gd{background-color:#fcc;border:1px solid #c00}.ge{font-style:italic}.gr{color:red}.gh{color:#030}.gi{background-color:#cfc;border:1px solid #0c0}.go{color:#aaa}.gp{color:#009}.gu{color:#030}.gt{color:#9c6}.kc{color:#069}.kd{color:#069}.kn{color:#069}.kp{color:#069}.kr{color:#069}.kt{color:#078}.m{color:#f60}.s{color:#d44950}.na{color:#4f9fcf}.nb{color:#366}.nc{color:#0a8}.no{color:#360}.nd{color:#99f}.ni{color:#999}.ne{color:#c00}.nf{color:#c0f}.nl{color:#99f}.nn{color:#0cf}.nt{color:#2f6f9f}.nv{color:#033}.ow{color:#000}.w{color:#bbb}.mf{color:#f60}.mh{color:#f60}.mi{color:#f60}.mo{color:#f60}.sb{color:#c30}.sc{color:#c30}.sd{font-style:italic;color:#c30}.s2{color:#c30}.se{color:#c30}.sh{color:#c30}.si{color:#a00}.sx{color:#c30}.sr{color:#3aa}.s1{color:#c30}.ss{color:#fc3}.bp{color:#366}.vc{color:#033}.vg{color:#033}.vi{color:#033}.il{color:#f60}.css .nt+.nt,.css .o,.css .o+.nt{color:#999}.language-bash::before,.language-sh::before{color:#009;content:"$ ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.language-powershell::before{color:#009;content:"PM> ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.anchorjs-link{font-weight:400;color:rgba(0,123,255,.5);transition:color .16s linear}.anchorjs-link:hover{color:#007bff;text-decoration:none}.algolia-autocomplete{display:block!important;-ms-flex:1;flex:1}.algolia-autocomplete .ds-dropdown-menu{width:100%;min-width:0!important;max-width:none!important;padding:.75rem 0!important;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.175)}@media (min-width:768px){.algolia-autocomplete .ds-dropdown-menu{width:175%}}.algolia-autocomplete .ds-dropdown-menu::before{display:none!important}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{padding:0!important;overflow:visible!important;background-color:transparent!important;border:0!important}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0!important}.algolia-autocomplete .algolia-docsearch-suggestion{padding:0!important;overflow:visible!important}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{padding:.125rem 1rem!important;margin-top:0!important;font-size:.875rem!important;font-weight:500!important;color:#7952b3!important;border-bottom:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{float:none!important;padding-top:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:none!important;width:auto!important;padding:0!important;text-align:left!important}.algolia-autocomplete .algolia-docsearch-suggestion--content{float:none!important;width:auto!important;padding:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--content::before{display:none!important}.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header{padding-top:.75rem!important;margin-top:.75rem!important;border-top:1px solid rgba(0,0,0,.1)}.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-autocomplete .algolia-docsearch-suggestion--title{display:block;padding:.25rem 1rem!important;margin-bottom:0!important;font-size:.875rem!important;font-weight:400!important}.algolia-autocomplete .algolia-docsearch-suggestion--text{padding:0 1rem .5rem!important;margin-top:-.25rem;font-size:.875rem!important;font-weight:400;line-height:1.25!important}.algolia-autocomplete .algolia-docsearch-footer{float:none!important;width:auto!important;height:auto!important;padding:.75rem 1rem 0;font-size:.75rem!important;line-height:1!important;color:#767676!important;border-top:1px solid rgba(0,0,0,.1)}.algolia-autocomplete .algolia-docsearch-footer--logo{display:inline!important;overflow:visible!important;color:inherit!important;text-indent:0!important;background:0 0!important}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#5f2dab;background-color:rgba(154,132,187,.12)}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:inset 0 -2px 0 0 rgba(95,45,171,.5)!important}.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content{background-color:rgba(208,189,236,.15)!important} +/*# sourceMappingURL=docs.min.css.map */ \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css.map b/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css.map new file mode 100644 index 000000000..ff148d83d --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/css/docs.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../scss/docs.scss","../scss/_nav.scss","../../../../../scss/mixins/_breakpoints.scss","../scss/_masthead.scss","../scss/_ads.scss","../scss/_content.scss","site/docs/4.1/assets/css/docs.min.css","../scss/_skiplink.scss","../scss/_sidebar.scss","../scss/_footer.scss","../scss/_component-examples.scss","../../../../../scss/mixins/_grid.scss","../../../../../scss/mixins/_clearfix.scss","../scss/_buttons.scss","../scss/_callouts.scss","../scss/_examples.scss","../scss/_browser-bugs.scss","../scss/_brand.scss","../scss/_colors.scss","../scss/_clipboard-js.scss","../scss/_syntax.scss","../scss/_anchor.scss","../scss/_algolia.scss"],"names":[],"mappings":"AAAA;;;;;;ACIA,WACE,WAAA,KACA,iBAAA,QACA,WAAA,EAAA,MAAA,KAAA,eAAA,CAAA,MAAA,EAAA,KAAA,EAAA,eCkEE,4BDrEJ,WAMI,cAAA,MACA,aAAA,MAPJ,8BAUM,UAAA,KACA,OAAA,OACA,WAAA,OACA,SAAA,OACA,UAAA,QAdN,0CAiBQ,eAAA,KACA,WAAA,KACA,YAAA,OACA,2BAAA,OCoCJ,yBD9B4B,2DA1BhC,WA2BM,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,OA7BN,iCAmCM,cAAA,MACA,aAAA,MACA,MAAA,QArCN,wCAAA,uCAyCQ,MAAA,KACA,iBAAA,YA1CR,wCA8CQ,YAAA,IA9CR,2BAoDI,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,SAvDJ,0BA2DI,UAAA,QA3DJ,iCA+DI,YAAA,IACA,MAAA,QACA,iBAAA,YACA,iBAAA,wPACA,kBAAA,UACA,oBAAA,MAAA,MACA,gBAAA,OAAA,OEvEJ,aACE,SAAA,SACA,QAAA,KAAA,KAFF,gBAMI,YAAA,EANJ,kBAUI,MAAA,KACA,QAAA,MAAA,KACA,UAAA,QACA,YAAA,IAbJ,uBAiBI,WAAA,YACA,cAAA,gBDwCA,yBC1DJ,aAsBI,YAAA,KACA,eAAA,KAvBJ,uBA0BM,cAAA,aDgCF,yBC1DJ,gBAgCM,UAAA,KAhCN,uBAoCM,WAAA,gBAKN,WACE,MAAA,KACA,OAAA,OAAA,EAGF,iCACkB,QAAA,KADlB,8BAII,QAAA,MAAA,EACA,iBAAA,YC/CJ,WACE,SAAA,OACA,QAAA,MACA,UAAA,MACA,QAAA,KAAA,KAAA,KAAA,MACA,OAAA,KAAA,EACA,SAAA,OACA,UAAA,KACA,YAAA,IACA,WAAA,KACA,iBAAA,gBAVF,aAaI,MAAA,KACA,gBAAA,KFwCA,yBEtDJ,WAkBI,UAAA,MACA,cAAA,KAIJ,YACE,MAAA,KACA,YAAA,OAGF,kBACE,QAAA,MACA,MAAA,eC9BF,YACE,eAAA,EAAA,MAAA,EADF,mBCyKA,mBACA,mBDnKI,eAAA,KCwKJ,qBD/KA,uBCiLA,qBADA,uBAGA,qBADA,uBDvKM,eAAA,KAXN,2BCwLA,2BACA,2BD1KM,QAAA,MACA,OAAA,KACA,WAAA,MACA,WAAA,OACA,QAAA,GAnBN,kBAwBI,MAAA,KACA,UAAA,KACA,cAAA,KHyCA,4BGnEJ,kBA6BM,QAAA,MACA,WAAA,KACA,mBAAA,yBA/BN,iCAkCQ,OAAA,GCmLR,8BADA,8BAGA,8BADA,8BAHA,8BDnNA,8BA6CU,QAAA,OACA,eAAA,IACA,OAAA,IAAA,MAAA,QCiLV,2CADA,2CAGA,2CADA,2CAHA,2CD9NA,2CAkDY,cAAA,EAlDZ,sCA0DM,YAAA,OASN,iCAEI,WAAA,KAFJ,eAMI,WAAA,OC0KJ,kBDhLA,kBAWI,cAAA,OHxBA,yBImMF,eACA,cDvLF,eAkBM,UAAA,KAKN,UACE,WAAA,KACA,cAAA,MACA,YAAA,IHvCE,yBGoCJ,UAMI,UAAA,MAIJ,SACE,UAAA,SACA,YAAA,IHhDE,yBG8CJ,SAKI,UAAA,IACA,cAAA,KACA,UAAA,QAIJ,gBAAkB,MAAA,QAClB,uBAAyB,MAAA,QEpHzB,QACE,QAAA,MACA,QAAA,IACA,MAAA,KACA,iBAAA,QACA,QAAA,EALF,uBAQI,QAAA,KACA,QAAA,IAAA,OCLJ,QAOE,eAAA,EAAA,MAAA,EACA,YAAA,OACA,eAAA,OACA,UAAA,QAT4B,2DAD9B,QAEI,SAAA,eAAA,SAAA,OACA,IAAA,KACA,OAAA,mBACA,WAAA,MAQJ,aACE,aAAA,EACA,YAAA,IAAA,MAAA,KAFF,gBAKI,aAAA,KALJ,mBAQM,QAAA,KAKN,WACE,QAAA,MADF,aAII,QAAA,MACA,QAAA,QAAA,OACA,MAAA,QANJ,mBASM,MAAA,QACA,gBAAA,KASN,YACE,eAAA,EAAA,MAAA,EAEA,cAAA,IAAA,MAAA,eNME,yBMTJ,YAYI,aAAA,IAAA,MAAA,eAN4B,2DANhC,YAOM,SAAA,eAAA,SAAA,OACA,IAAA,KACA,QAAA,KACA,OAAA,qBNDF,0BMTJ,YAgBI,SAAA,EAAA,EAAA,MAAA,KAAA,EAAA,EAAA,OAIJ,UACE,YAAA,KACA,eAAA,KACA,aAAA,MACA,YAAA,MNfE,yBMkB4B,2DAPhC,UAQM,WAAA,mBACA,WAAA,ONpBF,yBMWJ,UAeI,QAAA,iBAIJ,WACE,SAAA,SACA,QAAA,KAAA,KACA,aAAA,MACA,YAAA,MACA,cAAA,IAAA,MAAA,gBALF,+BAQI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,IAAA,qBAIJ,uBACE,YAAA,EACA,MAAA,QAGF,YACE,QAAA,KAGF,aACE,QAAA,MACA,QAAA,OAAA,OACA,YAAA,IACA,MAAA,gBAJF,mBAOI,MAAA,gBACA,gBAAA,KAIJ,oBAEI,cAAA,KAFJ,sCAKM,WAAA,KALN,iCASM,MAAA,gBATN,uCAYQ,iBAAA,YAZR,gCAiBM,QAAA,MAMN,sBACE,QAAA,MACA,QAAA,OAAA,OACA,UAAA,IACA,MAAA,gBAGF,4BACE,MAAA,gBACA,gBAAA,KACA,iBAAA,YF0TF,iCEvTA,2BAEE,YAAA,IACA,MAAA,gBACA,iBAAA,YChKF,WACE,UAAA,IACA,WAAA,OACA,iBAAA,QAHF,aAMI,YAAA,IACA,MAAA,QAPJ,mBAAA,mBAWM,MAAA,QAXN,aAgBI,cAAA,EPwCA,yBOxDJ,WAoBI,WAAA,MAIJ,iBACE,aAAA,EACA,cAAA,KAFF,oBAKI,QAAA,aALJ,uBAQM,YAAA,KC9BN,0BJ8fA,mCI1fM,YAAA,OACA,eAAA,OACA,iBAAA,oBACA,OAAA,IAAA,MAAA,mBAPN,0BAYI,WAAA,KJ+fJ,mCADA,mCI1gBA,gCAkBI,WAAA,KACA,iBAAA,iBAIJ,+BACE,WAAA,MACA,iBAAA,iBAGF,cACE,iBAAA,oBACA,OAAA,IAAA,MAAA,oBAIF,mBACE,MAAA,MCpCA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KDoCF,aCtBE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDuBF,sBCnBE,SAAA,SAIA,MAAA,KACA,WAAA,IACA,cAAA,KACA,aAAA,KTuBE,yBQXJ,sBCRE,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,KTeE,yBQXJ,sBCRE,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,YDgBF,2BC/BE,SAAA,SAIA,MAAA,KACA,WAAA,IACA,cAAA,KACA,aAAA,KTuBE,yBQCJ,2BCpBE,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,KTeE,yBQCJ,2BCpBE,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,YDiCF,sBACE,UAAA,MACA,UAAA,MACA,aAAA,KACA,YAAA,KAGF,6BACE,OAAA,KACA,cAAA,MACA,iBAAA,KACA,cAAA,OAGF,8BACE,MAAA,MACA,MAAA,KACA,OAAA,KACA,iBAAA,QACA,cAAA,OAGF,2BACE,OAAA,KACA,aAAA,OACA,iBAAA,QACA,cAAA,OAGF,4BACE,UAAA,KAQF,YACE,SAAA,SACA,QAAA,KACA,OAAA,KAAA,MAAA,EACA,OAAA,MAAA,QACA,aAAA,MAAA,EAAA,EExHA,mBACE,QAAA,MACA,MAAA,KACA,QAAA,GVwDA,yBQwDJ,YASI,QAAA,OACA,aAAA,EACA,YAAA,EACA,aAAA,OJ2hBJ,kCIviBA,uBAiBI,WAAA,EAjBJ,cAqBI,WAAA,KArBJ,qBAyBI,SAAA,SACA,OAAA,MRlFA,yBQwDJ,qBA6BM,OAAA,SA7BN,kEAkCI,QAAA,SAlCJ,wCAuCM,WAAA,MJ4hBN,0BInkBA,sBJokBA,4BAEA,2BADA,gCIrhBI,WAAA,KAhDJ,uCAoDI,SAAA,OACA,QAAA,MArDJ,mCAyDI,cAAA,EAzDJ,mBA6DI,MAAA,KAKJ,mCAGM,MAAA,KACA,eAAA,OAJN,2BAOM,QAAA,KAAA,EACA,aAAA,KARN,0CAWM,WAAA,EAXN,oBJoiBA,oBACA,oBACA,oBACA,oBACA,oBInhBI,WAAA,EACA,cAAA,EAKJ,yBACE,QAAA,KAIF,oBAEI,YAAA,MAKJ,uBAEI,WAAA,OACA,cAAA,OAHJ,sCAMI,WAAA,MJkhBJ,6DI7gBA,kCAEE,WAAA,MAEF,8BACE,cAAA,MAEF,kCACE,OAAA,SAIF,wBACE,UAAA,MAIF,uBJ6gBA,wBI1gBI,SAAA,OACA,OAAA,MAAA,MAAA,KAJJ,0BAOI,SAAA,OACA,OAAA,KAAA,MAAA,MRrMA,yBQ6LJ,uBJyhBE,wBI3gBI,OAAA,QAAA,QAAA,KAdN,0BAiBM,OAAA,KAAA,QAAA,SAMN,wBACE,WAAA,MACA,cAAA,MAIF,OACE,QAAA,KJ6gBF,gBI9gBA,gBAKI,QAAA,KAIJ,gBACE,QAAA,KAGF,kBACE,iBAAA,QADF,yBAII,SAAA,SACA,IAAA,KACA,MAAA,KACA,OAAA,KACA,KAAA,KACA,QAAA,EACA,QAAA,MAVJ,gCAcI,KAAA,KACA,aAAA,KACA,YAAA,KAKJ,2BACE,cAAA,KAIF,2BACE,eAAA,OACA,iBAAA,QAFF,oCAKI,SAAA,SACA,QAAA,MACA,MAAA,KACA,MAAA,MACA,OAAA,QAKJ,gBACE,YAAA,OAGF,oCACE,SAAA,SACA,QAAA,aACA,OAAA,KAAA,KACA,QAAA,EAIF,mBACE,SAAA,SACA,OAAA,MACA,WAAA,MACA,SAAA,KAGF,qBACE,SAAA,SACA,OAAA,MACA,SAAA,KAGF,yCAEI,QAAA,aACA,MAAA,KACA,OAAA,KACA,OAAA,OACA,iBAAA,QAIJ,2CAEI,OAAA,IAAA,MAAA,QAQJ,WACE,QAAA,KACA,WAAA,KACA,cAAA,KACA,iBAAA,QACA,mBAAA,yBRjUE,yBQ4TJ,WAQI,QAAA,QAIJ,uBACE,aAAA,MACA,YAAA,MR1UE,yBQwUJ,uBAKI,aAAA,EACA,YAAA,GAIJ,eAEI,QAAA,EACA,WAAA,EACA,cAAA,EACA,iBAAA,YACA,OAAA,EANJ,oBASI,UAAA,QACA,MAAA,QGpZJ,gBACE,YAAA,IACA,MAAA,QACA,aAAA,QAHF,uBAAA,sBAOI,MAAA,KACA,iBAAA,QACA,aAAA,QATJ,sBAaI,WAAA,EAAA,EAAA,EAAA,IAAA,qBAIJ,iBACE,YAAA,IACA,MAAA,QACA,aAAA,QAHF,wBAAA,uBAOI,MAAA,QACA,iBAAA,QACA,aAAA,QATJ,uBAaI,WAAA,EAAA,EAAA,EAAA,IAAA,sBC9BJ,YACE,QAAA,QACA,WAAA,QACA,cAAA,QACA,OAAA,IAAA,MAAA,KACA,kBAAA,OACA,cAAA,OAGF,eACE,WAAA,EACA,cAAA,OAGF,yBACE,cAAA,EAGF,iBACE,cAAA,OAGF,wBACE,WAAA,QAUF,iBALE,kBAAA,QAEA,oBAAK,MAAA,QAIP,oBANE,kBAAA,QAEA,uBAAK,MAAA,QAKP,mBAPE,kBAAA,QAEA,sBAAK,MAAA,QC9BP,4BACE,cAAA,OAEF,gBACE,cAAA,OAEF,eACE,cAAA,QAGF,yBACE,aACE,aAAA,QACA,YAAA,QAEF,2BACE,cAAA,OACA,aAAA,QCjBJ,sBAEI,cAAA,EAFJ,gCAKI,MAAA,ICFJ,gBACE,QAAA,MACA,MAAA,KACA,cAAA,KACA,SAAA,OACA,MAAA,QACA,iBAAA,QACA,cAAA,OAIF,eACE,QAAA,KAAA,EACA,WAAA,OAEF,8BACE,WAAA,IAAA,MAAA,KAEF,yBACE,MAAA,KACA,iBAAA,QAIF,kBXugCA,kBWrgCE,WAAA,EACA,cAAA,EAEF,4BACE,aAAA,KACA,YAAA,KAmBF,yBACE,eACE,QAAA,WACA,MAAA,GAEF,8BACE,WAAA,EACA,YAAA,IAAA,MAAA,KAEF,kBACE,UAAA,MASJ,gBACE,OAAA,EAAA,KACA,SAAA,OAGF,cACE,MAAA,KACA,MAAA,KACA,OAAA,KACA,aAAA,OACA,YAAA,OACA,cAAA,OAEA,yBARF,cASI,MAAA,KACA,OAAA,MAKJ,2BAEI,iBAAA,QAFJ,iCAKI,iBAAA,QALJ,mCAQI,iBAAA,QARJ,yBAWI,iBAAA,QCtGF,aACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,QACA,iBAAA,QAFF,eACE,MAAA,QACA,iBAAA,QAFF,cACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,cACE,MAAA,QACA,iBAAA,KAFF,aACE,MAAA,KACA,iBAAA,QAFF,kBACE,MAAA,KACA,iBAAA,QAKF,gBACE,MAAA,KACA,iBAAA,QAFF,kBACE,MAAA,KACA,iBAAA,QAFF,gBACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,gBACE,MAAA,QACA,iBAAA,QAFF,eACE,MAAA,KACA,iBAAA,QAFF,cACE,MAAA,QACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAKF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QCjBJ,cACE,SAAA,SACA,QAAA,KACA,MAAA,MAHF,yBAMI,WAAA,EAIJ,eACE,SAAA,SACA,IAAA,MACA,MAAA,MACA,QAAA,GACA,QAAA,MACA,QAAA,OAAA,MACA,UAAA,IACA,MAAA,QACA,OAAA,QACA,iBAAA,YACA,OAAA,EACA,cAAA,OAZF,qBAeI,MAAA,KACA,iBAAA,QAIJ,yBACE,cACE,QAAA,OClCJ,KAAO,iBAAA,KACP,GAAK,MAAA,KACL,GAAK,MAAA,KACL,GAAK,MAAA,KACL,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,iBAAA,KAAwB,OAAA,IAAA,MAAA,KAC9B,IAAM,WAAA,OACN,IAAM,MAAA,IACN,IAAM,MAAA,KACN,IAAM,iBAAA,KAAwB,OAAA,IAAA,MAAA,KAC9B,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,GAAK,MAAA,KACL,GAAK,MAAA,QACL,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,GAAK,MAAA,KACL,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,WAAA,OAAoB,MAAA,KAC1B,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,Kdk9CN,ach9CA,Qd+8CA,Yc78CiB,MAAA,KAEjB,uBdi9CA,qBc/8CE,MAAA,KACA,QAAA,KACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KAGF,6BACE,MAAA,KACA,QAAA,OACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KC5EF,eACE,YAAA,IACA,MAAA,mBACA,WAAA,MAAA,KAAA,OAHF,qBAMI,MAAA,QACA,gBAAA,KCFJ,sBACE,QAAA,gBACA,SAAA,EAAA,KAAA,EAFF,wCAMI,MAAA,KACA,UAAA,YACA,UAAA,eACA,QAAA,OAAA,YACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,eACA,WAAA,EAAA,MAAA,KAAA,iBpB0CA,yBoBvDJ,wCAgBM,MAAA,MAhBN,gDAqBM,QAAA,eArBN,6DAyBM,QAAA,YACA,SAAA,kBACA,iBAAA,sBACA,OAAA,YA5BN,wDAgCM,WAAA,YAhCN,oDAqCI,QAAA,YACA,SAAA,kBAtCJ,qEA0CI,QAAA,QAAA,eACA,WAAA,YACA,UAAA,kBACA,YAAA,cACA,MAAA,kBACA,cAAA,YA/CJ,6DAmDI,MAAA,eACA,YAAA,YApDJ,wEAyDI,MAAA,eACA,MAAA,eACA,QAAA,YACA,WAAA,eA5DJ,6DAgEI,MAAA,eACA,MAAA,eACA,QAAA,YAlEJ,qEAsEM,QAAA,eAtEN,sGA6EQ,YAAA,iBACA,WAAA,iBACA,WAAA,IAAA,MAAA,eA/ER,uFAoFM,QAAA,eApFN,2DAyFI,QAAA,MACA,QAAA,OAAA,eACA,cAAA,YACA,UAAA,kBACA,YAAA,cA7FJ,0DAiGI,QAAA,EAAA,KAAA,gBACA,WAAA,QACA,UAAA,kBACA,YAAA,IACA,YAAA,eArGJ,gDAyGI,MAAA,eACA,MAAA,eACA,OAAA,eACA,QAAA,OAAA,KAAA,EACA,UAAA,iBACA,YAAA,YACA,MAAA,kBACA,WAAA,IAAA,MAAA,eAhHJ,sDAoHI,QAAA,iBACA,SAAA,kBACA,MAAA,kBACA,YAAA,YACA,WAAA,cAxHJ,+DA4HI,MAAA,QACA,iBAAA,sBA7HJ,mGAiII,WAAA,MAAA,EAAA,KAAA,EAAA,EAAA,6BAjIJ,sFAqII,iBAAA","sourcesContent":["/*!\n * Bootstrap Docs (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see https://creativecommons.org/licenses/by/3.0/.\n */\n\n// Dev notes\n//\n// Background information on nomenclature and architecture decisions here.\n//\n// - Bootstrap functions, variables, and mixins are included for easy reuse.\n// Doing so gives us access to the same core utilities provided by Bootstrap.\n// For example, consistent media queries through those mixins.\n//\n// - Bootstrap's **docs variables** are prefixed with `$bd-`.\n// These custom colors avoid collision with the components Bootstrap provides.\n//\n// - Classes are prefixed with `.bd-`.\n// These classes indicate custom-built or modified components for the design\n// and layout of the Bootstrap docs. They are not included in our builds.\n//\n// Happy Bootstrapping!\n\n// Load Bootstrap variables and mixins\n@import \"../../../../../scss/functions\";\n@import \"../../../../../scss/variables\";\n@import \"../../../../../scss/mixins\";\n\n// Load docs components\n@import \"variables\";\n@import \"nav\";\n@import \"masthead\";\n@import \"ads\";\n@import \"content\";\n@import \"skiplink\";\n@import \"sidebar\";\n@import \"footer\";\n@import \"component-examples\";\n@import \"buttons\";\n@import \"callouts\";\n@import \"examples\";\n@import \"browser-bugs\";\n@import \"brand\";\n@import \"colors\";\n@import \"clipboard-js\";\n\n// Load docs dependencies\n@import \"syntax\";\n@import \"anchor\";\n@import \"algolia\";\n","//\n// Main navbar\n//\n\n.bd-navbar {\n min-height: 4rem;\n background-color: $bd-purple;\n box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .1);\n\n @include media-breakpoint-down(md) {\n padding-right: .5rem;\n padding-left: .5rem;\n\n .navbar-nav-scroll {\n max-width: 100%;\n height: 2.5rem;\n margin-top: .25rem;\n overflow: hidden;\n font-size: .875rem;\n\n .navbar-nav {\n padding-bottom: 2rem;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n }\n }\n }\n\n @include media-breakpoint-up(md) {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: 1071; // over everything in bootstrap\n }\n }\n\n .navbar-nav {\n .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n color: $bd-purple-light;\n\n &.active,\n &:hover {\n color: #fff;\n background-color: transparent;\n }\n\n &.active {\n font-weight: 500;\n }\n }\n }\n\n .navbar-nav-svg {\n display: inline-block;\n width: 1rem;\n height: 1rem;\n vertical-align: text-top;\n }\n\n .dropdown-menu {\n font-size: .875rem;\n }\n\n .dropdown-item.active {\n font-weight: 500;\n color: $gray-900;\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: .4rem .6rem;\n background-size: .75rem .75rem;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n.bd-masthead {\n position: relative;\n padding: 3rem ($grid-gutter-width / 2);\n // background-image: linear-gradient(45deg, #fafafa, #f5f5f5);\n\n h1 {\n line-height: 1;\n }\n\n .btn {\n width: 100%;\n padding: .8rem 2rem;\n font-size: 1.25rem;\n font-weight: 500;\n }\n\n .carbonad {\n margin-top: 0 !important;\n margin-bottom: -3rem !important;\n }\n\n @include media-breakpoint-up(sm) {\n padding-top: 5rem;\n padding-bottom: 5rem;\n\n .carbonad {\n margin-bottom: 0 !important;\n }\n }\n\n @include media-breakpoint-up(md) {\n h1 {\n font-size: 4rem;\n }\n\n .carbonad {\n margin-top: 3rem !important;\n }\n }\n}\n\n.half-rule {\n width: 6rem;\n margin: 2.5rem 0;\n}\n\n.masthead-followup {\n .bd-clipboard { display: none; }\n\n .highlight {\n padding: .5rem 0;\n background-color: transparent;\n }\n}\n","// stylelint-disable declaration-no-important, selector-max-id\n\n//\n// Carbon ads\n//\n\n#carbonads {\n position: static;\n display: block;\n max-width: 400px;\n padding: 15px 15px 15px 160px;\n margin: 2rem 0;\n overflow: hidden;\n font-size: 13px;\n line-height: 1.4;\n text-align: left;\n background-color: rgba(0, 0, 0, .05);\n\n a {\n color: #333;\n text-decoration: none;\n }\n\n @include media-breakpoint-up(sm) {\n max-width: 330px;\n border-radius: 4px;\n }\n}\n\n.carbon-img {\n float: left;\n margin-left: -145px;\n}\n\n.carbon-poweredby {\n display: block;\n color: #777 !important;\n}\n","// stylelint-disable no-duplicate-selectors, selector-max-combinators, selector-max-compound-selectors, selector-max-type, selector-no-qualifying-type\n\n//\n// Automatically style Markdown-based tables like a Bootstrap `.table`.\n//\n\n.bd-content {\n order: 1;\n\n // Hack the sticky header\n > h2[id],\n > h3[id],\n > h4[id] {\n pointer-events: none;\n\n > div,\n > a {\n pointer-events: auto;\n }\n\n &::before {\n display: block;\n height: 6rem;\n margin-top: -6rem;\n visibility: hidden;\n content: \"\";\n }\n }\n\n > table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 1rem;\n\n @include media-breakpoint-down(md) {\n display: block;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n &.table-bordered {\n border: 0;\n }\n }\n\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: $table-cell-padding;\n vertical-align: top;\n border: 1px solid $table-border-color;\n\n > p:last-child {\n margin-bottom: 0;\n }\n }\n }\n }\n\n // Prevent breaking of code (e.g., Grunt tasks list)\n td:first-child > code {\n white-space: nowrap;\n }\n }\n}\n\n//\n// Docs sections\n//\n\n.bd-content {\n > h2:not(:first-child) {\n margin-top: 3rem;\n }\n\n > h3 {\n margin-top: 1.5rem;\n }\n\n > ul li,\n > ol li {\n margin-bottom: .25rem;\n }\n\n @include media-breakpoint-up(lg) {\n > ul,\n > ol,\n > p {\n max-width: 80%;\n }\n }\n}\n\n.bd-title {\n margin-top: 1rem;\n margin-bottom: .5rem;\n font-weight: 300;\n\n @include media-breakpoint-up(sm) {\n font-size: 3rem;\n }\n}\n\n.bd-lead {\n font-size: 1.125rem;\n font-weight: 300;\n\n @include media-breakpoint-up(sm) {\n max-width: 80%;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n }\n}\n\n.bd-text-purple { color: $bd-purple; }\n.bd-text-purple-bright { color: $bd-purple-bright; }\n","/*!\n * Bootstrap Docs (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see https://creativecommons.org/licenses/by/3.0/.\n */\n.bd-navbar {\n min-height: 4rem;\n background-color: #563d7c;\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.05), inset 0 -1px 0 rgba(0, 0, 0, 0.1);\n}\n\n@media (max-width: 991.98px) {\n .bd-navbar {\n padding-right: .5rem;\n padding-left: .5rem;\n }\n .bd-navbar .navbar-nav-scroll {\n max-width: 100%;\n height: 2.5rem;\n margin-top: .25rem;\n overflow: hidden;\n font-size: .875rem;\n }\n .bd-navbar .navbar-nav-scroll .navbar-nav {\n padding-bottom: 2rem;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n }\n}\n\n@media (min-width: 768px) {\n @supports ((position: -webkit-sticky) or (position: sticky)) {\n .bd-navbar {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1071;\n }\n }\n}\n\n.bd-navbar .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n color: #cbbde2;\n}\n\n.bd-navbar .navbar-nav .nav-link.active, .bd-navbar .navbar-nav .nav-link:hover {\n color: #fff;\n background-color: transparent;\n}\n\n.bd-navbar .navbar-nav .nav-link.active {\n font-weight: 500;\n}\n\n.bd-navbar .navbar-nav-svg {\n display: inline-block;\n width: 1rem;\n height: 1rem;\n vertical-align: text-top;\n}\n\n.bd-navbar .dropdown-menu {\n font-size: .875rem;\n}\n\n.bd-navbar .dropdown-item.active {\n font-weight: 500;\n color: #212529;\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: .4rem .6rem;\n background-size: .75rem .75rem;\n}\n\n.bd-masthead {\n position: relative;\n padding: 3rem 15px;\n}\n\n.bd-masthead h1 {\n line-height: 1;\n}\n\n.bd-masthead .btn {\n width: 100%;\n padding: .8rem 2rem;\n font-size: 1.25rem;\n font-weight: 500;\n}\n\n.bd-masthead .carbonad {\n margin-top: 0 !important;\n margin-bottom: -3rem !important;\n}\n\n@media (min-width: 576px) {\n .bd-masthead {\n padding-top: 5rem;\n padding-bottom: 5rem;\n }\n .bd-masthead .carbonad {\n margin-bottom: 0 !important;\n }\n}\n\n@media (min-width: 768px) {\n .bd-masthead h1 {\n font-size: 4rem;\n }\n .bd-masthead .carbonad {\n margin-top: 3rem !important;\n }\n}\n\n.half-rule {\n width: 6rem;\n margin: 2.5rem 0;\n}\n\n.masthead-followup .bd-clipboard {\n display: none;\n}\n\n.masthead-followup .highlight {\n padding: .5rem 0;\n background-color: transparent;\n}\n\n#carbonads {\n position: static;\n display: block;\n max-width: 400px;\n padding: 15px 15px 15px 160px;\n margin: 2rem 0;\n overflow: hidden;\n font-size: 13px;\n line-height: 1.4;\n text-align: left;\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n#carbonads a {\n color: #333;\n text-decoration: none;\n}\n\n@media (min-width: 576px) {\n #carbonads {\n max-width: 330px;\n border-radius: 4px;\n }\n}\n\n.carbon-img {\n float: left;\n margin-left: -145px;\n}\n\n.carbon-poweredby {\n display: block;\n color: #777 !important;\n}\n\n.bd-content {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.bd-content > h2[id],\n.bd-content > h3[id],\n.bd-content > h4[id] {\n pointer-events: none;\n}\n\n.bd-content > h2[id] > div,\n.bd-content > h2[id] > a,\n.bd-content > h3[id] > div,\n.bd-content > h3[id] > a,\n.bd-content > h4[id] > div,\n.bd-content > h4[id] > a {\n pointer-events: auto;\n}\n\n.bd-content > h2[id]::before,\n.bd-content > h3[id]::before,\n.bd-content > h4[id]::before {\n display: block;\n height: 6rem;\n margin-top: -6rem;\n visibility: hidden;\n content: \"\";\n}\n\n.bd-content > table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n@media (max-width: 991.98px) {\n .bd-content > table {\n display: block;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .bd-content > table.table-bordered {\n border: 0;\n }\n}\n\n.bd-content > table > thead > tr > th,\n.bd-content > table > thead > tr > td,\n.bd-content > table > tbody > tr > th,\n.bd-content > table > tbody > tr > td,\n.bd-content > table > tfoot > tr > th,\n.bd-content > table > tfoot > tr > td {\n padding: 0.75rem;\n vertical-align: top;\n border: 1px solid #dee2e6;\n}\n\n.bd-content > table > thead > tr > th > p:last-child,\n.bd-content > table > thead > tr > td > p:last-child,\n.bd-content > table > tbody > tr > th > p:last-child,\n.bd-content > table > tbody > tr > td > p:last-child,\n.bd-content > table > tfoot > tr > th > p:last-child,\n.bd-content > table > tfoot > tr > td > p:last-child {\n margin-bottom: 0;\n}\n\n.bd-content > table td:first-child > code {\n white-space: nowrap;\n}\n\n.bd-content > h2:not(:first-child) {\n margin-top: 3rem;\n}\n\n.bd-content > h3 {\n margin-top: 1.5rem;\n}\n\n.bd-content > ul li,\n.bd-content > ol li {\n margin-bottom: .25rem;\n}\n\n@media (min-width: 992px) {\n .bd-content > ul,\n .bd-content > ol,\n .bd-content > p {\n max-width: 80%;\n }\n}\n\n.bd-title {\n margin-top: 1rem;\n margin-bottom: .5rem;\n font-weight: 300;\n}\n\n@media (min-width: 576px) {\n .bd-title {\n font-size: 3rem;\n }\n}\n\n.bd-lead {\n font-size: 1.125rem;\n font-weight: 300;\n}\n\n@media (min-width: 576px) {\n .bd-lead {\n max-width: 80%;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n }\n}\n\n.bd-text-purple {\n color: #563d7c;\n}\n\n.bd-text-purple-bright {\n color: #7952b3;\n}\n\n#skippy {\n display: block;\n padding: 1em;\n color: #fff;\n background-color: #563d7c;\n outline: 0;\n}\n\n#skippy .skiplink-text {\n padding: .5em;\n outline: 1px dotted;\n}\n\n.bd-toc {\n -ms-flex-order: 2;\n order: 2;\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n font-size: .875rem;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .bd-toc {\n position: -webkit-sticky;\n position: sticky;\n top: 4rem;\n height: calc(100vh - 4rem);\n overflow-y: auto;\n }\n}\n\n.section-nav {\n padding-left: 0;\n border-left: 1px solid #eee;\n}\n\n.section-nav ul {\n padding-left: 1rem;\n}\n\n.section-nav ul ul {\n display: none;\n}\n\n.toc-entry {\n display: block;\n}\n\n.toc-entry a {\n display: block;\n padding: .125rem 1.5rem;\n color: #99979c;\n}\n\n.toc-entry a:hover {\n color: #007bff;\n text-decoration: none;\n}\n\n.bd-sidebar {\n -ms-flex-order: 0;\n order: 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n@media (min-width: 768px) {\n .bd-sidebar {\n border-right: 1px solid rgba(0, 0, 0, 0.1);\n }\n @supports ((position: -webkit-sticky) or (position: sticky)) {\n .bd-sidebar {\n position: -webkit-sticky;\n position: sticky;\n top: 4rem;\n z-index: 1000;\n height: calc(100vh - 4rem);\n }\n }\n}\n\n@media (min-width: 1200px) {\n .bd-sidebar {\n -ms-flex: 0 1 320px;\n flex: 0 1 320px;\n }\n}\n\n.bd-links {\n padding-top: 1rem;\n padding-bottom: 1rem;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n @supports ((position: -webkit-sticky) or (position: sticky)) {\n .bd-links {\n max-height: calc(100vh - 9rem);\n overflow-y: auto;\n }\n }\n}\n\n@media (min-width: 768px) {\n .bd-links {\n display: block !important;\n }\n}\n\n.bd-search {\n position: relative;\n padding: 1rem 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.bd-search .form-control:focus {\n border-color: #7952b3;\n box-shadow: 0 0 0 3px rgba(121, 82, 179, 0.25);\n}\n\n.bd-search-docs-toggle {\n line-height: 1;\n color: #212529;\n}\n\n.bd-sidenav {\n display: none;\n}\n\n.bd-toc-link {\n display: block;\n padding: .25rem 1.5rem;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.65);\n}\n\n.bd-toc-link:hover {\n color: rgba(0, 0, 0, 0.85);\n text-decoration: none;\n}\n\n.bd-toc-item.active {\n margin-bottom: 1rem;\n}\n\n.bd-toc-item.active:not(:first-child) {\n margin-top: 1rem;\n}\n\n.bd-toc-item.active > .bd-toc-link {\n color: rgba(0, 0, 0, 0.85);\n}\n\n.bd-toc-item.active > .bd-toc-link:hover {\n background-color: transparent;\n}\n\n.bd-toc-item.active > .bd-sidenav {\n display: block;\n}\n\n.bd-sidebar .nav > li > a {\n display: block;\n padding: .25rem 1.5rem;\n font-size: 90%;\n color: rgba(0, 0, 0, 0.65);\n}\n\n.bd-sidebar .nav > li > a:hover {\n color: rgba(0, 0, 0, 0.85);\n text-decoration: none;\n background-color: transparent;\n}\n\n.bd-sidebar .nav > .active > a,\n.bd-sidebar .nav > .active:hover > a {\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n background-color: transparent;\n}\n\n.bd-footer {\n font-size: 85%;\n text-align: center;\n background-color: #f7f7f7;\n}\n\n.bd-footer a {\n font-weight: 500;\n color: #495057;\n}\n\n.bd-footer a:hover, .bd-footer a:focus {\n color: #007bff;\n}\n\n.bd-footer p {\n margin-bottom: 0;\n}\n\n@media (min-width: 576px) {\n .bd-footer {\n text-align: left;\n }\n}\n\n.bd-footer-links {\n padding-left: 0;\n margin-bottom: 1rem;\n}\n\n.bd-footer-links li {\n display: inline-block;\n}\n\n.bd-footer-links li + li {\n margin-left: 1rem;\n}\n\n.bd-example-row .row > .col,\n.bd-example-row .row > [class^=\"col-\"] {\n padding-top: .75rem;\n padding-bottom: .75rem;\n background-color: rgba(86, 61, 124, 0.15);\n border: 1px solid rgba(86, 61, 124, 0.2);\n}\n\n.bd-example-row .row + .row {\n margin-top: 1rem;\n}\n\n.bd-example-row .flex-items-top,\n.bd-example-row .flex-items-middle,\n.bd-example-row .flex-items-bottom {\n min-height: 6rem;\n background-color: rgba(255, 0, 0, 0.1);\n}\n\n.bd-example-row-flex-cols .row {\n min-height: 10rem;\n background-color: rgba(255, 0, 0, 0.1);\n}\n\n.bd-highlight {\n background-color: rgba(86, 61, 124, 0.15);\n border: 1px solid rgba(86, 61, 124, 0.15);\n}\n\n.example-container {\n width: 800px;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.example-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.example-content-main {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n@media (min-width: 576px) {\n .example-content-main {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n}\n\n@media (min-width: 992px) {\n .example-content-main {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n}\n\n.example-content-secondary {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n@media (min-width: 576px) {\n .example-content-secondary {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n}\n\n@media (min-width: 992px) {\n .example-content-secondary {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n}\n\n.bd-example-container {\n min-width: 16rem;\n max-width: 25rem;\n margin-right: auto;\n margin-left: auto;\n}\n\n.bd-example-container-header {\n height: 3rem;\n margin-bottom: .5rem;\n background-color: white;\n border-radius: .25rem;\n}\n\n.bd-example-container-sidebar {\n float: right;\n width: 4rem;\n height: 8rem;\n background-color: #80bdff;\n border-radius: .25rem;\n}\n\n.bd-example-container-body {\n height: 8rem;\n margin-right: 4.5rem;\n background-color: #957bbe;\n border-radius: .25rem;\n}\n\n.bd-example-container-fluid {\n max-width: none;\n}\n\n.bd-example {\n position: relative;\n padding: 1rem;\n margin: 1rem -15px 0;\n border: solid #f8f9fa;\n border-width: .2rem 0 0;\n}\n\n.bd-example::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n@media (min-width: 576px) {\n .bd-example {\n padding: 1.5rem;\n margin-right: 0;\n margin-left: 0;\n border-width: .2rem;\n }\n}\n\n.bd-example + .highlight,\n.bd-example + .clipboard + .highlight {\n margin-top: 0;\n}\n\n.bd-example + p {\n margin-top: 2rem;\n}\n\n.bd-example .pos-f-t {\n position: relative;\n margin: -1rem;\n}\n\n@media (min-width: 576px) {\n .bd-example .pos-f-t {\n margin: -1.5rem;\n }\n}\n\n.bd-example .custom-file-input:lang(es) ~ .custom-file-label::after {\n content: \"Elegir\";\n}\n\n.bd-example > .form-control + .form-control {\n margin-top: .5rem;\n}\n\n.bd-example > .nav + .nav,\n.bd-example > .alert + .alert,\n.bd-example > .navbar + .navbar,\n.bd-example > .progress + .progress,\n.bd-example > .progress + .btn {\n margin-top: 1rem;\n}\n\n.bd-example > .dropdown-menu:first-child {\n position: static;\n display: block;\n}\n\n.bd-example > .form-group:last-child {\n margin-bottom: 0;\n}\n\n.bd-example > .close {\n float: none;\n}\n\n.bd-example-type .table .type-info {\n color: #999;\n vertical-align: middle;\n}\n\n.bd-example-type .table td {\n padding: 1rem 0;\n border-color: #eee;\n}\n\n.bd-example-type .table tr:first-child td {\n border-top: 0;\n}\n\n.bd-example-type h1,\n.bd-example-type h2,\n.bd-example-type h3,\n.bd-example-type h4,\n.bd-example-type h5,\n.bd-example-type h6 {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.bd-example-bg-classes p {\n padding: 1rem;\n}\n\n.bd-example > img + img {\n margin-left: .5rem;\n}\n\n.bd-example > .btn-group {\n margin-top: .25rem;\n margin-bottom: .25rem;\n}\n\n.bd-example > .btn-toolbar + .btn-toolbar {\n margin-top: .5rem;\n}\n\n.bd-example-control-sizing select,\n.bd-example-control-sizing input[type=\"text\"] + input[type=\"text\"] {\n margin-top: .5rem;\n}\n\n.bd-example-form .input-group {\n margin-bottom: .5rem;\n}\n\n.bd-example > textarea.form-control {\n resize: vertical;\n}\n\n.bd-example > .list-group {\n max-width: 400px;\n}\n\n.bd-example .fixed-top,\n.bd-example .sticky-top {\n position: static;\n margin: -1rem -1rem 1rem;\n}\n\n.bd-example .fixed-bottom {\n position: static;\n margin: 1rem -1rem -1rem;\n}\n\n@media (min-width: 576px) {\n .bd-example .fixed-top,\n .bd-example .sticky-top {\n margin: -1.5rem -1.5rem 1rem;\n }\n .bd-example .fixed-bottom {\n margin: 1rem -1.5rem -1.5rem;\n }\n}\n\n.bd-example .pagination {\n margin-top: .5rem;\n margin-bottom: .5rem;\n}\n\n.modal {\n z-index: 1072;\n}\n\n.modal .tooltip,\n.modal .popover {\n z-index: 1073;\n}\n\n.modal-backdrop {\n z-index: 1071;\n}\n\n.bd-example-modal {\n background-color: #fafafa;\n}\n\n.bd-example-modal .modal {\n position: relative;\n top: auto;\n right: auto;\n bottom: auto;\n left: auto;\n z-index: 1;\n display: block;\n}\n\n.bd-example-modal .modal-dialog {\n left: auto;\n margin-right: auto;\n margin-left: auto;\n}\n\n.bd-example-tabs .nav-tabs {\n margin-bottom: 1rem;\n}\n\n.bd-example-popover-static {\n padding-bottom: 1.5rem;\n background-color: #f9f9f9;\n}\n\n.bd-example-popover-static .popover {\n position: relative;\n display: block;\n float: left;\n width: 260px;\n margin: 1.25rem;\n}\n\n.tooltip-demo a {\n white-space: nowrap;\n}\n\n.bd-example-tooltip-static .tooltip {\n position: relative;\n display: inline-block;\n margin: 10px 20px;\n opacity: 1;\n}\n\n.scrollspy-example {\n position: relative;\n height: 200px;\n margin-top: .5rem;\n overflow: auto;\n}\n\n.scrollspy-example-2 {\n position: relative;\n height: 350px;\n overflow: auto;\n}\n\n.bd-example-border-utils [class^=\"border\"] {\n display: inline-block;\n width: 5rem;\n height: 5rem;\n margin: .25rem;\n background-color: #f5f5f5;\n}\n\n.bd-example-border-utils-0 [class^=\"border\"] {\n border: 1px solid #dee2e6;\n}\n\n.highlight {\n padding: 1rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n background-color: #f8f9fa;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n@media (min-width: 576px) {\n .highlight {\n padding: 1.5rem;\n }\n}\n\n.bd-content .highlight {\n margin-right: -15px;\n margin-left: -15px;\n}\n\n@media (min-width: 576px) {\n .bd-content .highlight {\n margin-right: 0;\n margin-left: 0;\n }\n}\n\n.highlight pre {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n background-color: transparent;\n border: 0;\n}\n\n.highlight pre code {\n font-size: inherit;\n color: #212529;\n}\n\n.btn-bd-primary {\n font-weight: 500;\n color: #7952b3;\n border-color: #7952b3;\n}\n\n.btn-bd-primary:hover, .btn-bd-primary:active {\n color: #fff;\n background-color: #7952b3;\n border-color: #7952b3;\n}\n\n.btn-bd-primary:focus {\n box-shadow: 0 0 0 3px rgba(121, 82, 179, 0.25);\n}\n\n.btn-bd-download {\n font-weight: 500;\n color: #ffe484;\n border-color: #ffe484;\n}\n\n.btn-bd-download:hover, .btn-bd-download:active {\n color: #2a2730;\n background-color: #ffe484;\n border-color: #ffe484;\n}\n\n.btn-bd-download:focus {\n box-shadow: 0 0 0 3px rgba(255, 228, 132, 0.25);\n}\n\n.bd-callout {\n padding: 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.25rem;\n border: 1px solid #eee;\n border-left-width: .25rem;\n border-radius: .25rem;\n}\n\n.bd-callout h4 {\n margin-top: 0;\n margin-bottom: .25rem;\n}\n\n.bd-callout p:last-child {\n margin-bottom: 0;\n}\n\n.bd-callout code {\n border-radius: .25rem;\n}\n\n.bd-callout + .bd-callout {\n margin-top: -.25rem;\n}\n\n.bd-callout-info {\n border-left-color: #5bc0de;\n}\n\n.bd-callout-info h4 {\n color: #5bc0de;\n}\n\n.bd-callout-warning {\n border-left-color: #f0ad4e;\n}\n\n.bd-callout-warning h4 {\n color: #f0ad4e;\n}\n\n.bd-callout-danger {\n border-left-color: #d9534f;\n}\n\n.bd-callout-danger h4 {\n color: #d9534f;\n}\n\n.bd-examples .img-thumbnail {\n margin-bottom: .75rem;\n}\n\n.bd-examples h4 {\n margin-bottom: .25rem;\n}\n\n.bd-examples p {\n margin-bottom: 1.25rem;\n}\n\n@media (max-width: 480px) {\n .bd-examples {\n margin-right: -.75rem;\n margin-left: -.75rem;\n }\n .bd-examples > [class^=\"col-\"] {\n padding-right: .75rem;\n padding-left: .75rem;\n }\n}\n\n.bd-browser-bugs td p {\n margin-bottom: 0;\n}\n\n.bd-browser-bugs th:first-child {\n width: 18%;\n}\n\n.bd-brand-logos {\n display: table;\n width: 100%;\n margin-bottom: 1rem;\n overflow: hidden;\n color: #563d7c;\n background-color: #f9f9f9;\n border-radius: .25rem;\n}\n\n.bd-brand-item {\n padding: 4rem 0;\n text-align: center;\n}\n\n.bd-brand-item + .bd-brand-item {\n border-top: 1px solid #fff;\n}\n\n.bd-brand-logos .inverse {\n color: #fff;\n background-color: #563d7c;\n}\n\n.bd-brand-item h1,\n.bd-brand-item h3 {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.bd-brand-item .bd-booticon {\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 768px) {\n .bd-brand-item {\n display: table-cell;\n width: 1%;\n }\n .bd-brand-item + .bd-brand-item {\n border-top: 0;\n border-left: 1px solid #fff;\n }\n .bd-brand-item h1 {\n font-size: 4rem;\n }\n}\n\n.color-swatches {\n margin: 0 -5px;\n overflow: hidden;\n}\n\n.color-swatch {\n float: left;\n width: 4rem;\n height: 4rem;\n margin-right: .25rem;\n margin-left: .25rem;\n border-radius: .25rem;\n}\n\n@media (min-width: 768px) {\n .color-swatch {\n width: 6rem;\n height: 6rem;\n }\n}\n\n.color-swatches .bd-purple {\n background-color: #563d7c;\n}\n\n.color-swatches .bd-purple-light {\n background-color: #cbbde2;\n}\n\n.color-swatches .bd-purple-lighter {\n background-color: #e5e1ea;\n}\n\n.color-swatches .bd-gray {\n background-color: #f9f9f9;\n}\n\n.swatch-blue {\n color: #fff;\n background-color: #007bff;\n}\n\n.swatch-indigo {\n color: #fff;\n background-color: #6610f2;\n}\n\n.swatch-purple {\n color: #fff;\n background-color: #6f42c1;\n}\n\n.swatch-pink {\n color: #fff;\n background-color: #e83e8c;\n}\n\n.swatch-red {\n color: #fff;\n background-color: #dc3545;\n}\n\n.swatch-orange {\n color: #212529;\n background-color: #fd7e14;\n}\n\n.swatch-yellow {\n color: #212529;\n background-color: #ffc107;\n}\n\n.swatch-green {\n color: #fff;\n background-color: #28a745;\n}\n\n.swatch-teal {\n color: #fff;\n background-color: #20c997;\n}\n\n.swatch-cyan {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.swatch-white {\n color: #212529;\n background-color: #fff;\n}\n\n.swatch-gray {\n color: #fff;\n background-color: #6c757d;\n}\n\n.swatch-gray-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.swatch-primary {\n color: #fff;\n background-color: #007bff;\n}\n\n.swatch-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\n.swatch-success {\n color: #fff;\n background-color: #28a745;\n}\n\n.swatch-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.swatch-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\n.swatch-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\n.swatch-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.swatch-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.swatch-100 {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.swatch-200 {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.swatch-300 {\n color: #212529;\n background-color: #dee2e6;\n}\n\n.swatch-400 {\n color: #212529;\n background-color: #ced4da;\n}\n\n.swatch-500 {\n color: #212529;\n background-color: #adb5bd;\n}\n\n.swatch-600 {\n color: #fff;\n background-color: #6c757d;\n}\n\n.swatch-700 {\n color: #fff;\n background-color: #495057;\n}\n\n.swatch-800 {\n color: #fff;\n background-color: #343a40;\n}\n\n.swatch-900 {\n color: #fff;\n background-color: #212529;\n}\n\n.bd-clipboard {\n position: relative;\n display: none;\n float: right;\n}\n\n.bd-clipboard + .highlight {\n margin-top: 0;\n}\n\n.btn-clipboard {\n position: absolute;\n top: .5rem;\n right: .5rem;\n z-index: 10;\n display: block;\n padding: .25rem .5rem;\n font-size: 75%;\n color: #818a91;\n cursor: pointer;\n background-color: transparent;\n border: 0;\n border-radius: .25rem;\n}\n\n.btn-clipboard:hover {\n color: #fff;\n background-color: #027de7;\n}\n\n@media (min-width: 768px) {\n .bd-clipboard {\n display: block;\n }\n}\n\n.hll {\n background-color: #ffc;\n}\n\n.c {\n color: #999;\n}\n\n.k {\n color: #069;\n}\n\n.o {\n color: #555;\n}\n\n.cm {\n color: #999;\n}\n\n.cp {\n color: #099;\n}\n\n.c1 {\n color: #999;\n}\n\n.cs {\n color: #999;\n}\n\n.gd {\n background-color: #fcc;\n border: 1px solid #c00;\n}\n\n.ge {\n font-style: italic;\n}\n\n.gr {\n color: #f00;\n}\n\n.gh {\n color: #030;\n}\n\n.gi {\n background-color: #cfc;\n border: 1px solid #0c0;\n}\n\n.go {\n color: #aaa;\n}\n\n.gp {\n color: #009;\n}\n\n.gu {\n color: #030;\n}\n\n.gt {\n color: #9c6;\n}\n\n.kc {\n color: #069;\n}\n\n.kd {\n color: #069;\n}\n\n.kn {\n color: #069;\n}\n\n.kp {\n color: #069;\n}\n\n.kr {\n color: #069;\n}\n\n.kt {\n color: #078;\n}\n\n.m {\n color: #f60;\n}\n\n.s {\n color: #d44950;\n}\n\n.na {\n color: #4f9fcf;\n}\n\n.nb {\n color: #366;\n}\n\n.nc {\n color: #0a8;\n}\n\n.no {\n color: #360;\n}\n\n.nd {\n color: #99f;\n}\n\n.ni {\n color: #999;\n}\n\n.ne {\n color: #c00;\n}\n\n.nf {\n color: #c0f;\n}\n\n.nl {\n color: #99f;\n}\n\n.nn {\n color: #0cf;\n}\n\n.nt {\n color: #2f6f9f;\n}\n\n.nv {\n color: #033;\n}\n\n.ow {\n color: #000;\n}\n\n.w {\n color: #bbb;\n}\n\n.mf {\n color: #f60;\n}\n\n.mh {\n color: #f60;\n}\n\n.mi {\n color: #f60;\n}\n\n.mo {\n color: #f60;\n}\n\n.sb {\n color: #c30;\n}\n\n.sc {\n color: #c30;\n}\n\n.sd {\n font-style: italic;\n color: #c30;\n}\n\n.s2 {\n color: #c30;\n}\n\n.se {\n color: #c30;\n}\n\n.sh {\n color: #c30;\n}\n\n.si {\n color: #a00;\n}\n\n.sx {\n color: #c30;\n}\n\n.sr {\n color: #3aa;\n}\n\n.s1 {\n color: #c30;\n}\n\n.ss {\n color: #fc3;\n}\n\n.bp {\n color: #366;\n}\n\n.vc {\n color: #033;\n}\n\n.vg {\n color: #033;\n}\n\n.vi {\n color: #033;\n}\n\n.il {\n color: #f60;\n}\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt {\n color: #999;\n}\n\n.language-bash::before,\n.language-sh::before {\n color: #009;\n content: \"$ \";\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.language-powershell::before {\n color: #009;\n content: \"PM> \";\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.anchorjs-link {\n font-weight: 400;\n color: rgba(0, 123, 255, 0.5);\n transition: color .16s linear;\n}\n\n.anchorjs-link:hover {\n color: #007bff;\n text-decoration: none;\n}\n\n.algolia-autocomplete {\n display: block !important;\n -ms-flex: 1;\n flex: 1;\n}\n\n.algolia-autocomplete .ds-dropdown-menu {\n width: 100%;\n min-width: 0 !important;\n max-width: none !important;\n padding: .75rem 0 !important;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175);\n}\n\n@media (min-width: 768px) {\n .algolia-autocomplete .ds-dropdown-menu {\n width: 175%;\n }\n}\n\n.algolia-autocomplete .ds-dropdown-menu::before {\n display: none !important;\n}\n\n.algolia-autocomplete .ds-dropdown-menu [class^=\"ds-dataset-\"] {\n padding: 0 !important;\n overflow: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n}\n\n.algolia-autocomplete .ds-dropdown-menu .ds-suggestions {\n margin-top: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion {\n padding: 0 !important;\n overflow: visible !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--category-header {\n padding: .125rem 1rem !important;\n margin-top: 0 !important;\n font-size: .875rem !important;\n font-weight: 500 !important;\n color: #7952b3 !important;\n border-bottom: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--wrapper {\n float: none !important;\n padding-top: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {\n float: none !important;\n width: auto !important;\n padding: 0 !important;\n text-align: left !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--content {\n float: none !important;\n width: auto !important;\n padding: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--content::before {\n display: none !important;\n}\n\n.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header {\n padding-top: .75rem !important;\n margin-top: .75rem !important;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column {\n display: none !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--title {\n display: block;\n padding: .25rem 1rem !important;\n margin-bottom: 0 !important;\n font-size: .875rem !important;\n font-weight: 400 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--text {\n padding: 0 1rem .5rem !important;\n margin-top: -.25rem;\n font-size: .875rem !important;\n font-weight: 400;\n line-height: 1.25 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n float: none !important;\n width: auto !important;\n height: auto !important;\n padding: .75rem 1rem 0;\n font-size: .75rem !important;\n line-height: 1 !important;\n color: #767676 !important;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.algolia-autocomplete .algolia-docsearch-footer--logo {\n display: inline !important;\n overflow: visible !important;\n color: inherit !important;\n text-indent: 0 !important;\n background: none !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--highlight {\n color: #5f2dab;\n background-color: rgba(154, 132, 187, 0.12);\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight {\n box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, 0.5) !important;\n}\n\n.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content {\n background-color: rgba(208, 189, 236, 0.15) !important;\n}\n/*# sourceMappingURL=docs.min.css.map */","// stylelint-disable selector-max-id\n\n#skippy {\n display: block;\n padding: 1em;\n color: #fff;\n background-color: $bd-purple;\n outline: 0;\n\n .skiplink-text {\n padding: .5em;\n outline: 1px dotted;\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Right side table of contents\n//\n\n.bd-toc {\n @supports (position: sticky) {\n position: sticky;\n top: 4rem;\n height: calc(100vh - 4rem);\n overflow-y: auto;\n }\n order: 2;\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n font-size: .875rem;\n}\n\n.section-nav {\n padding-left: 0;\n border-left: 1px solid #eee;\n\n ul {\n padding-left: 1rem;\n\n ul {\n display: none;\n }\n }\n}\n\n.toc-entry {\n display: block;\n\n a {\n display: block;\n padding: .125rem 1.5rem;\n color: #99979c;\n\n &:hover {\n color: $blue;\n text-decoration: none;\n }\n }\n}\n\n//\n// Left side navigation\n//\n\n.bd-sidebar {\n order: 0;\n // background-color: #f5f2f9;\n border-bottom: 1px solid rgba(0, 0, 0, .1);\n\n @include media-breakpoint-up(md) {\n @supports (position: sticky) {\n position: sticky;\n top: 4rem;\n z-index: 1000;\n height: calc(100vh - 4rem);\n }\n border-right: 1px solid rgba(0, 0, 0, .1);\n }\n\n @include media-breakpoint-up(xl) {\n flex: 0 1 320px;\n }\n}\n\n.bd-links {\n padding-top: 1rem;\n padding-bottom: 1rem;\n margin-right: -15px;\n margin-left: -15px;\n\n @include media-breakpoint-up(md) {\n @supports (position: sticky) {\n max-height: calc(100vh - 9rem);\n overflow-y: auto;\n }\n }\n\n // Override collapse behaviors\n @include media-breakpoint-up(md) {\n display: block !important;\n }\n}\n\n.bd-search {\n position: relative; // To contain the Algolia search\n padding: 1rem 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-bottom: 1px solid rgba(0, 0, 0, .05);\n\n .form-control:focus {\n border-color: $bd-purple-bright;\n box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);\n }\n}\n\n.bd-search-docs-toggle {\n line-height: 1;\n color: $gray-900;\n}\n\n.bd-sidenav {\n display: none;\n}\n\n.bd-toc-link {\n display: block;\n padding: .25rem 1.5rem;\n font-weight: 500;\n color: rgba(0, 0, 0, .65);\n\n &:hover {\n color: rgba(0, 0, 0, .85);\n text-decoration: none;\n }\n}\n\n.bd-toc-item {\n &.active {\n margin-bottom: 1rem;\n\n &:not(:first-child) {\n margin-top: 1rem;\n }\n\n > .bd-toc-link {\n color: rgba(0, 0, 0, .85);\n\n &:hover {\n background-color: transparent;\n }\n }\n\n > .bd-sidenav {\n display: block;\n }\n }\n}\n\n// All levels of nav\n.bd-sidebar .nav > li > a {\n display: block;\n padding: .25rem 1.5rem;\n font-size: 90%;\n color: rgba(0, 0, 0, .65);\n}\n\n.bd-sidebar .nav > li > a:hover {\n color: rgba(0, 0, 0, .85);\n text-decoration: none;\n background-color: transparent;\n}\n\n.bd-sidebar .nav > .active > a,\n.bd-sidebar .nav > .active:hover > a {\n font-weight: 500;\n color: rgba(0, 0, 0, .85);\n background-color: transparent;\n}\n","//\n// Footer\n//\n\n.bd-footer {\n font-size: 85%;\n text-align: center;\n background-color: #f7f7f7;\n\n a {\n font-weight: 500;\n color: $gray-700;\n\n &:hover,\n &:focus {\n color: $link-color;\n }\n }\n\n p {\n margin-bottom: 0;\n }\n\n @include media-breakpoint-up(sm) {\n text-align: left;\n }\n}\n\n.bd-footer-links {\n padding-left: 0;\n margin-bottom: 1rem;\n\n li {\n display: inline-block;\n\n + li {\n margin-left: 1rem;\n }\n }\n}\n","// stylelint-disable no-duplicate-selectors, selector-no-qualifying-type\n\n//\n// Grid examples\n//\n\n.bd-example-row {\n .row {\n > .col,\n > [class^=\"col-\"] {\n padding-top: .75rem;\n padding-bottom: .75rem;\n background-color: rgba(86, 61, 124, .15);\n border: 1px solid rgba(86, 61, 124, .2);\n }\n }\n\n .row + .row {\n margin-top: 1rem;\n }\n\n .flex-items-top,\n .flex-items-middle,\n .flex-items-bottom {\n min-height: 6rem;\n background-color: rgba(255, 0, 0, .1);\n }\n}\n\n.bd-example-row-flex-cols .row {\n min-height: 10rem;\n background-color: rgba(255, 0, 0, .1);\n}\n\n.bd-highlight {\n background-color: rgba($bd-purple, .15);\n border: 1px solid rgba($bd-purple, .15);\n}\n\n// Grid mixins\n.example-container {\n width: 800px;\n @include make-container();\n}\n\n.example-row {\n @include make-row();\n}\n\n.example-content-main {\n @include make-col-ready();\n\n @include media-breakpoint-up(sm) {\n @include make-col(6);\n }\n\n @include media-breakpoint-up(lg) {\n @include make-col(8);\n }\n}\n\n.example-content-secondary {\n @include make-col-ready();\n\n @include media-breakpoint-up(sm) {\n @include make-col(6);\n }\n\n @include media-breakpoint-up(lg) {\n @include make-col(4);\n }\n}\n\n\n//\n// Container illustrations\n//\n\n.bd-example-container {\n min-width: 16rem;\n max-width: 25rem;\n margin-right: auto;\n margin-left: auto;\n}\n\n.bd-example-container-header {\n height: 3rem;\n margin-bottom: .5rem;\n background-color: lighten($blue, 50%);\n border-radius: .25rem;\n}\n\n.bd-example-container-sidebar {\n float: right;\n width: 4rem;\n height: 8rem;\n background-color: lighten($blue, 25%);\n border-radius: .25rem;\n}\n\n.bd-example-container-body {\n height: 8rem;\n margin-right: 4.5rem;\n background-color: lighten($bd-purple, 25%);\n border-radius: .25rem;\n}\n\n.bd-example-container-fluid {\n max-width: none;\n}\n\n\n//\n// Docs examples\n//\n\n.bd-example {\n position: relative;\n padding: 1rem;\n margin: 1rem (-$grid-gutter-width / 2) 0;\n border: solid $gray-100;\n border-width: .2rem 0 0;\n @include clearfix();\n\n @include media-breakpoint-up(sm) {\n padding: 1.5rem;\n margin-right: 0;\n margin-left: 0;\n border-width: .2rem;\n }\n\n + .highlight,\n + .clipboard + .highlight {\n margin-top: 0;\n }\n\n + p {\n margin-top: 2rem;\n }\n\n .pos-f-t {\n position: relative;\n margin: -1rem;\n\n @include media-breakpoint-up(sm) {\n margin: -1.5rem;\n }\n }\n\n .custom-file-input:lang(es) ~ .custom-file-label::after {\n content: \"Elegir\";\n }\n\n > .form-control {\n + .form-control {\n margin-top: .5rem;\n }\n }\n\n > .nav + .nav,\n > .alert + .alert,\n > .navbar + .navbar,\n > .progress + .progress,\n > .progress + .btn {\n margin-top: 1rem;\n }\n\n > .dropdown-menu:first-child {\n position: static;\n display: block;\n }\n\n > .form-group:last-child {\n margin-bottom: 0;\n }\n\n > .close {\n float: none;\n }\n}\n\n// Typography\n.bd-example-type {\n .table {\n .type-info {\n color: #999;\n vertical-align: middle;\n }\n td {\n padding: 1rem 0;\n border-color: #eee;\n }\n tr:first-child td {\n border-top: 0;\n }\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n// Contextual background colors\n.bd-example-bg-classes p {\n padding: 1rem;\n}\n\n// Images\n.bd-example > img {\n + img {\n margin-left: .5rem;\n }\n}\n\n// Buttons\n.bd-example {\n > .btn-group {\n margin-top: .25rem;\n margin-bottom: .25rem;\n }\n > .btn-toolbar + .btn-toolbar {\n margin-top: .5rem;\n }\n}\n\n// Forms\n.bd-example-control-sizing select,\n.bd-example-control-sizing input[type=\"text\"] + input[type=\"text\"] {\n margin-top: .5rem;\n}\n.bd-example-form .input-group {\n margin-bottom: .5rem;\n}\n.bd-example > textarea.form-control {\n resize: vertical;\n}\n\n// List groups\n.bd-example > .list-group {\n max-width: 400px;\n}\n\n// Navbars\n.bd-example {\n .fixed-top,\n .sticky-top {\n position: static;\n margin: -1rem -1rem 1rem;\n }\n .fixed-bottom {\n position: static;\n margin: 1rem -1rem -1rem;\n }\n\n @include media-breakpoint-up(sm) {\n .fixed-top,\n .sticky-top {\n margin: -1.5rem -1.5rem 1rem;\n }\n .fixed-bottom {\n margin: 1rem -1.5rem -1.5rem;\n }\n }\n}\n\n// Pagination\n.bd-example .pagination {\n margin-top: .5rem;\n margin-bottom: .5rem;\n}\n\n// Example modals\n.modal {\n z-index: 1072;\n\n .tooltip,\n .popover {\n z-index: 1073;\n }\n}\n\n.modal-backdrop {\n z-index: 1071;\n}\n\n.bd-example-modal {\n background-color: #fafafa;\n\n .modal {\n position: relative;\n top: auto;\n right: auto;\n bottom: auto;\n left: auto;\n z-index: 1;\n display: block;\n }\n\n .modal-dialog {\n left: auto;\n margin-right: auto;\n margin-left: auto;\n }\n}\n\n// Example tabbable tabs\n.bd-example-tabs .nav-tabs {\n margin-bottom: 1rem;\n}\n\n// Popovers\n.bd-example-popover-static {\n padding-bottom: 1.5rem;\n background-color: #f9f9f9;\n\n .popover {\n position: relative;\n display: block;\n float: left;\n width: 260px;\n margin: 1.25rem;\n }\n}\n\n// Tooltips\n.tooltip-demo a {\n white-space: nowrap;\n}\n\n.bd-example-tooltip-static .tooltip {\n position: relative;\n display: inline-block;\n margin: 10px 20px;\n opacity: 1;\n}\n\n// Scrollspy demo on fixed height div\n.scrollspy-example {\n position: relative;\n height: 200px;\n margin-top: .5rem;\n overflow: auto;\n}\n\n.scrollspy-example-2 {\n position: relative;\n height: 350px;\n overflow: auto;\n}\n\n.bd-example-border-utils {\n [class^=\"border\"] {\n display: inline-block;\n width: 5rem;\n height: 5rem;\n margin: .25rem;\n background-color: #f5f5f5;\n }\n}\n\n.bd-example-border-utils-0 {\n [class^=\"border\"] {\n border: 1px solid $border-color;\n }\n}\n\n//\n// Code snippets\n//\n\n.highlight {\n padding: 1rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n background-color: $gray-100;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n\n @include media-breakpoint-up(sm) {\n padding: 1.5rem;\n }\n}\n\n.bd-content .highlight {\n margin-right: (-$grid-gutter-width / 2);\n margin-left: (-$grid-gutter-width / 2);\n\n @include media-breakpoint-up(sm) {\n margin-right: 0;\n margin-left: 0;\n }\n}\n\n.highlight {\n pre {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n background-color: transparent;\n border: 0;\n }\n pre code {\n font-size: inherit;\n color: $gray-900; // Effectively the base text color\n }\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","// Buttons\n//\n// Custom buttons for the docs.\n\n.btn-bd-primary {\n font-weight: 500;\n color: $bd-purple-bright;\n border-color: $bd-purple-bright;\n\n &:hover,\n &:active {\n color: #fff;\n background-color: $bd-purple-bright;\n border-color: $bd-purple-bright;\n }\n\n &:focus {\n box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);\n }\n}\n\n.btn-bd-download {\n font-weight: 500;\n color: $bd-download;\n border-color: $bd-download;\n\n &:hover,\n &:active {\n color: $bd-dark;\n background-color: $bd-download;\n border-color: $bd-download;\n }\n\n &:focus {\n box-shadow: 0 0 0 3px rgba($bd-download, .25);\n }\n}\n","//\n// Callouts\n//\n\n.bd-callout {\n padding: 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.25rem;\n border: 1px solid #eee;\n border-left-width: .25rem;\n border-radius: .25rem;\n}\n\n.bd-callout h4 {\n margin-top: 0;\n margin-bottom: .25rem;\n}\n\n.bd-callout p:last-child {\n margin-bottom: 0;\n}\n\n.bd-callout code {\n border-radius: .25rem;\n}\n\n.bd-callout + .bd-callout {\n margin-top: -.25rem;\n}\n\n// Variations\n@mixin bs-callout-variant($color) {\n border-left-color: $color;\n\n h4 { color: $color; }\n}\n\n.bd-callout-info { @include bs-callout-variant($bd-info); }\n.bd-callout-warning { @include bs-callout-variant($bd-warning); }\n.bd-callout-danger { @include bs-callout-variant($bd-danger); }\n","//\n// Examples\n//\n\n.bd-examples .img-thumbnail {\n margin-bottom: .75rem;\n}\n.bd-examples h4 {\n margin-bottom: .25rem;\n}\n.bd-examples p {\n margin-bottom: 1.25rem;\n}\n\n@media (max-width: 480px) {\n .bd-examples {\n margin-right: -.75rem;\n margin-left: -.75rem;\n }\n .bd-examples > [class^=\"col-\"] {\n padding-right: .75rem;\n padding-left: .75rem;\n }\n}\n","// Wall of Browser Bugs\n//\n// Better display for the responsive table on the Wall of Browser Bugs.\n\n.bd-browser-bugs {\n td p {\n margin-bottom: 0;\n }\n th:first-child {\n width: 18%;\n }\n}\n","// stylelint-disable no-duplicate-selectors\n\n//\n// Brand guidelines\n//\n\n// Logo series wrapper\n.bd-brand-logos {\n display: table;\n width: 100%;\n margin-bottom: 1rem;\n overflow: hidden;\n color: #563d7c;\n background-color: #f9f9f9;\n border-radius: .25rem;\n}\n\n// Individual items\n.bd-brand-item {\n padding: 4rem 0;\n text-align: center;\n}\n.bd-brand-item + .bd-brand-item {\n border-top: 1px solid #fff;\n}\n.bd-brand-logos .inverse {\n color: #fff;\n background-color: #563d7c;\n}\n\n// Heading content within\n.bd-brand-item h1,\n.bd-brand-item h3 {\n margin-top: 0;\n margin-bottom: 0;\n}\n.bd-brand-item .bd-booticon {\n margin-right: auto;\n margin-left: auto;\n}\n\n// Make the icons stand out on what is/isn't okay\n// .bd-brand-item .glyphicon {\n// width: 30px;\n// height: 30px;\n// margin: 10px auto -10px;\n// line-height: 30px;\n// color: #fff;\n// border-radius: 50%;\n// }\n// .bd-brand-item .glyphicon-ok {\n// background-color: #5cb85c;\n// }\n// .bd-brand-item .glyphicon-remove {\n// background-color: #d9534f;\n// }\n\n@media (min-width: 768px) {\n .bd-brand-item {\n display: table-cell;\n width: 1%;\n }\n .bd-brand-item + .bd-brand-item {\n border-top: 0;\n border-left: 1px solid #fff;\n }\n .bd-brand-item h1 {\n font-size: 4rem;\n }\n}\n\n\n//\n// Color swatches\n//\n\n.color-swatches {\n margin: 0 -5px;\n overflow: hidden; // clearfix\n}\n\n.color-swatch {\n float: left;\n width: 4rem;\n height: 4rem;\n margin-right: .25rem;\n margin-left: .25rem;\n border-radius: .25rem;\n\n @media (min-width: 768px) {\n width: 6rem;\n height: 6rem;\n }\n}\n\n// Docs colors\n.color-swatches {\n .bd-purple {\n background-color: $bd-purple;\n }\n .bd-purple-light {\n background-color: $bd-purple-light;\n }\n .bd-purple-lighter {\n background-color: #e5e1ea;\n }\n .bd-gray {\n background-color: #f9f9f9;\n }\n}\n","//\n// Docs color palette classes\n//\n\n@each $color, $value in $colors {\n .swatch-#{$color} {\n color: color-yiq($value);\n background-color: #{$value};\n }\n}\n\n@each $color, $value in $theme-colors {\n .swatch-#{$color} {\n color: color-yiq($value);\n background-color: #{$value};\n }\n}\n\n@each $color, $value in $grays {\n .swatch-#{$color} {\n color: color-yiq($value);\n background-color: #{$value};\n }\n}\n","// clipboard.js\n//\n// JS-based `Copy` buttons for code snippets.\n\n.bd-clipboard {\n position: relative;\n display: none;\n float: right;\n\n + .highlight {\n margin-top: 0;\n }\n}\n\n.btn-clipboard {\n position: absolute;\n top: .5rem;\n right: .5rem;\n z-index: 10;\n display: block;\n padding: .25rem .5rem;\n font-size: 75%;\n color: #818a91;\n cursor: pointer;\n background-color: transparent;\n border: 0;\n border-radius: .25rem;\n\n &:hover {\n color: #fff;\n background-color: #027de7;\n }\n}\n\n@media (min-width: 768px) {\n .bd-clipboard {\n display: block;\n }\n}\n","// stylelint-disable declaration-block-single-line-max-declarations\n\n.hll { background-color: #ffc; }\n.c { color: #999; }\n.k { color: #069; }\n.o { color: #555; }\n.cm { color: #999; }\n.cp { color: #099; }\n.c1 { color: #999; }\n.cs { color: #999; }\n.gd { background-color: #fcc; border: 1px solid #c00; }\n.ge { font-style: italic; }\n.gr { color: #f00; }\n.gh { color: #030; }\n.gi { background-color: #cfc; border: 1px solid #0c0; }\n.go { color: #aaa; }\n.gp { color: #009; }\n.gu { color: #030; }\n.gt { color: #9c6; }\n.kc { color: #069; }\n.kd { color: #069; }\n.kn { color: #069; }\n.kp { color: #069; }\n.kr { color: #069; }\n.kt { color: #078; }\n.m { color: #f60; }\n.s { color: #d44950; }\n.na { color: #4f9fcf; }\n.nb { color: #366; }\n.nc { color: #0a8; }\n.no { color: #360; }\n.nd { color: #99f; }\n.ni { color: #999; }\n.ne { color: #c00; }\n.nf { color: #c0f; }\n.nl { color: #99f; }\n.nn { color: #0cf; }\n.nt { color: #2f6f9f; }\n.nv { color: #033; }\n.ow { color: #000; }\n.w { color: #bbb; }\n.mf { color: #f60; }\n.mh { color: #f60; }\n.mi { color: #f60; }\n.mo { color: #f60; }\n.sb { color: #c30; }\n.sc { color: #c30; }\n.sd { font-style: italic; color: #c30; }\n.s2 { color: #c30; }\n.se { color: #c30; }\n.sh { color: #c30; }\n.si { color: #a00; }\n.sx { color: #c30; }\n.sr { color: #3aa; }\n.s1 { color: #c30; }\n.ss { color: #fc3; }\n.bp { color: #366; }\n.vc { color: #033; }\n.vg { color: #033; }\n.vi { color: #033; }\n.il { color: #f60; }\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt { color: #999; }\n\n.language-bash::before,\n.language-sh::before {\n color: #009;\n content: \"$ \";\n user-select: none;\n}\n\n.language-powershell::before {\n color: #009;\n content: \"PM> \";\n user-select: none;\n}\n",".anchorjs-link {\n font-weight: 400;\n color: rgba($link-color, .5);\n transition: color .16s linear;\n\n &:hover {\n color: $link-color;\n text-decoration: none;\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Docsearch overrides\n//\n// `!important` indicates overridden properties.\n.algolia-autocomplete {\n display: block !important;\n flex: 1;\n\n // Menu container\n .ds-dropdown-menu {\n width: 100%;\n min-width: 0 !important;\n max-width: none !important;\n padding: .75rem 0 !important;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, .1);\n box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175);\n\n @include media-breakpoint-up(md) {\n width: 175%;\n }\n\n // Caret\n &::before {\n display: none !important;\n }\n\n [class^=\"ds-dataset-\"] {\n padding: 0 !important;\n overflow: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n }\n\n .ds-suggestions {\n margin-top: 0 !important;\n }\n }\n\n .algolia-docsearch-suggestion {\n padding: 0 !important;\n overflow: visible !important;\n }\n\n .algolia-docsearch-suggestion--category-header {\n padding: .125rem 1rem !important;\n margin-top: 0 !important;\n font-size: .875rem !important;\n font-weight: 500 !important;\n color: $bd-purple-bright !important;\n border-bottom: 0 !important;\n }\n\n .algolia-docsearch-suggestion--wrapper {\n float: none !important;\n padding-top: 0 !important;\n }\n\n // Section header\n .algolia-docsearch-suggestion--subcategory-column {\n float: none !important;\n width: auto !important;\n padding: 0 !important;\n text-align: left !important;\n }\n\n .algolia-docsearch-suggestion--content {\n float: none !important;\n width: auto !important;\n padding: 0 !important;\n\n // Vertical divider between column header and content\n &::before {\n display: none !important;\n }\n }\n\n .ds-suggestion {\n &:not(:first-child) {\n .algolia-docsearch-suggestion--category-header {\n padding-top: .75rem !important;\n margin-top: .75rem !important;\n border-top: 1px solid rgba(0, 0, 0, .1);\n }\n }\n\n .algolia-docsearch-suggestion--subcategory-column {\n display: none !important;\n }\n }\n\n .algolia-docsearch-suggestion--title {\n display: block;\n padding: .25rem 1rem !important;\n margin-bottom: 0 !important;\n font-size: .875rem !important;\n font-weight: 400 !important;\n }\n\n .algolia-docsearch-suggestion--text {\n padding: 0 1rem .5rem !important;\n margin-top: -.25rem;\n font-size: .875rem !important;\n font-weight: 400;\n line-height: 1.25 !important;\n }\n\n .algolia-docsearch-footer {\n float: none !important;\n width: auto !important;\n height: auto !important;\n padding: .75rem 1rem 0;\n font-size: .75rem !important;\n line-height: 1 !important;\n color: #767676 !important;\n border-top: 1px solid rgba(0, 0, 0, .1);\n }\n\n .algolia-docsearch-footer--logo {\n display: inline !important;\n overflow: visible !important;\n color: inherit !important;\n text-indent: 0 !important;\n background: none !important;\n }\n\n .algolia-docsearch-suggestion--highlight {\n color: #5f2dab;\n background-color: rgba(154, 132, 187, .12);\n }\n\n .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight {\n box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, .5) !important;\n }\n\n .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content {\n background-color: rgba(208, 189, 236, .15) !important;\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-stack.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-stack.png new file mode 100644 index 000000000..7cae17fe2 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-stack.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-themes.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-themes.png new file mode 100644 index 000000000..3876a18ee Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/bootstrap-themes.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-192x192.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-192x192.png new file mode 100644 index 000000000..547386f37 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-192x192.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-512x512.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-512x512.png new file mode 100644 index 000000000..eae76488d Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/android-chrome-512x512.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/apple-touch-icon.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/apple-touch-icon.png new file mode 100644 index 000000000..447cec2c4 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/apple-touch-icon.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/browserconfig.xml b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/browserconfig.xml new file mode 100644 index 000000000..810292778 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/browserconfig.xml @@ -0,0 +1,11 @@ +--- +--- + + + + + + #563d7c + + + diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-16x16.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-16x16.png new file mode 100644 index 000000000..5f7d11880 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-16x16.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-32x32.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-32x32.png new file mode 100644 index 000000000..d752fd5d7 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/favicon-32x32.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/manifest.json b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/manifest.json new file mode 100644 index 000000000..88b2b7f41 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/manifest.json @@ -0,0 +1,22 @@ +--- +--- +{ + "name": "Bootstrap", + "short_name": "Bootstrap", + "icons": [ + { + "src": "{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": "/", + "theme_color": "#563d7c", + "background_color": "#563d7c", + "display": "standalone" +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-144x144.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-144x144.png new file mode 100644 index 000000000..262a3c2e1 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-144x144.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-150x150.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-150x150.png new file mode 100644 index 000000000..bb87faf74 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-150x150.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x150.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x150.png new file mode 100644 index 000000000..2fc36a726 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x150.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x310.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x310.png new file mode 100644 index 000000000..7f00d0c66 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-310x310.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-70x70.png b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-70x70.png new file mode 100644 index 000000000..4da2de9e3 Binary files /dev/null and b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/mstile-70x70.png differ diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/safari-pinned-tab.svg b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/safari-pinned-tab.svg new file mode 100644 index 000000000..ddeeb53c9 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/img/favicons/safari-pinned-tab.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/.eslintrc.json b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/.eslintrc.json new file mode 100644 index 000000000..e24f3dd09 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/.eslintrc.json @@ -0,0 +1,26 @@ +{ + "env": { + "es6": false, + "jquery": true + }, + "parserOptions": { + "ecmaVersion": 5, + "sourceType": "script" + }, + "extends": "../../../../../.eslintrc.json", + "rules": { + // Best Practices + "no-magic-numbers": "off", + "vars-on-top": "off", + + // Stylistic Issues + "spaced-comment": "off", + + // ECMAScript 6 + "no-var": "off", + "object-shorthand": "off", + "prefer-arrow-callback": "off", + "prefer-template": "off", + "prefer-rest-params": "off" + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/docs.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/docs.min.js new file mode 100644 index 000000000..cce24b993 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/docs.min.js @@ -0,0 +1,28 @@ +!function(e,t){"use strict";"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&module.exports?module.exports=t():(e.AnchorJS=t(),e.anchors=new e.AnchorJS)}(this,function(){"use strict";return function(e){function f(e){e.icon=e.hasOwnProperty("icon")?e.icon:"",e.visible=e.hasOwnProperty("visible")?e.visible:"hover",e.placement=e.hasOwnProperty("placement")?e.placement:"right",e.ariaLabel=e.hasOwnProperty("ariaLabel")?e.ariaLabel:"Anchor",e.class=e.hasOwnProperty("class")?e.class:"",e.truncate=e.hasOwnProperty("truncate")?Math.floor(e.truncate):64}function A(e){var t;if("string"==typeof e||e instanceof String)t=[].slice.call(document.querySelectorAll(e));else{if(!(Array.isArray(e)||e instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");t=[].slice.call(e)}return t}function p(){if(null===document.head.querySelector("style.anchorjs")){var e,t=document.createElement("style");t.className="anchorjs",t.appendChild(document.createTextNode("")),void 0===(e=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(t):document.head.insertBefore(t,e),t.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",t.sheet.cssRules.length),t.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",t.sheet.cssRules.length),t.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",t.sheet.cssRules.length),t.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',t.sheet.cssRules.length)}}this.options=e||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(e){var t,n,r,i,o,a,s,l,c,u,h,d=[];if(f(this.options),"touch"===(h=this.options.visible)&&(h=this.isTouchDevice()?"always":"hover"),e||(e="h2, h3, h4, h5, h6"),0===(t=A(e)).length)return this;for(p(),n=document.querySelectorAll("[id]"),r=[].map.call(n,function(e){return e.id}),o=0;o\]\.\/\(\)\*\\]/g;return this.options.truncate||f(this.options),e.trim().replace(/\'/gi,"").replace(t,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(e){var t=e.firstChild&&(" "+e.firstChild.className+" ").indexOf(" anchorjs-link ")>-1,n=e.lastChild&&(" "+e.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return t||n||!1}}}); +/*! + * clipboard.js v2.0.0 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ClipboardJS=t():e.ClipboardJS=t()}(this,function(){return function(n){function r(e){if(i[e])return i[e].exports;var t=i[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}var i={};return r.m=n,r.c=i,r.i=function(e){return e},r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(n,r,i){var o,a,s;!function(e,t){a=[n,i(7)],o=t,void 0!==(s="function"==typeof o?o.apply(r,a):o)&&(n.exports=s)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(e){return e&&e.__esModule?e:{default:e}}(t),i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function r(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,r.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,r.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),t}();e.exports=a})},function(e,t,n){function r(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!s.string(t))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(e))return i(e,t,n);if(s.nodeList(e))return o(e,t,n);if(s.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function o(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var s=n(6),l=n(5);e.exports=r},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function r(){i.off(e,r),t.apply(n,arguments)}var i=this;return r._=t,this.on(e,r,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;for(r;r0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===d(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,h.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return l("action",e)}},{key:"defaultTarget",value:function(e){var t=l("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return l("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),r}(u.default);e.exports=A})},function(e,t){function n(e,t){for(;e&&e.nodeType!==r;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}var r=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}e.exports=n},function(e,t,n){function o(e,t,n,r,i){var o=a.apply(this,arguments);return e.addEventListener(n,o,i),{destroy:function(){e.removeEventListener(n,o,i)}}}function r(e,t,n,r,i){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return o(e,t,n,r,i)}))}function a(t,n,e,r){return function(e){e.delegateTarget=i(e.target,n),e.delegateTarget&&r.call(t,e)}}var i=n(4);e.exports=r},function(e,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t){function n(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}e.exports=n}])}); +/*! + +Holder - client side image placeholders +Version 2.9.4+cabil +© 2016 Ivan Malopinsky - http://imsky.co + +Site: http://holderjs.com +Issues: https://github.com/imsky/holder/issues +License: MIT + +*/ +!function(i){if(i.document){var o=i.document;o.querySelectorAll||(o.querySelectorAll=function(e){var t,n=o.createElement("style"),r=[];for(o.documentElement.firstChild.appendChild(n),o._qsa=[],n.styleSheet.cssText=e+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",i.scrollBy(0,0),n.parentNode.removeChild(n);o._qsa.length;)t=o._qsa.shift(),t.style.removeAttribute("x-qsa"),r.push(t);return o._qsa=null,r}),o.querySelector||(o.querySelector=function(e){var t=o.querySelectorAll(e);return t.length?t[0]:null}),o.getElementsByClassName||(o.getElementsByClassName=function(e){return e=String(e).replace(/^|\s+/g,"."),o.querySelectorAll(e)}),Object.keys||(Object.keys=function(e){if(e!==Object(e))throw TypeError("Object.keys called on non-object");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(t);return n}),Array.prototype.forEach||(Array.prototype.forEach=function(e){if(void 0===this||null===this)throw TypeError();var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw TypeError();var r,i=arguments[1];for(r=0;r>16&255)),r.push(String.fromCharCode(i>>8&255)),r.push(String.fromCharCode(255&i)),o=0,i=0),n+=1;return 12===o?(i>>=4,r.push(String.fromCharCode(255&i))):18===o&&(i>>=2,r.push(String.fromCharCode(i>>8&255)),r.push(String.fromCharCode(255&i))),r.join("")},e.btoa=e.btoa||function(e){e=String(e);var t,n,r,i,o,a,s,l=0,c=[];if(/[^\x00-\xFF]/.test(e))throw Error("InvalidCharacterError");for(;l>2,o=(3&t)<<4|n>>4,a=(15&n)<<2|r>>6,s=63&r,l===e.length+2?(a=64,s=64):l===e.length+1&&(s=64),c.push(u.charAt(i),u.charAt(o),u.charAt(a),u.charAt(s));return c.join("")}}(i),Object.prototype.hasOwnProperty||(Object.prototype.hasOwnProperty=function(e){var t=this.__proto__||this.constructor.prototype;return e in this&&(!(e in t)||t[e]!==this[e])}),function(){if("performance"in i==!1&&(i.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in i.performance==!1){var e=Date.now();performance.timing&&performance.timing.navigationStart&&(e=performance.timing.navigationStart),i.performance.now=function(){return Date.now()-e}}}(),i.requestAnimationFrame||(i.webkitRequestAnimationFrame&&i.webkitCancelAnimationFrame?!function(t){t.requestAnimationFrame=function(e){return webkitRequestAnimationFrame(function(){e(t.performance.now())})},t.cancelAnimationFrame=t.webkitCancelAnimationFrame}(i):i.mozRequestAnimationFrame&&i.mozCancelAnimationFrame?!function(t){t.requestAnimationFrame=function(e){return mozRequestAnimationFrame(function(){e(t.performance.now())})},t.cancelAnimationFrame=t.mozCancelAnimationFrame}(i):!function(t){t.requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)},t.cancelAnimationFrame=t.clearTimeout}(i))}}(this),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(n){function r(e){if(i[e])return i[e].exports;var t=i[e]={exports:{},id:e,loaded:!1};return n[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}var i={};return r.m=n,r.c=i,r.p="",r(0)}([function(e,t,n){e.exports=n(1)},function(L,e,F){(function(h){function o(e,t,n,r){var i=d(n.substr(n.lastIndexOf(e.domain)),e);i&&f({mode:null,el:r,flags:i,engineSettings:t})}function d(e,t){var n={theme:E(O.settings.themes.gray,null),stylesheets:t.stylesheets,instanceOptions:t},r=e.indexOf("?"),i=[e];r!==-1&&(i=[e.slice(0,r),e.slice(r+1)]);var o=i[0].split("/");n.holderURL=e;var a=o[1],s=a.match(/([\d]+p?)x([\d]+p?)/);if(!s)return!1;if(n.fluid=a.indexOf("p")!==-1,n.dimensions={width:s[1].replace("p","%"),height:s[2].replace("p","%")},2===i.length){var l=A.parse(i[1]);if(b.truthy(l.ratio)){n.fluid=!0;var c=parseFloat(n.dimensions.width.replace("%","")),u=parseFloat(n.dimensions.height.replace("%",""));u=Math.floor(100*(u/c)),c=100,n.dimensions.width=c+"%",n.dimensions.height=u+"%"}if(n.auto=b.truthy(l.auto),l.bg&&(n.theme.bg=b.parseColor(l.bg)),l.fg&&(n.theme.fg=b.parseColor(l.fg)),l.bg&&!l.fg&&(n.autoFg=!0),l.theme&&n.instanceOptions.themes.hasOwnProperty(l.theme)&&(n.theme=E(n.instanceOptions.themes[l.theme],null)),l.text&&(n.text=l.text),l.textmode&&(n.textmode=l.textmode),l.size&&(n.size=l.size),l.font&&(n.font=l.font),l.align&&(n.align=l.align),l.lineWrap&&(n.lineWrap=l.lineWrap),n.nowrap=b.truthy(l.nowrap),n.outline=b.truthy(l.outline),b.truthy(l.random)){O.vars.cache.themeKeys=O.vars.cache.themeKeys||Object.keys(n.instanceOptions.themes);var h=O.vars.cache.themeKeys[0|Math.random()*O.vars.cache.themeKeys.length];n.theme=E(n.instanceOptions.themes[h],null)}}return n}function f(e){var t=e.mode,n=e.el,r=e.flags,i=e.engineSettings,o=r.dimensions,a=r.theme,s=o.width+"x"+o.height;t=null==t?r.fluid?"fluid":"image":t;var l=/holder_([a-z]+)/g,c=!1;if(null!=r.text&&(a.text=r.text,"object"===n.nodeName.toLowerCase())){for(var u=a.text.split("\\n"),h=0;h1){var v,y=0,b=0,w=0;m=new s.Group("line"+w),"left"!==e.align&&"right"!==e.align||(o=e.width*(1-2*(1-r)));for(var x=0;x=o||S===!0)&&(t(A,m,y,A.properties.leading),A.add(m),y=0,b+=A.properties.leading,w+=1,m=new s.Group("line"+w),m.y=b),S!==!0&&(g.moveTo(y,0),y+=p.spaceWidth+E.width,m.add(g))}if(t(A,m,y,A.properties.leading),A.add(m),"left"===e.align)A.moveTo(e.width-i,null,null);else if("right"===e.align){for(v in A.children)m=A.children[v],m.moveTo(e.width-m.width,null,null);A.moveTo(0-(e.width-i),null,null)}else{for(v in A.children)m=A.children[v],m.moveTo((A.width-m.width)/2,null,null);A.moveTo((e.width-A.width)/2,null,null)}A.moveTo(null,(e.height-A.height)/2,null),(e.height-A.height)/2<0&&A.moveTo(null,0,null)}else g=new s.Text(e.text),m=new s.Group("line0"),m.add(g),A.add(m),"left"===e.align?A.moveTo(e.width-i,null,null):"right"===e.align?A.moveTo(0-(e.width-i),null,null):A.moveTo((e.width-p.boundingBox.width)/2,null,null),A.moveTo(null,(e.height-p.boundingBox.height)/2,null);return a}function C(e,t,n,r){var i=parseInt(e,10),o=parseInt(t,10),a=Math.max(i,o),s=Math.min(i,o),l=.8*Math.min(s,a*r);return Math.round(Math.max(n,l))}function v(e){var t;t=null==e||null==e.nodeType?O.vars.resizableImages:[e];for(var n=0,r=t.length;n1){v.nodeValue="";for(var A=0;A=0?t:1)}function o(e){w?i(e):x.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e,!1),document.readyState="complete"},!1),document.readyState="loading");var a=e.document,s=a.documentElement,l="load",c=!1,u="on"+l,h="complete",d="readyState",f="attachEvent",A="detachEvent",p="addEventListener",g="DOMContentLoaded",m="onreadystatechange",v="removeEventListener",y=p in a,b=c,w=c,x=[];if(a[d]===h)i(n);else if(y)a[p](g,t,c),e[p](l,t,c);else{a[f](m,t),e[f](u,t);try{b=null==e.frameElement&&s}catch(e){}b&&b.doScroll&&!function t(){if(!w){try{b.doScroll("left")}catch(e){return i(t,50)}r(),n()}}()}return o.version="1.4.0",o.isReady=function(){return w},o}e.exports="undefined"!=typeof window&&n(window)},function(e,t,n){var o=encodeURIComponent,c=decodeURIComponent,u=n(4),a=n(5),h=/(\w+)\[(\d+)\]/,d=/\w+\.\w+/;t.parse=function(e){if("string"!=typeof e)return{};if(e=u(e),""===e)return{};"?"===e.charAt(0)&&(e=e.slice(1));for(var t={},n=e.split("&"),r=0;r=0;r--)n=e.charCodeAt(r),n>128?t.unshift(["&#",n,";"].join("")):t.unshift(e[r]);return t.join("")},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t},t.truthy=function(e){return"string"==typeof e?"true"===e||"yes"===e||"1"===e||"on"===e||"✓"===e:!!e},t.parseColor=function(e){var t,n=/(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i,r=/^rgb\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/,i=/^rgba\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0\.\d{1,}|1)\)$/,o=e.match(n);return null!==o?(t=o[1]||o[2],"#"!==t[0]?"#"+t:t):(o=e.match(r),null!==o?t="rgb("+o.slice(1).join(",")+")":(o=e.match(i),null!==o?t="rgba("+o.slice(1).join(",")+")":null))},t.canvasRatio=function(){var e=1,t=1;if(i.document){var n=i.document.createElement("canvas");if(n.getContext){var r=n.getContext("2d");e=i.devicePixelRatio||1,t=r.webkitBackingStorePixelRatio||r.mozBackingStorePixelRatio||r.msBackingStorePixelRatio||r.oBackingStorePixelRatio||r.backingStorePixelRatio||1}}return e/t}}).call(t,function(){return this}())},function(e,t,n){(function(c){var u=n(9),s="http://www.w3.org/2000/svg",l=8;t.initSVG=function(e,t,n){var r,i,o=!1;e&&e.querySelector?(i=e.querySelector("style"),null===i&&(o=!0)):(e=u.newEl("svg",s),o=!0),o&&(r=u.newEl("defs",s),i=u.newEl("style",s),u.setAttr(i,{type:"text/css"}),r.appendChild(i),e.appendChild(r)),e.webkitMatchesSelector&&e.setAttribute("xmlns",s);for(var a=0;a=0;a--){var s=o.createProcessingInstruction("xml-stylesheet",'href="'+i[a]+'" rel="stylesheet"');o.insertBefore(s,o.firstChild)}o.removeChild(o.documentElement),r=n.serializeToString(o)}var l=n.serializeToString(e);return l=l.replace(/\&(\#[0-9]{2,}\;)/g,"&$1"),r+l}}}).call(t,function(){return this}())},function(e,t){(function(n){t.newEl=function(e,t){if(n.document)return null==t?n.document.createElement(e):n.document.createElementNS(t,e)},t.setAttr=function(e,t){for(var n in t)e.setAttribute(n,t[n])},t.createXML=function(){if(n.DOMParser)return(new DOMParser).parseFromString("","application/xml")},t.getNodeArray=function(e){var t=null;return"string"==typeof e?t=document.querySelectorAll(e):n.NodeList&&e instanceof n.NodeList?t=e:n.Node&&e instanceof n.Node?t=[e]:n.HTMLCollection&&e instanceof n.HTMLCollection?t=e:e instanceof Array?t=e:null===e&&(t=[]),t=Array.prototype.slice.call(t)}}).call(t,function(){return this}())},function(e,t){var s=function(e,t){"string"==typeof e&&(this.original=e,"#"===e.charAt(0)&&(e=e.slice(1)),/[^a-f0-9]+/i.test(e)||(3===e.length&&(e=e.replace(/./g,"$&$&")),6===e.length&&(this.alpha=1,t&&t.alpha&&(this.alpha=t.alpha),this.set(parseInt(e,16)))))};s.rgb2hex=function(e,t,n){function r(e){var t=(0|e).toString(16);return e<16&&(t="0"+t),t}return[e,t,n].map(r).join("")},s.hsl2rgb=function(e,t,n){var r=e/60,i=(1-Math.abs(2*n-1))*t,o=i*(1-Math.abs(parseInt(r)%2-1)),a=n-i/2,s=0,l=0,c=0;return r>=0&&r<1?(s=i,l=o):r>=1&&r<2?(s=o,l=i):r>=2&&r<3?(l=i,c=o):r>=3&&r<4?(l=o,c=i):r>=4&&r<5?(s=o,c=i):r>=5&&r<6&&(s=i,c=o),s+=a,l+=a,c+=a,s=parseInt(255*s),l=parseInt(255*l),c=parseInt(255*c),[s,l,c]},s.prototype.set=function(e){this.raw=e;var t=(16711680&this.raw)>>16,n=(65280&this.raw)>>8,r=255&this.raw,i=.2126*t+.7152*n+.0722*r,o=-.09991*t-.33609*n+.436*r,a=.615*t-.55861*n-.05639*r;return this.rgb={r:t,g:n,b:r},this.yuv={y:i,u:o,v:a},this},s.prototype.lighten=function(e){var t=Math.min(1,Math.max(0,Math.abs(e)))*(e<0?-1:1),n=255*t|0,r=Math.min(255,Math.max(0,this.rgb.r+n)),i=Math.min(255,Math.max(0,this.rgb.g+n)),o=Math.min(255,Math.max(0,this.rgb.b+n)),a=s.rgb2hex(r,i,o);return new s(a)},s.prototype.toHex=function(e){return(e?"#":"")+this.raw.toString(16)},s.prototype.lighterThan=function(e){return e instanceof s||(e=new s(e)),this.yuv.y>e.yuv.y},s.prototype.blendAlpha=function(e){e instanceof s||(e=new s(e));var t=e,n=this,r=t.alpha*t.rgb.r+(1-t.alpha)*n.rgb.r,i=t.alpha*t.rgb.g+(1-t.alpha)*n.rgb.g,o=t.alpha*t.rgb.b+(1-t.alpha)*n.rgb.b;return new s(s.rgb2hex(r,i,o))},e.exports=s},function(e,t){e.exports={version:"2.9.4",svg_ns:"http://www.w3.org/2000/svg"}},function(e,t,n){function w(e,t){return T.element({tag:t,width:e.width,height:e.height,fill:e.properties.fill})}function x(e){return i.cssProps({fill:e.fill,"font-weight":e.font.weight,"font-family":e.font.family+", monospace","font-size":e.font.size+e.font.units})}function E(e,t,n){var r=n/2;return["M",r,r,"H",e-r,"V",t-r,"H",r,"V",0,"M",0,r,"L",e,t-r,"M",0,t-r,"L",e,r].join(" ")}var S=n(13),C=n(8),r=n(11),i=n(7),k=r.svg_ns,T={element:function(e){var t=e.tag,n=e.content||"";return delete e.tag,delete e.content,[t,n,e]}};e.exports=function(e,t){var n=t.engineSettings,r=n.stylesheets,i=r.map(function(e){return''}).join("\n"),o="holder_"+Number(new Date).toString(16),a=e.root,s=a.children.holderTextGroup,l="#"+o+" text { "+x(s.properties)+" } ";s.y+=.8*s.textPositionData.boundingBox.height;var c=[];Object.keys(s.children).forEach(function(e){var o=s.children[e];Object.keys(o.children).forEach(function(e){var t=o.children[e],n=s.x+o.x+t.x,r=s.y+o.y+t.y,i=T.element({tag:"text",content:t.properties.text,x:n,y:r});c.push(i)})});var u=T.element({tag:"g",content:c}),h=null;if(a.children.holderBg.properties.outline){var d=a.children.holderBg.properties.outline;h=T.element({tag:"path",d:E(a.children.holderBg.width,a.children.holderBg.height,d.width),"stroke-width":d.width,stroke:d.fill,fill:"none"})}var f=w(a.children.holderBg,"rect"),A=[];A.push(f),d&&A.push(h),A.push(u);var p=T.element({tag:"g",id:o,content:A}),g=T.element({tag:"style",content:l,type:"text/css"}),m=T.element({tag:"defs",content:g}),v=T.element({tag:"svg",content:[m,p],width:a.properties.width,height:a.properties.height,xmlns:k,viewBox:[0,0,a.properties.width,a.properties.height].join(" "),preserveAspectRatio:"none"}),y=S(v);y=i+y[0];var b=C.svgStringToDataURI(y,"background"===t.mode);return b}},function(e,t,n){n(14);e.exports=function e(t,n,a){"use strict";function r(e){var t=e.match(/^[\w-]+/),n={tag:t?t[0]:"div",attr:{},children:[]},r=e.match(/#([\w-]+)/),i=e.match(/\$([\w-]+)/),o=e.match(/\.[\w-]+/g);return r&&(n.attr.id=r[1],a[r[1]]=n),i&&(a[i[1]]=n),o&&(n.attr["class"]=o.join(" ").replace(/\./g,"")),e.match(/&$/g)&&(f=!1),n}function i(e,t){if(null!==t&&t!==!1&&void 0!==t)return"string"!=typeof t&&"object"!=typeof t?String(t):t}function o(e){return e||0===e?String(e).replace(/&/g,"&").replace(/"/g,"""):""}function s(e){return String(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}var l,c,u,h,d=1,f=!0;if(a=a||{},"string"==typeof t[0])t[0]=r(t[0]);else{if(!Array.isArray(t[0]))throw new Error("First element of array must be a string, or an array and not "+JSON.stringify(t[0]));d=0}for(;d",t[0]=l}return a[0]=t[0],u&&u(t[0]),a}},function(e,t){"use strict";function n(e){var t=""+e,n=s.exec(t);if(!n)return t;var r,i="",o=0,a=0;for(o=n.index;o]/;e.exports=n},function(e,t,n){var r=n(9),m=n(7);e.exports=function(){var p=r.newEl("canvas"),g=null;return function(e){null==g&&(g=p.getContext("2d"));var t=m.canvasRatio(),n=e.root;p.width=t*n.properties.width,p.height=t*n.properties.height,g.textBaseline="middle";var r=n.children.holderBg,i=t*r.width,o=t*r.height,a=2,s=a/2;g.fillStyle=r.properties.fill,g.fillRect(0,0,i,o),r.properties.outline&&(g.strokeStyle=r.properties.outline.fill,g.lineWidth=r.properties.outline.width,g.moveTo(s,s),g.lineTo(i-s,s),g.lineTo(i-s,o-s),g.lineTo(s,o-s),g.lineTo(s,s),g.moveTo(0,s),g.lineTo(i,o-s),g.moveTo(0,o-s),g.lineTo(i,s),g.stroke());var l=n.children.holderTextGroup;g.font=l.properties.font.weight+" "+t*l.properties.font.size+l.properties.font.units+" "+l.properties.font.family+", monospace",g.fillStyle=l.properties.fill;for(var c in l.children){var u=l.children[c];for(var h in u.children){var d=u.children[h],f=t*(l.x+u.x+d.x),A=t*(l.y+u.y+d.y+l.properties.leading/2);g.fillText(d.properties.text,f,A)}}return p.toDataURL("image/png")}}()}])}),function(e,t){t&&(Holder=e.Holder)}(this,"undefined"!=typeof Meteor&&"undefined"!=typeof Package); +/*! + * JavaScript for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ +(function(i){"use strict";i(function(){i(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"});i('[data-toggle="popover"]').popover();i(".tooltip-test").tooltip();i(".popover-test").popover();i('.bd-example-indeterminate [type="checkbox"]').prop("indeterminate",true);i('.bd-content [href="#"]').click(function(e){e.preventDefault()});i("#exampleModal").on("show.bs.modal",function(e){var t=i(e.relatedTarget);var n=t.data("whatever");var r=i(this);r.find(".modal-title").text("New message to "+n);r.find(".modal-body input").val(n)});i(".bd-toggle-animated-progress").on("click",function(){i(this).siblings(".progress").find(".progress-bar-striped").toggleClass("progress-bar-animated")});i("figure.highlight, div.highlight").each(function(){var e='
';i(this).before(e);i(".btn-clipboard").tooltip().on("mouseleave",function(){i(this).tooltip("hide")})});var e=new ClipboardJS(".btn-clipboard",{target:function(e){return e.parentNode.nextElementSibling}});e.on("success",function(e){i(e.trigger).attr("title","Copied!").tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle");e.clearSelection()});e.on("error",function(e){var t=/Mac/i.test(navigator.userAgent)?"⌘":"Ctrl-";var n="Press "+t+"C to copy";i(e.trigger).attr("title",n).tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle")});anchors.options={icon:"#"};anchors.add(".bd-content > h2, .bd-content > h3, .bd-content > h4, .bd-content > h5");i(".bd-content > h2, .bd-content > h3, .bd-content > h4, .bd-content > h5").wrapInner("
");Holder.addTheme("gray",{bg:"#777",fg:"rgba(255,255,255,.75)",font:"Helvetica",fontweight:"normal"})})})(jQuery);(function(){"use strict";function e(){var e=/MSIE ([0-9.]+)/.exec(window.navigator.userAgent);if(e===null){return null}var t=parseInt(e[1],10);var n=Math.floor(t);return n}function t(){var e=new Function("/*@cc_on return @_jscript_version; @*/")();if(typeof e==="undefined"){return 11}if(e<9){return 8}return e}var n=window.navigator.userAgent;if(n.indexOf("Opera")>-1||n.indexOf("Presto")>-1){return}var r=e();if(r===null){return}var i=t();if(r!==i){window.alert("WARNING: You appear to be using IE"+i+" in IE"+r+" emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!")}})();(function(){"use strict";if("serviceWorker"in navigator){window.addEventListener("load",function(){navigator.serviceWorker.register("/sw.js").then(function(e){console.log("ServiceWorker registration successful with scope: ",e.scope)}).catch(function(e){console.log("ServiceWorker registration failed: ",e)})})}else{console.log("Service workers are not supported.")}})();(function(){"use strict";if(!window.docsearch){return}var r=document.getElementById("search-input");var e=r.getAttribute("data-docs-version");window.docsearch({apiKey:"5990ad008512000bba2cf951ccf0332f",indexName:"bootstrap",inputSelector:"#search-input",algoliaOptions:{facetFilters:["version:"+e]},handleSelected:function(e,t,n){var r=n.url;r=n.isLvl1?r.split("#")[0]:r;window.location.href=r},transformData:function(e){return e.map(function(e){var t=r.getAttribute("data-siteurl");var n=/^https?:\/\/getbootstrap\.com/;e.url=t.match(n)?e.url:e.url.replace(n,"");return e})},debug:false})})(); \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/application.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/application.js new file mode 100644 index 000000000..7666da065 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/application.js @@ -0,0 +1,112 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +/*! + * JavaScript for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ + +/* global ClipboardJS: false, anchors: false, Holder: false */ + +(function ($) { + 'use strict' + + $(function () { + // Tooltip and popover demos + $('.tooltip-demo').tooltip({ + selector: '[data-toggle="tooltip"]', + container: 'body' + }) + + $('[data-toggle="popover"]').popover() + + // Demos within modals + $('.tooltip-test').tooltip() + $('.popover-test').popover() + + // Indeterminate checkbox example + $('.bd-example-indeterminate [type="checkbox"]').prop('indeterminate', true) + + // Disable empty links in docs examples + $('.bd-content [href="#"]').click(function (e) { + e.preventDefault() + }) + + // Modal relatedTarget demo + $('#exampleModal').on('show.bs.modal', function (event) { + var $button = $(event.relatedTarget) // Button that triggered the modal + var recipient = $button.data('whatever') // Extract info from data-* attributes + // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). + // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. + var $modal = $(this) + $modal.find('.modal-title').text('New message to ' + recipient) + $modal.find('.modal-body input').val(recipient) + }) + + // Activate animated progress bar + $('.bd-toggle-animated-progress').on('click', function () { + $(this).siblings('.progress').find('.progress-bar-striped').toggleClass('progress-bar-animated') + }) + + // Insert copy to clipboard button before .highlight + $('figure.highlight, div.highlight').each(function () { + var btnHtml = '
' + $(this).before(btnHtml) + $('.btn-clipboard') + .tooltip() + .on('mouseleave', function () { + // Explicitly hide tooltip, since after clicking it remains + // focused (as it's a button), so tooltip would otherwise + // remain visible until focus is moved away + $(this).tooltip('hide') + }) + }) + + var clipboard = new ClipboardJS('.btn-clipboard', { + target: function (trigger) { + return trigger.parentNode.nextElementSibling + } + }) + + clipboard.on('success', function (e) { + $(e.trigger) + .attr('title', 'Copied!') + .tooltip('_fixTitle') + .tooltip('show') + .attr('title', 'Copy to clipboard') + .tooltip('_fixTitle') + + e.clearSelection() + }) + + clipboard.on('error', function (e) { + var modifierKey = /Mac/i.test(navigator.userAgent) ? '\u2318' : 'Ctrl-' + var fallbackMsg = 'Press ' + modifierKey + 'C to copy' + + $(e.trigger) + .attr('title', fallbackMsg) + .tooltip('_fixTitle') + .tooltip('show') + .attr('title', 'Copy to clipboard') + .tooltip('_fixTitle') + }) + + anchors.options = { + icon: '#' + } + anchors.add('.bd-content > h2, .bd-content > h3, .bd-content > h4, .bd-content > h5') + $('.bd-content > h2, .bd-content > h3, .bd-content > h4, .bd-content > h5').wrapInner('
') + + // Holder + Holder.addTheme('gray', { + bg: '#777', + fg: 'rgba(255,255,255,.75)', + font: 'Helvetica', + fontweight: 'normal' + }) + }) +}(jQuery)) diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/ie-emulation-modes-warning.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/ie-emulation-modes-warning.js new file mode 100644 index 000000000..610128e27 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/ie-emulation-modes-warning.js @@ -0,0 +1,47 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +// Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes. +(function () { + 'use strict' + + function emulatedIEMajorVersion() { + var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent) + if (groups === null) { + return null + } + var ieVersionNum = parseInt(groups[1], 10) + var ieMajorVersion = Math.floor(ieVersionNum) + return ieMajorVersion + } + + function actualNonEmulatedIEMajorVersion() { + // Detects the actual version of IE in use, even if it's in an older-IE emulation mode. + // IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx + // @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx + var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // eslint-disable-line no-new-func + if (typeof jscriptVersion === 'undefined') { + return 11 // IE11+ not in emulation mode + } + if (jscriptVersion < 9) { + return 8 // IE8 (or lower; haven't tested on IE<8) + } + return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode + } + + var ua = window.navigator.userAgent + if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) { + return // Opera, which might pretend to be IE + } + var emulated = emulatedIEMajorVersion() + if (emulated === null) { + return // Not IE + } + var nonEmulated = actualNonEmulatedIEMajorVersion() + + if (emulated !== nonEmulated) { + // eslint-disable-next-line no-alert + window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!') + } +}()) diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/pwa.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/pwa.js new file mode 100644 index 000000000..142f89915 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/pwa.js @@ -0,0 +1,21 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +/* eslint no-console:off */ + +(function () { + 'use strict' + + if ('serviceWorker' in navigator) { + window.addEventListener('load', function () { + navigator.serviceWorker.register('/sw.js').then(function (registration) { // eslint-disable-line compat/compat + console.log('ServiceWorker registration successful with scope: ', registration.scope) + }).catch(function (err) { + console.log('ServiceWorker registration failed: ', err) + }) + }) + } else { + console.log('Service workers are not supported.') + } +}()) diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/search.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/search.js new file mode 100644 index 000000000..2e91fcf21 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/src/search.js @@ -0,0 +1,42 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +(function () { + 'use strict' + + if (!window.docsearch) { + return + } + + var inputElement = document.getElementById('search-input') + var siteDocsVersion = inputElement.getAttribute('data-docs-version') + + window.docsearch({ + apiKey: '5990ad008512000bba2cf951ccf0332f', + indexName: 'bootstrap', + inputSelector: '#search-input', + algoliaOptions: { + facetFilters: ['version:' + siteDocsVersion] + }, + handleSelected: function (input, event, suggestion) { + var url = suggestion.url + url = suggestion.isLvl1 ? url.split('#')[0] : url + // If it's a title we remove the anchor so it does not jump. + window.location.href = url + }, + transformData: function (hits) { + return hits.map(function (hit) { + // When in production, return the result as is, + // otherwise remove our url from it. + var siteurl = inputElement.getAttribute('data-siteurl') + var urlRE = /^https?:\/\/getbootstrap\.com/ + + hit.url = siteurl.match(urlRE) ? hit.url : hit.url.replace(urlRE, '') + + return hit + }) + }, + debug: false // Set debug to true if you want to inspect the dropdown + }) +}()) diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/anchor.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/anchor.min.js new file mode 100644 index 000000000..ee4e3b3f4 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/anchor.min.js @@ -0,0 +1,6 @@ +/** + * AnchorJS - v4.1.0 - 2017-09-20 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2017 Bryan Braun; Licensed MIT + */ +!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function i(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var n,o,s,a,r,c,h,l,u,d,f,p=[];if(e(this.options),"touch"===(f=this.options.visible)&&(f=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(n=t(A)).length)return this;for(i(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r\]\.\/\(\)\*\\]/g;return this.options.truncate||e(this.options),A.trim().replace(/\'/gi,"").replace(t,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&(" "+A.firstChild.className+" ").indexOf(" anchorjs-link ")>-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}}); \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/clipboard.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/clipboard.min.js new file mode 100644 index 000000000..b00ee5153 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.0 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var o,r,i;!function(a,c){r=[t,n(7)],o=c,void 0!==(i="function"==typeof o?o.apply(e,r):o)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(t){return t&&t.__esModule?t:{default:t}}(e),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/holder.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/holder.min.js new file mode 100644 index 000000000..62255af4f --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/holder.min.js @@ -0,0 +1,13 @@ +/*! + +Holder - client side image placeholders +Version 2.9.4+cabil +© 2016 Ivan Malopinsky - http://imsky.co + +Site: http://holderjs.com +Issues: https://github.com/imsky/holder/issues +License: MIT + +*/ +!function(e){if(e.document){var t=e.document;t.querySelectorAll||(t.querySelectorAll=function(n){var r,i=t.createElement("style"),o=[];for(t.documentElement.firstChild.appendChild(i),t._qsa=[],i.styleSheet.cssText=n+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",e.scrollBy(0,0),i.parentNode.removeChild(i);t._qsa.length;)r=t._qsa.shift(),r.style.removeAttribute("x-qsa"),o.push(r);return t._qsa=null,o}),t.querySelector||(t.querySelector=function(e){var n=t.querySelectorAll(e);return n.length?n[0]:null}),t.getElementsByClassName||(t.getElementsByClassName=function(e){return e=String(e).replace(/^|\s+/g,"."),t.querySelectorAll(e)}),Object.keys||(Object.keys=function(e){if(e!==Object(e))throw TypeError("Object.keys called on non-object");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(t);return n}),Array.prototype.forEach||(Array.prototype.forEach=function(e){if(void 0===this||null===this)throw TypeError();var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw TypeError();var r,i=arguments[1];for(r=0;r>16&255)),i.push(String.fromCharCode(o>>8&255)),i.push(String.fromCharCode(255&o)),a=0,o=0),r+=1;return 12===a?(o>>=4,i.push(String.fromCharCode(255&o))):18===a&&(o>>=2,i.push(String.fromCharCode(o>>8&255)),i.push(String.fromCharCode(255&o))),i.join("")},e.btoa=e.btoa||function(e){e=String(e);var n,r,i,o,a,s,l,h=0,u=[];if(/[^\x00-\xFF]/.test(e))throw Error("InvalidCharacterError");for(;h>2,a=(3&n)<<4|r>>4,s=(15&r)<<2|i>>6,l=63&i,h===e.length+2?(s=64,l=64):h===e.length+1&&(l=64),u.push(t.charAt(o),t.charAt(a),t.charAt(s),t.charAt(l));return u.join("")}}(e),Object.prototype.hasOwnProperty||(Object.prototype.hasOwnProperty=function(e){var t=this.__proto__||this.constructor.prototype;return e in this&&(!(e in t)||t[e]!==this[e])}),function(){if("performance"in e==!1&&(e.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in e.performance==!1){var t=Date.now();performance.timing&&performance.timing.navigationStart&&(t=performance.timing.navigationStart),e.performance.now=function(){return Date.now()-t}}}(),e.requestAnimationFrame||(e.webkitRequestAnimationFrame&&e.webkitCancelAnimationFrame?!function(e){e.requestAnimationFrame=function(t){return webkitRequestAnimationFrame(function(){t(e.performance.now())})},e.cancelAnimationFrame=e.webkitCancelAnimationFrame}(e):e.mozRequestAnimationFrame&&e.mozCancelAnimationFrame?!function(e){e.requestAnimationFrame=function(t){return mozRequestAnimationFrame(function(){t(e.performance.now())})},e.cancelAnimationFrame=e.mozCancelAnimationFrame}(e):!function(e){e.requestAnimationFrame=function(t){return e.setTimeout(t,1e3/60)},e.cancelAnimationFrame=e.clearTimeout}(e))}}(this),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){(function(t){function r(e,t,n,r){var a=i(n.substr(n.lastIndexOf(e.domain)),e);a&&o({mode:null,el:r,flags:a,engineSettings:t})}function i(e,t){var n={theme:k(O.settings.themes.gray,null),stylesheets:t.stylesheets,instanceOptions:t},r=e.indexOf("?"),i=[e];r!==-1&&(i=[e.slice(0,r),e.slice(r+1)]);var o=i[0].split("/");n.holderURL=e;var a=o[1],s=a.match(/([\d]+p?)x([\d]+p?)/);if(!s)return!1;if(n.fluid=a.indexOf("p")!==-1,n.dimensions={width:s[1].replace("p","%"),height:s[2].replace("p","%")},2===i.length){var l=v.parse(i[1]);if(w.truthy(l.ratio)){n.fluid=!0;var h=parseFloat(n.dimensions.width.replace("%","")),u=parseFloat(n.dimensions.height.replace("%",""));u=Math.floor(100*(u/h)),h=100,n.dimensions.width=h+"%",n.dimensions.height=u+"%"}if(n.auto=w.truthy(l.auto),l.bg&&(n.theme.bg=w.parseColor(l.bg)),l.fg&&(n.theme.fg=w.parseColor(l.fg)),l.bg&&!l.fg&&(n.autoFg=!0),l.theme&&n.instanceOptions.themes.hasOwnProperty(l.theme)&&(n.theme=k(n.instanceOptions.themes[l.theme],null)),l.text&&(n.text=l.text),l.textmode&&(n.textmode=l.textmode),l.size&&(n.size=l.size),l.font&&(n.font=l.font),l.align&&(n.align=l.align),l.lineWrap&&(n.lineWrap=l.lineWrap),n.nowrap=w.truthy(l.nowrap),n.outline=w.truthy(l.outline),w.truthy(l.random)){O.vars.cache.themeKeys=O.vars.cache.themeKeys||Object.keys(n.instanceOptions.themes);var c=O.vars.cache.themeKeys[0|Math.random()*O.vars.cache.themeKeys.length];n.theme=k(n.instanceOptions.themes[c],null)}}return n}function o(e){var t=e.mode,n=e.el,r=e.flags,i=e.engineSettings,o=r.dimensions,s=r.theme,l=o.width+"x"+o.height;t=null==t?r.fluid?"fluid":"image":t;var c=/holder_([a-z]+)/g,d=!1;if(null!=r.text&&(s.text=r.text,"object"===n.nodeName.toLowerCase())){for(var f=s.text.split("\\n"),p=0;p1){var b,x=0,A=0,C=0;w=new s.Group("line"+C),"left"!==e.align&&"right"!==e.align||(o=e.width*(1-2*(1-r)));for(var E=0;E=o||T===!0)&&(t(g,w,x,g.properties.leading),g.add(w),x=0,A+=g.properties.leading,C+=1,w=new s.Group("line"+C),w.y=A),T!==!0&&(v.moveTo(x,0),x+=m.spaceWidth+k.width,w.add(v))}if(t(g,w,x,g.properties.leading),g.add(w),"left"===e.align)g.moveTo(e.width-i,null,null);else if("right"===e.align){for(b in g.children)w=g.children[b],w.moveTo(e.width-w.width,null,null);g.moveTo(0-(e.width-i),null,null)}else{for(b in g.children)w=g.children[b],w.moveTo((g.width-w.width)/2,null,null);g.moveTo((e.width-g.width)/2,null,null)}g.moveTo(null,(e.height-g.height)/2,null),(e.height-g.height)/2<0&&g.moveTo(null,0,null)}else v=new s.Text(e.text),w=new s.Group("line0"),w.add(v),g.add(w),"left"===e.align?g.moveTo(e.width-i,null,null):"right"===e.align?g.moveTo(0-(e.width-i),null,null):g.moveTo((e.width-m.boundingBox.width)/2,null,null),g.moveTo(null,(e.height-m.boundingBox.height)/2,null);return a}function l(e,t,n,r){var i=parseInt(e,10),o=parseInt(t,10),a=Math.max(i,o),s=Math.min(i,o),l=.8*Math.min(s,a*r);return Math.round(Math.max(n,l))}function h(e){var t;t=null==e||null==e.nodeType?O.vars.resizableImages:[e];for(var n=0,r=t.length;n1){n.nodeValue="";for(var v=0;v=0?t:1)}function o(e){x?i(e):S.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function C(){document.removeEventListener("DOMContentLoaded",C,!1),document.readyState="complete"},!1),document.readyState="loading");var a=e.document,s=a.documentElement,l="load",h=!1,u="on"+l,c="complete",d="readyState",f="attachEvent",p="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",w=g in a,b=h,x=h,S=[];if(a[d]===c)i(t);else if(w)a[g](m,n,h),e[g](l,n,h);else{a[f](v,n),e[f](u,n);try{b=null==e.frameElement&&s}catch(A){}b&&b.doScroll&&!function E(){if(!x){try{b.doScroll("left")}catch(e){return i(E,50)}r(),t()}}()}return o.version="1.4.0",o.isReady=function(){return x},o}e.exports="undefined"!=typeof window&&n(window)},function(e,t,n){var r=encodeURIComponent,i=decodeURIComponent,o=n(4),a=n(5),s=/(\w+)\[(\d+)\]/,l=/\w+\.\w+/;t.parse=function(e){if("string"!=typeof e)return{};if(e=o(e),""===e)return{};"?"===e.charAt(0)&&(e=e.slice(1));for(var t={},n=e.split("&"),r=0;r=0;r--)n=e.charCodeAt(r),n>128?t.unshift(["&#",n,";"].join("")):t.unshift(e[r]);return t.join("")},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t},t.truthy=function(e){return"string"==typeof e?"true"===e||"yes"===e||"1"===e||"on"===e||"✓"===e:!!e},t.parseColor=function(e){var t,n=/(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i,r=/^rgb\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/,i=/^rgba\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0\.\d{1,}|1)\)$/,o=e.match(n);return null!==o?(t=o[1]||o[2],"#"!==t[0]?"#"+t:t):(o=e.match(r),null!==o?t="rgb("+o.slice(1).join(",")+")":(o=e.match(i),null!==o?t="rgba("+o.slice(1).join(",")+")":null))},t.canvasRatio=function(){var t=1,n=1;if(e.document){var r=e.document.createElement("canvas");if(r.getContext){var i=r.getContext("2d");t=e.devicePixelRatio||1,n=i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1}}return t/n}}).call(t,function(){return this}())},function(e,t,n){(function(e){var r=n(9),i="http://www.w3.org/2000/svg",o=8;t.initSVG=function(e,t,n){var a,s,l=!1;e&&e.querySelector?(s=e.querySelector("style"),null===s&&(l=!0)):(e=r.newEl("svg",i),l=!0),l&&(a=r.newEl("defs",i),s=r.newEl("style",i),r.setAttr(s,{type:"text/css"}),a.appendChild(s),e.appendChild(a)),e.webkitMatchesSelector&&e.setAttribute("xmlns",i);for(var h=0;h=0;l--){var h=s.createProcessingInstruction("xml-stylesheet",'href="'+a[l]+'" rel="stylesheet"');s.insertBefore(h,s.firstChild)}s.removeChild(s.documentElement),o=i.serializeToString(s)}var u=i.serializeToString(t);return u=u.replace(/\&(\#[0-9]{2,}\;)/g,"&$1"),o+u}}}).call(t,function(){return this}())},function(e,t){(function(e){t.newEl=function(t,n){if(e.document)return null==n?e.document.createElement(t):e.document.createElementNS(n,t)},t.setAttr=function(e,t){for(var n in t)e.setAttribute(n,t[n])},t.createXML=function(){if(e.DOMParser)return(new DOMParser).parseFromString("","application/xml")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n=Array.prototype.slice.call(n)}}).call(t,function(){return this}())},function(e,t){var n=function(e,t){"string"==typeof e&&(this.original=e,"#"===e.charAt(0)&&(e=e.slice(1)),/[^a-f0-9]+/i.test(e)||(3===e.length&&(e=e.replace(/./g,"$&$&")),6===e.length&&(this.alpha=1,t&&t.alpha&&(this.alpha=t.alpha),this.set(parseInt(e,16)))))};n.rgb2hex=function(e,t,n){function r(e){var t=(0|e).toString(16);return e<16&&(t="0"+t),t}return[e,t,n].map(r).join("")},n.hsl2rgb=function(e,t,n){var r=e/60,i=(1-Math.abs(2*n-1))*t,o=i*(1-Math.abs(parseInt(r)%2-1)),a=n-i/2,s=0,l=0,h=0;return r>=0&&r<1?(s=i,l=o):r>=1&&r<2?(s=o,l=i):r>=2&&r<3?(l=i,h=o):r>=3&&r<4?(l=o,h=i):r>=4&&r<5?(s=o,h=i):r>=5&&r<6&&(s=i,h=o),s+=a,l+=a,h+=a,s=parseInt(255*s),l=parseInt(255*l),h=parseInt(255*h),[s,l,h]},n.prototype.set=function(e){this.raw=e;var t=(16711680&this.raw)>>16,n=(65280&this.raw)>>8,r=255&this.raw,i=.2126*t+.7152*n+.0722*r,o=-.09991*t-.33609*n+.436*r,a=.615*t-.55861*n-.05639*r;return this.rgb={r:t,g:n,b:r},this.yuv={y:i,u:o,v:a},this},n.prototype.lighten=function(e){var t=Math.min(1,Math.max(0,Math.abs(e)))*(e<0?-1:1),r=255*t|0,i=Math.min(255,Math.max(0,this.rgb.r+r)),o=Math.min(255,Math.max(0,this.rgb.g+r)),a=Math.min(255,Math.max(0,this.rgb.b+r)),s=n.rgb2hex(i,o,a);return new n(s)},n.prototype.toHex=function(e){return(e?"#":"")+this.raw.toString(16)},n.prototype.lighterThan=function(e){return e instanceof n||(e=new n(e)),this.yuv.y>e.yuv.y},n.prototype.blendAlpha=function(e){e instanceof n||(e=new n(e));var t=e,r=this,i=t.alpha*t.rgb.r+(1-t.alpha)*r.rgb.r,o=t.alpha*t.rgb.g+(1-t.alpha)*r.rgb.g,a=t.alpha*t.rgb.b+(1-t.alpha)*r.rgb.b;return new n(n.rgb2hex(i,o,a))},e.exports=n},function(e,t){e.exports={version:"2.9.4",svg_ns:"http://www.w3.org/2000/svg"}},function(e,t,n){function r(e,t){return c.element({tag:t,width:e.width,height:e.height,fill:e.properties.fill})}function i(e){return h.cssProps({fill:e.fill,"font-weight":e.font.weight,"font-family":e.font.family+", monospace","font-size":e.font.size+e.font.units})}function o(e,t,n){var r=n/2;return["M",r,r,"H",e-r,"V",t-r,"H",r,"V",0,"M",0,r,"L",e,t-r,"M",0,t-r,"L",e,r].join(" ")}var a=n(13),s=n(8),l=n(11),h=n(7),u=l.svg_ns,c={element:function(e){var t=e.tag,n=e.content||"";return delete e.tag,delete e.content,[t,n,e]}};e.exports=function(e,t){var n=t.engineSettings,l=n.stylesheets,h=l.map(function(e){return''}).join("\n"),d="holder_"+Number(new Date).toString(16),f=e.root,p=f.children.holderTextGroup,g="#"+d+" text { "+i(p.properties)+" } ";p.y+=.8*p.textPositionData.boundingBox.height;var m=[];Object.keys(p.children).forEach(function(e){var t=p.children[e];Object.keys(t.children).forEach(function(e){var n=t.children[e],r=p.x+t.x+n.x,i=p.y+t.y+n.y,o=c.element({tag:"text",content:n.properties.text,x:r,y:i});m.push(o)})});var v=c.element({tag:"g",content:m}),y=null;if(f.children.holderBg.properties.outline){var w=f.children.holderBg.properties.outline;y=c.element({tag:"path",d:o(f.children.holderBg.width,f.children.holderBg.height,w.width),"stroke-width":w.width,stroke:w.fill,fill:"none"})}var b=r(f.children.holderBg,"rect"),x=[];x.push(b),w&&x.push(y),x.push(v);var S=c.element({tag:"g",id:d,content:x}),A=c.element({tag:"style",content:g,type:"text/css"}),C=c.element({tag:"defs",content:A}),E=c.element({tag:"svg",content:[C,S],width:f.properties.width,height:f.properties.height,xmlns:u,viewBox:[0,0,f.properties.width,f.properties.height].join(" "),preserveAspectRatio:"none"}),k=a(E);k=h+k[0];var T=s.svgStringToDataURI(k,"background"===t.mode);return T}},function(e,t,n){n(14);e.exports=function r(e,t,n){"use strict";function i(e){var t=e.match(/^[\w-]+/),r={tag:t?t[0]:"div",attr:{},children:[]},i=e.match(/#([\w-]+)/),o=e.match(/\$([\w-]+)/),a=e.match(/\.[\w-]+/g);return i&&(r.attr.id=i[1],n[i[1]]=r),o&&(n[o[1]]=r),a&&(r.attr["class"]=a.join(" ").replace(/\./g,"")),e.match(/&$/g)&&(f=!1),r}function o(e,t){if(null!==t&&t!==!1&&void 0!==t)return"string"!=typeof t&&"object"!=typeof t?String(t):t}function a(e){return e||0===e?String(e).replace(/&/g,"&").replace(/"/g,"""):""}function s(e){return String(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}var l,h,u,c,d=1,f=!0;if(n=n||{},"string"==typeof e[0])e[0]=i(e[0]);else{if(!Array.isArray(e[0]))throw new Error("First element of array must be a string, or an array and not "+JSON.stringify(e[0]));d=0}for(;d",e[0]=l}return n[0]=e[0],u&&u(e[0]),n}},function(e,t){"use strict";function n(e){var t=""+e,n=r.exec(t);if(!n)return t;var i,o="",a=0,s=0;for(a=n.index;a]/;e.exports=n},function(e,t,n){var r=n(9),i=n(7);e.exports=function(){var e=r.newEl("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var r=i.canvasRatio(),o=n.root;e.width=r*o.properties.width,e.height=r*o.properties.height,t.textBaseline="middle";var a=o.children.holderBg,s=r*a.width,l=r*a.height,h=2,u=h/2;t.fillStyle=a.properties.fill,t.fillRect(0,0,s,l),a.properties.outline&&(t.strokeStyle=a.properties.outline.fill,t.lineWidth=a.properties.outline.width,t.moveTo(u,u),t.lineTo(s-u,u),t.lineTo(s-u,l-u),t.lineTo(u,l-u),t.lineTo(u,u),t.moveTo(0,u),t.lineTo(s,l-u),t.moveTo(0,l-u),t.lineTo(s,u),t.stroke());var c=o.children.holderTextGroup;t.font=c.properties.font.weight+" "+r*c.properties.font.size+c.properties.font.units+" "+c.properties.font.family+", monospace",t.fillStyle=c.properties.fill;for(var d in c.children){var f=c.children[d];for(var p in f.children){var g=f.children[p],m=r*(c.x+f.x+g.x),v=r*(c.y+f.y+g.y+c.properties.leading/2);t.fillText(g.properties.text,m,v)}}return e.toDataURL("image/png")}}()}])}),function(e,t){t&&(Holder=e.Holder); +}(this,"undefined"!=typeof Meteor&&"undefined"!=typeof Package); \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/jquery-slim.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/jquery-slim.min.js new file mode 100644 index 000000000..f4ca9b24b --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/jquery-slim.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,u=n.push,s=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,d=f.toString,p=d.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},v=function e(t){return null!=t&&t===t.window},y={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in y)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function b(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var x="3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",w=function(e,t){return new w.fn.init(e,t)},C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:x,constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,u,s,l,c,f,d,p,h,g,v,y,m,b,x="sizzle"+1*new Date,w=e.document,C=0,T=0,E=ae(),N=ae(),k=ae(),A=function(e,t){return e===t&&(f=!0),0},D={}.hasOwnProperty,S=[],L=S.pop,j=S.push,q=S.push,O=S.slice,P=function(e,t){for(var n=0,r=e.length;n+~]|"+I+")"+I+"*"),_=new RegExp("="+I+"*([^\\]'\"]*?)"+I+"*\\]","g"),U=new RegExp(M),V=new RegExp("^"+R+"$"),X={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+B),PSEUDO:new RegExp("^"+M),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+I+"*(even|odd|(([+-]|)(\\d*)n|)"+I+"*(?:([+-]|)"+I+"*(\\d+)|))"+I+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+I+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+I+"*((?:-\\d)?\\d*)"+I+"*\\)|)(?=[^-]|$)","i")},Q=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,G=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+I+"?|("+I+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){d()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{q.apply(S=O.call(w.childNodes),w.childNodes),S[w.childNodes.length].nodeType}catch(e){q={apply:S.length?function(e,t){j.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,u,l,c,f,h,y,m=t&&t.ownerDocument,C=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==C&&9!==C&&11!==C)return r;if(!i&&((t?t.ownerDocument||t:w)!==p&&d(t),t=t||p,g)){if(11!==C&&(f=K.exec(e)))if(o=f[1]){if(9===C){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&b(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return q.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return q.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!k[e+" "]&&(!v||!v.test(e))){if(1!==C)m=t,y=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=x),u=(h=a(e)).length;while(u--)h[u]="#"+c+" "+ye(h[u]);y=h.join(","),m=J.test(e)&&ge(t.parentNode)||t}if(y)try{return q.apply(r,m.querySelectorAll(y)),r}catch(e){}finally{c===x&&t.removeAttribute("id")}}}return s(e.replace($,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function ue(e){return e[x]=!0,e}function se(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function de(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pe(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return ue(function(t){return t=+t,ue(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},d=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==p&&9===a.nodeType&&a.documentElement?(p=a,h=p.documentElement,g=!o(p),w!==p&&(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=se(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=se(function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=G.test(p.getElementsByClassName),n.getById=se(function(e){return h.appendChild(e).id=x,!p.getElementsByName||!p.getElementsByName(x).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},y=[],v=[],(n.qsa=G.test(p.querySelectorAll))&&(se(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+I+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+I+"*(?:value|"+H+")"),e.querySelectorAll("[id~="+x+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+x+"+*").length||v.push(".#.+[+~]")}),se(function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+I+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(n.matchesSelector=G.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&se(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),y.push("!=",M)}),v=v.length&&new RegExp(v.join("|")),y=y.length&&new RegExp(y.join("|")),t=G.test(h.compareDocumentPosition),b=t||G.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===p||e.ownerDocument===w&&b(w,e)?-1:t===p||t.ownerDocument===w&&b(w,t)?1:c?P(c,e)-P(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===p?-1:t===p?1:i?-1:o?1:c?P(c,e)-P(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)u.unshift(n);while(a[r]===u[r])r++;return r?ce(a[r],u[r]):a[r]===w?-1:u[r]===w?1:0},p):p},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&d(e),t=t.replace(_,"='$1']"),n.matchesSelector&&g&&!k[t+" "]&&(!y||!y.test(t))&&(!v||!v.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,p,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==p&&d(e),b(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==p&&d(e);var i=r.attrHandle[t.toLowerCase()],o=i&&D.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(A),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:ue,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return X.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+I+")"+e+"("+I+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),u="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,s){var l,c,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",v=t.parentNode,y=u&&t.nodeName.toLowerCase(),m=!s&&!u,b=!1;if(v){if(o){while(g){d=t;while(d=d[g])if(u?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?v.firstChild:v.lastChild],a&&m){b=(p=(l=(c=(f=(d=v)[x]||(d[x]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===C&&l[1])&&l[2],d=p&&v.childNodes[p];while(d=++p&&d&&d[g]||(b=p=0)||h.pop())if(1===d.nodeType&&++b&&d===t){c[e]=[C,p,b];break}}else if(m&&(b=p=(l=(c=(f=(d=t)[x]||(d[x]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===C&&l[1]),!1===b)while(d=++p&&d&&d[g]||(b=p=0)||h.pop())if((u?d.nodeName.toLowerCase()===y:1===d.nodeType)&&++b&&(m&&((c=(f=d[x]||(d[x]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[C,b]),d===t))break;return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[x]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ue(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=P(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:ue(function(e){var t=[],n=[],r=u(e.replace($,"$1"));return r[x]?ue(function(e,t,n,i){var o,a=r(e,null,i,[]),u=e.length;while(u--)(o=a[u])&&(e[u]=!(t[u]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:ue(function(e){return function(t){return oe(e,t).length>0}}),contains:ue(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:ue(function(e){return V.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:pe(!1),disabled:pe(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xe(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else y=we(y===a?y.splice(h,y.length):y),i?i(null,a,y,s):q.apply(a,y)})}function Te(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],u=a||r.relative[" "],s=a?1:0,c=me(function(e){return e===t},u,!0),f=me(function(e){return P(t,e)>-1},u,!0),d=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];s1&&be(d),s>1&&ye(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),n,s0,i=e.length>0,o=function(o,a,u,s,c){var f,h,v,y=0,m="0",b=o&&[],x=[],w=l,T=o||i&&r.find.TAG("*",c),E=C+=null==w?1:Math.random()||.1,N=T.length;for(c&&(l=a===p||a||c);m!==N&&null!=(f=T[m]);m++){if(i&&f){h=0,a||f.ownerDocument===p||(d(f),u=!g);while(v=e[h++])if(v(f,a||p,u)){s.push(f);break}c&&(C=E)}n&&((f=!v&&f)&&y--,o&&b.push(f))}if(y+=m,n&&m!==y){h=0;while(v=t[h++])v(b,x,a,u);if(o){if(y>0)while(m--)b[m]||x[m]||(x[m]=L.call(s));x=we(x)}q.apply(s,x),c&&!o&&x.length>0&&y+t.length>1&&oe.uniqueSort(s)}return c&&(C=E,l=w),b};return n?ue(o):o}return u=oe.compile=function(e,t){var n,r=[],i=[],o=k[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Te(t[n]))[x]?r.push(o):i.push(o);(o=k(e,Ee(i,r))).selector=e}return o},s=oe.select=function(e,t,n,i){var o,s,l,c,f,d="function"==typeof e&&e,p=!i&&a(e=d.selector||e);if(n=n||[],1===p.length){if((s=p[0]=p[0].slice(0)).length>2&&"ID"===(l=s[0]).type&&9===t.nodeType&&g&&r.relative[s[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(s.shift().value.length)}o=X.needsContext.test(e)?0:s.length;while(o--){if(l=s[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),J.test(s[0].type)&&ge(t.parentNode)||t))){if(s.splice(o,1),!(e=i.length&&ye(s)))return q.apply(n,i),n;break}}}return(d||u(e,p))(i,t,!g,n,!t||J.test(e)&&ge(t.parentNode)||t),n},n.sortStable=x.split("").sort(A).join("")===x,n.detectDuplicates=!!f,d(),n.sortDetached=se(function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))}),se(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&se(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),se(function(e){return null==e.getAttribute("disabled")})||le(H,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var N=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},k=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},A=w.expr.match.needsContext;function D(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var S=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return s.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(L(this,e||[],!1))},not:function(e){return this.pushStack(L(this,e||[],!0))},is:function(e){return!!L(this,"string"==typeof e&&A.test(e)?w(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:q.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),S.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,j=w(r);var O=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?s.call(w(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function H(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return N(e,"parentNode")},parentsUntil:function(e,t,n){return N(e,"parentNode",n)},next:function(e){return H(e,"nextSibling")},prev:function(e){return H(e,"previousSibling")},nextAll:function(e){return N(e,"nextSibling")},prevAll:function(e){return N(e,"previousSibling")},nextUntil:function(e,t,n){return N(e,"nextSibling",n)},prevUntil:function(e,t,n){return N(e,"previousSibling",n)},siblings:function(e){return k((e.parentNode||{}).firstChild,e)},children:function(e){return k(e.firstChild)},contents:function(e){return D(e,"iframe")?e.contentDocument:(D(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(P[e]||w.uniqueSort(i),O.test(e)&&i.reverse()),this.pushStack(i)}});var I=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(I)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],u=-1,s=function(){for(i=i||e.once,r=t=!0;a.length;u=-1){n=a.shift();while(++u-1)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||s()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function B(e){return e}function M(e){throw e}function W(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var u=this,s=arguments,l=function(){var e,l;if(!(t=o&&(r!==M&&(u=void 0,s=[e]),n.rejectWith(u,s))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:B,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:B)),n[2][3].add(a(0,e,g(r)?r:M))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],u=t[5];i[t[1]]=a.add,u&&a.add(function(){r=u},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),u=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&(W(e,a.done(u(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)W(i[n],u(n),a.reject);return a.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&$.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function z(){r.removeEventListener("DOMContentLoaded",z),e.removeEventListener("load",z),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",z),e.addEventListener("load",z));var _=function(e,t,n,r,i,o,a){var u=0,s=e.length,l=null==n;if("object"===b(n)){i=!0;for(u in n)_(e,t,u,n[u],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;u1,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=K.get(e,t),n&&(!r||Array.isArray(n)?r=K.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return K.get(e,n)||K.access(e,n,{empty:w.Callbacks("once memory").add(function(){K.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&D(e,t)?w.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var xe=r.documentElement,we=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function Ne(){return!1}function ke(){try{return r.activeElement}catch(e){}}function Ae(e,t,n,r,i,o){var a,u;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(u in t)Ae(e,u,n,r,t[u],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ne;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,u,s,l,c,f,d,p,h,g,v=K.get(e);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(xe,i),n.guid||(n.guid=w.guid++),(s=v.events)||(s=v.events={}),(a=v.handle)||(a=v.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(I)||[""]).length;while(l--)p=g=(u=Te.exec(t[l])||[])[1],h=(u[2]||"").split(".").sort(),p&&(f=w.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=w.event.special[p]||{},c=w.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=s[p])||((d=s[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),w.event.global[p]=!0)}},remove:function(e,t,n,r,i){var o,a,u,s,l,c,f,d,p,h,g,v=K.hasData(e)&&K.get(e);if(v&&(s=v.events)){l=(t=(t||"").match(I)||[""]).length;while(l--)if(u=Te.exec(t[l])||[],p=g=u[1],h=(u[2]||"").split(".").sort(),p){f=w.event.special[p]||{},d=s[p=(r?f.delegateType:f.bindType)||p]||[],u=u[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;while(o--)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||u&&!u.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||w.removeEvent(e,p,v.handle),delete s[p])}else for(p in s)w.event.remove(e,p+t[l],n,r,!0);w.isEmptyObject(s)&&K.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,u,s=new Array(arguments.length),l=(K.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(s[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&u.push({elem:l,handlers:o})}return l=this,s\x20\t\r\n\f]*)[^>]*)\/>/gi,Se=/\s*$/g;function qe(e,t){return D(e,"table")&&D(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function He(e,t){var n,r,i,o,a,u,s,l;if(1===t.nodeType){if(K.hasData(e)&&(o=K.access(e),a=K.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof v&&!h.checkClone&&Le.test(v))return e.each(function(i){var o=e.eq(i);y&&(t[0]=v.call(this,i,o.html())),Re(o,t,n,r)});if(d&&(i=be(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(u=w.map(ve(i,"script"),Oe)).length;f")},clone:function(e,t,n){var r,i,o,a,u=e.cloneNode(!0),s=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ve(u),r=0,i=(o=ve(e)).length;r0&&ye(a,!s&&ve(e,"script")),u},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[K.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[K.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return _(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Se.test(e)&&!ge[(pe.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(s+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-s-u-.5))),s}function et(e,t,n){var r=We(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(Me.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,u=Q(t),s=Ue.test(t),l=e.style;if(s||(t=Ke(u)),a=w.cssHooks[t]||w.cssHooks[u],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[u]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(s?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,u=Q(t);return Ue.test(t)||(t=Ke(u)),(a=w.cssHooks[t]||w.cssHooks[u])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Xe&&(i=Xe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!_e.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):ue(e,Ve,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=We(e),a="border-box"===w.css(e,"boxSizing",!1,o),u=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(u-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),u&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Je(e,n,u)}}}),w.cssHooks.marginLeft=ze(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Je)}),w.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=We(e),i=t.length;a1)}}),w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var tt,nt=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return _(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?tt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&D(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(I);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),tt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=nt[t]||w.find.attr;nt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=nt[a],nt[a]=i,i=null!=n(e,t,r)?a:null,nt[a]=o),i}});var rt=/^(?:input|select|textarea|button)$/i,it=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return _(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):rt.test(e.nodeName)||it.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function ot(e){return(e.match(I)||[]).join(" ")}function at(e){return e.getAttribute&&e.getAttribute("class")||""}function ut(e){return Array.isArray(e)?e:"string"==typeof e?e.match(I)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,u,s=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,at(this)))});if((t=ut(e)).length)while(n=this[s++])if(i=at(n),r=1===n.nodeType&&" "+ot(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(u=ot(r))&&n.setAttribute("class",u)}return this},removeClass:function(e){var t,n,r,i,o,a,u,s=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,at(this)))});if(!arguments.length)return this.attr("class","");if((t=ut(e)).length)while(n=this[s++])if(i=at(n),r=1===n.nodeType&&" "+ot(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(u=ot(r))&&n.setAttribute("class",u)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,at(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=ut(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=at(this))&&K.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":K.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+ot(at(n))+" ").indexOf(t)>-1)return!0;return!1}});var st=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(st,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:ot(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,u=a?null:[],s=a?o+1:i.length;for(r=o<0?s:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var lt=/^(?:focusinfocus|focusoutblur)$/,ct=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,u,s,l,c,d,p,h,y=[i||r],m=f.call(t,"type")?t.type:t,b=f.call(t,"namespace")?t.namespace.split("."):[];if(u=h=s=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!lt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(b=m.split(".")).shift(),b.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=b.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),p=w.event.special[m]||{},o||!p.trigger||!1!==p.trigger.apply(i,n))){if(!o&&!p.noBubble&&!v(i)){for(l=p.delegateType||m,lt.test(l+m)||(u=u.parentNode);u;u=u.parentNode)y.push(u),s=u;s===(i.ownerDocument||r)&&y.push(s.defaultView||s.parentWindow||e)}a=0;while((u=y[a++])&&!t.isPropagationStopped())h=u,t.type=a>1?l:p.bindType||m,(d=(K.get(u,"events")||{})[t.type]&&K.get(u,"handle"))&&d.apply(u,n),(d=c&&u[c])&&d.apply&&Y(u)&&(t.result=d.apply(u,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(y.pop(),n)||!Y(i)||c&&g(i[m])&&!v(i)&&((s=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,ct),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,ct),w.event.triggered=void 0,s&&(i[c]=s)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=K.access(r,t);i||r.addEventListener(e,n,!0),K.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=K.access(r,t)-1;i?K.access(r,t,i):(r.removeEventListener(e,n,!0),K.remove(r,t))}}});var ft=/\[\]$/,dt=/\r?\n/g,pt=/^(?:submit|button|image|reset|file)$/i,ht=/^(?:input|select|textarea|keygen)/i;function gt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||ft.test(e)?r(e,i):gt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==b(t))r(e,t);else for(i in t)gt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)gt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&ht.test(this.nodeName)&&!pt.test(e)&&(this.checked||!de.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(dt,"\r\n")}}):{name:t.name,value:n.replace(dt,"\r\n")}}).get()}}),w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="
",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=S.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=be([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.offset={setOffset:function(e,t,n){var r,i,o,a,u,s,l,c=w.css(e,"position"),f=w(e),d={};"static"===c&&(e.style.position="relative"),u=f.offset(),o=w.css(e,"top"),s=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+s).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(s)||0),g(t)&&(t=t.call(e,n,w.extend({},u))),null!=t.top&&(d.top=t.top-u.top+a),null!=t.left&&(d.left=t.left-u.left+i),"using"in t?t.using.call(e,d):f.css(d)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||xe})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return _(this,function(e,r,i){var o;if(v(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=ze(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),Me.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),u=n||(!0===i||!0===o?"margin":"border");return _(this,function(t,n,i){var o;return v(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,u):w.style(t,n,i,u)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=D,w.isFunction=g,w.isWindow=v,w.camelCase=Q,w.type=b,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var vt=e.jQuery,yt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=yt),t&&e.jQuery===w&&(e.jQuery=vt),w},t||(e.jQuery=e.$=w),w}); diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/popper.min.js b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/popper.min.js new file mode 100644 index 000000000..79ccbf58b --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/js/vendor/popper.min.js @@ -0,0 +1,5 @@ +/* + Copyright (C) Federico Zivolo 2018 + Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). + */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=J(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=$(J(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,Q(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case he.FLIP:p=[n,i];break;case he.CLOCKWISE:p=z(n);break;case he.COUNTERCLOCKWISE:p=z(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=G(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right .col, + > [class^="col-"] { + padding-top: .75rem; + padding-bottom: .75rem; + background-color: rgba(86, 61, 124, .15); + border: 1px solid rgba(86, 61, 124, .2); + } + } + + .row + .row { + margin-top: 1rem; + } + + .flex-items-top, + .flex-items-middle, + .flex-items-bottom { + min-height: 6rem; + background-color: rgba(255, 0, 0, .1); + } +} + +.bd-example-row-flex-cols .row { + min-height: 10rem; + background-color: rgba(255, 0, 0, .1); +} + +.bd-highlight { + background-color: rgba($bd-purple, .15); + border: 1px solid rgba($bd-purple, .15); +} + +// Grid mixins +.example-container { + width: 800px; + @include make-container(); +} + +.example-row { + @include make-row(); +} + +.example-content-main { + @include make-col-ready(); + + @include media-breakpoint-up(sm) { + @include make-col(6); + } + + @include media-breakpoint-up(lg) { + @include make-col(8); + } +} + +.example-content-secondary { + @include make-col-ready(); + + @include media-breakpoint-up(sm) { + @include make-col(6); + } + + @include media-breakpoint-up(lg) { + @include make-col(4); + } +} + + +// +// Container illustrations +// + +.bd-example-container { + min-width: 16rem; + max-width: 25rem; + margin-right: auto; + margin-left: auto; +} + +.bd-example-container-header { + height: 3rem; + margin-bottom: .5rem; + background-color: lighten($blue, 50%); + border-radius: .25rem; +} + +.bd-example-container-sidebar { + float: right; + width: 4rem; + height: 8rem; + background-color: lighten($blue, 25%); + border-radius: .25rem; +} + +.bd-example-container-body { + height: 8rem; + margin-right: 4.5rem; + background-color: lighten($bd-purple, 25%); + border-radius: .25rem; +} + +.bd-example-container-fluid { + max-width: none; +} + + +// +// Docs examples +// + +.bd-example { + position: relative; + padding: 1rem; + margin: 1rem (-$grid-gutter-width / 2) 0; + border: solid $gray-100; + border-width: .2rem 0 0; + @include clearfix(); + + @include media-breakpoint-up(sm) { + padding: 1.5rem; + margin-right: 0; + margin-left: 0; + border-width: .2rem; + } + + + .highlight, + + .clipboard + .highlight { + margin-top: 0; + } + + + p { + margin-top: 2rem; + } + + .pos-f-t { + position: relative; + margin: -1rem; + + @include media-breakpoint-up(sm) { + margin: -1.5rem; + } + } + + .custom-file-input:lang(es) ~ .custom-file-label::after { + content: "Elegir"; + } + + > .form-control { + + .form-control { + margin-top: .5rem; + } + } + + > .nav + .nav, + > .alert + .alert, + > .navbar + .navbar, + > .progress + .progress, + > .progress + .btn { + margin-top: 1rem; + } + + > .dropdown-menu:first-child { + position: static; + display: block; + } + + > .form-group:last-child { + margin-bottom: 0; + } + + > .close { + float: none; + } +} + +// Typography +.bd-example-type { + .table { + .type-info { + color: #999; + vertical-align: middle; + } + td { + padding: 1rem 0; + border-color: #eee; + } + tr:first-child td { + border-top: 0; + } + } + + h1, + h2, + h3, + h4, + h5, + h6 { + margin-top: 0; + margin-bottom: 0; + } +} + +// Contextual background colors +.bd-example-bg-classes p { + padding: 1rem; +} + +// Images +.bd-example > img { + + img { + margin-left: .5rem; + } +} + +// Buttons +.bd-example { + > .btn-group { + margin-top: .25rem; + margin-bottom: .25rem; + } + > .btn-toolbar + .btn-toolbar { + margin-top: .5rem; + } +} + +// Forms +.bd-example-control-sizing select, +.bd-example-control-sizing input[type="text"] + input[type="text"] { + margin-top: .5rem; +} +.bd-example-form .input-group { + margin-bottom: .5rem; +} +.bd-example > textarea.form-control { + resize: vertical; +} + +// List groups +.bd-example > .list-group { + max-width: 400px; +} + +// Navbars +.bd-example { + .fixed-top, + .sticky-top { + position: static; + margin: -1rem -1rem 1rem; + } + .fixed-bottom { + position: static; + margin: 1rem -1rem -1rem; + } + + @include media-breakpoint-up(sm) { + .fixed-top, + .sticky-top { + margin: -1.5rem -1.5rem 1rem; + } + .fixed-bottom { + margin: 1rem -1.5rem -1.5rem; + } + } +} + +// Pagination +.bd-example .pagination { + margin-top: .5rem; + margin-bottom: .5rem; +} + +// Example modals +.modal { + z-index: 1072; + + .tooltip, + .popover { + z-index: 1073; + } +} + +.modal-backdrop { + z-index: 1071; +} + +.bd-example-modal { + background-color: #fafafa; + + .modal { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 1; + display: block; + } + + .modal-dialog { + left: auto; + margin-right: auto; + margin-left: auto; + } +} + +// Example tabbable tabs +.bd-example-tabs .nav-tabs { + margin-bottom: 1rem; +} + +// Popovers +.bd-example-popover-static { + padding-bottom: 1.5rem; + background-color: #f9f9f9; + + .popover { + position: relative; + display: block; + float: left; + width: 260px; + margin: 1.25rem; + } +} + +// Tooltips +.tooltip-demo a { + white-space: nowrap; +} + +.bd-example-tooltip-static .tooltip { + position: relative; + display: inline-block; + margin: 10px 20px; + opacity: 1; +} + +// Scrollspy demo on fixed height div +.scrollspy-example { + position: relative; + height: 200px; + margin-top: .5rem; + overflow: auto; +} + +.scrollspy-example-2 { + position: relative; + height: 350px; + overflow: auto; +} + +.bd-example-border-utils { + [class^="border"] { + display: inline-block; + width: 5rem; + height: 5rem; + margin: .25rem; + background-color: #f5f5f5; + } +} + +.bd-example-border-utils-0 { + [class^="border"] { + border: 1px solid $border-color; + } +} + +// +// Code snippets +// + +.highlight { + padding: 1rem; + margin-top: 1rem; + margin-bottom: 1rem; + background-color: $gray-100; + -ms-overflow-style: -ms-autohiding-scrollbar; + + @include media-breakpoint-up(sm) { + padding: 1.5rem; + } +} + +.bd-content .highlight { + margin-right: (-$grid-gutter-width / 2); + margin-left: (-$grid-gutter-width / 2); + + @include media-breakpoint-up(sm) { + margin-right: 0; + margin-left: 0; + } +} + +.highlight { + pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + } + pre code { + font-size: inherit; + color: $gray-900; // Effectively the base text color + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_content.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_content.scss new file mode 100644 index 000000000..decb6c4c3 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_content.scss @@ -0,0 +1,119 @@ +// stylelint-disable no-duplicate-selectors, selector-max-combinators, selector-max-compound-selectors, selector-max-type, selector-no-qualifying-type + +// +// Automatically style Markdown-based tables like a Bootstrap `.table`. +// + +.bd-content { + order: 1; + + // Hack the sticky header + > h2[id], + > h3[id], + > h4[id] { + pointer-events: none; + + > div, + > a { + pointer-events: auto; + } + + &::before { + display: block; + height: 6rem; + margin-top: -6rem; + visibility: hidden; + content: ""; + } + } + + > table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + + @include media-breakpoint-down(md) { + display: block; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057 + + &.table-bordered { + border: 0; + } + } + + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: $table-cell-padding; + vertical-align: top; + border: 1px solid $table-border-color; + + > p:last-child { + margin-bottom: 0; + } + } + } + } + + // Prevent breaking of code (e.g., Grunt tasks list) + td:first-child > code { + white-space: nowrap; + } + } +} + +// +// Docs sections +// + +.bd-content { + > h2:not(:first-child) { + margin-top: 3rem; + } + + > h3 { + margin-top: 1.5rem; + } + + > ul li, + > ol li { + margin-bottom: .25rem; + } + + @include media-breakpoint-up(lg) { + > ul, + > ol, + > p { + max-width: 80%; + } + } +} + +.bd-title { + margin-top: 1rem; + margin-bottom: .5rem; + font-weight: 300; + + @include media-breakpoint-up(sm) { + font-size: 3rem; + } +} + +.bd-lead { + font-size: 1.125rem; + font-weight: 300; + + @include media-breakpoint-up(sm) { + max-width: 80%; + margin-bottom: 1rem; + font-size: 1.5rem; + } +} + +.bd-text-purple { color: $bd-purple; } +.bd-text-purple-bright { color: $bd-purple-bright; } diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_examples.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_examples.scss new file mode 100644 index 000000000..a4ec7a299 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_examples.scss @@ -0,0 +1,24 @@ +// +// Examples +// + +.bd-examples .img-thumbnail { + margin-bottom: .75rem; +} +.bd-examples h4 { + margin-bottom: .25rem; +} +.bd-examples p { + margin-bottom: 1.25rem; +} + +@media (max-width: 480px) { + .bd-examples { + margin-right: -.75rem; + margin-left: -.75rem; + } + .bd-examples > [class^="col-"] { + padding-right: .75rem; + padding-left: .75rem; + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_footer.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_footer.scss new file mode 100644 index 000000000..ab605d285 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_footer.scss @@ -0,0 +1,40 @@ +// +// Footer +// + +.bd-footer { + font-size: 85%; + text-align: center; + background-color: #f7f7f7; + + a { + font-weight: 500; + color: $gray-700; + + &:hover, + &:focus { + color: $link-color; + } + } + + p { + margin-bottom: 0; + } + + @include media-breakpoint-up(sm) { + text-align: left; + } +} + +.bd-footer-links { + padding-left: 0; + margin-bottom: 1rem; + + li { + display: inline-block; + + + li { + margin-left: 1rem; + } + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_masthead.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_masthead.scss new file mode 100644 index 000000000..0e3cea069 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_masthead.scss @@ -0,0 +1,56 @@ +// stylelint-disable declaration-no-important + +.bd-masthead { + position: relative; + padding: 3rem ($grid-gutter-width / 2); + // background-image: linear-gradient(45deg, #fafafa, #f5f5f5); + + h1 { + line-height: 1; + } + + .btn { + width: 100%; + padding: .8rem 2rem; + font-size: 1.25rem; + font-weight: 500; + } + + .carbonad { + margin-top: 0 !important; + margin-bottom: -3rem !important; + } + + @include media-breakpoint-up(sm) { + padding-top: 5rem; + padding-bottom: 5rem; + + .carbonad { + margin-bottom: 0 !important; + } + } + + @include media-breakpoint-up(md) { + h1 { + font-size: 4rem; + } + + .carbonad { + margin-top: 3rem !important; + } + } +} + +.half-rule { + width: 6rem; + margin: 2.5rem 0; +} + +.masthead-followup { + .bd-clipboard { display: none; } + + .highlight { + padding: .5rem 0; + background-color: transparent; + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_nav.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_nav.scss new file mode 100644 index 000000000..73c6bad64 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_nav.scss @@ -0,0 +1,76 @@ +// +// Main navbar +// + +.bd-navbar { + min-height: 4rem; + background-color: $bd-purple; + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .1); + + @include media-breakpoint-down(md) { + padding-right: .5rem; + padding-left: .5rem; + + .navbar-nav-scroll { + max-width: 100%; + height: 2.5rem; + margin-top: .25rem; + overflow: hidden; + font-size: .875rem; + + .navbar-nav { + padding-bottom: 2rem; + overflow-x: auto; + white-space: nowrap; + -webkit-overflow-scrolling: touch; + } + } + } + + @include media-breakpoint-up(md) { + @supports (position: sticky) { + position: sticky; + top: 0; + z-index: 1071; // over everything in bootstrap + } + } + + .navbar-nav { + .nav-link { + padding-right: .5rem; + padding-left: .5rem; + color: $bd-purple-light; + + &.active, + &:hover { + color: #fff; + background-color: transparent; + } + + &.active { + font-weight: 500; + } + } + } + + .navbar-nav-svg { + display: inline-block; + width: 1rem; + height: 1rem; + vertical-align: text-top; + } + + .dropdown-menu { + font-size: .875rem; + } + + .dropdown-item.active { + font-weight: 500; + color: $gray-900; + background-color: transparent; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: .4rem .6rem; + background-size: .75rem .75rem; + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_sidebar.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_sidebar.scss new file mode 100644 index 000000000..0cfbd60d2 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_sidebar.scss @@ -0,0 +1,166 @@ +// stylelint-disable declaration-no-important + +// +// Right side table of contents +// + +.bd-toc { + @supports (position: sticky) { + position: sticky; + top: 4rem; + height: calc(100vh - 4rem); + overflow-y: auto; + } + order: 2; + padding-top: 1.5rem; + padding-bottom: 1.5rem; + font-size: .875rem; +} + +.section-nav { + padding-left: 0; + border-left: 1px solid #eee; + + ul { + padding-left: 1rem; + + ul { + display: none; + } + } +} + +.toc-entry { + display: block; + + a { + display: block; + padding: .125rem 1.5rem; + color: #99979c; + + &:hover { + color: $blue; + text-decoration: none; + } + } +} + +// +// Left side navigation +// + +.bd-sidebar { + order: 0; + // background-color: #f5f2f9; + border-bottom: 1px solid rgba(0, 0, 0, .1); + + @include media-breakpoint-up(md) { + @supports (position: sticky) { + position: sticky; + top: 4rem; + z-index: 1000; + height: calc(100vh - 4rem); + } + border-right: 1px solid rgba(0, 0, 0, .1); + } + + @include media-breakpoint-up(xl) { + flex: 0 1 320px; + } +} + +.bd-links { + padding-top: 1rem; + padding-bottom: 1rem; + margin-right: -15px; + margin-left: -15px; + + @include media-breakpoint-up(md) { + @supports (position: sticky) { + max-height: calc(100vh - 9rem); + overflow-y: auto; + } + } + + // Override collapse behaviors + @include media-breakpoint-up(md) { + display: block !important; + } +} + +.bd-search { + position: relative; // To contain the Algolia search + padding: 1rem 15px; + margin-right: -15px; + margin-left: -15px; + border-bottom: 1px solid rgba(0, 0, 0, .05); + + .form-control:focus { + border-color: $bd-purple-bright; + box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25); + } +} + +.bd-search-docs-toggle { + line-height: 1; + color: $gray-900; +} + +.bd-sidenav { + display: none; +} + +.bd-toc-link { + display: block; + padding: .25rem 1.5rem; + font-weight: 500; + color: rgba(0, 0, 0, .65); + + &:hover { + color: rgba(0, 0, 0, .85); + text-decoration: none; + } +} + +.bd-toc-item { + &.active { + margin-bottom: 1rem; + + &:not(:first-child) { + margin-top: 1rem; + } + + > .bd-toc-link { + color: rgba(0, 0, 0, .85); + + &:hover { + background-color: transparent; + } + } + + > .bd-sidenav { + display: block; + } + } +} + +// All levels of nav +.bd-sidebar .nav > li > a { + display: block; + padding: .25rem 1.5rem; + font-size: 90%; + color: rgba(0, 0, 0, .65); +} + +.bd-sidebar .nav > li > a:hover { + color: rgba(0, 0, 0, .85); + text-decoration: none; + background-color: transparent; +} + +.bd-sidebar .nav > .active > a, +.bd-sidebar .nav > .active:hover > a { + font-weight: 500; + color: rgba(0, 0, 0, .85); + background-color: transparent; +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_skiplink.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_skiplink.scss new file mode 100644 index 000000000..7ca3074a8 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_skiplink.scss @@ -0,0 +1,14 @@ +// stylelint-disable selector-max-id + +#skippy { + display: block; + padding: 1em; + color: #fff; + background-color: $bd-purple; + outline: 0; + + .skiplink-text { + padding: .5em; + outline: 1px dotted; + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_syntax.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_syntax.scss new file mode 100644 index 000000000..e66c5da22 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_syntax.scss @@ -0,0 +1,78 @@ +// stylelint-disable declaration-block-single-line-max-declarations + +.hll { background-color: #ffc; } +.c { color: #999; } +.k { color: #069; } +.o { color: #555; } +.cm { color: #999; } +.cp { color: #099; } +.c1 { color: #999; } +.cs { color: #999; } +.gd { background-color: #fcc; border: 1px solid #c00; } +.ge { font-style: italic; } +.gr { color: #f00; } +.gh { color: #030; } +.gi { background-color: #cfc; border: 1px solid #0c0; } +.go { color: #aaa; } +.gp { color: #009; } +.gu { color: #030; } +.gt { color: #9c6; } +.kc { color: #069; } +.kd { color: #069; } +.kn { color: #069; } +.kp { color: #069; } +.kr { color: #069; } +.kt { color: #078; } +.m { color: #f60; } +.s { color: #d44950; } +.na { color: #4f9fcf; } +.nb { color: #366; } +.nc { color: #0a8; } +.no { color: #360; } +.nd { color: #99f; } +.ni { color: #999; } +.ne { color: #c00; } +.nf { color: #c0f; } +.nl { color: #99f; } +.nn { color: #0cf; } +.nt { color: #2f6f9f; } +.nv { color: #033; } +.ow { color: #000; } +.w { color: #bbb; } +.mf { color: #f60; } +.mh { color: #f60; } +.mi { color: #f60; } +.mo { color: #f60; } +.sb { color: #c30; } +.sc { color: #c30; } +.sd { font-style: italic; color: #c30; } +.s2 { color: #c30; } +.se { color: #c30; } +.sh { color: #c30; } +.si { color: #a00; } +.sx { color: #c30; } +.sr { color: #3aa; } +.s1 { color: #c30; } +.ss { color: #fc3; } +.bp { color: #366; } +.vc { color: #033; } +.vg { color: #033; } +.vi { color: #033; } +.il { color: #f60; } + +.css .o, +.css .o + .nt, +.css .nt + .nt { color: #999; } + +.language-bash::before, +.language-sh::before { + color: #009; + content: "$ "; + user-select: none; +} + +.language-powershell::before { + color: #009; + content: "PM> "; + user-select: none; +} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_variables.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_variables.scss new file mode 100644 index 000000000..b60a21368 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/_variables.scss @@ -0,0 +1,9 @@ +// Local docs variables +$bd-purple: #563d7c !default; +$bd-purple-bright: lighten(saturate($bd-purple, 5%), 15%) !default; +$bd-purple-light: lighten(saturate($bd-purple, 5%), 45%) !default; +$bd-dark: #2a2730 !default; +$bd-download: #ffe484 !default; +$bd-info: #5bc0de !default; +$bd-warning: #f0ad4e !default; +$bd-danger: #d9534f !default; diff --git a/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/docs.scss b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/docs.scss new file mode 100644 index 000000000..706bde44e --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/assets/scss/docs.scss @@ -0,0 +1,52 @@ +/*! + * Bootstrap Docs (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ + +// Dev notes +// +// Background information on nomenclature and architecture decisions here. +// +// - Bootstrap functions, variables, and mixins are included for easy reuse. +// Doing so gives us access to the same core utilities provided by Bootstrap. +// For example, consistent media queries through those mixins. +// +// - Bootstrap's **docs variables** are prefixed with `$bd-`. +// These custom colors avoid collision with the components Bootstrap provides. +// +// - Classes are prefixed with `.bd-`. +// These classes indicate custom-built or modified components for the design +// and layout of the Bootstrap docs. They are not included in our builds. +// +// Happy Bootstrapping! + +// Load Bootstrap variables and mixins +@import "../../../../../scss/functions"; +@import "../../../../../scss/variables"; +@import "../../../../../scss/mixins"; + +// Load docs components +@import "variables"; +@import "nav"; +@import "masthead"; +@import "ads"; +@import "content"; +@import "skiplink"; +@import "sidebar"; +@import "footer"; +@import "component-examples"; +@import "buttons"; +@import "callouts"; +@import "examples"; +@import "browser-bugs"; +@import "brand"; +@import "colors"; +@import "clipboard-js"; + +// Load docs dependencies +@import "syntax"; +@import "anchor"; +@import "algolia"; diff --git a/vendor/twbs/bootstrap/site/docs/4.1/browser-bugs.md b/vendor/twbs/bootstrap/site/docs/4.1/browser-bugs.md new file mode 100644 index 000000000..2340f90c2 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/browser-bugs.md @@ -0,0 +1,64 @@ +--- +layout: docs +title: Wall of browser bugs +group: browser-bugs +--- + +Bootstrap currently works around several outstanding browser bugs in major browsers to deliver the best cross-browser experience possible. Some bugs, like those listed below, cannot be solved by us. + +We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, [see our browser compatibility docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/browsers-devices/#supported-browsers). + +See also: + +* [Chromium issue 536263: [meta] Issues affecting Bootstrap](https://bugs.chromium.org/p/chromium/issues/detail?id=536263) +* [Mozilla bug 1230801: Fix the issues that affect Bootstrap](https://bugzilla.mozilla.org/show_bug.cgi?id=1230801) +* [WebKit bug 159753: [meta] Issues affecting Bootstrap](https://bugs.webkit.org/show_bug.cgi?id=159753) +* [jQuery's browser bug workarounds](https://docs.google.com/document/d/1LPaPA30bLUB_publLIMF0RlhdnPx_ePXm7oW02iiT6o) + + + + + + + + + + + + {% for bug in site.data.browser-bugs %} + + + + + + + {% endfor %} + +
Browser(s)Summary of bugUpstream bug(s)Bootstrap issue(s)
{{ bug.browser }}{{ bug.summary | markdownify }}{% include bugify.html content=bug.upstream_bug %}{% include bugify.html content=bug.origin %}
+ +# Most wanted features + +There are several features specified in Web standards which would allow us to make Bootstrap more robust, elegant, or performant, but aren't yet implemented in certain browsers, thus preventing us from taking advantage of them. + +We publicly list these "most wanted" feature requests here, in the hopes of expediting the process of getting them implemented. + + + + + + + + + + + + {% for feat in site.data.browser-features %} + + + + + + + {% endfor %} + +
Browser(s)Summary of featureUpstream issue(s)Bootstrap issue(s)
{{ feat.browser }}{{ feat.summary | markdownify }}{% include bugify.html content=feat.upstream_bug %}{% include bugify.html content=feat.origin %}
diff --git a/vendor/twbs/bootstrap/site/docs/4.1/components/alerts.md b/vendor/twbs/bootstrap/site/docs/4.1/components/alerts.md new file mode 100644 index 000000000..6c6cb9936 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/components/alerts.md @@ -0,0 +1,115 @@ +--- +layout: docs +title: Alerts +description: Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. +group: components +toc: true +--- + +## Examples + +Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts jQuery plugin](#dismissing). + +{% capture example %} +{% for color in site.data.theme-colors %} +{% endfor %} +{% endcapture %} +{% include example.html content=example %} + +{% include callout-warning-color-assistive-technologies.md %} + +### Link color + +Use the `.alert-link` utility class to quickly provide matching colored links within any alert. + +{% capture example %} +{% for color in site.data.theme-colors %} +{% endfor %} +{% endcapture %} +{% include example.html content=example %} + +### Additional content + +Alerts can also contain additional HTML elements like headings, paragraphs and dividers. + +{% capture example %} + +{% endcapture %} +{% include example.html content=example %} + + +### Dismissing + +Using the alert JavaScript plugin, it's possible to dismiss any alert inline. Here's how: + +- Be sure you've loaded the alert plugin, or the compiled Bootstrap JavaScript. +- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). The compiled version includes this. +- Add a dismiss button and the `.alert-dismissible` class, which adds extra padding to the right of the alert and positions the `.close` button. +- On the dismiss button, add the `data-dismiss="alert"` attribute, which triggers the JavaScript functionality. Be sure to use the ` +
+{% endcapture %} +{% include example.html content=example %} + +## JavaScript behavior + +### Triggers + +Enable dismissal of an alert via JavaScript: + +{% highlight js %} +$('.alert').alert() +{% endhighlight %} + +Or with `data` attributes on a button **within the alert**, as demonstrated above: + +{% highlight html %} + +{% endhighlight %} + +Note that closing an alert will remove it from the DOM. + +### Methods + +| Method | Description | +| --- | --- | +| `$().alert()` | Makes an alert listen for click events on descendant elements which have the `data-dismiss="alert"` attribute. (Not necessary when using the data-api's auto-initialization.) | +| `$().alert('close')` | Closes an alert by removing it from the DOM. If the `.fade` and `.show` classes are present on the element, the alert will fade out before it is removed. | +| `$().alert('dispose')` | Destroys an element's alert. | + +{% highlight js %}$(".alert").alert('close'){% endhighlight %} + +### Events + +Bootstrap's alert plugin exposes a few events for hooking into alert functionality. + +| Event | Description | +| --- | --- | +| `close.bs.alert` | This event fires immediately when the close instance method is called. | +| `closed.bs.alert` | This event is fired when the alert has been closed (will wait for CSS transitions to complete). | + +{% highlight js %} +$('#myAlert').on('closed.bs.alert', function () { + // do something… +}) +{% endhighlight %} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/components/badge.md b/vendor/twbs/bootstrap/site/docs/4.1/components/badge.md new file mode 100644 index 000000000..0e97cbe76 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/components/badge.md @@ -0,0 +1,82 @@ +--- +layout: docs +title: Badges +description: Documentation and examples for badges, our small count and labeling component. +group: components +toc: true +--- + +## Example + +Badges scale to match the size of the immediate parent element by using relative font sizing and `em` units. + +
+
Example heading New
+
Example heading New
+
Example heading New
+
Example heading New
+
Example heading New
+
Example heading New
+
+ +{% highlight html %} +

Example heading New

+

Example heading New

+

Example heading New

+

Example heading New

+
Example heading New
+
Example heading New
+{% endhighlight %} + +Badges can be used as part of links or buttons to provide a counter. + +{% capture example %} + +{% endcapture %} +{% include example.html content=example %} + +Note that depending on how they are used, badges may be confusing for users of screen readers and similar assistive technologies. While the styling of badges provides a visual cue as to their purpose, these users will simply be presented with the content of the badge. Depending on the specific situation, these badges may seem like random additional words or numbers at the end of a sentence, link, or button. + +Unless the context is clear (as with the "Notifications" example, where it is understood that the "4" is the number of notifications), consider including additional context with a visually hidden piece of additional text. + +{% capture example %} + +{% endcapture %} +{% include example.html content=example %} + +## Contextual variations + +Add any of the below mentioned modifier classes to change the appearance of a badge. + +{% capture example %} +{% for color in site.data.theme-colors %} +{{ color.name | capitalize }}{% endfor %} +{% endcapture %} +{% include example.html content=example %} + +{% include callout-warning-color-assistive-technologies.md %} + +## Pill badges + +Use the `.badge-pill` modifier class to make badges more rounded (with a larger `border-radius` and additional horizontal `padding`). Useful if you miss the badges from v3. + +{% capture example %} +{% for color in site.data.theme-colors %} +{{ color.name | capitalize }}{% endfor %} +{% endcapture %} +{% include example.html content=example %} + +## Links + +Using the contextual `.badge-*` classes on an `` element quickly provide _actionable_ badges with hover and focus states. + +{% capture example %} +{% for color in site.data.theme-colors %} +{{ color.name | capitalize }}{% endfor %} +{% endcapture %} +{% include example.html content=example %} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/components/breadcrumb.md b/vendor/twbs/bootstrap/site/docs/4.1/components/breadcrumb.md new file mode 100644 index 000000000..4cc7b3de9 --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/components/breadcrumb.md @@ -0,0 +1,58 @@ +--- +layout: docs +title: Breadcrumb +description: Indicate the current page's location within a navigational hierarchy that automatically adds separators via CSS. +group: components +--- + +## Example + +{% capture example %} + + + + + +{% endcapture %} +{% include example.html content=example %} + +## Changing the separator + +Separators are automatically added in CSS through [`::before`](https://developer.mozilla.org/en-US/docs/Web/CSS/::before) and [`content`](https://developer.mozilla.org/en-US/docs/Web/CSS/content). They can be changed by changing `$breadcrumb-divider`. The [quote](https://sass-lang.com/documentation/Sass/Script/Functions.html#quote-instance_method) function is needed to generate the quotes around a string, so if you want `>` as seperator, you can use this: + +```scss +$breadcrumb-divider: quote(">"); +``` + +It's also possible to use a **base64 embedded SVG icon**: + +```scss +$breadcrumb-divider: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiPjxwYXRoIGQ9Ik0yLjUgMEwxIDEuNSAzLjUgNCAxIDYuNSAyLjUgOGw0LTQtNC00eiIgZmlsbD0iY3VycmVudENvbG9yIi8+PC9zdmc+); +``` + +The separator can be removed by setting `$breadcrumb-divider` to `none`: + +```scss +$breadcrumb-divider: none; +``` + +## Accessibility + +Since breadcrumbs provide a navigation, it's a good idea to add a meaningful label such as `aria-label="breadcrumb"` to describe the type of navigation provided in the `
+ +{% endcapture %} +{% include example.html content=example %} + +For file inputs, swap the `.form-control` for `.form-control-file`. + +{% capture example %} +
+
+ + +
+
+{% endcapture %} +{% include example.html content=example %} + +### Sizing + +Set heights using classes like `.form-control-lg` and `.form-control-sm`. + +{% capture example %} + + + +{% endcapture %} +{% include example.html content=example %} + +{% capture example %} + + + +{% endcapture %} +{% include example.html content=example %} + +### Readonly + +Add the `readonly` boolean attribute on an input to prevent modification of the input's value. Read-only inputs appear lighter (just like disabled inputs), but retain the standard cursor. + +{% capture example %} + +{% endcapture %} +{% include example.html content=example %} + +### Readonly plain text + +If you want to have `` elements in your form styled as plain text, use the `.form-control-plaintext` class to remove the default form field styling and preserve the correct margin and padding. + +{% capture example %} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+{% endcapture %} +{% include example.html content=example %} + +{% capture example %} +
+
+ + +
+
+ + +
+ +
+{% endcapture %} +{% include example.html content=example %} + +## Range Inputs + +Set horizontally scrollable range inputs using `.form-control-range`. + +{% capture example %} +
+
+ + +
+
+{% endcapture %} +{% include example.html content=example %} + +## Checkboxes and radios + +Default checkboxes and radios are improved upon with the help of `.form-check`, **a single class for both input types that improves the layout and behavior of their HTML elements**. Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many. + +Disabled checkboxes and radios are supported, but to provide a `not-allowed` cursor on hover of the parent `
+{% endcapture %} +{% include example.html content=example %} + +## Flush + +Add `.list-group-flush` to remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards). + +{% capture example %} +
    +
  • Cras justo odio
  • +
  • Dapibus ac facilisis in
  • +
  • Morbi leo risus
  • +
  • Porta ac consectetur ac
  • +
  • Vestibulum at eros
  • +
+{% endcapture %} +{% include example.html content=example %} + +## Contextual classes + +Use contextual classes to style list items with a stateful background and color. + +{% capture example %} +
    +
  • Dapibus ac facilisis in
  • + + {% for color in site.data.theme-colors %} +
  • A simple {{ color.name }} list group item
  • {% endfor %} +
+{% endcapture %} +{% include example.html content=example %} + +Contextual classes also work with `.list-group-item-action`. Note the addition of the hover styles here not present in the previous example. Also supported is the `.active` state; apply it to indicate an active selection on a contextual list group item. + +{% capture example %} +
+ Dapibus ac facilisis in + + {% for color in site.data.theme-colors %} + A simple {{ color.name }} list group item{% endfor %} +
+{% endcapture %} +{% include example.html content=example %} + +{% include callout-warning-color-assistive-technologies.md %} + +## With badges + +Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/). + +{% capture example %} +
    +
  • + Cras justo odio + 14 +
  • +
  • + Dapibus ac facilisis in + 2 +
  • +
  • + Morbi leo risus + 1 +
  • +
+{% endcapture %} +{% include example.html content=example %} + +## Custom content + +Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/). + +{% capture example %} + +{% endcapture %} +{% include example.html content=example %} + +## JavaScript behavior + +Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our list group to create tabbable panes of local content. + +
+
+
+ +
+
+ +
+
+
+ +{% highlight html %} +
+
+ +
+
+ +
+
+{% endhighlight %} + +### Using data attributes + +You can activate a list group navigation without writing any JavaScript by simply specifying `data-toggle="list"` or on an element. Use these data attributes on `.list-group-item`. + +
+{% highlight html %} + + + + +
+
...
+
...
+
...
+
...
+
+{% endhighlight %} +
+ +### Via JavaScript + +Enable tabbable list item via JavaScript (each list item needs to be activated individually): + +{% highlight js %} +$('#myList a').on('click', function (e) { + e.preventDefault() + $(this).tab('show') +}) +{% endhighlight %} + +You can activate individual list item in several ways: + +{% highlight js %} +$('#myList a[href="#profile"]').tab('show') // Select tab by name +$('#myList a:first-child').tab('show') // Select first tab +$('#myList a:last-child').tab('show') // Select last tab +$('#myList a:nth-child(3)').tab('show') // Select third tab +{% endhighlight %} + +### Fade effect + +To make tabs panel fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible. + +{% highlight html %} +
+
...
+
...
+
...
+
...
+
+{% endhighlight %} + +### Methods + +#### $().tab + +Activates a list item element and content container. Tab should have either a `data-target` or an `href` targeting a container node in the DOM. + +{% highlight html %} + + +
+
...
+
...
+
...
+
...
+
+ + +{% endhighlight %} + +#### .tab('show') + +Selects the given list item and shows its associated pane. Any other list item that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (for example, before the `shown.bs.tab` event occurs). + +{% highlight js %} +$('#someListItem').tab('show') +{% endhighlight %} + +### Events + +When showing a new tab, the events fire in the following order: + +1. `hide.bs.tab` (on the current active tab) +2. `show.bs.tab` (on the to-be-shown tab) +3. `hidden.bs.tab` (on the previous active tab, the same one as for the `hide.bs.tab` event) +4. `shown.bs.tab` (on the newly-active just-shown tab, the same one as for the `show.bs.tab` event) + +If no tab was already active, the `hide.bs.tab` and `hidden.bs.tab` events will not be fired. + + + + + + + + + + + + + + + + + + + + + + + + + + +
Event typeDescription
show.bs.tabThis event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
shown.bs.tabThis event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
hide.bs.tabThis event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use event.target and event.relatedTarget to target the current active tab and the new soon-to-be-active tab, respectively.
hidden.bs.tabThis event fires after a new tab is shown (and thus the previous active tab is hidden). Use event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively.
+ +{% highlight js %} +$('a[data-toggle="list"]').on('shown.bs.tab', function (e) { + e.target // newly activated tab + e.relatedTarget // previous active tab +}) +{% endhighlight %} diff --git a/vendor/twbs/bootstrap/site/docs/4.1/components/modal.md b/vendor/twbs/bootstrap/site/docs/4.1/components/modal.md new file mode 100644 index 000000000..3ed09170e --- /dev/null +++ b/vendor/twbs/bootstrap/site/docs/4.1/components/modal.md @@ -0,0 +1,675 @@ +--- +layout: docs +title: Modal +description: Use Bootstrap's JavaScript modal plugin to add dialogs to your site for lightboxes, user notifications, or completely custom content. +group: components +toc: true +--- + +## How it works + +Before getting started with Bootstrap's modal component, be sure to read the following as our menu options have recently changed. + +- Modals are built with HTML, CSS, and JavaScript. They're positioned over everything else in the document and remove scroll from the `` so that modal content scrolls instead. +- Clicking on the modal "backdrop" will automatically close the modal. +- Bootstrap only supports one modal window at a time. Nested modals aren't supported as we believe them to be poor user experiences. +- Modals use `position: fixed`, which can sometimes be a bit particular about its rendering. Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. You'll likely run into issues when nesting a `.modal` within another fixed element. +- Once again, due to `position: fixed`, there are some caveats with using modals on mobile devices. [See our browser support docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/browsers-devices/#modals-and-dropdowns-on-mobile) for details. +- Due to how HTML5 defines its semantics, [the `autofocus` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autofocus) has no effect in Bootstrap modals. To achieve the same effect, use some custom JavaScript: + +{% highlight js %} +$('#myModal').on('shown.bs.modal', function () { + $('#myInput').trigger('focus') +}) +{% endhighlight %} + +Keep reading for demos and usage guidelines. + +## Examples + +### Modal components + +Below is a _static_ modal example (meaning its `position` and `display` have been overridden). Included are the modal header, modal body (required for `padding`), and modal footer (optional). We ask that you include modal headers with dismiss actions whenever possible, or provide another explicit dismiss action. + +
+ +
+ +{% highlight html %} + +{% endhighlight %} + +### Live demo + +Toggle a working modal demo by clicking the button below. It will slide down and fade in from the top of the page. + + + +
+ +
+ +{% highlight html %} + + + + + +{% endhighlight %} + +### Scrolling long content + +When modals become too long for the user's viewport or device, they scroll independent of the page itself. Try the demo below to see what we mean. + + + +
+ +
+ +{% highlight html %} + + + + + +{% endhighlight %} + +### Vertically centered + +Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal. + + + +
+ +
+ +{% highlight html %} + + + + + +{% endhighlight %} + +### Tooltips and popovers + +[Tooltips]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/tooltips/) and [popovers]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/popovers/) can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed. + + + +
+ +
+ +{% highlight html %} + +{% endhighlight %} + +### Using the grid + +Utilize the Bootstrap grid system within a modal by nesting `.container-fluid` within the `.modal-body`. Then, use the normal grid system classes as you would anywhere else. + + + +
+ +
+ +{% highlight html %} + +{% endhighlight %} + +### Varying modal content + +Have a bunch of buttons that all trigger the same modal with slightly different contents? Use `event.relatedTarget` and [HTML `data-*` attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) (possibly [via jQuery](https://api.jquery.com/data/)) to vary the contents of the modal depending on which button was clicked. + +Below is a live demo followed by example HTML and JavaScript. For more information, [read the modal events docs](#events) for details on `relatedTarget`. + +{% capture example %} + + + + + +{% endcapture %} +{% include example.html content=example %} + +{% highlight js %} +$('#exampleModal').on('show.bs.modal', function (event) { + var button = $(event.relatedTarget) // Button that triggered the modal + var recipient = button.data('whatever') // Extract info from data-* attributes + // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). + // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. + var modal = $(this) + modal.find('.modal-title').text('New message to ' + recipient) + modal.find('.modal-body input').val(recipient) +}) +{% endhighlight %} + +### Remove animation + +For modals that simply appear rather than fade in to view, remove the `.fade` class from your modal markup. + +{% highlight html %} + +{% endhighlight %} + +### Dynamic heights + +If the height of a modal changes while it is open, you should call `$('#myModal').modal('handleUpdate')` to readjust the modal's position in case a scrollbar appears. + +### Accessibility + +Be sure to add `role="dialog"` and `aria-labelledby="..."`, referencing the modal title, to `.modal`, and `role="document"` to the `.modal-dialog` itself. Additionally, you may give a description of your modal dialog with `aria-describedby` on `.modal`. + +### Embedding YouTube videos + +Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. [See this helpful Stack Overflow post](https://stackoverflow.com/questions/18622508/bootstrap-3-and-youtube-in-modal) for more information. + +## Optional sizes + +Modals have two optional sizes, available via modifier classes to be placed on a `.modal-dialog`. These sizes kick in at certain breakpoints to avoid horizontal scrollbars on narrower viewports. + +
+ + +
+ +{% highlight html %} + + + + + + + + + +{% endhighlight %} + + + + + +## Usage + +The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also adds `.modal-open` to the `` to override default scrolling behavior and generates a `.modal-backdrop` to provide a click area for dismissing shown modals when clicking outside the modal. + +### Via data attributes + +Activate a modal without writing JavaScript. Set `data-toggle="modal"` on a controller element, like a button, along with a `data-target="#foo"` or `href="#foo"` to target a specific modal to toggle. + +{% highlight html %} + +{% endhighlight %} + +### Via JavaScript + +Call a modal with id `myModal` with a single line of JavaScript: + +{% highlight js %}$('#myModal').modal(options){% endhighlight %} + +### Options + +Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in `data-backdrop=""`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
backdropboolean or the string 'static'trueIncludes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
keyboardbooleantrueCloses the modal when escape key is pressed
focusbooleantruePuts the focus on the modal when initialized.
showbooleantrueShows the modal when initialized.
+ +### Methods + +{% include callout-danger-async-methods.md %} + +#### `.modal(options)` + +Activates your content as a modal. Accepts an optional options `object`. + +{% highlight js %} +$('#myModal').modal({ + keyboard: false +}) +{% endhighlight %} + +#### `.modal('toggle')` + +Manually toggles a modal. **Returns to the caller before the modal has actually been shown or hidden** (i.e. before the `shown.bs.modal` or `hidden.bs.modal` event occurs). + +{% highlight js %}$('#myModal').modal('toggle'){% endhighlight %} + +#### `.modal('show')` + +Manually opens a modal. **Returns to the caller before the modal has actually been shown** (i.e. before the `shown.bs.modal` event occurs). + +{% highlight js %}$('#myModal').modal('show'){% endhighlight %} + +#### `.modal('hide')` + +Manually hides a modal. **Returns to the caller before the modal has actually been hidden** (i.e. before the `hidden.bs.modal` event occurs). + +{% highlight js %}$('#myModal').modal('hide'){% endhighlight %} + +#### `.modal('handleUpdate')` + +Manually readjust the modal's position if the height of a modal changes while it is open (i.e. in case a scrollbar appears). + +{% highlight js %}$('#myModal').modal('handleUpdate'){% endhighlight %} + +#### `.modal('dispose')` + +Destroys an element's modal. + +### Events + +Bootstrap's modal class exposes a few events for hooking into modal functionality. All modal events are fired at the modal itself (i.e. at the `
@@ -210,7 +214,7 @@