diff --git a/.travis.yml b/.travis.yml
index c7a460f64dcbeb7d296563863068dcc22b516f06..fcb84435162e27b2c51d7a17e9e338df38111b1e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,5 +10,6 @@ before_script:
   - phpenv rehash
 
 script:
+  - phpunit --stderr --configuration module/VuFind/tests/phpunit.xml
   - phpcs --standard=PEAR --ignore=*/config/*,*/tests/* --extensions=php $PWD/module
 
diff --git a/build.xml b/build.xml
index 275a064885a2cf9c2699abe3c4b7b2605cb743a8..217d4aa650fc4ccb51ce7b551cddbc8b360278fb 100644
--- a/build.xml
+++ b/build.xml
@@ -19,6 +19,7 @@
   <property name="mysqlrootpass" value="password" />
   <property name="pgsqlhost" value="localhost" />
   <property name="pgsqlrootuser" value="postgres" />
+  <property name="phpunit_extra_params" value="" />
   <property name="php-cs-fixers" value="no_blank_lines_before_namespaces,function_call_space,trailing_spaces,unused_use,lowercase_keywords,encoding,parenthesis,php_closing_tag,visibility,duplicate_semicolon,extra_empty_lines,no_blank_lines_after_class_opening,no_empty_lines_after_phpdocs,operators_spaces,spaces_before_semicolon,ternary_spaces,concat_with_spaces,short_array_syntax" />
 
 
@@ -108,12 +109,12 @@
 
   <!-- PHPUnit -->
   <target name="phpunit" description="Run tests">
-    <exec dir="${srcdir}/module/VuFind/tests" command="NODE_PATH=${nodepath} VUFIND_LOCAL_DIR=${srcdir}/local VUFIND_URL=${vufindurl} phpunit -dzend.enable_gc=0 --log-junit ${builddir}/reports/phpunit.xml --coverage-clover ${builddir}/reports/coverage/clover.xml --coverage-html ${builddir}/reports/coverage/" passthru="true" checkreturn="true" />
+    <exec dir="${srcdir}/module/VuFind/tests" command="NODE_PATH=${nodepath} VUFIND_LOCAL_DIR=${srcdir}/local VUFIND_URL=${vufindurl} phpunit -dzend.enable_gc=0 --log-junit ${builddir}/reports/phpunit.xml --coverage-clover ${builddir}/reports/coverage/clover.xml --coverage-html ${builddir}/reports/coverage/ ${phpunit_extra_params}" passthru="true" checkreturn="true" />
   </target>
 
   <!-- PHPUnit without logging output -->
   <target name="phpunitfast" description="Run tests">
-    <exec dir="${srcdir}/module/VuFind/tests" command="NODE_PATH=${nodepath} VUFIND_LOCAL_DIR=${srcdir}/local VUFIND_URL=${vufindurl} phpunit -dzend.enable_gc=0" passthru="true" checkreturn="true" />
+    <exec dir="${srcdir}/module/VuFind/tests" command="NODE_PATH=${nodepath} VUFIND_LOCAL_DIR=${srcdir}/local VUFIND_URL=${vufindurl} phpunit -dzend.enable_gc=0 ${phpunit_extra_params}" passthru="true" checkreturn="true" />
   </target>
 
   <!-- Install and Activate VuFind -->
@@ -280,7 +281,8 @@
 
         <!-- create custom import configurations to load the MARC filename into the building facet to help
              test cases to limit searches to within specific collections of test records. -->
-        <exec command="echo building=\&quot;${BASENAME}\&quot; &gt; ${srcdir}/local/import/marc-${BASENAME}.properties" />
+        <copy file="${srcdir}/import/marc_local.properties" tofile="${srcdir}/local/import/marc-${BASENAME}.properties" />
+        <exec command="echo building=\&quot;${BASENAME}\&quot; &gt;&gt; ${srcdir}/local/import/marc-${BASENAME}.properties" />
         <exec command="sed -e &quot;s!marc_local.properties!marc-${BASENAME}.properties!&quot; ${srcdir}/local/import/import.properties &gt; ${srcdir}/local/import/import-${BASENAME}.properties" />
 
         <!-- perform the import -->
diff --git a/composer.json b/composer.json
index d1b6aa54ce90e799969604ad3a7563984cc8a92b..22a8a2b5c6ee7c3aae2ec68c48586a52ca2584fd 100644
--- a/composer.json
+++ b/composer.json
@@ -50,6 +50,7 @@
         "aferrandini/phpqrcode": "1.0.1",
         "jasig/phpcas": "*",
         "johnwohlers/sip2": "dev-master",
+        "los/losrecaptcha": "*",
         "mobileesp/mdetect": "dev-master",
         "ocramius/proxy-manager": "*",
         "oyejorge/less.php": "*",
@@ -63,7 +64,6 @@
         "zendframework/zendframework": "2.3.7",
         "zendframework/zendrest": "2.*",
         "zendframework/zendservice-amazon": "2.*",
-        "zendframework/zendservice-recaptcha": "2.*",
         "zf-commons/zfc-rbac": "~2.4"
     },
     "require-dev": {
diff --git a/composer.lock b/composer.lock
index 53f5991dd7dedbaf58d7b4b76a27676e7ad58468..f075b5f2d4923c2005ac2cb8a034c90d12347f99 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "ad7918adabede04ad206b2d095d581db",
+    "hash": "17e060af5c8424a9e99315284a8a3632",
     "packages": [
         {
             "name": "aferrandini/phpqrcode",
@@ -119,6 +119,66 @@
                 ]
             }
         },
+        {
+            "name": "los/losrecaptcha",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Lansoweb/LosReCaptcha.git",
+                "reference": "2e18af8d57286c28c1951c7305f8379e7304b203"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Lansoweb/LosReCaptcha/zipball/2e18af8d57286c28c1951c7305f8379e7304b203",
+                "reference": "2e18af8d57286c28c1951c7305f8379e7304b203",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "zendframework/zendframework": ">=2.3.2,<3.0.0"
+            },
+            "require-dev": {
+                "satooshi/php-coveralls": "dev-master"
+            },
+            "suggest": {
+                "los/losbase": "los/losbase for some abstract classes to speed development ",
+                "los/loslog": "los/loslog for logging",
+                "los/losui": "los/losui for twitter bootstrap 3 styling, jquery, chosen and other libraries"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "LosReCaptcha\\": "src/"
+                },
+                "psr-0": {
+                    "LosReCaptcha\\": "src/"
+                },
+                "classmap": [
+                    "./"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Leandro Silva",
+                    "email": "leandro@leandrosilva.info",
+                    "homepage": "http://leandrosilva.info"
+                }
+            ],
+            "description": "ZF2 module for integration with new ReCaptcha service form Google",
+            "homepage": "http://github.com/Lansoweb/LosReCaptcha",
+            "keywords": [
+                "captcha",
+                "los",
+                "module",
+                "recaptcha",
+                "zf2"
+            ],
+            "time": "2015-04-28 15:40:23"
+        },
         {
             "name": "mobileesp/mdetect",
             "version": "dev-master",
@@ -259,10 +319,10 @@
         },
         {
             "name": "pear-pear.php.net/Archive_Tar",
-            "version": "1.3.15",
+            "version": "1.3.16",
             "dist": {
                 "type": "file",
-                "url": "http://pear.php.net/get/Archive_Tar-1.3.15.tgz",
+                "url": "http://pear.php.net/get/Archive_Tar-1.3.16.tgz",
                 "reference": null,
                 "shasum": null
             },
@@ -270,7 +330,7 @@
                 "php": ">=4.3.0.0"
             },
             "replace": {
-                "pear-pear/archive_tar": "== 1.3.15.0"
+                "pear-pear/archive_tar": "== 1.3.16.0"
             },
             "type": "pear-library",
             "autoload": {
@@ -339,6 +399,9 @@
             "include-path": [
                 "/"
             ],
+            "license": [
+                "GNU Lesser General Public License"
+            ],
             "description": "The standard for machine-readable cataloging (MARC) records is documented at http://loc.gov/marc/. This package enables you to read existing MARC records from a file, string, or (using the YAZ extension), from a Z39.50 source. You can also use this package to create new MARC records.\n\nThis package is based on the PHP MARC package, originally called \"php-marc\", that is part of the Emilda Project (http://www.emilda.org).  Christoffer Landtman generously agreed to make the \"php-marc\" code available under the GNU LGPL so it could be used as the basis of this PEAR package."
         },
         {
@@ -375,6 +438,9 @@
             "include-path": [
                 "/"
             ],
+            "license": [
+                "New BSD License"
+            ],
             "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n   and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n   where PHP is running on\n * the System class for quick handling of common operations\n   with files and directories\n * the PEAR base class\n  Features in a nutshell:\n  * full support for channels\n  * pre-download dependency validation\n  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n  * support for optional dependency groups and limited support for sub-packaging\n  * robust dependency support\n  * full dependency validation on uninstall\n  * remote install for hosts with only ftp access - no more problems with\n    restricted host installation\n  * full support for mirroring\n  * support for bundling several packages into a single tarball\n  * support for static dependencies on a url-based package\n  * support for custom file roles and installation tasks"
         },
         {
@@ -430,6 +496,9 @@
             "include-path": [
                 "/"
             ],
+            "license": [
+                "New BSD"
+            ],
             "description": "Package to validate various datas. It includes :\n    - numbers (min/max, decimal or not)\n    - email (syntax, domain check, rfc822)\n    - string (predifined type alpha upper and/or lowercase, numeric,...)\n    - date (min, max, rfc822 compliant)\n    - uri (RFC2396)\n    - possibility valid multiple data with a single method call (::multiple)"
         },
         {
@@ -457,6 +526,9 @@
             "include-path": [
                 "/"
             ],
+            "license": [
+                "New BSD"
+            ],
             "description": "Package containes ISPN (International Standard Product Numbers) validations such as:\n * ISSN\n * ISBN\n * ISMN\n * ISRC (International Standard Recording Code)\n * EAN8\n * EAN13\n * EAN14\n * UCC12\n * SSCC"
         },
         {
@@ -524,22 +596,25 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.6.4",
+            "version": "v2.6.7",
             "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8"
+                "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/60ed7751671113cf1ee7d7778e691642c2e9acd8",
-                "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
+                "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -556,18 +631,18 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Yaml Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-01-25 04:39:26"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:18:45"
         },
         {
             "name": "vufind-org/vufindcode",
@@ -662,7 +737,7 @@
             "dist": {
                 "type": "zip",
                 "url": "https://packages.zendframework.com/composer/zendframework-zendframework-a1aae5fdd27a422beb32c56ddf5a197654a0f94a-zip-06d4c7.zip",
-                "reference": "2.3.7",
+                "reference": "a1aae5fdd27a422beb32c56ddf5a197654a0f94a",
                 "shasum": "7033dd58d94b0c75fae8a00001f8a7275c218209"
             },
             "require": {
@@ -757,6 +832,11 @@
                     "Zend\\": "library/"
                 }
             },
+            "autoload-dev": {
+                "psr-0": {
+                    "ZendTest\\": "tests/"
+                }
+            },
             "license": [
                 "BSD-3-Clause"
             ],
@@ -783,7 +863,7 @@
             "dist": {
                 "type": "zip",
                 "url": "https://packages.zendframework.com/composer/zendframework-zendrest-7427d242b4546e5aef1206d2c97e402109d8843e-zip-da96cc.zip",
-                "reference": "2.0.2",
+                "reference": "7427d242b4546e5aef1206d2c97e402109d8843e",
                 "shasum": "cd304d9e2fccccbd98348bfbead7d42b102e565a"
             },
             "require": {
@@ -824,7 +904,7 @@
             "dist": {
                 "type": "zip",
                 "url": "https://packages.zendframework.com/composer/zendframework-zendservice-amazon-f3d44e3488908323c34bf040c045ee71e1196796-zip-31bbc0.zip",
-                "reference": "2.0.3",
+                "reference": "f3d44e3488908323c34bf040c045ee71e1196796",
                 "shasum": "b7f77cced220f6738248fc827952ab2c6604a08f"
             },
             "require": {
@@ -871,52 +951,6 @@
             },
             "time": "2014-03-05 22:37:42"
         },
-        {
-            "name": "zendframework/zendservice-recaptcha",
-            "version": "2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/ZendService_ReCaptcha.git",
-                "reference": "4324cca8502d9f47b3b43a18acdd3fdbeb965536"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://packages.zendframework.com/composer/zendframework-zendservice-recaptcha-4324cca8502d9f47b3b43a18acdd3fdbeb965536-zip-8c45bf.zip",
-                "reference": "2.0.1",
-                "shasum": "fab92465cda889ff975c1ec79bb378d7e3f39081"
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "zendframework/zend-http": ">=2.0.0",
-                "zendframework/zend-uri": ">=2.0.0",
-                "zendframework/zend-version": ">=2.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "ZendService": "library/"
-                }
-            },
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "OOP wrapper for the ReCaptcha web service",
-            "homepage": "http://packages.zendframework.com/",
-            "keywords": [
-                "recaptcha",
-                "zf2"
-            ],
-            "support": {
-                "source": "https://github.com/zendframework/ZendService_ReCaptcha/tree/release-2.0.1",
-                "issues": "https://github.com/zendframework/ZendService_ReCaptcha/issues"
-            },
-            "time": "2012-09-24 15:18:29"
-        },
         {
             "name": "zendframework/zendxml",
             "version": "1.0.0",
@@ -928,7 +962,7 @@
             "dist": {
                 "type": "zip",
                 "url": "https://packages.zendframework.com/composer/zendframework-zendxml-559b34f426d33a11c3db118e00ce14bb8dc64e5f-zip-6cf7a2.zip",
-                "reference": "1.0.0",
+                "reference": "559b34f426d33a11c3db118e00ce14bb8dc64e5f",
                 "shasum": "39abc614b5c26bcbf8102e203c52dee73c4460a8"
             },
             "require": {
@@ -967,16 +1001,16 @@
         },
         {
             "name": "zf-commons/zfc-rbac",
-            "version": "2.4.2",
+            "version": "v2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ZF-Commons/zfc-rbac.git",
-                "reference": "42f466656ad9730025a6bbbfd4144ac2f3abb64c"
+                "reference": "80970aba715fd54f63ddde68a24bee22bafb9d17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ZF-Commons/zfc-rbac/zipball/42f466656ad9730025a6bbbfd4144ac2f3abb64c",
-                "reference": "42f466656ad9730025a6bbbfd4144ac2f3abb64c",
+                "url": "https://api.github.com/repos/ZF-Commons/zfc-rbac/zipball/80970aba715fd54f63ddde68a24bee22bafb9d17",
+                "reference": "80970aba715fd54f63ddde68a24bee22bafb9d17",
                 "shasum": ""
             },
             "require": {
@@ -1039,7 +1073,7 @@
                 "rbac",
                 "zf2"
             ],
-            "time": "2015-01-26 11:29:23"
+            "time": "2015-04-16 12:10:33"
         },
         {
             "name": "zfr/rbac",
@@ -1153,12 +1187,12 @@
             "version": "v1.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Behat/MinkZombieDriver.git",
+                "url": "https://github.com/minkphp/MinkZombieDriver.git",
                 "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Behat/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+                "url": "https://api.github.com/repos/minkphp/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
                 "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
                 "shasum": ""
             },
@@ -1208,22 +1242,25 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v2.6.4",
+            "version": "v2.6.7",
             "target-dir": "Symfony/Component/CssSelector",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/CssSelector.git",
-                "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584"
+                "reference": "189cf0f7f56d7c4be3b778df15a7f16a29f3680d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/3f80ecc614fec68d5b4a84a0703db3fdf5ce8584",
-                "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/189cf0f7f56d7c4be3b778df15a7f16a29f3680d",
+                "reference": "189cf0f7f56d7c4be3b778df15a7f16a29f3680d",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1240,10 +1277,6 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Jean-François Simon",
                     "email": "jeanfrancois.simon@sensiolabs.com"
@@ -1251,30 +1284,37 @@
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony CssSelector Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-01-03 08:01:59"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:18:45"
         },
         {
             "name": "symfony/process",
-            "version": "v2.6.4",
+            "version": "v2.6.7",
             "target-dir": "Symfony/Component/Process",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae"
+                "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
-                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/9f3c4baaf840ed849e1b1f7bfd5ae246e8509562",
+                "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1291,18 +1331,18 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Process Component",
-            "homepage": "http://symfony.com",
-            "time": "2015-01-25 04:39:26"
+            "homepage": "https://symfony.com",
+            "time": "2015-05-02 15:18:45"
         }
     ],
     "aliases": [],
diff --git a/config/vufind/MultiBackend.ini b/config/vufind/MultiBackend.ini
index f90f73abb1dbbbf4abc39623b87407380d04db2e..cfea7a07cad7576d9046325443cc701ef8218785 100644
--- a/config/vufind/MultiBackend.ini
+++ b/config/vufind/MultiBackend.ini
@@ -16,20 +16,9 @@
 ;instance3 = Unicorn
 ;instance4 = Voyager
 
-; This section allows for the use of custom delimeters between user data
-; and the identifying information that allows the MultiBackend driver to
-; determine which internal driver to use for a given request.
-;
-; Currently only custom login delimiters are supported.
-;
-; You should not set the delimiters to be common characters.
-[Delimiters]
-login = "	"
-
 ; This section defines the driver instances that are enabled for login.
 ; Used together with MultiILS authentication method that allows selecting
 ; the login target.
-; N.B. Set login delimiters above to '.' when using MultiILS.
 [Login]
 default_driver = instance2
 drivers[] = instance1
diff --git a/config/vufind/Sierra.ini b/config/vufind/Sierra.ini
index 2bb97f4d475b9fc935e8b55ebb2b7ef9e83830bb..2ba1dba57703b4cf525c5876e0fff61c36407670 100644
--- a/config/vufind/Sierra.ini
+++ b/config/vufind/Sierra.ini
@@ -6,4 +6,7 @@ dna_user = username
 dna_password = password
 ; Should items for the "New Items" search be identified based on cataloging date instead of record creation date (the default)? Enter Y to have new items identified based on cataloging date, and anything else (like N) to have items identified based on record creation date
 new_by_cat_date = Y
-
+; How long, in hours, should newly cataloged items have a status of "Just cataloged"? Enter 0 if you do not wish to use the "Just cataloged" status.
+just_cataloged_time = 72
+; Should "Just cataloged" be appended to the location (Y), or should it replace the location (N)?
+just_cataloged_append = Y
\ No newline at end of file
diff --git a/config/vufind/Summon.ini b/config/vufind/Summon.ini
index df38e57522543412bab7e95807da207ab520f47b..d1e311c13caebea9d422c7da229e528454d20e3c 100644
--- a/config/vufind/Summon.ini
+++ b/config/vufind/Summon.ini
@@ -9,6 +9,11 @@
 ; option should be one of the options present in the [Sorting] section below.
 default_sort         = relevance
 
+; This setting controls the sort order to be used for empty search when relevance
+; sort is selected. Since relevance doesn't have a meaningful function with an empty
+; search, this can be set to e.g. "PublicationDate:desc".
+;empty_search_relevance_override = "PublicationDate:desc"
+
 ; This setting controls the default view for search results; the selected option
 ; should be one of the options present in the [Views] section below.
 default_view         = list
diff --git a/config/vufind/Voyager.ini b/config/vufind/Voyager.ini
index 614d0ee0f21bd3bfa8819f82adb8136b81567372..197509fda4843a1c930a5292d9aeb4cf8b474c24 100644
--- a/config/vufind/Voyager.ini
+++ b/config/vufind/Voyager.ini
@@ -16,9 +16,9 @@ connect_with_sid = false
 ; recommended values are LAST_NAME or PATRON_PIN (LAST_NAME is default)
 login_field = LAST_NAME
 
-; If using PATRON_PIN as login_field, allow fallback to another field if the 
+; If using PATRON_PIN as login_field, allow fallback to another field if the
 ; user has no PIN code. Disabled by default.
-;fallback_login_field = LAST_NAME  
+;fallback_login_field = LAST_NAME
 
 ; These settings affect the Fund list used as a limiter in the "new items" module:
 [Funds]
@@ -38,7 +38,7 @@ login_field = LAST_NAME
 ;blacklist[] = "Second Bad Value"
 
 ; This setting can be used to limit the fund list to those that are under a specific
-; fund.  Set it to 0 for top-level funds only.  Set it to a FUND_ID deeper in the 
+; fund.  Set it to 0 for top-level funds only.  Set it to a FUND_ID deeper in the
 ; fund tree to filter out unwanted values.  Leave it commented out to get all funds.
 ;parent_fund = 0
 
@@ -47,8 +47,8 @@ login_field = LAST_NAME
 ; How purchase history is displayed. Supported values are:
 ; 1) false - Purchase history is not displayed at all.
 ; 2) true - Purchase history is displayed below other holdings (default)
-; 3) "split" - Purchase history is split to each corresponding holdings record and 
-; displayed by location 
+; 3) "split" - Purchase history is split to each corresponding holdings record and
+; displayed by location
 ;purchase_history = true
 ; Fields to include in notes. Default is "852z".
 ;notes = "845a:852az"
@@ -62,7 +62,21 @@ login_field = LAST_NAME
 ; line to disable sorting.
 ;use_sort_groups = false
 
+; Status rankings can be used to either promote or demote certain item statuses when
+; determining the status to be displayed. The lower the rank, the higher the
+; priority. The sample values below make "Missing" most important and drop request
+; statuses below others so that e.g. "On Hold" is displayed instead of
+; "Hold Request".
+[StatusRankings]
+;Missing = 0
+;Recall Request = 99
+;Hold Request = 99
+
 ; Settings for controlling how loans are displayed
 [Loans]
 ; Uncomment this line to display the location where each loan was made
-;display_borrowing_location = true
\ No newline at end of file
+;display_borrowing_location = true
+
+; This regular expression controls which status messages are displayed on the
+; Checked Out Items list.
+show_statuses = "/lost|missing|claim/i"
diff --git a/config/vufind/VoyagerRestful.ini b/config/vufind/VoyagerRestful.ini
index f780eeb379cb15bf85a637ca6619093f87bfb094..d1e6f322f2e956da4a24b1671d6d32203cf9a25e 100644
--- a/config/vufind/VoyagerRestful.ini
+++ b/config/vufind/VoyagerRestful.ini
@@ -16,9 +16,9 @@ connect_with_sid = false
 ; recommended values are LAST_NAME or PATRON_PIN (LAST_NAME is default)
 login_field = LAST_NAME
 
-; If using PATRON_PIN as login_field, allow fallback to another field if the 
+; If using PATRON_PIN as login_field, allow fallback to another field if the
 ; user has no PIN code. Disabled by default.
-;fallback_login_field = LAST_NAME  
+;fallback_login_field = LAST_NAME
 
 ; This is the timeout value for making HTTP requests to the Voyager API.
 http_timeout = 30
@@ -41,7 +41,7 @@ http_timeout = 30
 ;blacklist[] = "Second Bad Value"
 
 ; This setting can be used to limit the fund list to those that are under a specific
-; fund.  Set it to 0 for top-level funds only.  Set it to a FUND_ID deeper in the 
+; fund.  Set it to 0 for top-level funds only.  Set it to a FUND_ID deeper in the
 ; fund tree to filter out unwanted values.  Leave it commented out to get all funds.
 ;parent_fund = 0
 
@@ -96,19 +96,19 @@ HMACKeys = item_id:holdtype:level
 defaultRequiredDate = 0:1:0
 
 ; extraHoldFields - A colon-separated list used to display extra visible fields in the
-; place holds form. Supported values are "comments", "requiredByDate", 
+; place holds form. Supported values are "comments", "requiredByDate",
 ; "pickUpLocation" and "requestGroup"
 extraHoldFields = comments:requiredByDate:pickUpLocation
 
 ; A Pick Up Location Code used to pre-select the pick up location drop down list and
-; provide a default option if others are not available. Must be one of the following: 
+; provide a default option if others are not available. Must be one of the following:
 ; 1) empty string to indicate that the first location is default (default setting)
 ; 2) "user-selected" to indicate that the user always has to choose the location
 ; 3) a value within the Location IDs returned by getPickUpLocations()
 defaultPickUpLocation = ""
 
 ; The maximum number of holding items to generate request links for. The process of
-; checking the API for a valid hold is intensive. Any hold items above this this 
+; checking the API for a valid hold is intensive. Any hold items above this this
 ; limit will have their hold status checked via ajax or when a user clicks on the
 ; link. Use "0" to check all items via ajax. Default is 15.
 holdCheckLimit = 15
@@ -129,7 +129,7 @@ holdCheckLimit = 15
 ;defaultRequestGroup = ""
 
 ; By default the request group list is sorted alphabetically. This setting can be
-; used to manually set the order by entering request group IDs as a colon-separated 
+; used to manually set the order by entering request group IDs as a colon-separated
 ; list.
 ; This setting is only effective if requestGroup is specified in extraHoldFields.
 ;requestGroupOrder = 33
@@ -141,11 +141,11 @@ holdCheckLimit = 15
 ;pickupLocationsInRequestGroup = true
 
 ; By default a title hold can be placed even when there are no items. Uncomment this
-; to prevent holds if no items exist. If request groups are enabled, item existence 
+; to prevent holds if no items exist. If request groups are enabled, item existence
 ; is checked only in the selected request group.
 ;checkItemsExist = true
 
-; By default a title hold can be placed even when there are items available. 
+; By default a title hold can be placed even when there are items available.
 ; Uncomment this to prevent holds if items are available. If request groups are
 ; enabled, availability is checked only in the selected request group.
 ;checkItemsNotAvailable = true
@@ -156,7 +156,7 @@ holdCheckLimit = 15
 ; This setting is only effective if requestGroup is specified in extraHoldFields.
 disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 
-; A colon-separated list of ids from the LOCATION table. If provided, items with a 
+; A colon-separated list of ids from the LOCATION table. If provided, items with a
 ; matching location are excluded from item availability.
 ;excludedItemLocations = "2:4:23:10"
 
@@ -170,7 +170,7 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 ;helpText[en-gb] = "Help text for English language."
 
 
-; This section controls call slip behavior (storage retrieval requests in VuFind). 
+; This section controls call slip behavior (storage retrieval requests in VuFind).
 ; To enable, uncomment (at minimum) the HMACKeys and extraFields settings below.
 [StorageRetrievalRequests]
 ; Colon-separated list of item types where call slip is allowed
@@ -195,7 +195,7 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 ;helpText = "Help text for all languages."
 ;helpText[en-gb] = "Help text for English language."
 
-; This section controls UB (Universal Borrowing, ILL in VuFind) behavior. To enable, 
+; This section controls UB (Universal Borrowing, ILL in VuFind) behavior. To enable,
 ; uncomment (at minimum) the HMACKeys and extraFields settings below. See also
 ; section ILLRequestSources for mapping between patron ID's and UB libraries.
 [ILLRequests]
@@ -204,7 +204,7 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 ;HMACKeys = item_id:holdings_id
 
 ; extraFields - A colon-separated list used to display extra visible fields in the
-; request form. Supported values are "pickUpLibrary", 
+; request form. Supported values are "pickUpLibrary",
 ; "pickUpLibraryLocation", "requiredByDate" and "comments" (although comments are
 ; not properly stored for UB requests at least in version 8.1)
 ;extraFields = pickUpLibrary:pickUpLibraryLocation:requiredByDate
@@ -220,7 +220,7 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 
 ; This section lists the valid patron id prefixes for UB (ILL in VuFind) requests,
 ; and maps them to the their Voyager UB library IDs. Any patron of another library
-; with a prefix listed here may attempt a UB request in this system. 
+; with a prefix listed here may attempt a UB request in this system.
 [ILLRequestSources]
 ;devdb = "1@DEVDB20011102161616"
 ;otherdb = "1@OTHERDB20011030191919"
@@ -230,8 +230,8 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 ; How purchase history is displayed. Supported values are:
 ; 1) false - Purchase history is not displayed at all.
 ; 2) true - Purchase history is displayed below other holdings (default)
-; 3) "split" - Purchase history is split to each corresponding holdings record and 
-; displayed by location 
+; 3) "split" - Purchase history is split to each corresponding holdings record and
+; displayed by location
 ;purchase_history = true
 ; Fields to include in notes. Default is "852z".
 ;notes = "845a:852az"
@@ -245,12 +245,26 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32"
 ; line to disable sorting.
 ;use_sort_groups = false
 
+; Status rankings can be used to either promote or demote certain item statuses when
+; determining the status to be displayed. The lower the rank, the higher the
+; priority. The sample values below make "Missing" most important and drop request
+; statuses below others so that e.g. "On Hold" is displayed instead of
+; "Hold Request".
+[StatusRankings]
+;Missing = 0
+;Recall Request = 99
+;Hold Request = 99
+
 ; Settings for controlling how loans are displayed
 [Loans]
 ; Uncomment this line to display the location where each loan was made
 ;display_borrowing_location = true
 
-; Uncomment the following lines to enable password (PIN) change 
+; This regular expression controls which status messages are displayed on the
+; Checked Out Items list.
+show_statuses = "/lost|missing|claim/i"
+
+; Uncomment the following lines to enable password (PIN) change
 ;[changePassword]
 ; PIN change parameters. The default limits are taken from the interface documentation.
 ;minLength = 5
diff --git a/config/vufind/combined.ini b/config/vufind/combined.ini
index 68dc1ac5e5b3035d8668c560c68010f7f8c9bd9e..1e1f124502290c4bf749e397874936a36e06bb16 100644
--- a/config/vufind/combined.ini
+++ b/config/vufind/combined.ini
@@ -16,6 +16,12 @@
 ; limit = The maximum number of search results to show in this column; note
 ;         that this must be a legal limit value for the chosen search backend.
 ;         (may sometimes require config changes -- e.g. searches.ini, Summon.ini).
+; include_recommendations = If set to true, standard 'top' recommendations will be
+;                           displayed at the top of the column. If set to an array
+;                           of recommendation settings (as per searches.ini), the
+;                           specified recommendations will be loaded into the top
+;                           area of the column. If set to false, recommendations
+;                           will be suppressed (default).
 ;
 ; All display text is subject to translation and may be added to the language
 ; .ini files.
diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index 2f274d751eef63232a04733a9e138a7437f3f64a..80cac1f7688db979899bde3a35c3488769873041 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -82,6 +82,8 @@ defaultAccountPage = Favorites
 admin_enabled = false
 ; Show sidebar on the left side instead of right
 sidebarOnLeft = false
+; Handle menu as an offcanvas slider at mobile sizes (in bootstrap3-based themes)
+offcanvas = false
 ; Show (true) / Hide (false) Book Bag - Default is Hide.
 showBookBag = false
 ; Set the maximum amount of items allowed in the Book Bag - Default is 100
@@ -118,8 +120,8 @@ lifetime                    = 3600 ; Session lasts for 1 hour
 ;limit_by_path = true
 ; If VuFind is only accessed via HTTPS, this setting can be enabled to disallow
 ; the browser from ever sending cookies over an unencrypted connection (i.e.
-; before being redirected to HTTPS). Default is false. 
-;only_secure = true  
+; before being redirected to HTTPS). Default is false.
+;only_secure = true
 ; Set the domain used for cookies (sometimes useful for sharing the cookies across
 ; subdomains); by default, cookies will be restricted to the current hostname.
 ;domain = ".example.edu"
@@ -212,6 +214,13 @@ title_level_holds_mode = "disabled"
 ;holdings_text_fields[] = 'notes'
 ;holdings_text_fields[] = 'summary'
 
+; Whether support for multiple library cards is enabled. Default is false.
+;library_cards = true
+
+; The number of checked out items to display per page; 0 for no limit (may cause
+; memory problems for users with huge numbers of items). Default = 50.
+;checked_out_page_size = 50
+
 ; This section allows you to determine how the users will authenticate.
 ; You can use an LDAP directory, the local ILS (or multiple ILSes through
 ; the MultiILS option), the VuFind database (Database), Shibboleth, SIP2,
@@ -709,7 +718,7 @@ rfr_id          = vufind.svn.sourceforge.net
 
 ; By specifying your link resolver type, you can allow VuFind to optimize its
 ; OpenURLs for a particular platform.  Current legal values: "sfx", "360link",
-; "EZB" or "other" (default is "other" if commented out).
+; "EZB", "Redi" or "other" (default is "other" if commented out).
 ;resolver        = sfx
 
 ; If you want OpenURL links to open in a new window, set this setting to the
@@ -731,8 +740,8 @@ show_in_holdings = false    ; include in holdings tab of record view
 
 ; If set to true, this setting will attempt to embed results from the link
 ; resolver directly in search results instead of opening a new window or page.
-; This will override the window_settings option if set!  Embedding is currently
-; supported only when the resolver setting above is set to "sfx" or "360link".
+; This will override the window_settings option if set! Embedding is currently
+; unsupported when the resolver setting above is set to "other".
 embed = false
 
 ; When embed is true, you can set this to an absolute path on your system in order
@@ -794,7 +803,8 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 ; Default HTTP settings can be loaded here. These values will be passed to
 ; the \Zend\Http\Client's setOptions method.
 [Http]
-;sslcapath = "/etc/ssl/certs"
+;sslcapath = "/etc/ssl/certs" ; e.g. for Debian systems
+;sslcafile = "/etc/pki/tls/cert.pem" ; e.g. for CentOS systems
 
 ; Using a curl Adapter instead of the the defaultAdapter (Socket)
 ; adapter = 'Zend\Http\Client\Adapter\Curl'
@@ -918,6 +928,7 @@ sv          = "Swedish"
 pl          = "Polish"
 da          = "Danish"
 sl          = "Slovene"
+ar          = "Arabic"
 
 ; This section controls the behavior of the Browse module.  The result_limit
 ; setting controls the maximum number of results that may display in any given
@@ -1004,6 +1015,11 @@ next_prev_navigation = false
 ; suppressed. (Default = true)
 ;marc_links_use_visibility_indicator = false
 
+; Set the URI-pattern of the server which serves the raw Marc-data. (see
+; https://vufind.org/wiki/remote_marc_records for more information on how to set up a
+; remote service for raw Marc-data)
+;remote_marc_url = http://127.0.0.1/%s
+
 ; You can use this setting to hide holdings information for particular named locations
 ; as returned by the catalog.
 hide_holdings[] = "World Wide Web"
@@ -1172,15 +1188,14 @@ treeSearchLimit = 100
 
 ; Activate Captcha validation on select forms
 ; VuFind will use reCaptcha validation to prevent bots from using certain actions of
-; your instance. See http://www.google.com/recaptcha for more information on reCaptcha
+; your instance. See http://www.google.com/recaptcha for more information on Captcha
 ; and create keys for your domain.
+; You will need to provide a sslcapath in the [Http] section for your Captcha to work.
 ;[Captcha]
-;publicKey  = "get your reCaptcha key at"
-;privateKey = "https://www.google.com/recaptcha/admin/create"
-; Valid theme values: red, white, blackglass, clean, custom
-; If using a custom theme, modify/override/style Service/recaptcha.phtml
-; Documentation: https://developers.google.com/recaptcha/docs/customization
-;theme      = red
+;siteKey  = "get your reCaptcha key at"
+;secretKey = "https://www.google.com/recaptcha/admin/create"
+; Valid theme values: dark, light
+;theme      = light
 ; Valid forms values: changePassword, email, newAccount, passwordRecovery, sms
 ; Use * for all supported forms
 ;forms = changePassword, email, newAccount, passwordRecovery, sms
diff --git a/config/vufind/facets.ini b/config/vufind/facets.ini
index 228fa4f79f2d7968be4fb73c6dceb4d2a142bcc2..1e6faae18222fe81ab8ff87a357762a754eabe15 100644
--- a/config/vufind/facets.ini
+++ b/config/vufind/facets.ini
@@ -85,6 +85,14 @@ top_cols = 3
 ; Do we want any facets to be collapsed by default?
 ;collapsedFacets = *
 
+; This can be used to sort specific facet fields alphabetically by index value
+; (which normally results in alphabetical order).
+; Please note: This sorts natively in the Solr index using untranslated values,
+; so if you are using facet translation, your values may not always display in
+; the expected order.
+;sorted_by_index[] = building;
+;sorted_by_index[] = institution;
+
 ; The author home screen has different facets
 [Author]
 topic_facet = "Related Subjects"
@@ -158,3 +166,12 @@ facet_limit      = 20
 ; Which two facetable fields should be used for creating the visual results?
 ; See VisualFacets recommendation module in searches.ini for more details.
 visual_facets = "callnumber-first,topic_facet"
+
+; If you rename a facet field, you can map the old value to a new value in this
+; section to ensure that legacy URLs continue to function.
+[LegacyFields]
+
+; Prevent specific facet values from being displayed to the user.
+; Use facet field names as keys and untranslated facet values as values.
+[HideFacetValue]
+;format[] = "Book"
diff --git a/config/vufind/permissions.ini b/config/vufind/permissions.ini
index 875772f156c78863484329be345d96cedddd91ca..b7e68bdf34feb63cecf873f0fae365890709ebd5 100644
--- a/config/vufind/permissions.ini
+++ b/config/vufind/permissions.ini
@@ -91,4 +91,12 @@ permission = access.StaffViewTab
 ; Only users with a staff affiliation can access the staff view tab
 ;[shibboleth.StaffView]
 ;shibboleth = "affiliation staff@example.org"
-;permission = access.StaffViewTab
\ No newline at end of file
+;permission = access.StaffViewTab
+
+; Example for conditional filters (see [ConditionalHiddenFilters] in
+; searches.ini for details)
+;[conditionalFilter.MyUniversity]
+;require = ANY
+;ipRange[] = 1.2.3.1-1.2.3.254
+;role = loggedin
+;permission = conditionalFilter.MyUniversity
diff --git a/config/vufind/searches.ini b/config/vufind/searches.ini
index b855252ebec4a11a4856ab0a2656b2e6adb0e7b0..274c11cda28e5c3a2a0e2d0804e6127614705bab 100644
--- a/config/vufind/searches.ini
+++ b/config/vufind/searches.ini
@@ -8,6 +8,11 @@ default_handler      = AllFields    ; Search handler to use if none is specified
 ; below.
 default_sort         = relevance
 
+; This setting controls the sort order to be used for empty search when relevance
+; sort is selected. Since relevance doesn't have a meaningful function with an empty
+; search, this can be set to e.g. "title".
+;empty_search_relevance_override = title
+
 ; This setting controls the default view for search results; the selected option
 ; should be one of the options present in the [Views] section below.
 default_view         = list
@@ -72,11 +77,15 @@ retain_filters_by_default = true
 ; this setting to have no default filters applied. These differ from hidden
 ; filters because they are visible in the UI and may be removed by the user.
 ;
+; You can use complex filters (for example with boolean operators inside).
+; In order to do that, just set the filter into parentheses (as in the third sample line).
+;
 ; NOTE: If you are setting a default filter on a field that is used for OR
 ; facets (see the orFacets setting in facets.ini), be sure to prefix the field
 ; name with a tilde (~)... e.g. "~format:Book"
 ;default_filters[] = "format:Book"
 ;default_filters[] = "institution:MyInstitution"
+;default_filters[] = "(format:Book AND institution:MyInstitution)"
 
 [Cache]
 ; This controls whether the parsed searchspecs.yaml file will be stored to
@@ -236,6 +245,9 @@ CallNumber = callnumber-sort
 ;       Checkbox facets are normally in filter => label format; prefix the section
 ;       name with ~ to reverse this and use label => filter format (useful if your
 ;       filters contain values that are illegal in configuration keys -- e.g. []).
+;       Note that if you take advantage of this ~ feature, you will also need to
+;       adjust the facets.ini Advanced_Settings/special_facets checkboxes setting
+;       in order to properly display checkboxes on the advanced search screen.
 ; SpellingSuggestions
 ;       Display spelling suggestions (also requires Spelling settings to be turned
 ;       on in config.ini).
@@ -330,6 +342,8 @@ CallNumber = callnumber-sort
 ;
 ; Available modules recommended for use in the "no results" area:
 ;
+; AlphaBrowseLink:index
+;       Use the query to generate a link to the specified alphabrowse index
 ; SwitchQuery:[backend]:[checks to skip]:[transforms to add]
 ;       This module analyzes the user's query and offers suggestions for ways to
 ;       improve it. [backend] is the name of the search backend currently in use,
@@ -362,6 +376,7 @@ CallNumber[]        = "TopFacets:ResultsTop"    ; disable spelling in this conte
 
 [NoResultsRecommendations]
 CallNumber[] = SwitchQuery::wildcard:truncatechar
+;CallNumber[] = AlphaBrowseLink:lcc
 
 ; These settings control the top and side recommendations within the special Author
 ; module (the page accessed by clicking on an author's name within the search
@@ -535,9 +550,32 @@ container_title = "Journal Title"
 ;0 = "format:\"Book\" OR format:\"Journal\""
 ;1 = "language:\"English\" OR language:\"French\""
 
+; This section can get used to define conditional filters, i.e. filters
+; that are applied under certain conditions.
+; You can use a permission set as condition, which has to be defined in 
+; permissions.ini.
+; Keys are ignored, but increasing numeric values (1, 2, 3...) are recommended.
+; Values need to be formatted using this schema:
+; [-]permission|filter-query
+; Prefixing the condition with a minus (-) means that the filter is applied
+; when the condition does not match (the permission is not granted).
+; The filter may be any filter query valid for Solr.
+; Examples:
+; -conditionalFilter.MyUniversity|format:Book
+; apply filter "format:Book" if permission conditionalFilter.MyUniversity
+; (from permissions.ini) is not granted
+; conditionalFilter.MyUniversity|format:Article
+; apply filter "format:Article" if permission conditionalFilter.MyUniversity
+; (from permissions.ini) is granted
+[ConditionalHiddenFilters]
+;0 = "-conditionalFilter.MyUniversity|format:Book"
+;1 = "conditionalFilter.MyUniversity|format:Article"
+
 ; This section defines how records are handled when being fetched from Solr.
-;[Records]
-; Boolean value indicating if deduplication is enabled. Defaults to false.
+[Records]
+; Boolean value indicating if deduplication is enabled. If true, deduplication is 
+; enabled. If false, dedup records are filtered out. If unspecified, deduplication 
+; support is completely disabled.
 ;deduplication = true
 ; Priority order (descending) for record sources (record ID prefixes separated
 ; from the actual record by period, e.g. testsrc.12345)
diff --git a/config/vufind/sms.ini b/config/vufind/sms.ini
index 76ab687059d268df34c510cbb7b9b9576e0f6bdf..e3baa37679c4343e65a4de7f4ce5872e6fec8aaf 100644
--- a/config/vufind/sms.ini
+++ b/config/vufind/sms.ini
@@ -4,8 +4,9 @@
 ; Set smsType to Mailer to use VuFind's internal mailer for SMS (default).
 ;smsType = Mailer
 
-; This refers to phone number style for validation.  At present, only "US" is
-; supported (default setting); any other setting will disable validation.
+; This controls phone number validation. You can set this to an ISO country code
+; (see http://www.iso.org/iso/country_names_and_code_elements) to specify the style
+; of validation. Set to blank to disable validation.
 validation = US
 
 ; These characters will be filtered from user input phone numbers prior to texting
diff --git a/import/dspace.properties b/import/dspace.properties
index 445ede1b3841fe9e533655a116186e834ab7e700..85304a4cf0617a534e5b08589653ef96f103dfe1 100644
--- a/import/dspace.properties
+++ b/import/dspace.properties
@@ -24,3 +24,7 @@ truncate_custom_class = true
 [Parameters]
 institution = "My University"
 collection = "DSpace"
+; By default, any URL beginning with "http" will be indexed; however, you can
+; specify a more narrow prefix here if you wish to filter to a particular subset
+; of URLs indexed into VuFind.
+;urlPrefix = "http://hdl.handle.net"
diff --git a/import/xsl/dspace.xsl b/import/xsl/dspace.xsl
index fa3c0bf928e1d7fade1c73775f593fbfe88fbc34..a2072586cc3b6856af74887d0ae5497a7d8fb6d5 100644
--- a/import/xsl/dspace.xsl
+++ b/import/xsl/dspace.xsl
@@ -8,6 +8,7 @@
     <xsl:output method="xml" indent="yes" encoding="utf-8"/>
     <xsl:param name="institution">My University</xsl:param>
     <xsl:param name="collection">DSpace</xsl:param>
+    <xsl:param name="urlPrefix">http</xsl:param>
     <xsl:template match="oai_dc:dc">
         <add>
             <doc>
@@ -151,7 +152,7 @@
 
                 <!-- URL -->
                <xsl:for-each select="//dc:identifier">
-                   <xsl:if test="substring(., 1, 21) = &quot;http://hdl.handle.net&quot;">
+                   <xsl:if test="substring(., 1, string-length($urlPrefix)) = $urlPrefix">
                        <field name="url">
                            <xsl:value-of select="." />
                        </field>
diff --git a/languages/ar.ini b/languages/ar.ini
new file mode 100644
index 0000000000000000000000000000000000000000..cfc25d5bc97817256c52d4734a8696e17359c780
--- /dev/null
+++ b/languages/ar.ini
@@ -0,0 +1,1011 @@
+; For future reference:
+;English = اللغة الإنجليزية; Arabic = اللغة العربية
+;Arabic VuFind is translated to Arabic and R-2-L enabled by KnowledgeWare Technologies, Riyadh, Saudi Arabia. Last updated on June 16, 2015
+Abstract = "مستخلص"
+Access = "وصول"
+Access URL = "URL الوصول"
+Accession Number = "رقم الأكسشن"
+Account = "حساب"
+Add = "إضافة"
+Add a Note = "إضافة ملاحظة"
+Add Tag = "إضافة وسم"
+Add Tags = "إضافة وسوم"
+Add to another list = "أضف إلى قائمة أخرى"
+Add to Book Bag = "أضق إلى سلة الكتب"
+Add to favorites = "أضف إلى المفضلة"
+Add your comment = "أضف تعليقك"
+add_comment_fail_blank = "لا يمكن أن يكون التعليق خاليا."
+add_comment_success = "تمت إضافة التعليق."
+add_favorite_fail = "خطأ: التسجيلة غير محفوظة"
+add_favorite_prefix = "إضافة"
+add_favorite_suffix = "إلى المفضلة"
+add_list_fail = "خطأ: لم يتم إنشاء القائمة"
+add_other_libraries = "إدراج المقالات من مكتبات أخرى"
+add_search = "إضافة حقل بحث"
+add_search_group = "إضافة مجموعة بحث"
+add_tag_error = "خطأ: لا يمكن حفظ الوسوم"
+add_tag_note = "ستقوم المسافات بفضل الوسوم.  استخدم الأقواس للوسوم المكونة من أكثر من كلمة."
+add_tag_success = "تم حفظ الوسوم"
+Address = "العنوان"
+adv_search_all = "كل الحقول"
+adv_search_author = "المؤلف"
+adv_search_callnumber = "رقم الطلب"
+adv_search_filters = "المرشحات المطبقة"
+adv_search_isn = "ردمك/تدمد"
+adv_search_journaltitle = "عنوان الدورية"
+adv_search_label = "بحث عن"
+adv_search_publisher = "الناشر"
+adv_search_select_all = "تحديد الكل"
+adv_search_series = "السلاسل"
+adv_search_subject = "الموضوع"
+adv_search_title = "العنوان"
+adv_search_toc = "جدول المحتويات"
+adv_search_year = "سنة النشر"
+Advanced = "بحث متقدم"
+Advanced Search = "بحث متقدم"
+advSearchError_noRights = "عذراً، لكنك لا تملك صلاحية تحرير هذا البحث. ربما انتهت جلسة متصفحك ؟"
+advSearchError_notAdvanced = "البحث الذي طلبت تحريره ليس بحثا متقدماً."
+advSearchError_notFound = "لم يتم العثور على البحث الذي طلبته."
+All = "الكل"
+All Fields = "كل الحقول"
+All Pages Loaded = "تم تحميل كل الصفحات"
+All Text = "كل النص"
+alphabrowse_matches = "النتائج"
+An error has occurred = "لقد حدث خطأ"
+An error occurred during execution; please try again later. = "لقد حدث خطأ أثناء التنفيذ؛ يرجى إعادة المحاولة لاحقا."
+AND = "Ùˆ"
+anonymous_tags = "وسوم مجهولة"
+APA Citation = "APA استشهاد"
+Article = "المقال"
+Ask a Librarian = "إسأل أخصائي مكتبات"
+Audience = "جمهور"
+Audio = "سمعي"
+authentication_error_admin = "لا يمكننا تسجيل دخولك في الوقت الحالي. يرجى الاتصال بمدير نظامك للمساعدة."
+authentication_error_blank = "لا يمكن أن تكون معلومات تسجيل الدخول خالية."
+authentication_error_creation_blocked = "ليس لديك صلاحية إنشاء حساب."
+authentication_error_denied = "الاعتمادات غير متطابقة! تم رفض الوصول."
+authentication_error_invalid = "تسجيل دخول غير صحيح -- الرجاء إعادة المحاولة."
+authentication_error_loggedout = "لقد قمت بتسجيل الخروج."
+authentication_error_technical = "لا يمكننا تسجيل دخولك في ال وقت الحالي.يرجى إعادة المحاولة لاحقاً."
+Author = "المؤلف"
+Author Browse = "استعراض المؤلف"
+Author Notes = "ملاحظات المؤلف"
+Author Results for = "نتائج المؤلف لـ"
+Author Search Results = "نتائج بحث المؤلف"
+Authors = "المؤلفون"
+Authors Related to Your Search = "المؤلفون المتعلقون ببحثك"
+Auto configuration is currently disabled = "تم إيقاف التهيئة التلقائية حاليا"
+auto_configure_description = "إذا كان هذا تثبيتا جديدا، يمكنك إصلاح الأخطاء باستخدام أداة تهيئة VuFind التلقائية."
+auto_configure_disabled = "تم إيقاف التهيئة التلقائية."
+auto_configure_title = "التهيئة التلقائية"
+Available = "متاح"
+Available Functionality = "الوظائف المتاحة"
+Awards = "الجوائز"
+Back to Record = "العودة إلى التسجيلة"
+Back to Search Results = "العودة إلى نتائج البحث"
+Backtrace = "تتبع خلفي"
+Bag = "سلة"
+Balance = "رصيد"
+basic_search_keep_filters = "احتفظ بمرشحاتي الحالية"
+Be the first to leave a comment = "كن أول من يترك تعليقا"
+Be the first to tag this record = "كن أول من يضع وسما على هذه التسجيلة"
+Bibliographic Details = "التفاصيل البيبلوغرافية"
+Bibliography = "بيبلوغرافيا"
+Book = "كتاب"
+Book Bag = "سلة الكتب"
+Book Chapter = "فصل الكتاب"
+Book Cover = "غلاف الكتاب"
+bookbag_confirm_empty = "هل أنت متأكد من أنك تريد إفراغ سلة كتبك؟"
+bookbag_delete = "حذف مواد سلة الكتب المحددة"
+bookbag_delete_selected = "حذف المحدد"
+bookbag_email = "إرسال مواد سلة الكتب المحددة بالبريد الالكتروني"
+bookbag_email_selected = "إرسال المحدد بالبريد الالكتروني"
+bookbag_export = "تصدير مواد سلة الكتب المحددة"
+bookbag_export_selected = "تصدير المحدد"
+bookbag_full = "ممتلئ"
+bookbag_full_msg = "سلة كتبك ممتلئة"
+bookbag_is_empty = "سلة كتبك فارغة"
+bookbag_print_selected = "طباعة المحدد"
+bookbag_save = "حفظ مواد سلة الكتب المحددة"
+bookbag_save_selected = "حفظ المحدد"
+Bookmark = "علامة"
+Books = "الكتب"
+Borrowing Location = "موقع الاستعارة"
+Braille = "برايل"
+Brief View = "عرض مختصر"
+Browse = "استعراض"
+Browse Alphabetically = "استعرض أبجدياً"
+Browse for Authors = "استعرض للمؤلفين"
+Browse Home = "استعرض الصفحة الرئيسية"
+Browse the Catalog = "استعراض الفهرس"
+Browse the Collection = "استعراض المجموعة"
+Browse the Collection Alphabetically = "استعرض المجموعة أبجديا"
+browse_author = "المؤلف"
+browse_dewey = "رقم الطلب (ديوي)"
+browse_format = "الوعاء"
+browse_lcc = "رقم الطلب (LC)"
+browse_publishDate = "سنة النشر"
+browse_title = "العنوان"
+browse_topic = "الموضوع"
+bulk_email_success = "تم إرسال موادك بالبريد الالكتروني"
+bulk_email_title = "مواد فهرس المكتبة"
+bulk_error_missing = "بعض البيانات مفقودة. لم ينجح طلبك."
+bulk_export_not_supported = "التسجيلة (التسجيلات) التي قمت بتحديدها لا تدعم التصدير الضخم."
+bulk_fail = "عذراً، حدث خطأ. يرجى إعادة المحاولة."
+bulk_noitems_advice = "لم يتم تحديد مواد. يرجى النقر على مربع التحديد الموجود بجانب المادة وإعادة المحاولة."
+bulk_save_error = "بعض البيانات مفقودة. لم يتم حفظ موادك."
+bulk_save_success = "تم حفظ موادك بنجاح"
+By = "بواسطة"
+by = "بواسطة"
+By Alphabetical = "أبجديا"
+By Author = "بواسطة المؤلف"
+By Call Number = "بواسطة رقم الطلب"
+By Course = "بواسطة الكورس"
+By Department = "بواسطة القسم"
+By Era = "بواسطة الحقبة الزمنية"
+By Genre = "بواسطة النوع"
+By Instructor = "بواسطة المدرب"
+By Popularity = "بواسطة الشعبية"
+By Recent = "بواسطة الأحدث"
+By Region = "بواسطة المنطقة"
+By Title = "بواسطة العنوان"
+By Topic = "بواسطة الموضوع"
+Call Number = "رقم الطلب"
+callnumber_abbrev = "الطلب #"
+Cannot find record = "لا يمكن العثور على التسجيلة"
+Cannot find similar records = "لا يمكن العثور على تسجيلات مشابهة"
+Cassette = "كاسيت"
+cat_establish_account = "لإنشاء الملف الشخصي لحسابك، يرجى إدخال المعلومات التالية:"
+cat_password_abbrev = "كلمة مرور الفهرس"
+cat_username_abbrev = "اسم مستخدم الفهرس"
+Catalog Login = "تسجيل دخول الفهرس"
+Catalog Results = "نتائج الفهرس"
+catalog_login_desc = "أدخل اعتمادات فهرس مكتبتك."
+CD = "قرص مضغوط"
+Change Password = "تغيير كلمة المرور"
+Check Hold = "تحديد الحجز"
+Check Recall = "تحديد الاستدعاء"
+Checked Out = "معار"
+Checked Out Items = "المواد المعارة"
+Checkedout = "معار"
+Chicago Citation = "استشهاد بنمط شيكاغو"
+child_record_count = "%%count%% تسجيلات"
+child_records = "المحتويات/الأجزاء"
+Choose a Category to Begin Browsing = "اختر فئة لبدء الاستعراض"
+Choose a Column to Begin Browsing = "اختر عمودا لبدء الاستعراض"
+Choose a List = "اختر قائمة"
+choose_login_method = "يرجى إدخال طريقة تسجيل دخول :"
+citation_issue_abbrev = "رقم"
+citation_multipage_abbrev = "من صفحة إلى صفحة"
+citation_singlepage_abbrev = "صفحة"
+citation_volume_abbrev = "المجلد"
+Cite this = "استشهد بهذا"
+City = "المدينة"
+clear_tag_filter = "مسح المرشح"
+close = "إغلاق"
+Code = "الرمز"
+Collection = "المجموعة"
+Collection Browse = "استعرض المجموعة"
+Collection Items = "مواد المجموعة"
+collection_disambiguation = "المجموعات المتعددة المتطابقة التي تم العثور عليها"
+collection_empty = "لا توجد مواد للعرض."
+collection_view_record = "عرض التسجيلة"
+Collections = "المجموعات"
+comment_error_load = "خطأ: لا يمكن إعادة رسم قائمة التعليقات"
+comment_error_save = "خطأ: لا يمكن حفظ التعليق"
+Comments = "التعليقات"
+Company/Entity = "الشركة/الكيان"
+Configuration = "التهيئة"
+confirm_delete = "هل أنت متأكد من انك تريد حذف هذا؟"
+confirm_delete_brief = "حذف المادة؟"
+confirm_delete_list_brief = "حذف القائمة؟"
+confirm_delete_list_text = "هل أنت متأكد من أنك ترغب في حذف هذه القائمة؟"
+confirm_delete_tags_brief = "حذف الوسوم"
+confirm_dialog_no = "لا"
+confirm_dialog_yes = "نعم"
+confirm_hold_cancel_all_text = "هل ترغب في إلغاء كل حجوزاتك الحالية؟"
+confirm_hold_cancel_selected_text = "هل ترغب في إلغاء حجوزاتك المحددة؟"
+confirm_ill_request_cancel_all_text = "هل ترغب في إلغاء كل طلبات استعاراتك بين المكتبات الحالية؟"
+confirm_ill_request_cancel_selected_text = "هل ترغب في الغاء طلبات استعاراتك بين المكتبات المحددة؟"
+confirm_new_password = "تأكيد كلمة المرور الجديدة"
+confirm_storage_retrieval_request_cancel_all_text = "هل ترغب في إلغاء كل طلبات استعادة مخزونك الحالية؟"
+confirm_storage_retrieval_request_cancel_selected_text = "هل ترغب غي إلغاء طلبات استعادة مخزونك المحددة؟"
+conjunction_or = "أو"
+Contents = "المحتويات"
+Contributors = "المساهمون"
+Copies = "النسخ"
+Copy = "النسخة"
+Corporate Author = "مؤلف مشترك"
+Country = "البلد"
+Course = "الكورس"
+Course Reserves = "الحجز الأكاديمي"
+course_reserves_empty_list = "لم يتم العثور على احتياطي أكاديمي مطابق."
+Cover Image = "صورة الغلاف"
+Create a List = "إنشاء قائمة"
+Create New Account = "إنشاء حساب جديد"
+Create New Password = "إنشاء كلمة مرور جديدة"
+Created = "تم إنشاؤه"
+Database = "قاعدة البيانات"
+Date = "التاريخ"
+date_day_placeholder = "اليوم"
+date_from = "من"
+date_month_placeholder = "الشهر"
+date_to = "إلى"
+date_year_placeholder = "السنة"
+Days = "أيام"
+Debug Information = "معلومات التنقيح"
+del_search = "حذف مجموعة البحث"
+Delete = "حذف"
+delete_all = "حذف الكل"
+delete_comment_failure = "لا يمكن حذف التعليق."
+delete_comment_success = "تم حذف التعليق."
+delete_list = "حذف القائمة"
+delete_page = "حذف الصفحة"
+delete_selected = "حذف المحدد"
+delete_selected_favorites = "حذف المفضلات المحددة"
+delete_tags = "حذف الوسوم"
+delete_tags_by = "حذف الوسوم بواسطة"
+Department = "القسم"
+Description = "الوصف"
+Desired Username = "اسم المستخدم المرغوب"
+Detailed View = "العرض المفصل"
+Details = "عرض فني للبطاقة"
+Displaying the top = "عرض الأعلى"
+Document Inspector = "فاحص الوثائق"
+Document Type = "نوع الوثيقة"
+DOI = "DOI"
+Due = "مستحق"
+Due Date = "تاريخ الاستحقاق"
+DVD = "قرص فيديو رقمي"
+eBook = "كتاب الكتروني"
+Edit = "تحرير"
+Edit this Advanced Search = "تحرير هذا البحث المتقدم"
+edit_list = "تحرير القائمة"
+edit_list_fail = "عذرا، ليس لديك صلاحية تحرير هذه القائمة"
+edit_list_success = "تم تحديث القائمة بنجاح."
+Edition = "الطبعة"
+eds_expander_fulltext = "ابحث أيضا في النص الكامل للمقالات"
+eds_expander_thesaurus = "قم بتطبيق الكلمات ذات الصلة"
+eds_limiter_FC = "الفهرس فقط"
+eds_limiter_FC1 = "المستودع المؤسسي فقط"
+eds_limiter_FM6 = "المادة السمعية متاحة"
+eds_limiter_FR = "المراجع متاحة"
+eds_limiter_FT = "نص كامل"
+eds_limiter_FT1 = "متاح في مجموعة المكتبة"
+eds_limiter_RV = "تمت مراجعته من قبل الزملاء"
+eds_mode_all = "اعثر على كل مصطلحات البحث"
+eds_mode_any = "اعثر على أي من مصطلحات بحثي"
+eds_mode_bool = "بولياني/عبارة"
+eds_mode_smart = "SmartText بحث"
+eds_modes_and_expanders = "طرق وموسعات البحث"
+Electronic = "الكتروني"
+Email = "البريد الالكتروني"
+Email Address = "عنوان البريد الالكتروني"
+Email address is invalid = "عنوان البريد الالكتروني غير صحيح"
+Email Record = "إرسال التسجيلة بالبريد الالكتروني"
+Email this = "أرسل هذا بالبريد الإلكتروني"
+Email this Search = "أرسل هذا البحث بالبريد الإلكتروني"
+email_failure = "خطأ - لا يمكن إرسال الرسالة"
+email_link = "الرابط"
+email_maximum_recipients_note = "على أقصى حد %%max%% متلقين مسموح بهم."
+email_multiple_recipients_note = "يمكنك تحديد عدة متلقين مفصولين بفاصلات."
+email_selected = "تم تحديد البريد الالكتروني"
+email_selected_favorites = "قم بإرسال المفضلات المحددة"
+email_sending = "جاري إرسال الرسالة..."
+email_subject = "الموضوع"
+email_success = "تم إرسال الرسالة"
+Empty = "فارغ"
+Empty Book Bag = "سلة كتب فارغة"
+Enable Auto Config = "تفعيل التهيئة التلقائية"
+End Page = "نهاية الصفحة"
+Era = "الحقبة الزمنية"
+error_inconsistent_parameters = "عذرا، لقد حدث خطأ. تم التقاط معاملات غير ثابتة"
+error_page_parameter_list_heading = "طلب المعاملات"
+Exception = "استثناء"
+Excerpt = "مقتطفات"
+exclude_facet = "[استثناء]"
+exclude_newspapers = "استثناء مقالات الصحف"
+Expires = "ينتهي"
+Export = "تصدير"
+Export Favorites = "تصدير المفضلة"
+Export Items = "تصدير المواد"
+Export Record = "تصدير التسجيلة"
+Export to = "تصدير إلى "
+export_choose_format = "يرجى اختيار تنسيق تصدير."
+export_download = "تحميل الملف"
+export_exporting = "إنشاء ملف التصدير"
+export_fail = "لم يتم تصدير موادك"
+export_invalid_format = "تنسيق التصدير المحدد غير مدعوم بواسطة هذه التسجيلة."
+export_missing = "بعض البيانات مفقودة. لم يتم تصدير موادك."
+export_no_formats = "هذه التسجيلة لا تدعم التصدير."
+export_redirect = "بدء التصدير إلى  %%service%%"
+export_refworks = "بدء التصدير إلى  RefWorks"
+export_save = "حفظ الملف"
+export_selected = "تصدير المحدد"
+export_selected_favorites = "تصدير المفضلة المحددة"
+export_success = "اكتمل التصدير"
+export_unsupported_format = "تنسيق تصدير غير مدعوم"
+FAQs = "الأسئلة الشائعة"
+fav_delete = "حذف المفضلة المحددة"
+fav_delete_deleting = "تم حذف مفضلتك."
+fav_delete_fail = "عذرا، لقد حدث خطأ. لم يتم حذف مفضلتك."
+fav_delete_missing = "بعض البيانات مفقودة. لم يتم حذف مفضلتك."
+fav_delete_success = "تم حذف مفضلتك"
+fav_delete_warn = "أنت على وشك حذف هذه المفضلات من كل قوائمك  - إذا كنت ترغب في حذف المفضلات من قائمة محددة فقط، يرجى تحديد القائمة قبل النقر على حذف."
+fav_email_fail = "عذرا، لقد حدث خطأ. لم يتم إرسال مفضلتك عبر البريد الالكتروني"
+fav_email_missing = "بعض البيانات مفقودة. لم يتم إرسال مفضلتك عبر البريد الالكتروني."
+fav_email_success = "تم إرسال مفضلتك بالبريد الالكتروني كما طلبت."
+fav_export = "تصدير المفضلة"
+fav_list_delete = "تم حذف القائمة"
+fav_list_delete_cancel = "لم يتم حذف هذه القائمة"
+fav_list_delete_fail = "عذرا، لقد حدث خطـأ. لم يتم حذف قائمتك."
+Favorites = "المفضلة"
+Fee = "رسم"
+Feedback = "تغذية راجعة"
+Feedback Email = "البريد الالكتروني للتغذية الراجعة"
+feedback_name = "الاسم"
+File Description = "وصف الملف"
+Filter = "المرشح"
+filter_tags = "ترشيح الوسوم"
+filter_wildcard = "أي"
+Find = "أبحث"
+Find More = "أبحث عن المزيد"
+Find New Items = "أبحث عن مواد جديدة"
+Finding Aid = "أبحث عن Aid"
+Fine = "غرامة"
+fine_limit_patron = "لقد وصلت للحد الأقصى للغرامات ولا يمكن تجديد المواد"
+Fines = "الغرامات"
+First = "الأول"
+First Name = "الاسم الأول"
+fix_metadata = "أجل، قم بإصلاح الميتاداتا؛سأنتظر"
+for search = "نتيجة بحث عن"
+Forgot Password = "نسيت كلمة المرور"
+Form Submitted! = "تم تقديم النموذج !"
+Format = "التنسيق"
+found = "تم العثور على"
+From = "من"
+Full description = "وصف كامل"
+Full text is not displayed to guests = "لا يتم عرض النص الكامل للضيوف."
+fulltext_limit = "قصر على المقالات ذات النص الكامل متاح"
+Genre = "نوع المادة"
+Geographic Terms = "مصطلحات جغرافية"
+Geography = "الجغرافيا"
+Get full text = "الحصول على النص الكامل"
+Get RSS Feed = "الحصول على تغذية RSS"
+Globe = "عالم"
+Go = "اذهب"
+Go to Standard View = "اذهب إلى العرض القياسي"
+google_map_cluster = "تجمع"
+google_map_cluster_points = "نقاط التجمع"
+Grid = "شبكة"
+Group = "مجموعة"
+group_AND = "كل المجموعات"
+group_OR = "أي مجموعات"
+Has Illustrations = "به رسومات توضيحية"
+Help = "المساعدة"
+Help with Advanced Search = "إرشادات حول البحث المتقدم"
+Help with Search Operators = "إرشادات حول معاملات البحث"
+help_page_missing = "صفحة الإرشادات المطلوبة غير موجودة."
+hierarchy_hide_tree = "إخفاء الهرمية الكاملة"
+hierarchy_show_tree = "عرض الهرمية الكاملة"
+hierarchy_tree = "السياق"
+hierarchy_tree_error = "عذرا، لا يمكننا تحميل الشجرة الهرمية"
+hierarchy_view_context = "عرض السياق"
+History = "سجل"
+history_delete = "حذف"
+history_delete_link = "حذف"
+history_empty_search = "أي شيء (بحث فارغ )"
+history_limits = "حدود"
+history_no_searches = "لا توجد بحوث في الوقت الحالي في سجلك."
+history_purge = "مسح بحوثي غير المحفوظة"
+history_recent_searches = "بحوثك الحديثة"
+history_results = "النتائج"
+history_save = "حفظ؟"
+history_save_link = "حفظ"
+history_saved_searches = "بحوثك المحفوظة"
+history_search = "البحث عن"
+history_time = "وقت"
+hold_available = "متاح للالتقاط"
+hold_cancel = "إلغاء الحجز"
+hold_cancel_all = "إلغاء كل الحجوزات"
+hold_cancel_fail = "لم يتم إلغاء طلبك. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+hold_cancel_selected = "إلغاء الحجوزات المحددة"
+hold_cancel_success = "تم إلغاء طلبك بنجاح"
+hold_cancel_success_items = "تم الغاء طلبك بنجاح"
+hold_date_invalid = "يرجى إدخال تاريخ صحيح"
+hold_date_past = "يرجى إدخال تاريخ في المستقبل"
+hold_empty_selection = "لم يتم تحديد حجوزات"
+hold_error_blocked = "لا يوجد لديك امتيازات كافية لوضع حجز على هذه المادة"
+hold_error_fail = "لقد فشل طلبك. يرجى الإتصال بمكتب الإعارة للمزيد من المساعدة"
+hold_invalid_pickup = "تم إدخال موقع التقاط غير صحيح. يرجى إعادة المحاولة"
+hold_invalid_request_group = "تم إدخال مجموعة طلبات حجز غير صحيحة. يرجى إعادة المحاولة"
+hold_login = "لمعلومات الحجز والاستدعاء"
+hold_place = "وضع طلب"
+hold_place_fail_missing = "لقد فشل طلبك. بعض البيانات مفقودة. يرجى الاتصال بمكتب الاستعارة للمزيد من المساعدة"
+hold_place_success_html = "لقد نجح طلبك. <a href="%%url%%">حجوزاتك واستدعاءاتك</a>."
+hold_profile_html = "لمعلومات الحجز والاستدعاء، يرجى إنشاء  <a href="%%url%%">ملف فهرس مكتبك </a>."
+hold_queue_position = "وضع الصف"
+hold_request_group = "طلب من"
+hold_requested_group = "مطلوب من"
+hold_required_by = "غير مطلوب بعد"
+hold_success = "كان طلبك ناجحا"
+Holdings = "المقتنيات"
+Holdings at Other Libraries = "المقتنيات في مكتبات أخرى"
+Holdings details from = "تفاصيل المقتنيات من"
+Holds = "الحجوزات"
+Holds and Recalls = "الحجوزات والاستدعاءات"
+Home = "الرئيسية"
+home_browse = "استعراض بواسطة"
+HTML Full Text = "HTML النص الكامل"
+Identifier = "معرف"
+ill_request_available = "متاح للالتقاط"
+ill_request_cancel = "الغاء طلب الاستعارة بين المكتبات"
+ill_request_cancel_all = "الغاء طلبات الاستعارة بين المكتبات"
+ill_request_cancel_fail = "لم يتم إلغاء طليك. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+ill_request_cancel_selected = "إلغاء طلبات الاستعارة بين المكتبات المحددة"
+ill_request_cancel_success = "تم إلغاء طلبك بنجاح"
+ill_request_cancel_success_items = "تم إلغاء الطلب بنجاح"
+ill_request_canceled = "تم الغاء"
+ill_request_check_text = "التحقق من طلب الاستعارة بين المكتبات"
+ill_request_comments = "التعليقات"
+ill_request_date_invalid = "يرجى إدخال تاريخ صحيح"
+ill_request_date_past = "يرجى إدخال تاريخ في المستقبل"
+ill_request_empty_selection = "لم تم إلغاء أي طلبات للاستعارة بين المكتبات"
+ill_request_error_blocked = "ليس لديك امتيازات كافية لوضع طلب استعارة بين المكتبات على هذه المادة"
+ill_request_error_fail = "لقد فشل طلبك. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+ill_request_error_technical = "لقد فشل طلبك نظرا لخطأ في النظام. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+ill_request_error_unknown_patron_source = "مكتبة المستفيد غير معرفة في طلب الاستعارة بين المكتبات."
+ill_request_in_transit = "في النقل إلى موقع الالتقاط"
+ill_request_invalid_pickup = "تم إدخال موقع التقاط غير صحيح. يرجى إعادة المحاولة"
+ill_request_pick_up_library = "مكتبة الالتقاط"
+ill_request_pick_up_location = "موقع الالتقاط"
+ill_request_place_fail_missing = "لقد فشل طبيك. بعض البيامات مفقودة. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+ill_request_place_success = "كان طلبك ناجحا"
+ill_request_place_text = "وضع طلب استعارة بين المكتبات"
+ill_request_processed = "معالج"
+ill_request_profile_html = "لمعلومات عن طلب الاستعارة بين المكتبات، يرجى إنشاء <a href="%%url%%">ملف فهرسة مكتبتك</a>."
+ill_request_submit_text = "وضع طلب"
+Illustrated = "موضح برسومات توضيحية"
+ils_offline_holdings_message = "معلومات إتاحة المواد والمقتنيات غير متاحة حاليا. الرجاء قبول اعتذارنا عن أي إزعاج قد يسببه ذلك والاتصال بنا للمزيد من المساعدة:"
+ils_offline_home_message = "تفاصيل حسابك ومعلومات المادة المباشرة ستكون غير متاحة أثناء هذا الوقت. الرجاء قبول اعتذارنا عن أي إزعاج قد يسببه ذلك والاتصال بنا للمزيد من المساعدة:"
+ils_offline_login_message = "تفاصيل حسابك ستكون غير متاحة أثناء هذا الوقت. الرجاء قبول اعتذارنا عن أي إزعاج قد يسببه ذلك والاتصال بنا للمزيد من المساعدة :"
+ils_offline_status = "نظام إدارة مكتبتنا قيد الصيانة حاليا."
+ils_offline_title = "النظام قيد الصيانة"
+Import Record = "استيراد تسجيلة"
+Import to = "استيراد إلى"
+in = "في"
+In This Collection = "في هذه المجموعة"
+in_collection_label = "في المجموعة :"
+include_synonyms = "توسيع النتائج باستخدام المرادفات"
+Indexes = "فهارس"
+information = "معلومات"
+Institution = "المؤسسة"
+Institutional Login = "تسجيل دخول مؤسسي"
+institutional_login_desc = "قم بإدخال اسم المستخدم وكلمة المرور الخاصة بك."
+Instructor = "مدرب"
+Interlibrary Loan Requests = "طلبات الاستعارة بين المكتبات"
+Internet = "الانترنت"
+Invalid Patron Login = "تسجيل دخول مستفيد غير صحيح"
+Invalid phone number. = "رقم هاتف غير صحيح."
+Invalid Recipient Email Address = "عنوان بريد المرسل اليه الالكتروني غير صحيح"
+Invalid Sender Email Address = "عنوان بريد المرسل الالكتروني غير صحيح"
+ISBN = "ISBN"
+ISBN/ISSN = "ردمك/تدمد"
+ISSN = "تدمد"
+Issue = "إصدار"
+Item Description = "وصف المادة"
+Item removed from favorites = "تم حذف المادة من المفضلة"
+Item removed from list = "تم حذف المادة من القائمة"
+Items = "مواد"
+items = "مواد"
+items_added_to_bookbag = "تمت إضافة المادة إلى سلة كتبك"
+items_already_in_bookbag = "إما أن المادة موجودة بالفعل في سلة كتبك أو لا يمكن إضافتها"
+Journal = "دورية"
+Journal Articles = "مقالات الدورية"
+Journal Title = "عنوان الدورية"
+Journals = "الدوريات"
+Jump to = "انتقل إلى"
+Keyword = "كلمة مفتاحية"
+Keyword Filter = "مرشح الكلمة المفتاحية"
+Kit = "عدة"
+Language = "اللغة"
+large = "كبير"
+Last = "آخر"
+Last Modified = "آخر تعديل"
+Last Name = "الاسم الأخير"
+less = "أقل"
+Library = "المكتبة"
+Library Catalog Password = "كلمة مرور فهرس المكتبة"
+Library Catalog Profile = "ملف فهرس المكتبة"
+Library Catalog Record = "تسجيلة فهرس المكتبة"
+Library Catalog Search = "بحث فهرس المكتبة"
+Library Catalog Search Result = "نتائح بحث فهرس المكتبة"
+Library Catalog Username = "اسم مستخدم فهرس المكتبة"
+Library Web Search = "بحث ويب المكتبة"
+lightbox_error = "خطأ: لا يمكن تحميل المربع المنبثق"
+Limit To = "تحديد إلى"
+List = "قائمة"
+List Tags = "وسوم القائمة"
+list_access_denied = "ليس لديك صلاحية عرض هذه القائمة."
+list_edit_name_required = "اسم القائمة مطلوب."
+load_tag_error = "خطأ: لا يمكن تحميل الوسوم"
+Loading = "تحميل"
+Local Login = "تسجيل الدخول المحلي"
+local_login_desc = "قم بإدخال اسم المستخدم وكلمة المرور التي قمت بإنشائها لهذا الموقع."
+Located = "المكان"
+Location = "الموقع"
+Log Out = "تسجيل الخروج"
+Login = "تسجيل الدخول"
+Login for full access = "تسجيل الدخول للوصول الكامل."
+login_disabled = "تسجيل الدخول غير متاح في الوقت الحالي."
+login_target = "المكتبة"
+Logout = "تسجيل الخروج"
+Main Author = "المؤلف الرئيسي"
+Major Categories = "الفئات الرئيسية"
+Manage Tags = "أدر الوسوم"
+Manuscript = "مخطوطة"
+Map = "خريطة"
+Map View = "عرض الخريطة"
+map_results_label = "في هذا الموقع :"
+Maps = "خرائط"
+Media Format = "تنسيق وسائط"
+medium = "وسيط"
+Message = "رسالة"
+Message From Sender = "رسالة من المرسل"
+Metadata Prefix = "بادئة الميتاداتا"
+Microfilm = "مكروفيلم"
+MLA Citation = "MLA استشهاد"
+mobile_link = "يبدو أنك تستخدم جهاز محمول ؛ هل تريد التحويل إلى عرض الهاتف المحمول؟"
+Monograph Title = "عنوان موحد"
+more = "المزيد"
+More catalog results = "المزيد من نتائج الفهرس"
+More options = "المزيد من الخيارات"
+More Summon results = "المزيد من استدعاء النتائج"
+More Topics = "المزيد من الموضوعات"
+more_info_toggle = "عرض/إخفاء المزيد من المعلومات"
+more_topics = "%%count%% المزيد من الموضوعات"
+Most Recent Received Issues = "أحدث الإصدارات المستلمة"
+Multiple Call Numbers = "أرقام طلب متعددة"
+Multiple Locations = "مواقع متعددة"
+Musical Score = "قطعة موسيقية"
+My Favorites = "مفضلتي"
+My Fines = "غراماتي"
+My Holds = "حجوزاتي"
+My Profile = "صفحتي الشخصية"
+Narrow Search = "تضييق البحث"
+navigate_back = "رجوع"
+Need Help? = "تحتاج مساعدة ؟"
+New Item Feed = "رد المادة الجديدة"
+New Item Search = "بحث مادة جديدة"
+New Item Search Results = "نتائج بحث المادة الجديدة"
+New Items = "مواد جديدة"
+New Title = "عنوان جديد"
+new_password = "كلمة مرور جديدة"
+new_password_success = "تم تغيير كلمة مرورك بنجاح"
+Newspaper = "صحيفة"
+Next = "التالي"
+No citations are available for this record = "لا توجد استشهادات متاحة لهذه التسجيلة"
+No Cover Image = "لا توجد صورة غلاف"
+No dependency problems found = "لم يتم العثور على مشكلات تبعية"
+No excerpts were found for this record. = " لم يتم العثور على مقتطفات لهذه التسجيلة."
+No library account = "لا يوجد حساب مكتبي"
+No new item information is currently available. = "لا تتوافر معلومات عن مادة جديدة حاليا"
+No Preference = "لا يوجد تفضيل"
+No reviews were found for this record = "لم يتم العثور على مراجعات لهذه التسجيلة"
+No Tags = "لا توجد وسوم"
+no_description = "الوصف غير متاح."
+no_items_selected = "لم يتم تحديد مواد"
+nohit_filters = "المرشحات المطبقة حاليا على هذا البحث :"
+nohit_heading = "لا توجد نتائج!"
+nohit_no_filters = "لم يتم تطبيق أي مرشحات على هذا البحث."
+nohit_parse_error = "يبدو أن هناك مشكلة في استعلام بحثك.  يرجى التحقق من التركيب.  إذا لم تكن تحاول استخدام خواص متقدمة، قد يساعدك وضع الاستعلام بين قوسين مزدوجين."
+nohit_prefix = "بحثك"
+nohit_spelling = "ربما يجب عليك تجربة بعض المتغيرات الهجائية"
+nohit_suffix = "لم يطابق أي من المصادر."
+nohit_suggest = "يمكنك مراجعة عبارة بحثك عن طريق حذف بعض الكلمات أو مراجعة الهجاء."
+NOT = "غير"
+Not Illustrated = "غير موضح"
+Not On Reserve = "ليس في الاحتياطي"
+not_applicable = "غير معروف"
+Note = "ملاحظة"
+note_760 = "السلسة الرئيسية"
+note_762 = "السلاسل الفرعية"
+note_765 = "ترجمة لـ"
+note_767 = "ترجمة"
+note_770 = "له تكميل"
+note_772 = "تكميل لـ"
+note_773 = "محتوى في"
+note_774 = "وحدة مكونة"
+note_775 = "طبعة أخرى متاحة"
+note_776 = "نموذج إضافي"
+note_777 = "تم إصداره بـ"
+note_780_0 = "يستمر"
+note_780_1 = "يستمر جزئيا"
+note_780_2 = "يلغي"
+note_780_3 = "يلغي جزئيا"
+note_780_4 = "مكون بواسطة"
+note_780_5 = "بيانات النشر"
+note_780_6 = "منشور جزئيا"
+note_780_7 = "منفصل عن"
+note_785_0 = "مكمل بواسطة"
+note_785_1 = "مكمل جزئيا بواسطة"
+note_785_2 = "ملغي بواسطة"
+note_785_3 = "ملغي جزئيا بواسطة"
+note_785_4 = "منشور بواسطة"
+note_785_5 = "منشور جزئيا بواسطة"
+note_785_6 = "منقسم إلى"
+note_785_7 = "مدمج مع  / نماذج"
+note_785_8 = "تغير إلى"
+Notes = "ملاحظات"
+Number = "رقم"
+number_decimal_point = "."
+number_thousands_separator = ","
+OAI Server = "OAI خادم"
+of = "من"
+old_password = "كلمة المرور القديمة"
+On Reserve = "في الاحتياطي"
+On Reserve - Ask at Circulation Desk = "في الاحتياطي - اسأل في مكتب الإعارة"
+on_reserve = "الاحتياطي - اسأل في الإعارة"
+on_topic = "%%count%% مواد حول الموضوع"
+Online Access = "وصول على الخط المباشر"
+online_resources = "نص كامل"
+operator_contains = "يحتوي على"
+operator_exact = "هو (بالضبط)"
+OR = "أو"
+or create a new list = "أو قم بإنشاء قائمة جديدة"
+original = "أصلي"
+Other Authors = "مؤلفون آخرون"
+Other Editions = "طبعات أخرى"
+Other Libraries = "مكتبات أخرى"
+Other Sources = "مصادر أخرى"
+Page not found. = "لم يتم العثور على الصفحة."
+Password = "كلمة المرور"
+Password Again = "كلمة المرور مرة أخرى"
+Password cannot be blank = "لا يمكن أن تكون كلمة المرور خالية"
+password_error_not_unique = "لم يتم تغيير كلمة المرور"
+password_maximum_length = "الحد الأقصى لطول كلمة المرور هو %%maxlength%% أحرف"
+password_minimum_length = "الحد الأدنى لطول كلمة المرور هو%%minlength%% أحرف"
+Passwords do not match = "كلمة المرور غير متطابقة"
+Past = "Past"
+PDF Full Text = "PDF النص الكامل"
+peer_reviewed = "مراجعة النظير"
+peer_reviewed_limit = "تحديد إلى المقالات من دوريات تمت مراجعتها بالنظير"
+Phone Number = "رقم الهاتف"
+Photo = "صورة"
+Physical Description = "وصف مادي"
+Physical Object = "كيان مادي"
+pick_up_location = "موقع الالتقاط"
+Place a Hold = "أحجز النسخة"
+Playing Time = "وقت التشغيل"
+Please check back soon = "يرجى التحقق مرة أخرى قريبا"
+Please contact the Library Reference Department for assistance = "يرجى الاتصال بقسم مرجعية المكتبة للمساعدة"
+Please enable JavaScript. = "الرجاء تفعيل  JavaScript."
+Please upgrade your browser. = "الرجاء ترقية متصفحك."
+Posted by = "منشور بواسطة"
+posted_on = "في"
+Preferences = "مفضلات"
+Preferred Library = "المكتبة المفضلة"
+Prev = "السابق"
+Preview = "معاينة"
+Preview from = "معاينة من"
+Previous Title = "العنوان السابق"
+Print = "طباعة"
+print_selected = "طباعة المحدد"
+Private = "خاص"
+Production Credits = "اعتمادات الإنتاج"
+Profile = "ملف شخصي"
+profile_update = "تم تحديث ملفك الشخصي بناء على طلبك"
+pronounced = "منطوق"
+Provider = "مقدم"
+Public = "عام"
+Publication = "نشر"
+Publication Frequency = "تواتر النشر"
+Publication Information = "بيانات النشر"
+Publication Type = "نوع المنشور"
+Publication Year = "سنة النشر"
+Publication_Place = "مكان النشر"
+Published = "منشور في"
+Published in = "منشور في"
+Publisher = "بيانات الناشر"
+Publisher Information = "بيانات الناشر"
+Publisher Permissions = "تصاريح الناشر"
+QR Code = "QR رمز"
+qrcode_hide = "اخفاء رمز QR"
+qrcode_show = "عرض رمز QR"
+query time = "وقت الاستعلام"
+random_recommendation_title = "مواد عشوائية من نتائجك"
+Range = "نطاق"
+Range slider = "تمرير النطاق"
+Read the full review online... = "قراءة المراجعة الكاملة على الخط المباشر..."
+Recall This = "تذكر هذا"
+recaptcha_not_passed = "CAPTCHA لم تمر"
+Record Citations = "استشهادات التسجيلة"
+Record Count = "عد التسجيلة"
+Recover Account = "استعادة الحساب"
+recovery_by_email = "استعادة بواسطة البريد الالكتروني"
+recovery_by_username = "استعادة بواسطة اسم المستخدم"
+recovery_disabled = "استعادة كلمة المرور غير مفعلة"
+recovery_email_notification = "تم عمل طلب لاستعادة كلمة المرور لحسابك بـ  %%library%%."
+recovery_email_sent = "تم إرسال تعليمات استعادة كلمة المرور إلى عنوان البريد الالكتروني المسجل بهذا الحساب."
+recovery_email_subject = "VuFind استعادة حساب"
+recovery_email_url_pretext = "يمكنك إعادة ضبط كلمة مرورك من خلال هذا الرابط : %%url%%"
+recovery_expired_hash = "لقد انتهى رابط هذه الاستعادة"
+recovery_invalid_hash = "لم يتم التعرف على رابط الاستعادة"
+recovery_new_disabled = "غير مسموح لك بتغيير كلمة مرورك في الوقت الحالي"
+recovery_title = "استعادة كلمة المرور"
+recovery_too_soon = "تم إجراء طلبات استعادة أكثر من اللازم، يرجى إعادة المحاولة لاحقا"
+recovery_user_not_found = "لم نستطع العثور على حسابك"
+Refine Results = "تنقيح النتائج"
+Region = "المنطقة"
+Related Author = "مؤلف ذو صلة"
+Related Items = "مواد ذات صلة"
+Related Subjects = "موضوعات ذات صلة"
+Remove Filters = "حذف المرشحات"
+Remove from Book Bag = "حذف من سلة الكتب"
+renew_all = "تجديد كل المواد"
+renew_determine_fail = "لم نستطع تحديد ما إذا كان بالإمكان تجديد مادتك. يرجى الاتصال بأحد الموظفين."
+renew_empty_selection = "لم يتم تحديد أي مواد"
+renew_error = "لم نستطع تجديد مادتك (موادك) - يرجى الاتصال بأحد الموظفين"
+renew_fail = "لا يمكن تجديد هذه المادة"
+renew_item = "تجديد المادة"
+renew_item_due = "المادة مستحقة خلال ال 24 ساعة القادمة"
+renew_item_limit = "لقد وصلت هذه المادة لحد التجديد لها"
+renew_item_no = "لا يمكن تجديد هذه المادة"
+renew_item_overdue = "المادة متأخرة"
+renew_item_requested = "تم طلب هذه المادة بواسطة مستخدم آخر"
+renew_select_box = "تجديد المادة"
+renew_selected = "تجديد المواد المحددة"
+renew_success = "تم التجديد بنجاح"
+Renewed = "تم تجديده"
+Request full text = "نص الطلب الكامل"
+request_place_text = "وضع طلب"
+request_submit_text = "تقديم طلب"
+Requests = "طلبات"
+Reserves = "احتياطي"
+Reserves Search = "بحث الاحتياطي"
+Reserves Search Results = "نتائج بحث الاحتياطي"
+Results = "نتائج"
+results = "نتائج"
+Results for = "نتائج لـ"
+Results per page = "النتائج لكل صفحة"
+Resumption Token = "رمز الاستئناف"
+Review by = "مراجعة بواسطة"
+Reviews = "مراجعات"
+Save = "حفظ"
+Save Comment = "حفظ التعليق"
+save_search = "حفظ البحث"
+save_search_remove = "حذف البحث المحفوظ"
+Saved in = "محفوظ في"
+scholarly_limit = "تحديد إلى المقالات من الدوريات العلمية"
+Scroll to Load More = "تمرير لتحميل المزيد"
+Search = "بحثال"
+Search For = "بحث عن"
+Search For Items on Reserve = "بحث عن الموتد في الاحتياطي"
+Search History = "سجل البحث"
+Search Home = "صفحة البحث الرئيسية"
+Search Mode = "طريقة البحث"
+Search Options = "خيارات البحث"
+Search Results = "نتائج البحث"
+search results of = "نتائج البجث لـ"
+Search Tips = "إرشادات البحث"
+Search Tools = "أدوات البحث"
+Search Type = "نوع البحث"
+search_AND = "كل المصطلحات"
+search_groups = "مجموعات البحث"
+search_match = "مطابقة"
+search_NOT = "لا توجد مصطلحات"
+search_OR = "أي مصطلحات"
+search_save_success = "تم حفظ البحث بنجاح."
+search_unsave_success = "تم حذف البحث المحفوظ بنجاح."
+seconds_abbrev = "s"
+see all = "انظر الكل"
+See also = "انظر أيضا"
+Select this record = "تحديد هذه التسجيلة"
+Select your carrier = "تحديد ناقلك"
+select_page = "تحديد الصفحة"
+select_pickup_location = "تحديد موقع الالتقاط"
+select_request_group = "تحديد مجموعة الطلب"
+Selected = "المحدد"
+Send = "إرسال"
+Send us your feedback! = "أرسل إلينا ردك!"
+send_an_email_copy = "أرسل نسخة إلى هذا العنوان"
+send_email_copy_to_me = "أرسل نسخة إليّ"
+Sensor Image = "صورة المجس"
+Serial = "دورية"
+Series = "سلاسل"
+Set = "ضبط"
+Showing = "يعرض"
+Similar Items = "مواد مشابهة"
+Skip to content = "تخطي إلى المحتوى"
+skip_confirm = "هل أنت متأكد من أنك تريد تخطي هذه الخطوة؟"
+skip_fix_metadata = "لا تصلح الميتاداتا في الوقت الحالي."
+skip_step = "تخطي هذه الخطوة"
+Slide = "شريحة"
+sms_failure = "خطأ!  لا يمكن إرسال الرسالة."
+sms_phone_number = "رقم هاتف مكون من 10 أرقام"
+sms_sending = "جاري إرسال الرسالة..."
+sms_success = "تم إرسال الرسالة."
+Software = "برمجيات"
+Sorry, but the help you requested is unavailable in your language. = "عذراً، لكن المساعدة التي قمت بطلبها غير متوفرة بلغتك."
+Sort = "فرز بـ"
+sort_author = "المؤلف"
+sort_author_author = "أبجديا"
+sort_author_relevance = "الشعبية"
+sort_callnumber = "رقم الطلب"
+sort_relevance = "الصلة"
+sort_title = "العنوان"
+sort_year = "التاريخ تنازليا"
+sort_year asc = "التاريخ تصاعديا"
+Source = "المصدر"
+spell_expand_alt = "توسيع البحث"
+spell_suggest = "بدائل البحث"
+Staff View = "عرض الموظف"
+Start a new Advanced Search = "بدء بحث متقدم جديد"
+Start a new Basic Search = "بدء بحث أساسي جديد"
+Start Page = "صفحة البدء"
+starting from = "يبدأ من"
+Status = "الحالة"
+status_unknown_message = "الحالة المباشرة غير متاحة"
+Storage Retrieval Requests = "طلبات استرجاع التخزين"
+storage_retrieval_request_available = "متاح للالتقاط"
+storage_retrieval_request_cancel = "إلغاء طلبات استرجاع التخزين"
+storage_retrieval_request_cancel_all = "إلغاء كل طلبات استرجاع التخزين"
+storage_retrieval_request_cancel_fail = "لم يتم الغاء طلبك. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+storage_retrieval_request_cancel_selected = "إلغاء طلبات استرجاع المخزون المحددة"
+storage_retrieval_request_cancel_success = "تم الغاء طلبك بنجاح"
+storage_retrieval_request_cancel_success_items = "تم إلغاء الطلب بنجاح"
+storage_retrieval_request_canceled = "ملغي"
+storage_retrieval_request_check_text = "التحقق من طلب استرجاع التخزين"
+storage_retrieval_request_comments = "التعليقات"
+storage_retrieval_request_date_invalid = "يرجى إدخال تاريخ صحيح"
+storage_retrieval_request_date_past = "يرجى إدخال تاريخ في المستقبل"
+storage_retrieval_request_empty_selection = "لم يتم تحديد طلبات استرجاع تخزين"
+storage_retrieval_request_error_blocked = "ليس لديك امتيازات كافية لوضع طلب استرجاع تخزين على هذه المادة"
+storage_retrieval_request_error_fail = "لقد فشل طلبك. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+storage_retrieval_request_invalid_pickup = "تم إدخال موقع التقاط غير صحيح. يرجى إعادة المحاولة"
+storage_retrieval_request_issue = "تاريخ"
+storage_retrieval_request_place_fail_missing = "لقد فشل طلبك. بعض البيانات مفقودة. يرجى الاتصال بمكتب الإعارة للمزيد من المساعدة"
+storage_retrieval_request_place_success = "تم طلبك بنجاح"
+storage_retrieval_request_place_text = "وضع طلب استرجاع تخزين"
+storage_retrieval_request_processed = "تمت معالجة"
+storage_retrieval_request_profile_html = "لمعلومات طلب استرجاع التخزين، يرجى إنشاء  <a href="%%url%%">ملف فهرس مكتبتك </a>."
+storage_retrieval_request_reference = "المرجع"
+storage_retrieval_request_selected_item = "المادة المحددة"
+storage_retrieval_request_submit_text = "وضع طلب"
+storage_retrieval_request_volume = "المجلد"
+storage_retrieval_request_year = "السنة"
+Subcollection = "المجموعة الفرعية"
+Subject = "الموضوع"
+Subject Area = "مساحة الموضوع"
+Subject Geographic = "جغرافية الموضوع"
+Subject Recommendations = "توصيات الموضوع"
+Subject Terms = "مصطلحات موضوعية"
+Subject(s) = "الموضوعات"
+Subjects = "مواضيع"
+Submit = "تقديم"
+Submitting = "تقديم"
+Suggested Topics = "الموضوعات المستخلصة"
+Summary = "الملخص"
+Summon Results = "نتائج صامون"
+summon_database_recommendations = "متقرحات من قواعد صمون:"
+Supplements = "ملاحق"
+Supplied by Amazon = "مقدم بواسطة Amazon"
+Switch view to = "تبديل العرض إلى"
+switchquery_intro = "يمكنك الحصول على المزيد من النتائج عن طريق تعديل استعلام بحثك."
+switchquery_lowercasebools = "إذا كنت تحاول استخدام المعاملات البوليانية، يجب أن تكون جميعها حروفا كبيرة"
+switchquery_truncatechar = "قم بتقصير استعلام بحثك لتوسيع نتائجك"
+switchquery_unwantedbools = "كلمات AND, OR و NOT قد تربك البحث ؛ جرب إضافة الأقواس"
+switchquery_unwantedquotes = "حذف الأقواس قد يؤدي إلى بحث أوسع"
+switchquery_wildcard = "إضافة رمز حرف بدل قد تؤدي إلى استعادة متغيرات الكلمة"
+System Unavailable = "النظام غير متاح"
+Table of Contents = "جدول المحتويات"
+Table of Contents unavailable = "جدول المحتويات غير متاح"
+Tag = "الوسم"
+Tag Management = "إدارة الوسوم"
+tag_delete_filter = "أنت تستخدم المرشح التالي  - اسم المستخدم: %username%, وسم: %tag%, المصدر: %resource%"
+tag_delete_warning = "تحذير! أنت على وشك حذف وسوم مصدر  %count%"
+tag_filter_empty = "لا توجد وسوم متاحة لهذا المرشح"
+Tags = "الوسوم"
+tags_deleted = "%count% تم حذف وسوم"
+test_fail = "فشل"
+test_fix = "إصلاح"
+test_ok = "موافق"
+Text this = "أرسل هذا في رسالة قصيرة"
+Thank you for your feedback. = "شكرا على ردك."
+That email address is already used = "هذا البريد الالكتروني قيد الاستخدام بالفعل"
+That username is already taken = "اسم المستخدم هذا قيد الاستخدام بالفعل"
+The record you selected is not part of any of your lists. = "التسجيلة التي قمت بتحديدها ليست جزءا من أي من قوائمك."
+The record you selected is not part of the selected list. = "التسجيلة التي قمت بتحديدها ليست جزءا من القائمة المحددة."
+The system is currently unavailable due to system maintenance = "النظام غري متاح حاليا نظرا لأعمال صيانة النظام"
+Theme = "ثيمة"
+This email was sent from = "تم إرسال هذا البريد الالكتروني من"
+This field is required = "هذا الحقل مطلوب"
+This item is already part of the following list/lists = "هذه المادة بالفعل جزء من القائمة /القوائم التالية"
+This result not is displayed to guests = "لا يتم عرض هذه النتيجة على الضيوف."
+Title = "العنوان"
+Title not available = "العنوان غير متاح"
+Title View = "عرض العنوان"
+title_hold_place = "قم بوضع طلب على مستوى العنوان"
+To = "إلى"
+Too Many Email Recipients = "متلقي البريد الالكتروني أكثر من اللازم"
+too_many_favorites = "هذه القائمة كبيرة جدا لا يمكن عرضها كلها مرة واحدة. حاول إعادة ترتيب مفضلاتك إلى المزيد من القوائم أو تحديد استخدام الوسوم."
+too_many_new_items = "يوجد الكثير جدا من المواد لعرضها في قائمة واحدة. حاول تحديد بحثك"
+too_many_reserves = "يوجد الكثير جدا من الاحتياطي الأكاديمي لعرضه في قائمة واحدة. حاول تحديد بحثك."
+top_facet_additional_prefix = "إضافي"
+top_facet_suffix = "... من بحثك."
+Topic = "موضوع"
+Topics = "موضوعات"
+Total Balance Due = "إجمالي الرصيد المستحق"
+total_comments = "إجمالي التعليقات"
+total_lists = "إجمالي القوائم"
+total_resources = "إجمالي المصادر"
+total_saved_items = "إجمالي المواد المحفوظة"
+total_tags = "إجمالي الوسوم"
+total_users = "إجمالي المستخدمين"
+tree_search_limit_reached_html = "لقد أعاد بحثك نتائج أكثر من اللازم لعرضها في الشجرة. عرض المواد الأولى  <b>%%limit%%</b> فقط. للبحث الكامل قم بالنقر على  <a id="fullSearchLink" href="%%url%%" target="_blank">هنا.</a>"
+unique_tags = "وسوم متفردة"
+University Library = "مكتبة الجامعة"
+Unknown = "غير معروف"
+unrecognized_facet_label = "أخرى"
+Upgrade VuFind = "ترقية VuFind"
+upgrade_description = "إذا كنت تقوم بترقية إصدار  VuFind سابق، يمكنك تحميل إعداداتك القديمة بهذه الأداة."
+URL = "URL"
+Use for = "استخدم لـ"
+Use instead = "استخدم بدلا من"
+User Account = "حساب المستخدم"
+Username = "اسم المستخدم"
+Username cannot be blank = "لا يمكن أن يكون اسم المستخدم خاليا"
+VHS = "VHS"
+Video = "الفيديو"
+Video Clips = "مقاطع الفيديو"
+Videos = "الفيديوهات"
+view already selected = "عرض المحدد بالفعل"
+View Book Bag = "عرض سلة الكتب"
+View Full Collection = "عرض المجموعة كاملة"
+View Full Record = "عرض التسجيلة الكاملة"
+View in EDS = "عرض في EDS"
+View online: Full view Book Preview from the Hathi Trust = "عرض على الخط المباشر: معاينة كاملة لعرض الكتاب من  Hathi Trust"
+View Record = "عرض التسجيلة"
+View Records = "عرض التسجيلات"
+View this record in EBSCOhost = "عرض هذه التسجيلة في EBSCOhost"
+visual_facet_parent = "من"
+Volume = "المجلد"
+Volume Holdings = "مقتنيات المجلد"
+vudl_access_denied = "تم رفض الوصول."
+vudl_tab_docs = "وثائق"
+vudl_tab_pages = "الصفحات"
+VuFind Configuration = "VuFind تهيئة"
+vufind_upgrade_fail = "لا يمكننا ترقية   VuFind في الوقت الحالي"
+Warning: These citations may not always be 100% accurate = "تحذير: قد لا تكون هذه الاستشهادات دائما دقيقة بنسبة  100%"
+wcterms_broader = "موضوعات أوسع"
+wcterms_exact = "موضوعات ذات صلة"
+wcterms_narrower = "موضوعات أضيق"
+Web = "الويب"
+What am I looking at = "ما الذي أنظر إليه؟"
+widen_prefix = "حاول توسيع بحثك إلى"
+wiki_link = "مقدم من ويكيبيديا"
+with filters = "بالمرشحات"
+with_selected = "بالمحدد"
+Year of Publication = "سنة النشر"
+Yesterday = "الأمس"
+You do not have any fines = "لا توجد لديك أي غرامات"
+You do not have any holds or recalls placed = "لا يوجد لديك أي حجوزات أو استدعاءات"
+You do not have any interlibrary loan requests placed = "لا توجد لديك أي طلبات استعارة ما بين المكتبات"
+You do not have any items checked out = "لا توجد لديك أي مواد معارة"
+You do not have any saved resources = "لا توجد لديك أي مصادر محفوظة. قم بإجراء بحث واستخدام زر أضف إلى المفضلة  لحفظ المواد."
+You do not have any storage retrieval requests placed = "لا يوجد لديك أي طلبات استعادة تخزين "
+You must be logged in first = "يجب تسجيل دخولك أولا"
+Your Account = "حسابك"
+Your book bag is empty = "سلة كتبك فارغة"
+Your Checked Out Items = "موادك المعارة"
+Your Comment = "تعليقك"
+Your Favorites = "مفضلتك"
+Your Fines = "غراماتك"
+Your Holds and Recalls = "حجوزاتك واستدعاءاتك"
+Your Lists = "قوائمك"
+Your Profile = "ملفك الشخصي"
+Your search terms = "مصطلحات بحثك"
+Your Tags = "وسومك"
+your_match_would_be_here = "قد تكون مضاهاتك هنا."
+Zip = "الرمز البريدي"
+zoom = "تقريب"
\ No newline at end of file
diff --git a/languages/ca.ini b/languages/ca.ini
index 6aee81cd5e6dc9bd0ed0776b35e66aadb949df32..c285cefc18e90e31bb3b9c26357e7ff8443dfaf7 100644
--- a/languages/ca.ini
+++ b/languages/ca.ini
@@ -722,18 +722,7 @@ Range = "Rang"
 Range slider = "Rang mòbil"
 Read the full review online... = "Llegiu la resenya completa en línia..."
 Recall This = "Reclamar aquest"
-recaptcha_audio_challenge = "Obteniu una pista sonora"
-recaptcha_cant_hear_this = "Baixa el so com a MP3"
-recaptcha_help_btn = "Ajuda"
-recaptcha_image_alt_text = "Imatge del repte de reCAPTCHA"
-recaptcha_incorrect_try_again = "No és correcte. Torna-ho a provar."
-recaptcha_instructions_audio = "Escriviu el que escolteu:"
-recaptcha_instructions_visual = "Escriviu el text:"
 recaptcha_not_passed = "CAPTCHA invàlid"
-recaptcha_play_again = "Torna a reproduir el so"
-recaptcha_privacy_and_terms = "Privadesa i condicions"
-recaptcha_refresh_btn = "Obteniu una pista nova"
-recaptcha_visual_challenge = "Obtén un repte visual"
 Record Citations = "Cites del registre"
 Record Count = "Número de registres"
 Recover Account = "S'ha oblidat el seu compte/contrasenya?"
diff --git a/languages/cs.ini b/languages/cs.ini
index cc0c301503fe0cbee717d600266aab6be56db5be..cd5b258c1e3fcdb688598ad88259426dec12a4be 100644
--- a/languages/cs.ini
+++ b/languages/cs.ini
@@ -709,18 +709,7 @@ Range = "Rozmezí"
 Range slider = "Výběr rozsahu"
 Read the full review online... = "Přečíst celou recenzi online..."
 Recall This = "Rezervovat"
-recaptcha_audio_challenge = "Přehrát zvukovou podobu výrazu"
-recaptcha_cant_hear_this = "Stáhnout zvuk ve formátu MP3"
-recaptcha_help_btn = "Nápověda"
-recaptcha_image_alt_text = "Obrázek reCAPTCHA"
-recaptcha_incorrect_try_again = "Å patnÄ›. Zkuste to znovu."
-recaptcha_instructions_audio = "Napište, co jste slyšeli:"
-recaptcha_instructions_visual = "Zadejte text:"
 recaptcha_not_passed = "Kód CAPTCHA nesouhlasí."
-recaptcha_play_again = "Znovu přehrát zvuk"
-recaptcha_privacy_and_terms = "Ochrana soukromí a smluvní podmínky"
-recaptcha_refresh_btn = "Zobrazit nový výraz"
-recaptcha_visual_challenge = "Zobrazit vizuální podobu výrazu"
 Record Citations = "Citace záznamu"
 Record Count = "Počet záznamů"
 Recover Account = "Obnovit účet"
diff --git a/languages/cy.ini b/languages/cy.ini
index 7a437dde40e96ba86ad0c71b1fcb94b30b3060c3..fcc1fa0266578d0f44ed688f711048fb130788b3 100644
--- a/languages/cy.ini
+++ b/languages/cy.ini
@@ -711,18 +711,7 @@ Range = "Amrediad"
 Range slider = "Detholwr Amrediad"
 Read the full review online... = "Darllen yr arolwg cyfan ar-lein..."
 Recall This = "Adalw hwn"
-recaptcha_audio_challenge = "Derbyn her awdio"
-recaptcha_cant_hear_this = "Lawrlwytho'r sain ar ffurf MP3"
-recaptcha_help_btn = "Cymorth "
-recaptcha_image_alt_text = "Delwedd her reCAPTCHA "
-recaptcha_incorrect_try_again = "Anghywir. Rhowch gynnig arall arni."
-recaptcha_instructions_audio = "Teipiwch yr hyn a glywch: "
-recaptcha_instructions_visual = "Teipiwch y Testun:"
 recaptcha_not_passed = "Methwyd y prawf CAPTCHA"
-recaptcha_play_again = "Canu'r sain eto. "
-recaptcha_privacy_and_terms = "Preifatrwydd a Thelerau"
-recaptcha_refresh_btn = "Derbyn her newydd"
-recaptcha_visual_challenge = "Derbyn her weledol"
 Record Citations = "Cofnodi Dyfyniadau"
 Record Count = "Nifer y Cofnodion"
 Recover Account = "Adfer Cyfrif"
diff --git a/languages/da.ini b/languages/da.ini
index a9fe0c0deedc76577f3ac0b734d1bcad2eaddf69..7ba3bcd0b52c94dda26709c9d46f0a8edb882135 100644
--- a/languages/da.ini
+++ b/languages/da.ini
@@ -498,17 +498,6 @@ Range = "Range"
 Range slider = "Range slider"
 Read the full review online... = "Læs den fulde anmeldelse online”"
 Recall This = "Hjemkald denne"
-recaptcha_audio_challenge = "Hent en lydudfordring"
-recaptcha_cant_hear_this = "Download lyd som MP3"
-recaptcha_help_btn = "Hjælp"
-recaptcha_image_alt_text = "reCAPTCHA-udfordringsbillede"
-recaptcha_incorrect_try_again = "Forkert. Prøv igen."
-recaptcha_instructions_audio = "Indtast det, du hører:"
-recaptcha_instructions_visual = "Indtast teksten:"
-recaptcha_play_again = "Afspil lyden igen"
-recaptcha_privacy_and_terms = "Privatliv og vilkår"
-recaptcha_refresh_btn = "Hent en ny udfordring"
-recaptcha_visual_challenge = "Hent en visuel udfordring"
 Record Citations = "Gem citationer"
 Region = "Region"
 Related Author = "Relateret forfatter"
diff --git a/languages/de.ini b/languages/de.ini
index 5ea687576bdff0f5b26de2a5b3f98d2d8ea68eea..75c18641f7aa08f8d8f81d53003399b9d2e24d52 100644
--- a/languages/de.ini
+++ b/languages/de.ini
@@ -710,18 +710,7 @@ Range = "Bereich"
 Range slider = "Bereichswähler"
 Read the full review online... = "Die vollständige Rezension online lesen..."
 Recall This = "Vormerken"
-recaptcha_audio_challenge = "Audio-Captcha abrufen"
-recaptcha_cant_hear_this = "Wort als MP3 herunterladen"
-recaptcha_help_btn = "Hilfe"
-recaptcha_image_alt_text = "reCAPTCHA-Bild"
-recaptcha_incorrect_try_again = "Falsch. Bitte versuchen Sie es erneut."
-recaptcha_instructions_audio = "Geben Sie das Gehörte ein:"
-recaptcha_instructions_visual = "Geben Sie den angezeigten Text ein:"
 recaptcha_not_passed = "CAPTCHA nicht korrekt eingegeben"
-recaptcha_play_again = "Wort erneut abspielen"
-recaptcha_privacy_and_terms = "Datenschutzerklärung & Nutzungsbedingungen"
-recaptcha_refresh_btn = "Neues Captcha abrufen"
-recaptcha_visual_challenge = "Captcha abrufen"
 Record Citations = "Zitate"
 Record Count = "Satzanzahl"
 Recover Account = "Zugang zum Konto wiederherstellen"
diff --git a/languages/el.ini b/languages/el.ini
index 6f40b5b6ff13fea1a969986223de0068f8283951..9dd0dbadf2a4813a0ace22f0c0c3d9b331e11554 100644
--- a/languages/el.ini
+++ b/languages/el.ini
@@ -711,18 +711,7 @@ Range = "Εύρος"
 Range slider = "Χειριστήριο εύρους"
 Read the full review online... = "Διαβάστε ολόκληρη την κριτική online..."
 Recall This = "Κάντε ανάκληση"
-recaptcha_audio_challenge = "Ηχητική πρόκληση"
-recaptcha_cant_hear_this = "Λήψη ήχου ως ΜΡ3"
-recaptcha_help_btn = "Βοήθεια"
-recaptcha_image_alt_text = "Εικόνα πρόκλησης reCAPTCHA"
-recaptcha_incorrect_try_again = "Λάθος. Δοκιμάστε ξανά."
-recaptcha_instructions_audio = "Πληκτρολογήστε ότι ακούτε:"
-recaptcha_instructions_visual = "Πληκτρολογήστε το κείμενο:"
 recaptcha_not_passed = "Λανθασμένο CAPTCHA"
-recaptcha_play_again = "Αναπαραγωγή ήχου ξανά"
-recaptcha_privacy_and_terms = "Απόρρητο και όροι"
-recaptcha_refresh_btn = "Νέα πρόκληση"
-recaptcha_visual_challenge = "Οπτική πρόκληση"
 Record Citations = "Αναφορές εγγραφής"
 Record Count = "Αριθμός εγγραφών"
 Recover Account = "Ανάκτηση λογαριασμού"
diff --git a/languages/en-gb.ini b/languages/en-gb.ini
index e70518868cb35484c6c6c9484508cd8a54c0ebe6..83295ac9c8c0852e057ef8c0f4a59f46e3caa156 100644
--- a/languages/en-gb.ini
+++ b/languages/en-gb.ini
@@ -42,6 +42,7 @@ ill_request_error_technical = "Your request failed due to a system error. Please
 ill_request_place_fail_missing = "Your request failed. Some data was missing. Please contact the issue desk for further assistance"
 ill_request_profile_html = "For storage retrieval request information, please establish your <a href="%%url%%">Library Catalogue Profile</a>."
 Item removed from favorites = "Item removed from favourites"
+just_cataloged = "Just Catalogued"
 Library Catalog Password = "Library Catalogue Password"
 Library Catalog Profile = "Library Catalogue Profile"
 Library Catalog Record = "Library Catalogue Record"
diff --git a/languages/en.ini b/languages/en.ini
index 165735889eebfec0f251e57caf9191761c53ed18..b46fa37911c3439e334d160b0b51ba61307aa876 100644
--- a/languages/en.ini
+++ b/languages/en.ini
@@ -2,14 +2,17 @@
 ;English = English
 Abstract = "Abstract"
 Access = "Access"
+Access URL = "Access URL"
+Accession Number = "Accession Number"
 Account = "Account"
 Add = "Add"
+Add a Library Card = "Add a Library Card"
 Add a Note = "Add a Note"
 Add Tag = "Add Tag"
 Add Tags = "Add Tags"
 Add to another list = "Add to another list"
 Add to Book Bag = "Add to Book Bag"
-Add to favorites = "Add to Favorites"
+Add to favorites = "Save to List"
 Add your comment = "Add your comment"
 add_comment_fail_blank = "Comment cannot be blank."
 add_comment_success = "Comment added."
@@ -48,6 +51,7 @@ All Fields = "All Fields"
 All Pages Loaded = "All Pages Loaded"
 All Text = "All Text"
 alphabrowse_matches = "Results"
+alphabrowselink_html = "Browse entries by %%index%% starting from <a href="%%url%%">%%from%%</a>."
 An error has occurred = "An error has occurred"
 An error occurred during execution; please try again later. = "An error occurred during execution; please try again later."
 AND = "AND"
@@ -83,7 +87,7 @@ Back to Search Results = "Back to Search Results"
 Backtrace = "Backtrace"
 Bag = "Bag"
 Balance = "Balance"
-basic_search_keep_filters = "Retain my current filters"
+basic_search_keep_filters = "Retain current filters"
 Be the first to leave a comment = "Be the first to leave a comment"
 Be the first to tag this record = "Be the first to tag this record"
 Bibliographic Details = "Bibliographic Details"
@@ -195,6 +199,8 @@ Company/Entity = "Company/Entity"
 Configuration = "Configuration"
 confirm_delete = "Are you sure you want to delete this?"
 confirm_delete_brief = "Delete Item?"
+confirm_delete_library_card_brief = "Delete Library Card?"
+confirm_delete_library_card_text = "Are you sure you want to delete this library card?"
 confirm_delete_list_brief = "Delete List?"
 confirm_delete_list_text = "Are you sure you want to delete this list?"
 confirm_delete_tags_brief = "Delete Tags"
@@ -249,12 +255,14 @@ Detailed View = "Detailed View"
 Details = "Staff View"
 Displaying the top = "Displaying the top"
 Document Inspector = "Document Inspector"
+Document Type = "Document Type"
 DOI = "DOI"
 Due = "Due"
 Due Date = "Due Date"
 DVD = "DVD"
 eBook = "eBook"
 Edit = "Edit"
+Edit Library Card = "Edit Library Card"
 Edit this Advanced Search = "Edit this Advanced Search"
 edit_list = "Edit List"
 edit_list_fail = "Sorry, you are not permitted to edit this list"
@@ -269,8 +277,8 @@ eds_limiter_FR = "References Available"
 eds_limiter_FT = "Full Text"
 eds_limiter_FT1 = "Available in Library Collection"
 eds_limiter_RV = "Peer Reviewed"
-eds_mode_all = "Find all my search terms"
-eds_mode_any = "Find any of my search terms"
+eds_mode_all = "Find all search terms"
+eds_mode_any = "Find any of the search terms"
 eds_mode_bool = "Boolean/Phrase"
 eds_mode_smart = "SmartText Searching"
 eds_modes_and_expanders = "Search Modes and Expanders"
@@ -335,11 +343,12 @@ fav_export = "Export Favorites"
 fav_list_delete = "List has been deleted"
 fav_list_delete_cancel = "This list was not deleted"
 fav_list_delete_fail = "Sorry, an error has occurred. Your list was not deleted."
-Favorites = "Favorites"
+Favorites = "Saved Items"
 Fee = "Fee"
 Feedback = "Feedback"
 Feedback Email = "Feedback Email"
 feedback_name = "Name"
+File Description = "File Description"
 Filter = "Filter"
 filter_tags = "Filter Tags"
 filter_wildcard = "Any"
@@ -392,12 +401,12 @@ history_delete_link = "Delete"
 history_empty_search = "Anything (empty search)"
 history_limits = "Limits"
 history_no_searches = "There are currently no searches in your history."
-history_purge = "Purge my unsaved searches"
-history_recent_searches = "Your Recent Searches"
+history_purge = "Purge unsaved searches"
+history_recent_searches = "Recent Searches"
 history_results = "Results"
 history_save = "Save?"
 history_save_link = "Save"
-history_saved_searches = "Your Saved Searches"
+history_saved_searches = "Saved Searches"
 history_search = "Search"
 history_time = "Time"
 hold_available = "Available for Pickup"
@@ -500,6 +509,7 @@ Journal Articles = "Journal Articles"
 Journal Title = "Journal Title"
 Journals = "Journals"
 Jump to = "Jump to"
+just_cataloged = "Just Cataloged"
 Keyword = "Keyword"
 Keyword Filter = "Keyword Filter"
 Kit = "Kit"
@@ -509,7 +519,19 @@ Last = "Last"
 Last Modified = "Last Modified"
 Last Name = "Last Name"
 less = "less"
+libphonenumber_invalid = "Phone number invalid"
+libphonenumber_invalidcountry = "Invalid country calling code"
+libphonenumber_invalidregion = "Invalid region code:"
+libphonenumber_notanumber = "The string supplied did not seem to be a phone number"
+libphonenumber_toolong = "The string supplied is too long to be a phone number"
+libphonenumber_tooshort = "The string supplied is too short to be a phone number"
+libphonenumber_tooshortidd = "Phone number too short after IDD"
 Library = "Library"
+Library Card = "Library Card"
+Library Card Deleted = "Library Card Deleted"
+Library Card Name = "Library Card Name"
+Library Cards = "Library Cards"
+Library Cards Disabled = "Library Cards Disabled"
 Library Catalog Password = "Library Catalog Password"
 Library Catalog Profile = "Library Catalog Profile"
 Library Catalog Record = "Library Catalog Record"
@@ -563,10 +585,10 @@ Most Recent Received Issues = "Most Recent Received Issues"
 Multiple Call Numbers = "Multiple Call Numbers"
 Multiple Locations = "Multiple Locations"
 Musical Score = "Musical Score"
-My Favorites = "My Favorites"
-My Fines = "My Fines"
-My Holds = "My Holds"
-My Profile = "My Profile"
+My Favorites = "Favorites"
+My Fines = "Fines"
+My Holds = "Holds"
+My Profile = "Profile"
 Narrow Search = "Narrow Search"
 navigate_back = "Back"
 Need Help? = "Need Help?"
@@ -657,6 +679,7 @@ Page not found. = "Page not found."
 Password = "Password"
 Password Again = "Password Again"
 Password cannot be blank = "Password cannot be blank"
+password_error_invalid = "New password is invalid (e.g. contains invalid characters)"
 password_error_not_unique = "Password was not changed"
 password_maximum_length = "Maximum password length is %%maxlength%% characters"
 password_minimum_length = "Minimum password length is %%minlength%% characters"
@@ -697,10 +720,13 @@ Publication = "Publication"
 Publication Frequency = "Publication Frequency"
 Publication Information = "Publication Information"
 Publication Type = "Publication Type"
+Publication Year = "Publication Year"
 Publication_Place = "Place of Publication"
 Published = "Published"
 Published in = "Published in"
 Publisher = "Publisher"
+Publisher Information = "Publisher Information"
+Publisher Permissions = "Publisher Permissions"
 QR Code = "QR Code"
 qrcode_hide = "Hide QR Code"
 qrcode_show = "Show QR Code"
@@ -710,18 +736,7 @@ Range = "Range"
 Range slider = "Range slider"
 Read the full review online... = "Read the full review online..."
 Recall This = "Recall This"
-recaptcha_audio_challenge = "Get an audio challenge"
-recaptcha_cant_hear_this = "Download sound as MP3"
-recaptcha_help_btn = "Help"
-recaptcha_image_alt_text = "reCAPTCHA challenge image"
-recaptcha_incorrect_try_again = "Incorrect. Try again."
-recaptcha_instructions_audio = "Type what you hear:"
-recaptcha_instructions_visual = "Type the text:"
 recaptcha_not_passed = "CAPTCHA not passed"
-recaptcha_play_again = "Play sound again"
-recaptcha_privacy_and_terms = "Privacy & Terms"
-recaptcha_refresh_btn = "Get a new challenge"
-recaptcha_visual_challenge = "Get a visual challenge"
 Record Citations = "Record Citations"
 Record Count = "Record Count"
 Recover Account = "Recover Account"
@@ -880,6 +895,7 @@ storage_retrieval_request_year = "Year"
 Subcollection = "Subcollection"
 Subject = "Subject"
 Subject Area = "Subject Area"
+Subject Geographic = "Subject Geographic"
 Subject Recommendations = "Subject Recommendations"
 Subject Terms = "Subject Terms"
 Subject(s) = "Subject(s)"
@@ -957,6 +973,7 @@ Use instead = "Use instead"
 User Account = "User Account"
 Username = "Username"
 Username cannot be blank = "Username cannot be blank"
+Username is already in use in another library card = "Username is already in use in another library card"
 VHS = "VHS"
 Video = "Video"
 Video Clips = "Video Clips"
@@ -994,6 +1011,7 @@ You do not have any fines = "You do not have any fines"
 You do not have any holds or recalls placed = "You do not have any holds or recalls placed"
 You do not have any interlibrary loan requests placed = "You do not have any interlibrary loan requests placed"
 You do not have any items checked out = "You do not have any items checked out"
+You do not have any library cards = "You do not have any library cards"
 You do not have any saved resources = "You do not have any saved resources. Perform a search and use the Add to Favorites button to save items."
 You do not have any storage retrieval requests placed = "You do not have any storage retrieval requests placed"
 You must be logged in first = "You must be logged in first"
@@ -1001,7 +1019,7 @@ Your Account = "Your Account"
 Your book bag is empty = "Your book bag is empty"
 Your Checked Out Items = "Your Checked Out Items"
 Your Comment = "Your Comment"
-Your Favorites = "Your Favorites"
+Your Favorites = "Saved Items"
 Your Fines = "Your Fines"
 Your Holds and Recalls = "Your Holds and Recalls"
 Your Lists = "Your Lists"
diff --git a/languages/es.ini b/languages/es.ini
index 722a15a8e113e177282d7197821bcd9746a91ba9..d5563bf7552665d4803d1fc5c656f10d63b503b4 100644
--- a/languages/es.ini
+++ b/languages/es.ini
@@ -12,7 +12,7 @@ Add to another list = "Agregar a otra lista"
 Add to Book Bag = "Añadir a la Mochila"
 Add to favorites = "Agregar a favoritos"
 Add your comment = "Agregar comentario"
-add_comment_fail_blank = "No puede ser blanco el comentario."
+add_comment_fail_blank = "No puede estar vacío el comentario."
 add_comment_success = "Se ha agregado el comentario."
 add_favorite_fail = "Error: registro no guardado"
 add_favorite_prefix = "Añadir"
@@ -21,8 +21,8 @@ add_list_fail = "Error: Lista no creada"
 add_other_libraries = "Incluir artículos en otra Biblioteca"
 add_search = "Agregar Campos de Búsqueda"
 add_search_group = "Agregar Grupos de Búsqueda"
-add_tag_error = "Error: Las etiquetas no se puedieron guardar "
-add_tag_note = "Los espacios separarían las etiquetas. utilice comillas para etiquetas de varias palabras."
+add_tag_error = "Error: Las etiquetas no se puedieron guardar"
+add_tag_note = "Los espacios separarían las etiquetas. Utilice comillas para etiquetas de varias palabras."
 add_tag_success = "Etiquetas Guardadas"
 Address = "Dirección"
 adv_search_all = "Todos los Campos"
@@ -32,7 +32,7 @@ adv_search_filters = "Filtros Aplicados"
 adv_search_isn = "ISBN/ISSN"
 adv_search_journaltitle = "Título de Revista"
 adv_search_label = "Buscar"
-adv_search_publisher = "Publicador"
+adv_search_publisher = "Editor"
 adv_search_select_all = "seleccionar todo"
 adv_search_series = "Series"
 adv_search_subject = "Materia"
@@ -41,7 +41,7 @@ adv_search_toc = "Tabla de Contenido"
 adv_search_year = "Año de Publicación"
 Advanced = "Avanzado"
 Advanced Search = "Búsqueda Avanzada"
-advSearchError_noRights = "Lo sentimos, no tiene permisos para editar la búsqueda. Tal vez ha expirado la sesión en su browser."
+advSearchError_noRights = "Lo sentimos, no tiene permisos para editar la búsqueda. Tal vez ha expirado la sesión en su navegador."
 advSearchError_notAdvanced = "La búsqueda solicitada para editar no es Avanzada."
 advSearchError_notFound = "No se ha encontrado la búsqueda solicitada."
 All = "Todo"
@@ -58,13 +58,13 @@ Article = "Artículo"
 Ask a Librarian = "Consulte a un Bibliotecario"
 Audience = "Público"
 Audio = "Audiom"
-authentication_error_admin = "No podemos iniciar su sesión en este momento.  Por favor contacte su Administrador del Sistema."
-authentication_error_blank = "La información para Login no pueden ser blancos."
+authentication_error_admin = "No podemos iniciar su sesión en este momento.  Por favor contacte a su Administrador del Sistema."
+authentication_error_blank = "La información para su Ingreso no pueden estar vacíos."
 authentication_error_creation_blocked = "No tiene permisos para crear una cuenta."
 authentication_error_denied = "Las Credenciales no coinciden! Acceso negado."
 authentication_error_invalid = "Ingreso inválido -- por favor intente nuevamente."
-authentication_error_loggedout = "Ha cerrado la session."
-authentication_error_technical = "No podemos ingresarlo ahora. Por favor intente más tarde."
+authentication_error_loggedout = "Ha cerrado la sesión."
+authentication_error_technical = "No podemos ingresarlo ahora. Por favor inténtelo más tarde."
 Author = "Autor"
 Author Browse = "Autor alfabético"
 Author Notes = "Notas de Autor"
@@ -85,26 +85,26 @@ Backtrace = "Rastrear"
 Bag = "Bolsa"
 Balance = "Balance"
 basic_search_keep_filters = "retener mis filtros"
-Be the first to leave a comment = "Sea el primero en dejar un comentarario"
+Be the first to leave a comment = "Sea el primero en dejar un comentario"
 Be the first to tag this record = "Sea el primero en etiquetar este registro"
-Bibliographic Details = "detalles Bibliográficos"
+Bibliographic Details = "Detalles Bibliográficos"
 Bibliography = "Bibliografía"
-Book = "libro"
+Book = "Libro"
 Book Bag = "Bolsa de libros"
-Book Chapter = "Capítulo"
-Book Cover = "portada"
-bookbag_confirm_empty = "Seguro que quiere vaciar su Mochila?"
-bookbag_delete = "Borrar Itemes seleccionados de la Mochila"
+Book Chapter = "Capítulo de libro"
+Book Cover = "Portada"
+bookbag_confirm_empty = "Está seguro que quiere vaciar su Mochila?"
+bookbag_delete = "Borrar los elementos seleccionados de la Mochila"
 bookbag_delete_selected = "Borrar Seleccionados"
-bookbag_email = "Itemes de la Mochila por Email"
-bookbag_email_selected = "Seleccionados por Email"
-bookbag_export = "Exportar Itemes Seleccionados de la Mochila"
+bookbag_email = "Elementos de la Mochila por correo electrónico"
+bookbag_email_selected = "Seleccionados por correo electrónico"
+bookbag_export = "Exportar elementos Seleccionados de la Mochila"
 bookbag_export_selected = "Exportar Seleccionados"
 bookbag_full = "Completo"
 bookbag_full_msg = "Su Mochila está Llena"
 bookbag_is_empty = "Su Mochila está Vacía"
 bookbag_print_selected = "Imprimir Seleccionados"
-bookbag_save = "Guardar Itemes seleccionados de la Mochila"
+bookbag_save = "Guardar elementos seleccionados de la Mochila"
 bookbag_save_selected = "Guardar Seleccionados"
 Bookmark = "Marcador"
 Books = "Libros"
@@ -116,7 +116,7 @@ Browse Alphabetically = "Lista Alfabética"
 Browse for Authors = "Revisar por Autor"
 Browse Home = "Página principal"
 Browse the Catalog = "Revisar el Catálogo"
-Browse the Collection = "Revisar la Colleción"
+Browse the Collection = "Revisar la Colección"
 Browse the Collection Alphabetically = "Lista Alfabética de la Colección"
 browse_author = "Autor"
 browse_dewey = "No. de Clasificación (Dewey)"
@@ -125,14 +125,14 @@ browse_lcc = "No. de Clasificación (LC)"
 browse_publishDate = "Año de Publicación"
 browse_title = "Título"
 browse_topic = "Tópico"
-bulk_email_success = "Sus Itemes han sido enviados"
-bulk_email_title = "Itemes del Catálogo de la Biblioteca"
+bulk_email_success = "Sus elementos han sido enviados"
+bulk_email_title = "Elementos del Catálogo de la Biblioteca"
 bulk_error_missing = "Algún dato falta. Su solicitud no fue exitosa"
 bulk_export_not_supported = "Los registros seleccionados no soportan exportación masiva."
 bulk_fail = "Lo sentimos, un error ha ocurrido. Por favor intentar nuevamente."
-bulk_noitems_advice = "Ninguna copia fue seleccionada.  Por favor hacer click en la casilla cercana a la copia e intentar nuevamente."
-bulk_save_error = "Algún dato falta.  Sus ítemes no fueron guardados."
-bulk_save_success = "Sus ítem han sido guardados"
+bulk_noitems_advice = "Ninguna copia fue seleccionada.  Por favor hacer clic en la casilla cercana a la copia e intentar nuevamente."
+bulk_save_error = "Algún dato falta.  Sus elementos no fueron guardados."
+bulk_save_success = "Sus elementos han sido guardados"
 By = "Por"
 by = "por"
 By Alphabetical = "Alfabético"
@@ -144,14 +144,14 @@ By Era = "Por Época"
 By Genre = "Por Genero"
 By Instructor = "Por Instructor"
 By Popularity = "Por Popularidad"
-By Recent = "Por Reciente"
+By Recent = "Por Recientes"
 By Region = "Por Región"
 By Title = "Por Título"
 By Topic = "Por Materia"
 Call Number = "Número de Clasificación"
 callnumber_abbrev = "No. Clasificación"
 Cannot find record = "Registro no encontrado"
-Cannot find similar records = "No se encontrarón registros similares"
+Cannot find similar records = "No se encontraron registros similares"
 Cassette = "Cassette"
 cat_establish_account = "A fin de establecer el perfil de su cuenta, por favor ingrese lo siguiente:"
 cat_password_abbrev = "Clave"
@@ -166,7 +166,7 @@ Check Recall = "Comprobar Solicitud"
 Checked Out = "Prestado"
 Checked Out Items = "Copias Prestadas"
 Checkedout = "Prestados"
-Chicago Citation = "Citación Chicago Style"
+Chicago Citation = "Citación estilo Chicago"
 child_record_count = "Registros %%count%%"
 child_records = "Contenido/piezas"
 Choose a Category to Begin Browsing = "Seleccionar categoría para navegar"
@@ -184,18 +184,18 @@ close = "cerrar"
 Code = "Código"
 Collection = "Colección"
 Collection Browse = "Ver por colección"
-Collection Items = "Colección de ítemes"
-collection_disambiguation = "Se han encontrado multiples concidencias de colecciones"
-collection_empty = "No hay ítemas a desplegar."
+Collection Items = "Colección de elementos"
+collection_disambiguation = "Se han encontrado múltiples coincidencias de colecciones"
+collection_empty = "No hay elementos a desplegar."
 collection_view_record = "Ver registro"
 Collections = "Colecciones"
-comment_error_load = "Error: No podemos lista comentario"
+comment_error_load = "Error: no podemos visualizar comentario"
 comment_error_save = "Error: no podemos guardar comentario"
 Comments = "Comentarios"
 Company/Entity = "Empresa/Entidad"
 Configuration = "Configuración"
 confirm_delete = "¿Seguro que desea borrar esto?"
-confirm_delete_brief = "¿Borrar ítem?"
+confirm_delete_brief = "¿Borrar elemento?"
 confirm_delete_list_brief = "¿Borrar lista?"
 confirm_delete_list_text = "¿Seguro que desea borrar esta lista?"
 confirm_delete_tags_brief = "Borrar Etiquetas"
@@ -203,7 +203,7 @@ confirm_dialog_no = "Cancelar"
 confirm_dialog_yes = "Confirmar"
 confirm_hold_cancel_all_text = "¿Desea cancelar todas sus reservas?"
 confirm_hold_cancel_selected_text = "¿Desea cancelar sus reservas seleccionadas?"
-confirm_ill_request_cancel_all_text = "¿Desea cancelar todas sus solicitudes de préstamo interbibliotecario actuales?"
+confirm_ill_request_cancel_all_text = "¿Desea cancelar todas sus solicitudes actuales de préstamo interbibliotecario?"
 confirm_ill_request_cancel_selected_text = "¿Desea cancelar sus solicitudes de préstamo interbibliotecario seleccionadas?"
 confirm_new_password = "Confirmar Nueva Contraseña"
 confirm_storage_retrieval_request_cancel_all_text = "¿Desea cancelar todas sus solicitudes de recuperación de almacenamiento actuales?"
@@ -218,7 +218,7 @@ Country = "País"
 Course = "Curso"
 Course Reserves = "Reservas de Curso"
 course_reserves_empty_list = "No coinciden reservas de cursos."
-Cover Image = "Imágen de Portada"
+Cover Image = "Imagen de Portada"
 Create a List = "Crear una Lista"
 Create New Account = "Crear Nueva Cuenta"
 Create New Password = "Crear Nueva Contraseña"
@@ -241,8 +241,8 @@ delete_list = "Borrar Lista"
 delete_page = "Borrar Página"
 delete_selected = "Borrar Seleccionados"
 delete_selected_favorites = "Borrar Favoritos Seleccionados"
-delete_tags = "Borar Etiquetas"
-delete_tags_by = "Borrar Etiquetas Por"
+delete_tags = "Borrar Etiquetas"
+delete_tags_by = "Borrar Etiquetas por"
 Department = "Departamento"
 Description = "Descripción"
 Desired Username = "Nombre de usuario deseado"
@@ -278,16 +278,16 @@ eds_modes_and_expanders = "Modos de búsqueda y expansores"
 Electronic = "Electrónico"
 Email = "Correo Electrónico"
 Email Address = "Dirección de Correo Electrónico"
-Email address is invalid = "Dirección de Correo no es válida"
-Email Record = "Enviar Registro por Correo"
-Email this = "Enviar este por Correo"
-Email this Search = "Enviar por Correo ésta Búsqueda"
+Email address is invalid = "Dirección de Correo electrónico no es válida"
+Email Record = "Enviar Registro por Correo electrónico"
+Email this = "Enviar este por Correo electrónico"
+Email this Search = "Enviar por Correo electrónico esta Búsqueda"
 email_failure = "Error - El mensaje no puede ser enviado"
 email_link = "Liga"
-email_maximum_recipients_note = "A lo sumo %%max%% destinatarios son permitidos"
+email_maximum_recipients_note = "A lo sumo %%max%% destinatarios están permitidos"
 email_multiple_recipients_note = "Puede especificar varios destinatarios separados por comas"
-email_selected = "Enviar por Email lo Seleccionado"
-email_selected_favorites = "Enviar por Email los favoritos selccionados"
+email_selected = "Enviar por correo electrónico lo seleccionado"
+email_selected_favorites = "Enviar por correo electrónico los favoritos seleccionados"
 email_sending = "Enviando Mensaje..."
 email_subject = "Materia"
 email_success = "Mensaje Enviado"
@@ -305,17 +305,17 @@ exclude_newspapers = "Excluir artículos de periódicos"
 Expires = "Expira"
 Export = "Exportar"
 Export Favorites = "Exportar Favoritos"
-Export Items = "Exportar ítemes"
+Export Items = "Exportar elementos"
 Export Record = "Exportar Registro"
 Export to = "Exportar a "
-export_choose_format = "Selecionar formato de exportación."
+export_choose_format = "Seleccionar formato de exportación."
 export_download = "Descargar Archivo"
 export_exporting = "Creando Archivo de Exportación"
-export_fail = "Sus ítemes no fueron exportados."
+export_fail = "Sus elementos no fueron exportados."
 export_invalid_format = "Formato de exportación no válido."
-export_missing = "Algún dato falta. Sus itemes no fueron exportados"
+export_missing = "Algún dato falta. Sus elementos no fueron exportados"
 export_no_formats = "Este registro no soporta exportación."
-export_redirect = "Iniciar exportacióna a %%service%%"
+export_redirect = "Iniciar exportación a %%service%%"
 export_refworks = "Exportar a RefWorks"
 export_save = "Guardar Archivo"
 export_selected = "Exportar los Seleccionados"
@@ -325,13 +325,13 @@ export_unsupported_format = "Formato de Exportación no soportado."
 FAQs = "Preguntas Frecuentes"
 fav_delete = "Borrar Favoritos Seleccionados"
 fav_delete_deleting = "Sus favoritos están siendo eliminados."
-fav_delete_fail = "Lo sentimos, un error ha ocurrido. Sus favoritos no fueron borrados."
+fav_delete_fail = "Lo sentimos, un error ha ocurrido. Sus favoritos no fueron eliminados."
 fav_delete_missing = "Faltaron algunos datos. Sus favoritos no fueron eliminados."
 fav_delete_success = "Sus favoritos fueron eliminados."
 fav_delete_warn = "Está por borrar los favoritos de todas sus listas – Si desea borrar solo los favoritos de una lista específica, por favor seleccione la lista antes de marcar borrar."
-fav_email_fail = "Lo sentimos, un error ha ocurrido. Sus favoritos no fueron enviados por email."
-fav_email_missing = "Faltaron algunos datos. Sus favoritos no fueron enviados por email."
-fav_email_success = "Sus favoritos fueron enviados por email conforme a lo solicitado."
+fav_email_fail = "Lo sentimos, un error ha ocurrido. Sus favoritos no fueron enviados por correo electrónico."
+fav_email_missing = "Faltaron algunos datos. Sus favoritos no fueron enviados por correo electrónico."
+fav_email_success = "Sus favoritos fueron enviados por correo electrónico conforme a lo solicitado."
 fav_export = "Exportar favoritos"
 fav_list_delete = "Su lista favorita ha sido borrada"
 fav_list_delete_cancel = "Esta lista no fue borrada"
@@ -346,14 +346,14 @@ filter_tags = "Filtro de Etiquetas"
 filter_wildcard = "Cualquier"
 Find = "Buscar"
 Find More = "Buscar Más"
-Find New Items = "buscar Nuevos Ejemplares"
-Finding Aid = "Encontar Ayuda"
+Find New Items = "Buscar Nuevos Ejemplares"
+Finding Aid = "Encontrar Ayuda"
 Fine = "Multa"
 fine_limit_patron = "Ha llegado al límite de multas, no puede renovar"
 Fines = "Multas"
 First = "Primero"
 First Name = "Nombre"
-fix_metadata = "Si, fijar metadato; Voy a esperar"
+fix_metadata = "Si, fijar metadato; voy a esperar"
 for search = "Para Buscar"
 Forgot Password = "Ha olvidado su contraseña"
 Form Submitted! = "Formulario Enviado!"
@@ -364,20 +364,20 @@ Full description = "Descripción completa"
 Full text is not displayed to guests = "El texto completo no se muestra a los invitados"
 fulltext_limit = "Limitar a artículos con texto completo disponible"
 Genre = "Género"
-Geographic Terms = "Términos Geofráficos"
+Geographic Terms = "Términos Geográficos"
 Geography = "Geografía"
-Get full text = "Enlace recurso"
+Get full text = "Enlace del recurso"
 Get RSS Feed = "RSS"
 Globe = "Global"
 Go = "ir"
 Go to Standard View = "ir a Vista Normal"
 google_map_cluster = "Grupo"
-google_map_cluster_points = "Pustos de agrupamiento"
+google_map_cluster_points = "Puntos de agrupamiento"
 Grid = "Cuadrícula"
 Group = "Grupo"
 group_AND = "Todos los Grupos"
 group_OR = "Ningún Grupo"
-Has Illustrations = "Tiene Ilustraciones"
+Has Illustrations = "Tiene ilustraciones"
 Help = "Ayuda"
 Help with Advanced Search = "Ayuda Búsqueda Avanzada"
 Help with Search Operators = "Ayuda Operadores de Búsqueda"
@@ -390,9 +390,9 @@ hierarchy_view_context = "Ver contexto"
 History = "Historia"
 history_delete = "Borrar"
 history_delete_link = "Borrar"
-history_empty_search = "Nada (Búsqueda vacia)"
-history_limits = "Limites"
-history_no_searches = "No hay búsqueadas registradas en su historia."
+history_empty_search = "Nada (Búsqueda vacía)"
+history_limits = "Límites"
+history_no_searches = "No hay búsquedas registradas en su historial."
 history_purge = "Purgar mis búsquedas no guardadas"
 history_recent_searches = "Sus búsquedas recientes"
 history_results = "Resultados"
@@ -408,19 +408,19 @@ hold_cancel_fail = "Su solicitud no ha sido cancelada, por favor contactar con e
 hold_cancel_selected = "Cancelar reservas seleccionadas"
 hold_cancel_success = "Su solicitud ha sido cancelada"
 hold_cancel_success_items = "Su solicitud fue cancelada"
-hold_date_invalid = "Introduzca una fecha valida"
+hold_date_invalid = "Introduzca una fecha válida"
 hold_date_past = "Introduzca una fecha futura"
 hold_empty_selection = "ninguna reserva fue seleccionada"
-hold_error_blocked = "No cuenta con privilegios para reservar el ítem"
+hold_error_blocked = "No cuenta con privilegios para reservar el elemento"
 hold_error_fail = "Su solicitud ha fallado. Contacte con el personal del mostrador para ayuda"
 hold_invalid_pickup = "Ubicación inválida, intente de nuevo."
 hold_invalid_request_group = "Grupo de solicitud de reserva inválido. Por favor, intentar de nuevo"
 hold_login = "Para información de reservas y retiradas"
 hold_place = "Hacer solicitud"
 hold_place_fail_missing = "Su solicitud  ha fallado, contactar al personal del mostrador de circulación"
-hold_place_success_html = "Se ha realizado su solicitud. <a href="%%url%%">Sus reservas y reclamaciones</a>."
+hold_place_success_html = "Se ha realizado su solicitud. <a href="%%url%%">Sus reservas y reclamos</a>."
 hold_profile_html = "Para información de reservas y apartados, por favor establecer su <a href="%%url%%">Perfil del Catálogo de Biblioteca</a>."
-hold_queue_position = "Cola"
+hold_queue_position = "En Cola"
 hold_request_group = "Solicitud del"
 hold_requested_group = "Solicitado a"
 hold_required_by = "Ya no es necesario después de"
@@ -447,25 +447,25 @@ ill_request_comments = "Comentarios"
 ill_request_date_invalid = "Introduzca una fecha valida"
 ill_request_date_past = "Introduzca una fecha futura"
 ill_request_empty_selection = "Solicitudes de préstamo interbibliotecario no seleccionadas"
-ill_request_error_blocked = "No tiene suficientes privilegios para realizar solicitud de préstamo interbibliotecario para este Item"
+ill_request_error_blocked = "No tiene suficientes privilegios para realizar solicitud de préstamo interbibliotecario para este elemento"
 ill_request_error_fail = "Su solicitud ha fallado. Contacte con el personal del mostrador para ayuda"
 ill_request_error_technical = "La solicitud ha fallado debido a un error del sistema. Por favor, póngase en contacto con el mostrador de circulación para obtener más ayuda"
-ill_request_error_unknown_patron_source = "Usuario no identifiado en la solicitud de préstamo interbibliotecario"
+ill_request_error_unknown_patron_source = "Usuario no identificado en la solicitud de préstamo interbibliotecario"
 ill_request_in_transit = "En Tránsito para recoger en la biblioteca"
 ill_request_invalid_pickup = "Ubicación inválida, intente de nuevo."
 ill_request_pick_up_library = "Recoger en Biblioteca"
 ill_request_pick_up_location = "Recoger en Ubicación"
-ill_request_place_fail_missing = "Su solicitud  ha fallado, contactar al personal del mostrador de circulación"
+ill_request_place_fail_missing = "Su solicitud ha fallado, contactar al personal del mostrador de circulación"
 ill_request_place_success = "Se ha realizado su solicitud"
 ill_request_place_text = "Solicitar Préstamo Interbibliotecario"
 ill_request_processed = "Procesado"
 ill_request_profile_html = "Para información de solicitud de préstamo interbibliotecario, por favor establecer su <a href="%%url%%">Perfil del Catálogo de la biblioteca</a>"
 ill_request_submit_text = "Lugar de Solicitud"
 Illustrated = "Ilustrado"
-ils_offline_holdings_message = "En este momento no hay información de existencias y disponibilidad de copias. Por favor acepte nuestras disculpas por las inconveniencias causadas, contáctenos para mayor información."
-ils_offline_home_message = "El detalle de su cuenta e información de sus ítemes podrían no estar disponibles en este momento. Por favor acepte nuestras disculpas por las inconveniencias causadas, contáctenos para mayor información."
-ils_offline_login_message = "El detalle de su cuenta podría no estar disponible en este momento. Por favor acepte nuestras disculpas por las inconveniencias causadas, contáctenos para mayor información."
-ils_offline_status = "Nuestro Sistema de la Biblioteca se encuentra en mantenimiento."
+ils_offline_holdings_message = "En este momento no hay información de existencias y disponibilidad de copias. Por favor acepte nuestras disculpas por los inconvenientes causados, contáctenos para una mayor información."
+ils_offline_home_message = "El detalle de su cuenta e información de sus elementos podrían no estar disponibles en este momento. Por favor acepte nuestras disculpas por los inconvenientes causados, contáctenos para una mayor información."
+ils_offline_login_message = "El detalle de su cuenta podría no estar disponible en este momento. Por favor acepte nuestras disculpas por los inconvenientes causados, contáctenos para una mayor información."
+ils_offline_status = "Nuestro Sistema de Biblioteca se encuentra en mantenimiento."
 ils_offline_title = "Sistema en mantenimiento"
 Import Record = "Registro Importado"
 Import to = "Importar a "
@@ -476,26 +476,26 @@ include_synonyms = "Expandir resultados usando sinónimos"
 Indexes = "Indexados"
 information = "Información"
 Institution = "Institución"
-Institutional Login = "Login Institucional"
+Institutional Login = "Ingreso de sesión Institucional"
 institutional_login_desc = "Ingresar nombre de usuario del campus y contraseña."
 Instructor = "Instructor"
 Interlibrary Loan Requests = "Solicitudes de Préstamo Interbibliotecario"
 Internet = "Internet"
-Invalid Patron Login = "Login de Usuario Inválido"
+Invalid Patron Login = "Inicio de sesión de Usuario Inválido"
 Invalid phone number. = "Teléfono inválido."
-Invalid Recipient Email Address = "Dirección de correo del receptor inválida"
-Invalid Sender Email Address = "Dirección de Correo del despachador inválida"
+Invalid Recipient Email Address = "Dirección de correo electrónico del receptor inválido"
+Invalid Sender Email Address = "Dirección de Correo electrónico del despachante inválido"
 ISBN = "ISBN"
 ISBN/ISSN = "ISBN/ISSN"
 ISSN = "ISSN"
 Issue = "Número"
 Item Description = "descripción de la copia"
-Item removed from favorites = "Item eliminado de favoritos"
-Item removed from list = "Item eliminado de la lista"
-Items = "Itemes"
-items = "itemes"
-items_added_to_bookbag = "Itemes agregados a su Mochila"
-items_already_in_bookbag = "ítemes están en su Mochila o podrían no estar añadidos."
+Item removed from favorites = "Elemento eliminado de favoritos"
+Item removed from list = "Elemento eliminado de la lista"
+Items = "Elementos"
+items = "elementos"
+items_added_to_bookbag = "Elementos agregados a su Mochila"
+items_already_in_bookbag = "Elementos están en su Mochila o podrían no estar añadidos."
 Journal = "Revista"
 Journal Articles = "Artículos de Revistas"
 Journal Title = "Título de Revista"
@@ -517,8 +517,8 @@ Library Catalog Record = "Registro del Catálogo de la Biblioteca"
 Library Catalog Search = "Búsqueda en el catálogo"
 Library Catalog Search Result = "Resultados de Búsqueda del Catálogo"
 Library Catalog Username = "Nombre de usuario del Catálog"
-Library Web Search = "Búsqueda Web de la Biblioteca"
-lightbox_error = "Error: No se puede cargar cajón de Popup"
+Library Web Search = "Búsqueda en internet de la Biblioteca"
+lightbox_error = "Error: No se puede cargar el cuadro de diálogo emergente"
 Limit To = "Limitar"
 List = "Lista"
 List Tags = "Lista de Etiquetas"
@@ -551,7 +551,7 @@ Message From Sender = "Mensaje del Remitente"
 Metadata Prefix = "Prefijo de metadatos"
 Microfilm = "Microfilme"
 MLA Citation = "Cita MLA"
-mobile_link = "Parece estar en un dispositivo móvil; cambiar a a vista de móvil?"
+mobile_link = "Parece estar en un dispositivo móvil; cambiar a vista de móvil?"
 Monograph Title = "Título de Monografía"
 more = "más"
 More catalog results = "Más resultados"
@@ -571,7 +571,7 @@ My Profile = "Mi Perfil"
 Narrow Search = "Resultados Agrupados"
 navigate_back = "Atrás"
 Need Help? = "¿Necesita Ayuda?"
-New Item Feed = "Nuevo Item Agregado"
+New Item Feed = "Nuevo elemento agregado"
 New Item Search = "Nuevo ejemplar encontrado"
 New Item Search Results = "Resultado de Búsqueda de Nuevo ejemplar"
 New Items = "Nuevos ejemplares"
@@ -582,23 +582,23 @@ Newspaper = "Periódico"
 Next = "Siguiente"
 No citations are available for this record = "No hay citas disponibles para este registro"
 No Cover Image = "Sin imagen de la cubierta"
-No dependency problems found = "No se encontararon problemas de dependencias"
+No dependency problems found = "No se encontraron problemas de dependencias"
 No excerpts were found for this record. = "No se encontraron extractos para este registro."
 No library account = "No hay cuenta en la Biblioteca"
 No new item information is currently available. = "No hay información disponible de nuevas copias."
 No Preference = "Sin Preferencia"
-No reviews were found for this record = "No se encontaron criticas para este registro"
+No reviews were found for this record = "No se encontraron críticas para este registro"
 No Tags = "Sin Etiquetas"
 no_description = "Descripción no disponible."
-no_items_selected = "No se han seleccionado ítemes"
+no_items_selected = "No se han seleccionado elementos"
 nohit_filters = "Filtros aplicados a esta búsqueda"
 nohit_heading = "¡Sin Resultados!"
 nohit_no_filters = "Ningún filtro fue aplicado a esta búsqueda."
-nohit_parse_error = "Parece que hay un problema con su consulta.  Por favor revise la sintaxis de su consulta.  Si no está intentando con búsquedas avanzadas, utilice doble comilla."
+nohit_parse_error = "Parece que hay un problema con su consulta.  Por favor revise la sintaxis de su consulta. Si no está intentando con búsquedas avanzadas, utilice doble comilla."
 nohit_prefix = "Su búsqueda"
 nohit_spelling = "Tal vez debería intentar con algunas variantes ortográficas"
 nohit_suffix = "No coincide ningún recurso."
-nohit_suggest = "Devería intentar revisar su frase de búsqueda quitando algunas palabras o revise su ortografía."
+nohit_suggest = "Debería intentar revisar su frase de búsqueda eliminando algunas palabras o revise su ortografía."
 NOT = "NO"
 Not Illustrated = "Sin Ilustraciones"
 Not On Reserve = "No en Reserva"
@@ -621,7 +621,7 @@ note_780_2 = "Sustituye"
 note_780_3 = "Sustituye en parte"
 note_780_4 = "Formado por"
 note_780_5 = "Absorbido"
-note_780_6 = "Obsorbido en parte"
+note_780_6 = "Absorbido en parte"
 note_780_7 = "Separado de"
 note_785_0 = "Continuado por"
 note_785_1 = "Continuado en parte por"
@@ -642,7 +642,7 @@ old_password = "Contraseña anterior"
 On Reserve = "En Reserva"
 On Reserve - Ask at Circulation Desk = "En Reserva - consulte en el mostrador de circulación"
 on_reserve = "Reservas - Pregunte en Circulación"
-on_topic = "Itemes %%count%% en este tema"
+on_topic = "Elementos %%count%% en este tema"
 Online Access = "Acceso en línea"
 online_resources = "Texto Completo"
 operator_contains = "Contiene"
@@ -656,7 +656,7 @@ Other Libraries = "Otras Bibliotecas"
 Other Sources = "Otras Fuentes"
 Page not found. = "Página no encontrada"
 Password = "Contraseña"
-Password Again = "Contraseña Nuevamente"
+Password Again = "Nuevamente contraseña"
 Password cannot be blank = "La contraseña no puede quedar en blanco"
 password_error_not_unique = "La contraseña no se ha cambiado"
 password_maximum_length = "Longitud máxima de la contraeña son %%maxlength%% caracteres"
@@ -665,101 +665,90 @@ Passwords do not match = "La Contraseña no coincide"
 Past = "Pasado"
 PDF Full Text = "Texto Completo PDF"
 peer_reviewed = "Revisado por Pares"
-peer_reviewed_limit = "Limitar a árticulos de revistas revisadas"
+peer_reviewed_limit = "Limitar a articulos de revistas revisadas"
 Phone Number = "Número de Teléfono"
 Photo = "Fotografía"
-Physical Description = "Descrición Física"
+Physical Description = "Descripción Física"
 Physical Object = "Objeto Físico"
 pick_up_location = "Ubicación de entrega"
 Place a Hold = "Hacer reserva"
 Playing Time = "Tiempo de Juego"
-Please check back soon = "Por favor, Vuelva Pronto"
+Please check back soon = "Por favor, vuelva pronto"
 Please contact the Library Reference Department for assistance = "Por favor contacte al Referencista para asistencia"
-Please enable JavaScript. = "Por favor activar JavaScript!"
-Please upgrade your browser. = "Por favor, actualizar explorador"
+Please enable JavaScript. = "Por favor, activar JavaScript!"
+Please upgrade your browser. = "Por favor, actualizar navegador de internet"
 Posted by = "Publicado por"
 posted_on = "en"
 Preferences = "Preferencias"
-Preferred Library = "Biblioteca preferente"
+Preferred Library = "Biblioteca principal"
 Prev = "Anterior"
 Preview = "Vista preliminar"
 Preview from = "Vista preliminar de"
-Previous Title = "Título Anterior"
+Previous Title = "Título anterior"
 Print = "Imprimir"
-print_selected = "Imprimir los Seleccionados"
+print_selected = "Imprimir los seleccionados"
 Private = "Privado"
 Production Credits = "Créditos de Producción"
 Profile = "Perfil"
 profile_update = "Se ha actualizado conforme a lo solicitado"
-pronounced = "Pronunciado"
+pronounced = "pronunciado"
 Provider = "Proveedor"
 Public = "Público"
 Publication = "Publicación"
 Publication Frequency = "Frecuencia de Publicación"
 Publication Information = "Información de Publicación"
-Publication Type = "Tipo de Publicación"
-Publication_Place = "Lugar de Publicación"
+Publication Type = "Tipo de publicación"
+Publication_Place = "Lugar de publicación"
 Published = "Publicado"
 Published in = "Publicado en"
-Publisher = "Publicador"
+Publisher = "Editor"
 QR Code = "Código QR"
 qrcode_hide = "Ocultar Código QR"
 qrcode_show = "Mostrar Código QR"
 query time = "tiempo de consulta"
-random_recommendation_title = "Itemes al azar de los resultados"
+random_recommendation_title = "Elementos al azar de los resultados"
 Range = "Rango"
-Range slider = "Rango de Deslizamiento"
-Read the full review online... = "Leer en línea la revista completa"
-Recall This = "Retirar este"
-recaptcha_audio_challenge = "Obtener una pista sonora"
-recaptcha_cant_hear_this = "Descargar el sonido en MP3"
-recaptcha_help_btn = "Ayuda"
-recaptcha_image_alt_text = "Pista de imagen reCAPTCHA"
-recaptcha_incorrect_try_again = "Incorrecto. Vuélvelo a intentar."
-recaptcha_instructions_audio = "Escribe lo que oigas:"
-recaptcha_instructions_visual = "Introduzca el texto:"
-recaptcha_not_passed = "CAPTCHA no pasó"
-recaptcha_play_again = "Volver a reproducir el sonido"
-recaptcha_privacy_and_terms = "Privacidad y condiciones"
-recaptcha_refresh_btn = "Obtener una pista nueva"
-recaptcha_visual_challenge = "Obtener una pista visual"
+Range slider = "Rango de deslizamiento"
+Read the full review online... = "Leer en línea la crítica completa..."
+Recall This = "Recordar esto"
+recaptcha_not_passed = "CAPTCHA inválida"
 Record Citations = "Registro de Citas"
-Record Count = "Contéo de registro"
-Recover Account = "Recuparar Cuenta"
-recovery_by_email = "Recuperar por email"
+Record Count = "Conteo de registro"
+Recover Account = "Recuperar cuenta"
+recovery_by_email = "Recuperar por correo electrónico"
 recovery_by_username = "Recuperar por nombre de usuario"
 recovery_disabled = "Recuperación de contraseña no habilitada"
 recovery_email_notification = "Se ha solicitado recuperación de contraseña para su cuenta con %%library%%."
-recovery_email_sent = "Instrucciones de recuperación contraseña han sido enviadas a la dirección de correo electrónico registrada con esta cuenta"
-recovery_email_subject = "Recuepeación de Cuenta VuFind"
-recovery_email_url_pretext = "En este url podrá establecer una nueva contraseña: %%url%%"
-recovery_expired_hash = "Este enlace recuperación ha expirado"
+recovery_email_sent = "Instrucciones de recuperación de contraseña han sido enviadas a la dirección de correo electrónico asociada con esta cuenta"
+recovery_email_subject = "Recuperación de cuenta VuFind"
+recovery_email_url_pretext = "En esta dirección URL podrá establecer una nueva contraseña: %%url%%"
+recovery_expired_hash = "Este enlace de recuperación ha expirado"
 recovery_invalid_hash = "Enlace de recuperación no reconocido"
-recovery_new_disabled = "No se le permite cambiar su contraseña en este momento"
+recovery_new_disabled = "Está impedido de cambiar su contraseña en este momento"
 recovery_title = "Contraseña recuperada"
-recovery_too_soon = "Se han realizado Demasiadas solicitudes de recuperación, por favor intente de nuevo más tarde"
+recovery_too_soon = "Se han realizado demasiadas solicitudes de recuperación, por favor inténtelo más tarde"
 recovery_user_not_found = "No hemos podido encontrar su cuenta"
 Refine Results = "Limitar resultados"
 Region = "Región"
 Related Author = "Autor relacionado"
-Related Items = "Ejemplares relacionadas"
-Related Subjects = "Materias Relacionados"
+Related Items = "Ejemplares relacionados"
+Related Subjects = "Materias Relacionadas"
 Remove Filters = "Quitar Filtros"
 Remove from Book Bag = "Eliminar de la Mochila"
-renew_all = "Renovar todos los ítemes"
-renew_determine_fail = "No podemos determinar si el ítem puede ser renovado, contactar a un miembro staff"
-renew_empty_selection = "Ningún ítem seleccionado"
-renew_error = "No podemos renovar los ítemes – Contactar a un miembro staff"
-renew_fail = "Este ítem no puede ser renovado"
-renew_item = "Renovar ítem"
+renew_all = "Renovar todos los elementos"
+renew_determine_fail = "No podemos determinar si el elemento puede ser renovado, contactar con un miembro del equipo"
+renew_empty_selection = "Ningún elemento seleccionado"
+renew_error = "No podemos renovar los elementos – Contactar con un miembro del equipo"
+renew_fail = "Este elemento no puede ser renovado"
+renew_item = "Renovar elemento"
 renew_item_due = "Vence en 24 horas"
-renew_item_limit = "Ha alcanzado el máximo de renovaciones para este ítem"
-renew_item_no = "Este ítem no puede ser renovado"
+renew_item_limit = "Ha alcanzado el máximo de renovaciones para este elemento"
+renew_item_no = "Este elemento no puede ser renovado"
 renew_item_overdue = "Vencimientos"
-renew_item_requested = "Este ítem ha sido solicitado por otro usuario"
-renew_select_box = "Renovar ítem"
-renew_selected = "Renovar ítemes selecionados"
-renew_success = "Renovación realizada"
+renew_item_requested = "Este elemento ha sido solicitado por otro usuario"
+renew_select_box = "Renovar elemento"
+renew_selected = "Renovar elementos seleccionados"
+renew_success = "Renovación realizada exitosamente"
 Renewed = "Renovado"
 Request full text = "Solicitar texto completo"
 request_place_text = "Poner solicitud"
@@ -773,60 +762,60 @@ results = "Resultados"
 Results for = "Resultados para"
 Results per page = "resultados por página"
 Resumption Token = "Reanudación de muestra"
-Review by = "Revisar por"
-Reviews = "Criticas"
+Review by = "Reseña de"
+Reviews = "Críticas"
 Save = "Guardar"
-Save Comment = "Guardar Comentario"
+Save Comment = "Guardar comentario"
 save_search = "Guardar Búsqueda"
-save_search_remove = "Borrar Búsquedas Guardadas"
+save_search_remove = "Borrar Búsquedas guardadas"
 Saved in = "Guardado en"
 scholarly_limit = "Limitar los artículos por campo académico"
 Scroll to Load More = "Deslizar para ver más"
 Search = "Buscar"
-Search For = "Buscar Por"
+Search For = "Buscar por"
 Search For Items on Reserve = "Buscar ejemplares en Reserva"
-Search History = "Historia de Búsqueda"
-Search Home = "Inicio de Búsqueda"
+Search History = "Historial de Búsqueda"
+Search Home = "Inicio de búsqueda"
 Search Mode = "Modo de Búsqueda"
-Search Options = "Opciones de Búsqueda"
-Search Results = "Resultados de Búsqueda"
+Search Options = "Opciones de búsqueda"
+Search Results = "Resultados de búsqueda"
 search results of = "Resultados de búsqueda de"
-Search Tips = "Consejos de Búsqueda"
-Search Tools = "Herramientas de Búsqueda"
+Search Tips = "Consejos de búsqueda"
+Search Tools = "Herramientas de búsqueda"
 Search Type = "Tipo de búsqueda"
 search_AND = "Todos los Términos"
 search_groups = "Grupo de Búsqueda"
 search_match = "Coincide"
-search_NOT = "Sin Términos"
-search_OR = "Cualquier Término"
-search_save_success = "Búsqueda guardada con éxito"
+search_NOT = "Sin términos"
+search_OR = "Cualquier término"
+search_save_success = "Búsqueda guardada exitosamente"
 search_unsave_success = "Búsqueda guardada ha sido eliminada con éxito"
 seconds_abbrev = "s"
 see all = "ver todos"
 See also = "Ver también"
 Select this record = "Seleccione este registro"
 Select your carrier = "Seleccione su compañía"
-select_page = "Seleccione Página"
-select_pickup_location = "Seleccionar Ubicación dónde recoger"
+select_page = "Seleccione página"
+select_pickup_location = "Seleccionar ubicación dónde recoger"
 select_request_group = "Seleccionar Grupo de Solicitud"
 Selected = "Seleccionado"
 Send = "Enviar"
 Send us your feedback! = "Envíenos sus comentarios!"
-send_an_email_copy = "Enviar una copia a esta dirección"
-send_email_copy_to_me = "Enviar una copia a mí"
-Sensor Image = "Sensor de Imagen"
+send_an_email_copy = "Enviar una copia a esta dirección de correo electrónico"
+send_email_copy_to_me = "Enviarme una copia vía correo electrónico"
+Sensor Image = "Sensor de imagen"
 Serial = "Seriadas"
 Series = "Series"
 Set = "Ingresar"
 Showing = "Mostrando"
-Similar Items = "Ejemplares Similares"
+Similar Items = "Ejemplares similares"
 Skip to content = "Saltar al contenido"
 skip_confirm = "Seguro que quiere omitir este paso"
 skip_fix_metadata = "No fijar metadatos en este momento."
 skip_step = "Omitir este paso"
 Slide = "Deslizar"
 sms_failure = "¡Error!  No se puede enviar mensaje."
-sms_phone_number = "No. de Teléfono de 10-Digitos"
+sms_phone_number = "Número de teléfono de 10-dígitos"
 sms_sending = "Enviando mensaje..."
 sms_success = "Mensaje enviado."
 Software = "Software"
@@ -835,15 +824,15 @@ Sort = "Ordenar"
 sort_author = "Autor"
 sort_author_author = "Alfabético"
 sort_author_relevance = "Popularidad"
-sort_callnumber = "No. de Clasificación"
+sort_callnumber = "Número de clasificación"
 sort_relevance = "Relevancia"
 sort_title = "Título"
 sort_year = "Fecha Descendente"
-sort_year asc = "fecha Ascendente"
+sort_year asc = "Fecha Ascendente"
 Source = "Fuente"
-spell_expand_alt = "Expander Búqueda"
+spell_expand_alt = "Expander búsqueda"
 spell_suggest = "Buscar alternativas"
-Staff View = "Vista Staff"
+Staff View = "Vista Equipo"
 Start a new Advanced Search = "Iniciar nueva Búsqueda Avanzada"
 Start a new Basic Search = "Iniciar nueva Búsqueda Básica"
 Start Page = "Página de inicio"
@@ -859,29 +848,29 @@ storage_retrieval_request_cancel_selected = "Cancelar las solicitudes de recuper
 storage_retrieval_request_cancel_success = "Su solicitud ha sido cancelada"
 storage_retrieval_request_cancel_success_items = "Su solicitud fue cancelada"
 storage_retrieval_request_canceled = "Cancelado"
-storage_retrieval_request_check_text = "Comprobar Solicitud de Recuperación de Alamacenamiento"
+storage_retrieval_request_check_text = "Comprobar solicitud de Recuperación de Almacenamiento"
 storage_retrieval_request_comments = "Comentarios"
-storage_retrieval_request_date_invalid = "Introduzca una fecha valida"
+storage_retrieval_request_date_invalid = "Introduzca una fecha válida"
 storage_retrieval_request_date_past = "Introduzca una fecha futura"
 storage_retrieval_request_empty_selection = "No se seleccionaron solicitudes de recuperación de almacenamiento"
-storage_retrieval_request_error_blocked = "No tiene suficientes privilegios para hacer una solicitud de recuperación de almacenamiento de este Item"
+storage_retrieval_request_error_blocked = "No tiene suficientes privilegios para hacer una solicitud de recuperación de almacenamiento de este elemento"
 storage_retrieval_request_error_fail = "Su solicitud ha fallado. Contacte con el personal del mostrador para ayuda"
 storage_retrieval_request_invalid_pickup = "Ubicación inválida, intente de nuevo."
 storage_retrieval_request_issue = "Fecha"
-storage_retrieval_request_place_fail_missing = "Su solicitud  ha fallado, contactar al personal del mostrador de circulación"
+storage_retrieval_request_place_fail_missing = "Su solicitud ha fallado, contactar al personal del mostrador de circulación"
 storage_retrieval_request_place_success = "Se ha realizado su solicitud"
 storage_retrieval_request_place_text = "Coloque una solicitud de recuperación de almacenamiento"
 storage_retrieval_request_processed = "Procesado"
 storage_retrieval_request_profile_html = "Para solicitar información de recuperación de almacenamiento, por favor establecer su <a href="%%url%%"> Perfil del Catálogo de la biblioteca</a>."
-storage_retrieval_request_reference = "Referecia"
-storage_retrieval_request_selected_item = "Item seleccionado"
-storage_retrieval_request_submit_text = "Hacer solicitud"
+storage_retrieval_request_reference = "Referencia"
+storage_retrieval_request_selected_item = "Elemento seleccionado"
+storage_retrieval_request_submit_text = "Elevar solicitud"
 storage_retrieval_request_volume = "Volumen"
 storage_retrieval_request_year = "Año"
 Subcollection = "Subcolección"
 Subject = "Materia"
 Subject Area = "Areas Temáticas"
-Subject Recommendations = "Temas Recomendados"
+Subject Recommendations = "Temas recomendados"
 Subject Terms = "Términos de Temas"
 Subject(s) = "Tema(s)"
 Subjects = "Materias"
@@ -900,14 +889,14 @@ switchquery_truncatechar = "Acorte su búsqueda para ampliar sus resultados"
 switchquery_unwantedbools = "Las palabras AND, OR y NOT pueden confundir la búsqueda; intente con comillas"
 switchquery_unwantedquotes = "Eliminando comillas puede permitir una búsqueda más amplia"
 switchquery_wildcard = "Agregando un comodín puede recuperar variantes de palabras"
-System Unavailable = "Sistema no Disponible"
+System Unavailable = "Sistema no disponible"
 Table of Contents = "Tabla de Contenidos"
-Table of Contents unavailable = "Tabla de Contenido no disponible"
+Table of Contents unavailable = "Tabla de Contenidos no disponible"
 Tag = "Etiqueta"
 Tag Management = "Administrador de Etiquetas"
 tag_delete_filter = "Está utilizando el siguiente filtro - Usuario: %username%, Etiqueta: %tag%, Recurso: %resource%"
 tag_delete_warning = "¡Precaución! Está a punto de borrar %count% de etiqueta(s)"
-tag_filter_empty = "No hay etiquetas disponibles para éste filtro"
+tag_filter_empty = "No hay etiquetas disponibles para este filtro"
 Tags = "Etiquetas"
 tags_deleted = "%count% de etiqueta(s) eliminadas"
 test_fail = "Fallido"
@@ -915,11 +904,11 @@ test_fix = "Arreglar"
 test_ok = "Bien"
 Text this = "Describir"
 Thank you for your feedback. = "Gracias por sus comentarios."
-That email address is already used = "Esta dirección de correo ya está utilizada"
+That email address is already used = "Esta dirección de correo electrónico ya está utilizada"
 That username is already taken = "El nombre de usuario ya está utilizado por otra persona"
 The record you selected is not part of any of your lists. = "El registro seleccionado no es parte de ninguna de sus listas."
 The record you selected is not part of the selected list. = "El registro seleccionado no es parte de la lista."
-The system is currently unavailable due to system maintenance = "El Sistema no está disponible por razones de mantenimiento."
+The system is currently unavailable due to system maintenance = "El sistema no está disponible por razones de mantenimiento."
 Theme = "Tema"
 This email was sent from = "Este correo electrónico fue enviado desde"
 This field is required = "Este campo es requerido"
@@ -931,33 +920,33 @@ Title View = "Vista del Título"
 title_hold_place = "Coloque una solicitud de título"
 To = "a"
 Too Many Email Recipients = "Demasiados destinatarios de correo electrónico"
-too_many_favorites = "Lista muy larga para desplegar.  Intente con sus favoritos en más de una lista o delimitar con etiquetas."
-too_many_new_items = "Demasiados nuevos ítemes para desplegar en una sola lista. Intente limitando su búsqueda."
+too_many_favorites = "Lista muy larga para desplegar.  Intente con sus favoritos en más de una lista o delimitelos con etiquetas."
+too_many_new_items = "Demasiados nuevos elementos para desplegar en una sola lista. Intente limitando su búsqueda."
 too_many_reserves = "Demasiadas reservas de cursos para desplegar en una sola lista. Intente limitando su búsqueda."
-top_facet_additional_prefix = "Adicional "
+top_facet_additional_prefix = "Adicional"
 top_facet_suffix = "... dentro de su búsqueda."
 Topic = "Tópico"
 Topics = "Tópicos"
-Total Balance Due = "Total de Saldo Adeudado"
-total_comments = "Toltal de Comentarios"
+Total Balance Due = "Total de saldo adeudado"
+total_comments = "Total de comentarios"
 total_lists = "Lista Total"
 total_resources = "total de Recursos"
-total_saved_items = "Total de Itemes Guardados"
-total_tags = "Total de Etqiuetas"
-total_users = "Total de Usuarios"
-tree_search_limit_reached_html = "Su búsqueda tiene muchos resultados para desplegar en el árbol. Mostrando solo los primeros <b>%%limit%%</b> ítemes. Para búsqueda completa teclee <a id="fullSearchLink" href="%%url%%" target="_blank">aquí.</a>"
-unique_tags = "Etiquetas Unicas"
+total_saved_items = "Total de elementos guardados"
+total_tags = "Total de etiquetas"
+total_users = "Total de usuarios"
+tree_search_limit_reached_html = "Su búsqueda tiene muchos resultados para desplegar en el árbol. Mostrando solo los primeros <b>%%limit%%</b> elementos. Para una búsqueda completa clic <a id="fullSearchLink" href="%%url%%" target="_blank">aquí.</a>"
+unique_tags = "Etiquetas únicas"
 University Library = "Biblioteca Universitaria"
-Unknown = "desconocido"
+Unknown = "Desconocido"
 unrecognized_facet_label = "Otro"
 Upgrade VuFind = "Actualizar VuFind"
-upgrade_description = "Si va a actualizar una versión previa de VuFind, podrá cargar su configuración anterior con esta herramienta."
+upgrade_description = "Si va a actualizar desde una versión previa de VuFind, podrá cargar su configuración anterior con esta herramienta."
 URL = "URL"
 Use for = "Usar para"
 Use instead = "Usar en vez"
-User Account = "Cuenta de Usuario"
+User Account = "Cuenta de usuario"
 Username = "Usuario"
-Username cannot be blank = "Nombre de Usuario no puede ser blanco"
+Username cannot be blank = "Nombre de usuario no puede estar vacío"
 VHS = "VHS"
 Video = "Video"
 Video Clips = "Video Clips"
@@ -973,16 +962,16 @@ View Records = "Ver registros"
 View this record in EBSCOhost = "Ver este registro en EBSCOhost"
 visual_facet_parent = "De"
 Volume = "Volumen"
-Volume Holdings = "Volumen de Existencias"
-vudl_access_denied = "Acceso Denegado."
+Volume Holdings = "Volumen de existencias"
+vudl_access_denied = "Acceso Denegado"
 vudl_tab_docs = "Documentos"
 vudl_tab_pages = "Páginas"
 VuFind Configuration = "Configuración de VuFind"
 vufind_upgrade_fail = "No podemos actualizar VuFind en este momento"
 Warning: These citations may not always be 100% accurate = "Precaución: Estas citas no son 100% exactas"
 wcterms_broader = "materias extendidas"
-wcterms_exact = "Materias Relacionadas"
-wcterms_narrower = "Materias Reducidas"
+wcterms_exact = "Materias relacionadas"
+wcterms_narrower = "Materias reducidas"
 Web = "Web"
 What am I looking at = "¿Qué estoy viendo?"
 widen_prefix = "Intente ampliando su búsqueda a"
@@ -992,20 +981,20 @@ with_selected = "Con selección"
 Year of Publication = "Año de Publicación"
 Yesterday = "Ayer"
 You do not have any fines = "Usted no tiene multas"
-You do not have any holds or recalls placed = "Usted no tiene reservas ni reclamaciones"
-You do not have any interlibrary loan requests placed = "Usted no tiene ninguna solicitud de préstamo interbibliotecario colocada"
+You do not have any holds or recalls placed = "No tiene reservas ni reclamos"
+You do not have any interlibrary loan requests placed = "No tiene ninguna solicitud de préstamo interbibliotecario colocada"
 You do not have any items checked out = "No tiene copias en préstamo"
 You do not have any saved resources = "No ha guardado ningún recurso"
-You do not have any storage retrieval requests placed = "Usted no tiene ninguna solicitud de almacenamiento y recuperación colocada"
-You must be logged in first = "Primero debe entrar al sistema"
-Your Account = "Su Cuenta"
+You do not have any storage retrieval requests placed = "No tiene ninguna solicitud de almacenamiento y recuperación colocada"
+You must be logged in first = "Primero debe ingresar al sistema"
+Your Account = "Su cuenta"
 Your book bag is empty = "Tu bolsa de libros está vacía"
 Your Checked Out Items = "Sus copias en préstamo"
 Your Comment = "Tu comentario"
 Your Favorites = "Sus Favoritos"
 Your Fines = "sus Multas"
-Your Holds and Recalls = "Sus reservas y reclamaciones"
-Your Lists = "Sus Lista"
+Your Holds and Recalls = "Sus reservas y reclamos"
+Your Lists = "Sus Listas"
 Your Profile = "Su Perfil"
 Your search terms = "Sus términos de búsqueda"
 Your Tags = "Sus Etiquetas"
diff --git a/languages/eu.ini b/languages/eu.ini
index 79598607f04b8e704c884f8e02b598c211281717..2463fdcad7ec3ddfb27e56c8a5bce6e43ffda90b 100644
--- a/languages/eu.ini
+++ b/languages/eu.ini
@@ -1307,18 +1307,7 @@ Range = "Maila"
 Range slider = "Rango de Deslizamiento"
 Read the full review online... = "Azterketa osoa linean irakurri"
 Recall This = "Jakinarazi"
-recaptcha_audio_challenge = "Eskuratu audio-erronka"
-recaptcha_cant_hear_this = "Deskargatu soinua MP3 gisa"
-recaptcha_help_btn = "Laguntza"
-recaptcha_image_alt_text = "reCAPTCHA erronkaren irudia"
-recaptcha_incorrect_try_again = "Ez da zuzena. Saiatu berriro."
-recaptcha_instructions_audio = "Idatzi entzuten duzuna:"
-recaptcha_instructions_visual = ""
 recaptcha_not_passed = "CAPTCHA ez da gainditu"
-recaptcha_play_again = "Erreproduzitu soinua berriro"
-recaptcha_privacy_and_terms = "Pribatutasuna eta baldintzak"
-recaptcha_refresh_btn = "Eskuratu erronka berria"
-recaptcha_visual_challenge = "Eskuratu ikusizko erronka"
 Record Citations = "Dokumentuaren aipamena"
 Record Count = "Erregistro-zenbatzea"
 recovery_by_email = "Berreskuratu posta elektronikoren bidez"
diff --git a/languages/fi.ini b/languages/fi.ini
index 1b4dd4bb2bce1e563e44c2b25c916527348b5b35..4373ef939a6550cff6d11d77b42e92793e4e3e59 100644
--- a/languages/fi.ini
+++ b/languages/fi.ini
@@ -3,6 +3,7 @@ Abstract = "Abstrakti"
 Access = "Pääsy"
 Account = "Tili"
 Add = "Lisää"
+Add a Library Card = "Lisää kirjastokortti"
 Add a Note = "Lisää merkintä"
 Add Tag = "Lisää tagi"
 Add Tags = "Lisää tageja"
@@ -194,6 +195,8 @@ Company/Entity = "Yritys/yhteisö"
 Configuration = "Asetukset"
 confirm_delete = "Haluatko varmasti poistaa tämän?"
 confirm_delete_brief = "Poistetaanko?"
+confirm_delete_library_card_brief = "Poistetaanko kirjastokortti?"
+confirm_delete_library_card_text = "Haluatko varmasti poistaa tämän kirjastokortin?"
 confirm_delete_list_brief = "Poistetaanko lista?"
 confirm_delete_list_text = "Haluatko varmasti poistaa tämän listan?"
 confirm_delete_tags_brief = "Poista tagit"
@@ -254,6 +257,7 @@ Due Date = "Eräpäivä"
 DVD = "DVD"
 eBook = "E-kirja"
 Edit = "Muokkaa"
+Edit Library Card = "Muokkaa kirjastokorttia"
 Edit this Advanced Search = "Muokkaa tarkennettua hakua"
 edit_list = "Muokkaa listaa"
 edit_list_fail = "Listan muokkausoikeudet puuttuvat"
@@ -416,7 +420,7 @@ hold_invalid_request_group = "Valittu varausryhmä on virheellinen. Yritä uudes
 hold_login = "tehdäksesi varauspyynnön"
 hold_place = "Tee varaus"
 hold_place_fail_missing = "Pyyntö epäonnistui puuttuvien tietojen vuoksi. Ota yhteyttä kirjaston asiakaspalveluun."
-hold_place_success_html = "Varauspyyntö onnistui. <a href="%%url%%">Varauspyynnöt</a>."
+hold_place_success_html = "Varauspyyntö onnistui. <a href="%%url%%">Varaukset</a>."
 hold_profile_html = "Kirjaudu <a href="%%url%%">kirjastokortilla</a> nähdäksesi varaukset."
 hold_queue_position = "Sijainti jonossa"
 hold_request_group = "Varauksen kohde"
@@ -427,7 +431,7 @@ Holdings = "Saatavuustiedot"
 Holdings at Other Libraries = "Saatavuus muissa kirjastoissa"
 Holdings details from = "Saatavuus:"
 Holds = "Varaukset"
-Holds and Recalls = "Varaukset ja palautuspyynnöt"
+Holds and Recalls = "Varaukset"
 Home = "Koti"
 home_browse = "Selaus:"
 HTML Full Text = "HTML-kokoteksti"
@@ -491,7 +495,7 @@ Item Description = "Huomautukset"
 Item removed from favorites = "Tietue poistettu suosikeista"
 Item removed from list = "Tietue poistettu listalta"
 Items = "Sisältö"
-items = "tietueet"
+items = "tietuetta"
 items_added_to_bookbag = "tietue(et) lisätty kirjakoriin"
 items_already_in_bookbag = "tietue(et) ovat jo kirjakorissa tai lisäys koriin epäonnistui"
 Journal = "Aikakauslehti"
@@ -509,6 +513,11 @@ Last Modified = "Viimeksi muokattu"
 Last Name = "Sukunimi"
 less = "vähemmän"
 Library = "Kirjasto"
+Library Card = "Kirjastokortti"
+Library Card Deleted = "Kirjastokortti poistettu"
+Library Card Name = "Kirjastokortin nimi"
+Library Cards = "Kirjastokortit"
+Library Cards Disabled = "Kirjastokortit pois käytöstä"
 Library Catalog Password = "Kirjastokortin salasana"
 Library Catalog Profile = "Profiili kirjastojärjestelmässä"
 Library Catalog Record = "Lähetetty tietue"
@@ -562,10 +571,10 @@ Most Recent Received Issues = "Uusimmat saapuneet numerot"
 Multiple Call Numbers = "Useita sijainteja"
 Multiple Locations = "Useita sijainteja"
 Musical Score = "Nuottijulkaisu"
-My Favorites = "Omat suosikit"
-My Fines = "Omat maksut"
-My Holds = "Omat varaukset"
-My Profile = "Oma profiili"
+My Favorites = "Suosikit"
+My Fines = "Maksut"
+My Holds = "Varaukset"
+My Profile = "Omat tiedot"
 Narrow Search = "Rajaa hakua"
 navigate_back = "Takaisin"
 Need Help? = "Tarvitsetko apua?"
@@ -656,6 +665,7 @@ Page not found. = "Sivua ei löytynyt."
 Password = "Salasana / PIN*"
 Password Again = "Salasana uudelleen"
 Password cannot be blank = "Salasana ei voi olla tyhjä"
+password_error_invalid = "Uusi salasana on virheellinen (esim. sisältää kiellettyjä merkkejä)"
 password_error_not_unique = "Salasanaa ei muutettu"
 password_maximum_length = "Salasanan enimmäispituus on %%maxlength%% merkkiä"
 password_minimum_length = "Salasanan vähimmäispituus on %%minlength%% merkkiä"
@@ -709,18 +719,7 @@ Range = "Aikaväli"
 Range slider = "Välin säätö"
 Read the full review online... = "Lue arvostelu kokonaisuudessaan..."
 Recall This = "Tee varaus"
-recaptcha_audio_challenge = "Äänivahvistus"
-recaptcha_cant_hear_this = "Lataa ääni MP3-tiedostona"
-recaptcha_help_btn = "Ohje"
-recaptcha_image_alt_text = "reCAPTCHA-kuva"
-recaptcha_incorrect_try_again = "Väärin. Yritä uudelleen."
-recaptcha_instructions_audio = "Kirjoita kuulemasi:"
-recaptcha_instructions_visual = "Kirjoita teksti:"
 recaptcha_not_passed = "CAPTCHA-tarkistus virheellinen"
-recaptcha_play_again = "Toista ääni uudelleen"
-recaptcha_privacy_and_terms = "Tietosuoja ja käyttöehdot"
-recaptcha_refresh_btn = "Uusi kuva"
-recaptcha_visual_challenge = "Kuvavahvistus"
 Record Citations = "Tietueen sitaatit"
 Record Count = "Tietueiden lukumäärä"
 Recover Account = "Palauta tili"
@@ -956,6 +955,7 @@ Use instead = "Käytä"
 User Account = "Käyttäjätili"
 Username = "Käyttäjätunnus / viivakoodi"
 Username cannot be blank = "Käyttäjätunnus ei voi olla tyhjä"
+Username is already in use in another library card = "Käyttäjätunnus on jo käytössä toisessa kirjastokortissa"
 VHS = "VHS"
 Video = "Video"
 Video Clips = "Videoleikkeet"
@@ -993,20 +993,21 @@ You do not have any fines = "Ei maksamattomia maksuja"
 You do not have any holds or recalls placed = "Ei voimassaolevia varauksia"
 You do not have any interlibrary loan requests placed = "Ei voimassaolevia kaukolainatilauksia"
 You do not have any items checked out = "Ei lainoja"
+You do not have any library cards = "Ei kirjastokortteja"
 You do not have any saved resources = "Ei tallennettuja tietueita"
 You do not have any storage retrieval requests placed = "Ei voimassaolevia varastotilauksia"
 You must be logged in first = "Kirjaudu sisään ensin"
 Your Account = "Oma tili"
 Your book bag is empty = "Kirjakori on tyhjä"
 Your Checked Out Items = "Lainat"
-Your Comment = "Omat kommentit"
+Your Comment = "Kommentit"
 Your Favorites = "Suosikit"
 Your Fines = "Maksut"
-Your Holds and Recalls = "Varauspyynnöt"
+Your Holds and Recalls = "Varaukset"
 Your Lists = "Listat"
 Your Profile = "Omat tiedot"
 Your search terms = "Hakuehdot"
-Your Tags = "Omat tagit"
+Your Tags = "Tagit"
 your_match_would_be_here = "Osuma olisi tässä."
 Zip = "Postitoimipaikka"
 zoom = "Zoomaa"
\ No newline at end of file
diff --git a/languages/fr.ini b/languages/fr.ini
index bbc4a1059b0769307b27ab6c482b0d747a3deb0e..231e5e31c3146de56824f539e3329b981f1b419a 100644
--- a/languages/fr.ini
+++ b/languages/fr.ini
@@ -710,18 +710,7 @@ Range = "Durée"
 Range slider = "Slider"
 Read the full review online... = "Lire l'avis complet en ligne..."
 Recall This = "Réserver"
-recaptcha_audio_challenge = "Test audio"
-recaptcha_cant_hear_this = "Télécharger l'audio au format MP3"
-recaptcha_help_btn = "Aide"
-recaptcha_image_alt_text = "Image reCAPTCHA"
-recaptcha_incorrect_try_again = "Incorrect. Veuillez réessayer."
-recaptcha_instructions_audio = "Qu'entendez-vous ?"
-recaptcha_instructions_visual = "Saisissez le texte :"
 recaptcha_not_passed = "L'identification du CAPTCHA a échoué"
-recaptcha_play_again = "Réécouter"
-recaptcha_privacy_and_terms = "Confidentialité et conditions d'utilisation"
-recaptcha_refresh_btn = "Nouveau test"
-recaptcha_visual_challenge = "Test visuel"
 Record Citations = "Citations de notices"
 Record Count = "Nombre d'enregistrements"
 Recover Account = "Récupérer le compte"
diff --git a/languages/it.ini b/languages/it.ini
index f8c4d490bebf3337bd805d1edbf0df25911cdaec..25420dd401a4e5baac0921ce4591ec530816aac5 100644
--- a/languages/it.ini
+++ b/languages/it.ini
@@ -666,7 +666,7 @@ PDF Full Text = "PDF Full Text"
 peer_reviewed = "Peer Reviewed"
 peer_reviewed_limit = "Limita ad articloli da riviste peer-reviewed"
 Phone Number = "Numero telefonico"
-Photo = "Foto"
+Photo = "Fotografia"
 Physical Description = "Descrizione fisica"
 Physical Object = "Oggetto fisico"
 pick_up_location = "Punto di ritiro"
@@ -710,18 +710,7 @@ Range = "Intervallo"
 Range slider = "Scorri la serie"
 Read the full review online... = "Leggi tutta la recensione online..."
 Recall This = "Prenota"
-recaptcha_audio_challenge = "Verifica audio"
-recaptcha_cant_hear_this = "Scarica audio in MP3"
-recaptcha_help_btn = "Guida"
-recaptcha_image_alt_text = "Immagine di verifica reCAPTCHA"
-recaptcha_incorrect_try_again = "Sbagliato. Riprova."
-recaptcha_instructions_audio = "Digita ciò che senti:"
-recaptcha_instructions_visual = "Digita il testo:"
 recaptcha_not_passed = "CAPTCHA non corretto"
-recaptcha_play_again = "Riproduci di nuovo audio"
-recaptcha_privacy_and_terms = "Privacy e Termini"
-recaptcha_refresh_btn = "Nuova verifica"
-recaptcha_visual_challenge = "Verifica visiva"
 Record Citations = "Citazioni del record"
 Record Count = "Conteggio dei record"
 Recover Account = "Recupera account"
diff --git a/languages/ja.ini b/languages/ja.ini
index c18ce6c3427fa24d1978afcb27bdb152c7acd35a..bfea27bf93eaae04ec9f11dbeb1b3b97de3e4bc8 100644
--- a/languages/ja.ini
+++ b/languages/ja.ini
@@ -711,18 +711,7 @@ Range = "検索範囲"
 Range slider = "レンジスライダ"
 Read the full review online... = "書評全文をオンラインで閲覧..."
 Recall This = "返却請求する"
-recaptcha_audio_challenge = "音声で確認します"
-recaptcha_cant_hear_this = "MP3 で音声をダウンロード"
-recaptcha_help_btn = "ヘルプ"
-recaptcha_image_alt_text = "reCAPTCHA 確認用画像"
-recaptcha_incorrect_try_again = "正しくありません。もう一度やり直してください。"
-recaptcha_instructions_audio = "聞こえた単語を入力します:"
-recaptcha_instructions_visual = "テキストを入力:"
 recaptcha_not_passed = "CAPTCHAが一致しません"
-recaptcha_play_again = "もう一度聞く"
-recaptcha_privacy_and_terms = "プライバシーと利用規約"
-recaptcha_refresh_btn = "別の単語でやり直します"
-recaptcha_visual_challenge = "画像で確認します"
 Record Citations = "レコードの引用形"
 Record Count = "レコード数"
 Recover Account = "アカウントの復旧"
diff --git a/languages/native.ini b/languages/native.ini
index 7fd271d76227cb103fbaf4a28b84ae9bd9bb77e8..45d014c8bb10ac2eb5ced50cf32d83066d0e97bd 100644
--- a/languages/native.ini
+++ b/languages/native.ini
@@ -1,4 +1,5 @@
 ; language names translated into their native forms -- used by selection drop-down
+Arabic = "اللغة العربية"
 Basque = "Euskara"
 Brazilian Portugese = "Português (Brasil)"
 Catalan = "Català"
diff --git a/languages/nl.ini b/languages/nl.ini
index 2ae02de89998107a4056c146ac348674c912c008..a9cc840db864b5eb1f87db617eaa6ca80d978c85 100644
--- a/languages/nl.ini
+++ b/languages/nl.ini
@@ -18,7 +18,7 @@ add_favorite_fail = "Foutmelding: Record werd niet opgeslagen"
 add_favorite_prefix = "Toevoegen"
 add_favorite_suffix = "aan favorieten"
 add_list_fail = "Foutmelding: lijst werd niet aangemaakt"
-add_other_libraries = "Ook artikels in andere bibliotheken"
+add_other_libraries = "Ook artikelen in andere bibliotheken"
 add_search = "Voeg zoekterm toe"
 add_search_group = "Voeg zoekveldengroep toe"
 add_tag_error = "Foutmelding: De tags konden niet worden opgeslagen"
@@ -66,7 +66,7 @@ authentication_error_invalid = "Ongeldige login -- Probeer het alsjeblieft opnie
 authentication_error_loggedout = "Je bent afgemeld"
 authentication_error_technical = "We kunnen je nu niet inloggen. Probeer het later alsjeblieft nog eens."
 Author = "Auteur"
-Author Browse = "Doorblader de auteurs"
+Author Browse = "Blader door de auteurs"
 Author Notes = "Auteur aantekeningen"
 Author Results for = "Auteurs-resultaten voor"
 Author Search Results = "Auteur zoekresultaten"
@@ -160,7 +160,7 @@ catalog_login_desc = "Voer je bibliotheekcatalogusgegevens in"
 CD = "CD"
 Change Password = "Verander je paswoord"
 Checked Out = "Uitgeleend"
-Checked Out Items = "Gecontroleerde artikelen"
+Checked Out Items = "Uitgeleende artikelen"
 Checkedout = "Uitgeleend"
 Chicago Citation = "Chicago Style citaat"
 child_record_count = "%%count%% records"
@@ -190,7 +190,7 @@ comment_error_save = "Foutmelding: Commentaar werd niet opgeslagen"
 Comments = "Commentaar"
 Company/Entity = "Bedrijf/Entiteit"
 Configuration = "Configuratie"
-confirm_delete = "Weet je zeker dat je dit wil wissen?"
+confirm_delete = "Weet je zeker dat je dit wil verwijderen?"
 confirm_delete_brief = "Item Verwijderen?"
 confirm_delete_list_brief = "Lijst verwijderen?"
 confirm_delete_list_text = "Weet je zeker dat je deze lijst wil wissen?"
@@ -294,7 +294,7 @@ error_page_parameter_list_heading = "Vraag parameters aan"
 Exception = "Uitzondering"
 Excerpt = "Uittreksel"
 exclude_facet = "[uitsluiten]"
-exclude_newspapers = "géén krantenartikels"
+exclude_newspapers = "géén krantenartikelen"
 Expires = "Loopt af op"
 Export = "Exporteer"
 Export Favorites = "Exporteer Favorieten"
@@ -407,7 +407,7 @@ hold_empty_selection = "Er werden geen reservaties geselecteerd"
 hold_error_blocked = "Je hebt geen toelating om een reservering te plaatsen voor dit item. Contacteer Circulatie voor meer informatie."
 hold_error_fail = "Je verzoek is mislukt. Contacteer Circulatie voor meer informatie."
 hold_invalid_pickup = "Er werd een ongeldige afhaal locatie ingegeven. Probeer het opnieuw."
-hold_login = "Informatie over verzoeken tot vasthouden en reserveringen"
+hold_login = "Informatie over reserveringen"
 hold_place = "Formuleer een aanvraag"
 hold_place_fail_missing = "Je aanvraag is mislukt. Er ontbreken gegevens. Contacteer alsjeblieft de Informatiebalie voor assistentie"
 hold_place_success_html = "Je aanvraag is gelukt. <a href="%%url%%">Jouw Verzoeken tot vasthouden en Reserveringen</a>."
@@ -521,7 +521,7 @@ Login for full access = "Log in voor complete toegang."
 login_target = "Bibliotheek"
 Logout = "Afmelden"
 Main Author = "Hoofdauteur"
-Major Categories = "Hoofdgategorieën"
+Major Categories = "Hoofdcategorieën"
 Manage Tags = "Beheer je tags"
 Manuscript = "Manuscript"
 Map = "Kaart"
@@ -642,7 +642,7 @@ Please contact the Library Reference Department for assistance = "Contacteer de
 Posted by = "Geplaatst door"
 posted_on = "aan"
 Preferences = "Voorkeuren"
-Preferred Library = "Geprefereerde bibliotheek"
+Preferred Library = "Voorkeurs bibliotheek"
 Prev = "Vorige"
 Previous Title = "Vorige titel"
 Print = "Afdrukken"
@@ -655,7 +655,7 @@ Public = "Publiek"
 Publication = "Publicatie"
 Publication Frequency = "Periodiciteit"
 Publication Information = "Publicatie info"
-Publication Type = "Publiactie type"
+Publication Type = "Publicatie type"
 Publication_Place = "Plaats van publicatie"
 Published = "Gepubliceerd in"
 Published in = "Gepubliceerd in"
@@ -669,18 +669,7 @@ Range = "Periode"
 Range slider = "Reikwijdte schuifbalk"
 Read the full review online... = "Lees volledige bespreking online..."
 Recall This = "Hou dit vast"
-recaptcha_audio_challenge = "Een audio-uitdaging proberen"
-recaptcha_cant_hear_this = "Geluid downloaden als MP3"
-recaptcha_help_btn = "Help"
-recaptcha_image_alt_text = "reCAPTCHA-uitdagingsafbeelding"
-recaptcha_incorrect_try_again = "Onjuist. Probeer het opnieuw."
-recaptcha_instructions_audio = "Typ wat u hoort:"
-recaptcha_instructions_visual = "Typ de tekst:"
 recaptcha_not_passed = "Onjuiste CAPTCHA"
-recaptcha_play_again = "Geluid opnieuw afspelen"
-recaptcha_privacy_and_terms = "Privacy en voorwaarden"
-recaptcha_refresh_btn = "Een nieuwe uitdaging proberen"
-recaptcha_visual_challenge = "Een visuele uitdaging proberen"
 Record Citations = "Record citatie"
 Refine Results = "Verfijn je resultaten"
 Region = "Gebied"
@@ -823,7 +812,7 @@ switchquery_unwantedquotes = "Het verwijderen van aanhalingstekens kan een brede
 switchquery_wildcard = "Gebruik van wildcard symbolen kan varianten opleveren"
 System Unavailable = "Systeem niet beschikbaar"
 Table of Contents = "Inhoudsopgave"
-Table of Contents unavailable = "Inhoudstafel niet beschikbaar"
+Table of Contents unavailable = "Inhoudsopgave niet beschikbaar"
 Tag = "Tag"
 tag_delete_filter = "Je gebruikt de volgende filter - Gebruikersnaam: %username%, Tag: %tag%, Bron: %resource%"
 tag_delete_warning = "Let op! Je staat op het punt %%count%% tag(s) te verwijderen."
@@ -847,15 +836,15 @@ This item is already part of the following list/lists = "Dit item maakt al deel
 Title = "Titel"
 Title not available = "Titel niet beschikbaar"
 To = "Aan"
-Too Many Email Recipients = "Te veel e-mail bestemmelingen"
+Too Many Email Recipients = "Te veel e-mail geadresseerden"
 too_many_favorites = "Deze lijst is te lang om in één keer te tonen. Probeer je favorieten in verschillende lijsten te ordenen of gebruik tags."
 too_many_new_items = "Zoveel nieuwe items kunnen niet getoond worden in één lijst. Probeer je zoekopdracht specifieker te maken."
 top_facet_additional_prefix = "Extra"
 top_facet_suffix = "... binnen jouw zoekopdracht."
 Topic = "Onderwerp"
 Topics = "Onderwerpen"
-total_resources = "Totaal aant. middelen"
-total_saved_items = "Totaal aant. bewaarde items"
+total_resources = "Totaal aantal middelen"
+total_saved_items = "Totaal aantal bewaarde items"
 total_tags = "Totaal want. Tags"
 total_users = "Totaal aant. gebruikers"
 tree_search_limit_reached_html = "Je zoekopdracht leverde teveel resultaten op om weer te geven in de boomstructuur. De eerste <b>%%limit%%</b> items worden getoond. Voor de volledige lijst klik <a id="fullSearchLink" href="%%url%%" target="_blank">hier.</a>"
@@ -878,7 +867,7 @@ Videos = "Video's"
 view already selected = "toon selectie"
 View Book Bag = "Bekijk boekentas"
 View Full Collection = "Bekijk volledige collectie"
-View Full Record = "Bekijk volledige record"
+View Full Record = "Bekijk volledig record"
 View in EDS = "Bekijk in EDS"
 View online: Full view Book Preview from the Hathi Trust = "Bekijk on-line: Volledige tekst Book Preview van het Hathi Fonds"
 View Record = "Bekijk record"
@@ -911,7 +900,7 @@ You do not have any saved resources = "Je hebt geen bronnen opgeslagen"
 You must be logged in first = "Je moet eerst inloggen"
 Your Account = "Jouw account"
 Your book bag is empty = "Je boekentas is leeg"
-Your Checked Out Items = "Jouw gecontroleerde artikelen"
+Your Checked Out Items = "Jouw geleende artikelen"
 Your Comment = "Jouw commentaar"
 Your Favorites = "Jouw favorieten"
 Your Fines = "Jouw boetes"
diff --git a/languages/pl.ini b/languages/pl.ini
index fb1e8e59d1e07e63c91b6826fdcef3d6cbf23901..30153d2ec22442abf15ef291704739d63bfef3c4 100644
--- a/languages/pl.ini
+++ b/languages/pl.ini
@@ -772,18 +772,7 @@ Range = "Okres czasu"
 Range slider = "Slider"
 Read the full review online... = "Przeczytaj całą recenzję..."
 Recall This = "Odwołaj"
-recaptcha_audio_challenge = "Odtwórz podpowiedź dźwiękową"
-recaptcha_cant_hear_this = "Pobierz dźwięk jako plik MP3"
-recaptcha_help_btn = "Pomoc"
-recaptcha_image_alt_text = "Zadanie obrazkowe reCAPTCHA"
-recaptcha_incorrect_try_again = "Nieprawidłowo. Spróbuj ponownie."
-recaptcha_instructions_audio = "Wpisz usłyszane słowa:"
-recaptcha_instructions_visual = "Przepisz tekst:"
 recaptcha_not_passed = "CAPTCHA nie zweryfikowany"
-recaptcha_play_again = "Odtwórz dźwięk ponownie"
-recaptcha_privacy_and_terms = "Prywatność i warunki"
-recaptcha_refresh_btn = "Nowa podpowiedź"
-recaptcha_visual_challenge = "Pokaż podpowiedź wizualną"
 Record Citations = "Cytaty zapisu"
 Record Count = "Ilość zapisów"
 Recover Account = "Odzyskaj konto"
diff --git a/languages/pt-br.ini b/languages/pt-br.ini
index 5a17e055acf6d935a989512d5fc950b9aa21bbc9..9400f50221030028bfffadfc77de4e09bc357cde 100644
--- a/languages/pt-br.ini
+++ b/languages/pt-br.ini
@@ -711,18 +711,7 @@ Range = "Intervalo"
 Range slider = "Ajuste do Intervalo"
 Read the full review online... = "Leia a análise completa linha ..."
 Recall This = "Reservar"
-recaptcha_audio_challenge = "Obter um desafio de áudio"
-recaptcha_cant_hear_this = "Fazer download do som no formato MP3"
-recaptcha_help_btn = "Ajuda"
-recaptcha_image_alt_text = "Imagem de desafio reCAPTCHA"
-recaptcha_incorrect_try_again = "Incorreto. Tente novamente."
-recaptcha_instructions_audio = "Digite o que você ouve:"
-recaptcha_instructions_visual = "Digite o texto:"
 recaptcha_not_passed = "Código CAPTCHA não coincidiu"
-recaptcha_play_again = "Reproduzir som novamente"
-recaptcha_privacy_and_terms = "Privacidade e Termos"
-recaptcha_refresh_btn = "Obter um novo desafio"
-recaptcha_visual_challenge = "Obter um desafio visual"
 Record Citations = "Citações do registro"
 Record Count = "Número de Registros"
 Recover Account = "Recuperar conta"
diff --git a/languages/pt.ini b/languages/pt.ini
index b05fc525011306daea431da1b340d8bc745215fe..cbee5ce7bf1762287097ca6e3ea826c21f8faf61 100644
--- a/languages/pt.ini
+++ b/languages/pt.ini
@@ -711,18 +711,7 @@ Range = "Intervalo"
 Range slider = "Ajuste do Intervalo"
 Read the full review online... = "Leia a análise completa linha ..."
 Recall This = "Reservar"
-recaptcha_audio_challenge = "Obter um desafio de áudio"
-recaptcha_cant_hear_this = "Fazer download do som no formato MP3"
-recaptcha_help_btn = "Ajuda"
-recaptcha_image_alt_text = "Imagem de desafio reCAPTCHA"
-recaptcha_incorrect_try_again = "Incorreto. Tente novamente."
-recaptcha_instructions_audio = "Digite o que você ouve:"
-recaptcha_instructions_visual = "Digite o texto:"
 recaptcha_not_passed = "CAPTCHA errada"
-recaptcha_play_again = "Reproduzir som novamente"
-recaptcha_privacy_and_terms = "Privacidade e Termos"
-recaptcha_refresh_btn = "Obter um novo desafio"
-recaptcha_visual_challenge = "Obter um desafio visual"
 Record Citations = "Citações do registo"
 Record Count = "Número de Registos"
 Recover Account = "Recuperar Conta"
diff --git a/languages/ru.ini b/languages/ru.ini
index 68ed7136d7385aa6cc1f33f2b798743048ddb66e..f705a3f03af5ada1bf47a2e4446eee0eef99f85a 100644
--- a/languages/ru.ini
+++ b/languages/ru.ini
@@ -727,18 +727,7 @@ Range = "Диапазон"
 Range slider = "Движок диапазонов"
 Read the full review online... = "Чтение полного обзора в режиме online..."
 Recall This = "Напомнить: "
-recaptcha_audio_challenge = "Звуковая проверка"
-recaptcha_cant_hear_this = "Загрузить MP3-файл"
-recaptcha_help_btn = "Справка"
-recaptcha_image_alt_text = "Проверка по слову reCAPTCHA"
-recaptcha_incorrect_try_again = "Неправильно. Повторите попытку."
-recaptcha_instructions_audio = "Введите то, что слышите:"
-recaptcha_instructions_visual = "Введите текст:"
 recaptcha_not_passed = "CAPTCHA не передана"
-recaptcha_play_again = "Прослушать еще раз"
-recaptcha_privacy_and_terms = "Правила и принципы"
-recaptcha_refresh_btn = "Обновить"
-recaptcha_visual_challenge = "Визуальная проверка"
 Record Citations = "Цитаты записи:"
 Record Count = "Число записей"
 Recover Account = "Восстановить акаунт"
diff --git a/languages/sl.ini b/languages/sl.ini
index 7c42f7d122b2aa643f5a12254e1f2bcce7c1df7b..2ac47f8e024c1594fdc767832b3c3f70d0fbe9b1 100644
--- a/languages/sl.ini
+++ b/languages/sl.ini
@@ -605,17 +605,6 @@ Range = "Obseg"
 Range slider = "Obseg"
 Read the full review online... = "Poln pregled preberite online..."
 Recall This = "Rezervirajte"
-recaptcha_audio_challenge = "Zvočni preskus"
-recaptcha_cant_hear_this = "Prenesi zvok kot MP3"
-recaptcha_help_btn = "Pomoč"
-recaptcha_image_alt_text = "Slika izziva reCAPTCHA"
-recaptcha_incorrect_try_again = "Napačno. Poskusite znova."
-recaptcha_instructions_audio = "Natipkajte, kaj slišite:"
-recaptcha_instructions_visual = "Vnesite besedilo:"
-recaptcha_play_again = "Znova predvajaj zvok"
-recaptcha_privacy_and_terms = "Zasebnost in pogoji"
-recaptcha_refresh_btn = "Nov preskus"
-recaptcha_visual_challenge = "Vizualni preskus"
 Record Citations = "Citiranje zadetka"
 Record Count = "Å tetje zadetkov"
 Region = "Regija"
diff --git a/languages/sv.ini b/languages/sv.ini
index 93a0bf6cc958669ec4274488b807817048445541..0a4786eb5310ee4e7c2a5b49a8e9e17c1cda9674 100644
--- a/languages/sv.ini
+++ b/languages/sv.ini
@@ -3,6 +3,7 @@ Abstract = "Abstrakt"
 Access = "Tillgång"
 Account = "Användarkonto"
 Add = "Lägg till"
+Add a Library Card = "Anslut bibliotekskort till mitt konto"
 Add a Note = "Lägg till en anteckning "
 Add Tag = "Lägg till en tagg"
 Add Tags = "Lägg till taggar"
@@ -14,7 +15,7 @@ add_comment_fail_blank = "Comment cannot be blank."
 add_comment_success = "Comment added."
 add_favorite_fail = "Fel: posten kunde inte sparas"
 add_favorite_prefix = "Lägg till"
-add_favorite_suffix = "till dina favoriter"
+add_favorite_suffix = "till favoriter"
 add_list_fail = "Fel: att spara listan misslyckades"
 add_other_libraries = "Inneslut artiklar i andra bibliotek"
 add_search = "Lägg till ett sökfelt"
@@ -194,6 +195,8 @@ Company/Entity = "Företag/organisation"
 Configuration = "Configuration"
 confirm_delete = "Är du säker att du vill ta bort denna?"
 confirm_delete_brief = "Radera?"
+confirm_delete_library_card_brief = "Radera bibliotekskortet?"
+confirm_delete_library_card_text = "Är du säker att du vill ta bort detta bibliotekskort?"
 confirm_delete_list_brief = "Radera listan??"
 confirm_delete_list_text = "Är du säker att du vill ta bort denna lista?"
 confirm_delete_tags_brief = "Radera taggar"
@@ -254,6 +257,7 @@ Due Date = "Förfallodag"
 DVD = "DVD"
 eBook = "E-bok"
 Edit = "Bearbeta"
+Edit Library Card = "Uppdatera bibliotekskortets uppgifter"
 Edit this Advanced Search = "Bearbeta utökade sökningen"
 edit_list = "Bearbeta listan"
 edit_list_fail = "Du har inte rättigheter för att bearbeta denna lista."
@@ -416,7 +420,7 @@ hold_invalid_request_group = "Utvalda gruppen duger inte. Kolla och försök ige
 hold_login = "för att reservera material"
 hold_place = "reservera"
 hold_place_fail_missing = "Reservering misslyckades p.g.a. saknande uppgifter. Vänd dig till bibliotekets kundtjänst."
-hold_place_success_html = "Material har reserverats. <a href="%%url%%">Mina reserveringar</a>."
+hold_place_success_html = "Material har reserverats. <a href="%%url%%">Reserveringar</a>."
 hold_profile_html = "Logga in med din <a href="%%url%%">bibliotekskort</a> för att se reserveringar."
 hold_queue_position = "Läget i kön"
 hold_request_group = "Reservera från"
@@ -427,7 +431,7 @@ Holdings = "Tillgänglighet"
 Holdings at Other Libraries = "Tillgänglighet i andra bibliotek"
 Holdings details from = "Tillgänglighet i"
 Holds = "Reserveringar"
-Holds and Recalls = "Reserveringar och återkallande"
+Holds and Recalls = "Reserveringar"
 Home = "Hem"
 home_browse = "Bläddring:"
 HTML Full Text = "HTML-fulltext"
@@ -509,6 +513,11 @@ Last Modified = "Last Modified"
 Last Name = "Efternamn"
 less = "färre"
 Library = "Bibliotek"
+Library Card = "Bibliotekskort"
+Library Card Deleted = "Bibliotekskortet har raderats"
+Library Card Name = "Bibliotekskortets namn"
+Library Cards = "Bibliotekskort"
+Library Cards Disabled = "Bibliotekskort inte tillgängliga"
 Library Catalog Password = "Lösenord i bibliotekssystemet"
 Library Catalog Profile = "Profilen i bibliotekssystemet"
 Library Catalog Record = "Skickat post"
@@ -562,10 +571,10 @@ Most Recent Received Issues = "Senast inkomna nummer"
 Multiple Call Numbers = "Flera placeringar"
 Multiple Locations = "Flera placeringar"
 Musical Score = "Musikal"
-My Favorites = "Mina favoriter"
-My Fines = "Mina avgifter"
-My Holds = "Mina reserveringar"
-My Profile = "Min profil"
+My Favorites = "Favoriter"
+My Fines = "Avgifter"
+My Holds = "Reserveringar"
+My Profile = "Profil"
 Narrow Search = "Begränsa sökningen"
 navigate_back = "Back"
 Need Help? = "Behöver du hjälp?"
@@ -655,7 +664,8 @@ Other Sources = "Andra källor"
 Page not found. = "Sidan hittades inte."
 Password = "Lösenord / PIN *"
 Password Again = "Lösenord igen"
-Password cannot be blank = "Lösenordet kan inte lämnas tom"
+Password cannot be blank = "Lösenordet kan inte lämnas tomt"
+password_error_invalid = "Nytt lösenord är ogiltigt (t.ex. innehåller ogiltiga tecken)"
 password_error_not_unique = "Lösenordet inte ändrat"
 password_maximum_length = "Högsta längd på lösenord är %%maxlength%% tecken"
 password_minimum_length = "Minsta längd på lösenord är %%minlength%% tecken"
@@ -709,18 +719,7 @@ Range = "Tidsintervall"
 Range slider = "Reglage för tidssträckan"
 Read the full review online... = "Läs hela recensionen på webben..."
 Recall This = "Reservera denna"
-recaptcha_audio_challenge = "Hämta captcha i ljudformat"
-recaptcha_cant_hear_this = "Hämta ljud som MP3"
-recaptcha_help_btn = "Hjälp"
-recaptcha_image_alt_text = "reCAPTCHA-bild"
-recaptcha_incorrect_try_again = "Fel. Försök igen."
-recaptcha_instructions_audio = "Skriv det du hör:"
-recaptcha_instructions_visual = "Skriv texten:"
 recaptcha_not_passed = "CAPTCHA inte klarat"
-recaptcha_play_again = "Spela upp ljudet igen"
-recaptcha_privacy_and_terms = "Sekretess och villkor"
-recaptcha_refresh_btn = "Hämta ny captcha"
-recaptcha_visual_challenge = "Hämta captcha i bildformat"
 Record Citations = "Hänvisningar gällande denna post"
 Record Count = "Antal poster"
 Recover Account = "Ã…tervinna kontot"
@@ -956,6 +955,7 @@ Use instead = "Använd i stället"
 User Account = "Användarkonto"
 Username = "Användarnamn / streckkod"
 Username cannot be blank = "Du måste välja ett användarnamn"
+Username is already in use in another library card = "Användarnamnet är redan i bruk för ett annat bibliotekskort"
 VHS = "VHS"
 Video = "Video"
 Video Clips = "Videoklipp"
@@ -993,20 +993,21 @@ You do not have any fines = "Du har inga obetalda avgifter"
 You do not have any holds or recalls placed = "Du har inga reserveringar i kraft"
 You do not have any interlibrary loan requests placed = "Du har inga fjärrlånbeställningar i kraft"
 You do not have any items checked out = "Du har inga lån"
+You do not have any library cards = "Du har inga bibliotekskort"
 You do not have any saved resources = "Du har inga sparade resurser"
 You do not have any storage retrieval requests placed = "Du har inga lagerbeställningar i kraft"
 You must be logged in first = "Du måste logga in först"
 Your Account = "Mitt konto"
 Your book bag is empty = "Din kundvagn är tom"
-Your Checked Out Items = "Mina lån"
-Your Comment = "Mina kommentarer"
-Your Favorites = "Mina favoriter"
-Your Fines = "Mina avgifter"
-Your Holds and Recalls = "Mina reserveringar"
-Your Lists = "Mina listor"
-Your Profile = "Min profil"
+Your Checked Out Items = "LÃ¥n"
+Your Comment = "Kommentarer"
+Your Favorites = "Favoriter"
+Your Fines = "Avgifter"
+Your Holds and Recalls = "Reserveringar"
+Your Lists = "Listor"
+Your Profile = "Profil"
 Your search terms = "Sökvillkor"
-Your Tags = "Mina taggar"
+Your Tags = "Taggar"
 your_match_would_be_here = "Din träff skulle vara här."
 Zip = "Postanstalt"
 zoom = "Zooma"
\ No newline at end of file
diff --git a/languages/tr.ini b/languages/tr.ini
index aa107d27c51e9277c6852855a7e883a44530da88..3c22a6835ae90851d68b276d5ada781d92d7551b 100644
--- a/languages/tr.ini
+++ b/languages/tr.ini
@@ -721,18 +721,7 @@ Range = "Aralık"
 Range slider = "Sınırlandırma Düzeyi"
 Read the full review online... = "Eleştirinin tamamını online oku..."
 Recall This = "Rezerve"
-recaptcha_audio_challenge = "Sesli sorgu al"
-recaptcha_cant_hear_this = "Sesi MP3 olarak indir"
-recaptcha_help_btn = "Yardım"
-recaptcha_image_alt_text = "reCAPTCHA sorusu resmi"
-recaptcha_incorrect_try_again = "Yanlış. Tekrar deneyin."
-recaptcha_instructions_audio = "Duyduğunuzu yazın:"
-recaptcha_instructions_visual = "Metni yazın:"
 recaptcha_not_passed = "CAPTCHA kodu uygun deÄŸil"
-recaptcha_play_again = "Sesi tekrar çal"
-recaptcha_privacy_and_terms = "Gizlilik ve Åžartlar"
-recaptcha_refresh_btn = "Yeniden yükle"
-recaptcha_visual_challenge = "Görsel sorgu al"
 Record Citations = "Alıntılar"
 Record Count = "Kayıt Sayısı"
 Recover Account = "Hesabı Kurtar"
diff --git a/languages/zh-cn.ini b/languages/zh-cn.ini
index 57150ecd50fdfc01a9b31446e6bb19438c540e7e..62dee64aadfd6e1a20f2945b761800f920e572a1 100644
--- a/languages/zh-cn.ini
+++ b/languages/zh-cn.ini
@@ -485,17 +485,6 @@ Range = "范围"
 Range slider = "范围滑杆"
 Read the full review online... = "在线阅读全面评论..."
 Recall This = "撤回"
-recaptcha_audio_challenge = "换一组音频验证码"
-recaptcha_cant_hear_this = "以 MP3 格式下载声音"
-recaptcha_help_btn = "帮助"
-recaptcha_image_alt_text = "reCAPTCHA 验证图片"
-recaptcha_incorrect_try_again = "不正确,请重试。"
-recaptcha_instructions_audio = "请键入您听到的内容:"
-recaptcha_instructions_visual = "输入文字:"
-recaptcha_play_again = "重新播放"
-recaptcha_privacy_and_terms = "隐私权和使用条款"
-recaptcha_refresh_btn = "换一组验证码"
-recaptcha_visual_challenge = "收到一个视频邀请"
 Record Citations = "记录引文"
 Region = "地区"
 Related Author = "相关作者"
diff --git a/languages/zh.ini b/languages/zh.ini
index 1700ea2f74759a5b680faa93bcde9b267195f254..493fae19c9edbaf149a08ecd0e3c5ef02696f678 100644
--- a/languages/zh.ini
+++ b/languages/zh.ini
@@ -485,17 +485,6 @@ Range = "範圍"
 Range slider = "範圍滑杆"
 Read the full review online... = "在線閱讀全面評論..."
 Recall This = "撤回"
-recaptcha_audio_challenge = "取得語音驗證問題"
-recaptcha_cant_hear_this = "將聲音下載為 MP3"
-recaptcha_help_btn = "說明"
-recaptcha_image_alt_text = "reCAPTCHA 驗證文字圖片"
-recaptcha_incorrect_try_again = "不正確,再試一次。"
-recaptcha_instructions_audio = "鍵入您所聽到的:"
-recaptcha_instructions_visual = "輸入文字:"
-recaptcha_play_again = "再次播放聲音"
-recaptcha_privacy_and_terms = "私隱權與條款"
-recaptcha_refresh_btn = "換一個驗證問題"
-recaptcha_visual_challenge = "回答圖像驗證問題"
 Record Citations = "記錄引文"
 Region = "地區"
 Related Author = "相關作者"
diff --git a/module/VuDL/src/VuDL/Connection/Fedora.php b/module/VuDL/src/VuDL/Connection/Fedora.php
index d3dbc6f2bdd7fa2f258131a4ff096429a3c77e0e..dad33f9b19a687525b5d0912707afbb519a0b9b5 100644
--- a/module/VuDL/src/VuDL/Connection/Fedora.php
+++ b/module/VuDL/src/VuDL/Connection/Fedora.php
@@ -114,7 +114,7 @@ class Fedora extends AbstractBase
     public function getDatastreamContent($id, $stream, $justStream = false)
     {
         if ($justStream) {
-            $url = $this->getBase() . $id . '/datastreams' . $stream;
+            $url = $this->getBase() . $id . $stream;
         } else {
             $url = $this->getBase() . $id . '/datastreams/' . $stream . '/content';
         }
diff --git a/module/VuDL/src/VuDL/Controller/VudlController.php b/module/VuDL/src/VuDL/Controller/VudlController.php
index 1216a281c03d7b7884b19e04ee2d4adceb1a8882..8a8d834472b5998985db195827f764a97d23fdd4 100644
--- a/module/VuDL/src/VuDL/Controller/VudlController.php
+++ b/module/VuDL/src/VuDL/Controller/VudlController.php
@@ -283,7 +283,6 @@ class VudlController extends AbstractVuDL
         $view->parents = $parents;
         if ($id != $root) {
             $view->parentID = $root;
-            $view->breadcrumbEnd = $outline['lists'][0][$view->initPage]['label'];
         }
         $view->pagelength = $this->getConnector()->getPageLength();
         return $view;
diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index 2e9a1598cd43598de060a2a3dd784aa6069aa83e..113ab49fb91f337a0a21a1981acb8ae2ce2861b7 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -88,6 +88,7 @@ $config = [
             'index' => 'VuFind\Controller\IndexController',
             'install' => 'VuFind\Controller\InstallController',
             'libguides' => 'VuFind\Controller\LibGuidesController',
+            'librarycards' => 'VuFind\Controller\LibraryCardsController',
             'missingrecord' => 'VuFind\Controller\MissingrecordController',
             'my-research' => 'VuFind\Controller\MyResearchController',
             'oai' => 'VuFind\Controller\OaiController',
@@ -146,6 +147,7 @@ $config = [
             'VuFind\DbTablePluginManager' => 'VuFind\Service\Factory::getDbTablePluginManager',
             'VuFind\Export' => 'VuFind\Service\Factory::getExport',
             'VuFind\HierarchyDriverPluginManager' => 'VuFind\Service\Factory::getHierarchyDriverPluginManager',
+            'VuFind\HierarchyTreeDataFormatterPluginManager' => 'VuFind\Service\Factory::getHierarchyTreeDataFormatterPluginManager',
             'VuFind\HierarchyTreeDataSourcePluginManager' => 'VuFind\Service\Factory::getHierarchyTreeDataSourcePluginManager',
             'VuFind\HierarchyTreeRendererPluginManager' => 'VuFind\Service\Factory::getHierarchyTreeRendererPluginManager',
             'VuFind\Http' => 'VuFind\Service\Factory::getHttp',
@@ -171,6 +173,7 @@ $config = [
             'VuFind\SearchOptionsPluginManager' => 'VuFind\Service\Factory::getSearchOptionsPluginManager',
             'VuFind\SearchParamsPluginManager' => 'VuFind\Service\Factory::getSearchParamsPluginManager',
             'VuFind\SearchResultsPluginManager' => 'VuFind\Service\Factory::getSearchResultsPluginManager',
+            'VuFind\SearchRunner' => 'VuFind\Service\Factory::getSearchRunner',
             'VuFind\SearchSpecsReader' => 'VuFind\Service\Factory::getSearchSpecsReader',
             'VuFind\SearchStats' => 'VuFind\Service\Factory::getSearchStats',
             'VuFind\SessionManager' => 'VuFind\Service\Factory::getSessionManager',
@@ -348,6 +351,12 @@ $config = [
                     'flat' => 'VuFind\Hierarchy\Driver\Factory::getHierarchyFlat',
                 ],
             ],
+            'hierarchy_treedataformatter' => [
+                'invokables' => [
+                    'json' => 'VuFind\Hierarchy\TreeDataFormatter\Json',
+                    'xml' => 'VuFind\Hierarchy\TreeDataFormatter\Xml',
+                ],
+            ],
             'hierarchy_treedatasource' => [
                 'factories' => [
                     'solr' => 'VuFind\Hierarchy\TreeDataSource\Factory::getSolr',
@@ -418,6 +427,7 @@ $config = [
                     'worldcatterms' => 'VuFind\Recommend\Factory::getWorldCatTerms',
                 ],
                 'invokables' => [
+                    'alphabrowselink' => 'VuFind\Recommend\AlphaBrowseLink',
                     'europeanaresultsdeferred' => 'VuFind\Recommend\EuropeanaResultsDeferred',
                     'facetcloud' => 'VuFind\Recommend\FacetCloud',
                     'openlibrarysubjects' => 'VuFind\Recommend\OpenLibrarySubjects',
@@ -442,6 +452,7 @@ $config = [
                     'solrauth' => 'VuFind\RecordDriver\Factory::getSolrAuth',
                     'solrdefault' => 'VuFind\RecordDriver\Factory::getSolrDefault',
                     'solrmarc' => 'VuFind\RecordDriver\Factory::getSolrMarc',
+                    'solrmarcremote' => 'VuFind\RecordDriver\Factory::getSolrMarcRemote',
                     'solrreserves' => 'VuFind\RecordDriver\Factory::getSolrReserves',
                     'solrweb' => 'VuFind\RecordDriver\Factory::getSolrWeb',
                     'summon' => 'VuFind\RecordDriver\Factory::getSummon',
@@ -491,6 +502,7 @@ $config = [
                     '360link' => 'VuFind\Resolver\Driver\Factory::getThreesixtylink',
                     'ezb' => 'VuFind\Resolver\Driver\Factory::getEzb',
                     'sfx' => 'VuFind\Resolver\Driver\Factory::getSfx',
+                    'redi' => 'VuFind\Resolver\Driver\Factory::getRedi',
                 ],
                 'aliases' => [
                     'threesixtylink' => '360link',
@@ -533,6 +545,7 @@ $config = [
             'search_results' => [
                 'abstract_factories' => ['VuFind\Search\Results\PluginFactory'],
                 'factories' => [
+                    'favorites' => 'VuFind\Search\Results\Factory::getFavorites',
                     'solr' => 'VuFind\Search\Results\Factory::getSolr',
                 ],
             ],
@@ -704,6 +717,7 @@ $recordRoutes = [
 // Define dynamic routes -- controller => [route name => action]
 $dynamicRoutes = [
     'MyResearch' => ['userList' => 'MyList/[:id]', 'editList' => 'EditList/[:id]'],
+    'LibraryCards' => ['editLibraryCard' => 'editCard/[:id]'],
 ];
 
 // Define static routes -- Controller/Action strings
@@ -724,6 +738,8 @@ $staticRoutes = [
     'Install/FixSecurity', 'Install/FixSolr', 'Install/Home',
     'Install/PerformSecurityFix', 'Install/ShowSQL',
     'LibGuides/Home', 'LibGuides/Results',
+    'LibraryCards/Home', 'LibraryCards/SelectCard',
+    'LibraryCards/DeleteCard',
     'MyResearch/Account', 'MyResearch/ChangePassword', 'MyResearch/CheckedOut',
     'MyResearch/Delete', 'MyResearch/DeleteList', 'MyResearch/Edit',
     'MyResearch/Email', 'MyResearch/Favorites', 'MyResearch/Fines',
diff --git a/module/VuFind/sql/migrations/pgsql/2.5/001-add-user-card-table.sql b/module/VuFind/sql/migrations/pgsql/2.5/001-add-user-card-table.sql
new file mode 100644
index 0000000000000000000000000000000000000000..69a53d54c30e5f0bfce6019b7c669d5b15e956fa
--- /dev/null
+++ b/module/VuFind/sql/migrations/pgsql/2.5/001-add-user-card-table.sql
@@ -0,0 +1,21 @@
+--
+-- Table structure for table `user_card`
+--
+
+DROP TABLE IF EXISTS "user_card";
+
+CREATE TABLE "user_card" (
+id SERIAL,
+user_id int NOT NULL,
+card_name varchar(255) NOT NULL DEFAULT '',
+cat_username varchar(50) NOT NULL DEFAULT '',
+cat_password varchar(50) DEFAULT NULL,
+cat_pass_enc varchar(110) DEFAULT NULL,
+home_library varchar(100) NOT NULL DEFAULT '',
+created timestamp NOT NULL DEFAULT '1970-01-01 00:00:00',
+saved timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+PRIMARY KEY (id),
+CONSTRAINT user_card_ibfk_1 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE
+);
+CREATE INDEX user_card_cat_username_idx ON user_card (cat_username);
+CREATE INDEX user_card_user_id_idx ON user_card (user_id);
diff --git a/module/VuFind/sql/migrations/pgsql/2.5/002-modify-user-columns.sql b/module/VuFind/sql/migrations/pgsql/2.5/002-modify-user-columns.sql
new file mode 100644
index 0000000000000000000000000000000000000000..c5510ee19ed2cb7591a05e5c3dc30e61e91efd93
--- /dev/null
+++ b/module/VuFind/sql/migrations/pgsql/2.5/002-modify-user-columns.sql
@@ -0,0 +1,7 @@
+-- 
+-- Modifications to table `user`
+--
+
+ALTER TABLE "user"
+  ALTER COLUMN username TYPE varchar(255),
+  ALTER COLUMN email TYPE varchar(255);
diff --git a/module/VuFind/sql/mysql.sql b/module/VuFind/sql/mysql.sql
index 6220d14246730ad73c46d8de7e869f1b9be0bd65..04727169c839bbb987ab495681adb24d8418546a 100644
--- a/module/VuFind/sql/mysql.sql
+++ b/module/VuFind/sql/mysql.sql
@@ -165,12 +165,12 @@ CREATE TABLE `tags` (
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `user` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `username` varchar(50) NOT NULL DEFAULT '',
+  `username` varchar(255) NOT NULL DEFAULT '',
   `password` varchar(32) NOT NULL DEFAULT '',
   `pass_hash` varchar(60) DEFAULT NULL,
   `firstname` varchar(50) NOT NULL DEFAULT '',
   `lastname` varchar(50) NOT NULL DEFAULT '',
-  `email` varchar(250) NOT NULL DEFAULT '',
+  `email` varchar(255) NOT NULL DEFAULT '',
   `cat_username` varchar(50) DEFAULT NULL,
   `cat_password` varchar(50) DEFAULT NULL,
   `cat_pass_enc` varchar(110) DEFAULT NULL,
@@ -258,6 +258,30 @@ CREATE TABLE `user_stats_fields` (
   PRIMARY KEY (`id`,`field`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 /*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `user_card`
+--
+
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `user_card` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `user_id` int(11) NOT NULL,
+  `card_name` varchar(255) NOT NULL DEFAULT '',
+  `cat_username` varchar(50) NOT NULL DEFAULT '',
+  `cat_password` varchar(50) DEFAULT NULL,
+  `cat_pass_enc` varchar(110) DEFAULT NULL,
+  `home_library` varchar(100) NOT NULL DEFAULT '',
+  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `saved` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`),
+  KEY `user_id` (`user_id`),
+  KEY `user_card_cat_username` (`cat_username`),
+  CONSTRAINT `user_card_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
 /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
 
 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
diff --git a/module/VuFind/sql/pgsql.sql b/module/VuFind/sql/pgsql.sql
index 4300251d7a34d274049fd3b4473de27480a94d2e..808e891dab646ac3da54ac98eb19000c5fe08f1d 100644
--- a/module/VuFind/sql/pgsql.sql
+++ b/module/VuFind/sql/pgsql.sql
@@ -1,6 +1,6 @@
--- 
+--
 -- Table structure for table comments
--- 
+--
 
 DROP TABLE IF EXISTS "comments";
 
@@ -18,9 +18,9 @@ CREATE INDEX comments_resource_id_idx ON comments (resource_id);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table resource
--- 
+--
 
 CREATE TABLE resource (
 id SERIAL,
@@ -36,9 +36,9 @@ CREATE INDEX resource_record_id_idx ON resource (record_id);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table resource_tags
--- 
+--
 
 CREATE TABLE resource_tags (
 id SERIAL,
@@ -57,9 +57,9 @@ CREATE INDEX resource_tags_list_id_idx ON resource_tags (list_id);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table search. Than fixed created column default value. Old value is 0000-00-00.
--- 
+--
 
 CREATE TABLE search (
 id SERIAL,
@@ -71,7 +71,7 @@ title varchar(20) DEFAULT NULL,
 saved int NOT NULL DEFAULT '0',
 search_object bytea,
 PRIMARY KEY (id)
-); 
+);
 CREATE INDEX search_user_id_idx ON search (user_id);
 CREATE INDEX search_folder_id_idx ON search (folder_id);
 CREATE INDEX session_id_idx ON search (session_id);
@@ -79,9 +79,9 @@ CREATE INDEX session_id_idx ON search (session_id);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table tags
--- 
+--
 
 CREATE TABLE tags (
 id SERIAL,
@@ -91,18 +91,18 @@ PRIMARY KEY (id)
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table user
--- 
+--
 
 CREATE TABLE "user"(
 id SERIAL,
-username varchar(50) NOT NULL DEFAULT '',
+username varchar(255) NOT NULL DEFAULT '',
 password varchar(32) NOT NULL DEFAULT '',
 pass_hash varchar(60) DEFAULT NULL,
 firstname varchar(50) NOT NULL DEFAULT '',
 lastname varchar(50) NOT NULL DEFAULT '',
-email varchar(250) NOT NULL DEFAULT '',
+email varchar(255) NOT NULL DEFAULT '',
 cat_username varchar(50) DEFAULT NULL,
 cat_password varchar(50) DEFAULT NULL,
 cat_pass_enc varchar(110) DEFAULT NULL,
@@ -113,14 +113,14 @@ created timestamp NOT NULL DEFAULT '1970-01-01 00:00:00',
 verify_hash varchar(42) NOT NULL DEFAULT '',
 PRIMARY KEY (id),
 UNIQUE (username)
-); 
+);
 
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table user_list
--- 
+--
 
 CREATE TABLE user_list (
 id SERIAL,
@@ -136,9 +136,9 @@ CREATE INDEX user_list_user_id_idx ON user_list (user_id);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table user_resource
--- 
+--
 
 CREATE TABLE user_resource (
 id SERIAL,
@@ -156,9 +156,9 @@ CREATE INDEX user_resource_user_id_idx ON user_resource (user_id);
 CREATE INDEX user_resource_list_id_idx ON user_resource (list_id);
 
 
--- 
+--
 -- Table structure for table session
--- 
+--
 
 DROP TABLE IF EXISTS "session";
 
@@ -244,21 +244,45 @@ PRIMARY KEY (id)
 
 -- --------------------------------------------------------
 
--- 
+--
+-- Table structure for table `user_card`
+--
+
+DROP TABLE IF EXISTS "user_card";
+
+CREATE TABLE `user_card` (
+id SERIAL,
+user_id int NOT NULL,
+card_name varchar(255) NOT NULL DEFAULT '',
+cat_username varchar(50) NOT NULL DEFAULT '',
+cat_password varchar(50) DEFAULT NULL,
+cat_pass_enc varchar(110) DEFAULT NULL,
+home_library varchar(100) NOT NULL DEFAULT '',
+created timestamp NOT NULL DEFAULT '1970-01-01 00:00:00',
+saved timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+PRIMARY KEY (id),
+CONSTRAINT user_card_ibfk_1 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE
+);
+CREATE INDEX user_card_cat_username_idx ON user_card (cat_username);
+CREATE INDEX user_card_user_id_idx ON user_card (user_id);
+
+-- --------------------------------------------------------
+
+--
 -- Constraints for dumped tables
--- 
+--
 
--- 
+--
 -- Constraints for table comments
--- 
+--
 ALTER TABLE comments
 ADD CONSTRAINT comments_ibfk_1 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE,
 ADD CONSTRAINT comments_ibfk_2 FOREIGN KEY (resource_id) REFERENCES resource (id) ON DELETE CASCADE;
 
 
--- 
+--
 -- Constraints for table resource_tags
--- 
+--
 ALTER TABLE resource_tags
 ADD CONSTRAINT resource_tags_ibfk_14 FOREIGN KEY (resource_id) REFERENCES resource (id) ON DELETE CASCADE,
 ADD CONSTRAINT resource_tags_ibfk_15 FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE CASCADE,
@@ -266,16 +290,16 @@ ADD CONSTRAINT resource_tags_ibfk_16 FOREIGN KEY (list_id) REFERENCES user_list
 ADD CONSTRAINT resource_tags_ibfk_17 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE SET NULL;
 
 
--- 
+--
 -- Constraints for table user_list
--- 
+--
 ALTER TABLE user_list
 ADD CONSTRAINT user_list_ibfk_1 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE;
 
 
--- 
+--
 -- Constraints for table user_resource
--- 
+--
 ALTER TABLE user_resource
 ADD CONSTRAINT user_resource_ibfk_3 FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE,
 ADD CONSTRAINT user_resource_ibfk_4 FOREIGN KEY (resource_id) REFERENCES resource (id) ON DELETE CASCADE,
diff --git a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
index f0b08a37c75e93c1eb5b3c3c49b316857e88031a..c2cd90945229179d746fa13e7ab72612ccebd6ad 100644
--- a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
+++ b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
@@ -207,6 +207,7 @@ class ChoiceAuth extends AbstractBase
      *
      * @param string $url URL to redirect user to after logging out.
      *
+     * @throws InvalidArgumentException
      * @return string     Redirect URL (usually same as $url, but modified in
      * some authentication modules).
      */
@@ -219,8 +220,15 @@ class ChoiceAuth extends AbstractBase
 
         // If we have a selected strategy, proxy the appropriate class; otherwise,
         // perform default behavior of returning unmodified URL:
-        return $this->strategy
-            ? $this->proxyAuthMethod('logout', func_get_args()) : $url;
+        try {
+            return $this->strategy
+                ? $this->proxyAuthMethod('logout', func_get_args()) : $url;
+        } catch (InvalidArgumentException $e) {
+            // If we're in an invalid state (due to an illegal login method),
+            // we should just clear everything out so the user can try again.
+            $this->strategy = false;
+            return false;
+        }
     }
 
     /**
@@ -302,7 +310,7 @@ class ChoiceAuth extends AbstractBase
         }
 
         if (!in_array($this->strategy, $this->strategies)) {
-            throw new \Exception("Illegal setting: {$this->strategy}");
+            throw new InvalidArgumentException("Illegal setting: {$this->strategy}");
         }
         $authenticator = $this->getPluginManager()->get($this->strategy);
         $authenticator->setConfig($this->getConfig());
diff --git a/module/VuFind/src/VuFind/Auth/Database.php b/module/VuFind/src/VuFind/Auth/Database.php
index 8d930d16eba001d390d53004f4ba773ddee21a47..f350266aa995b411b6be4d30d6c9826b623dc6a6 100644
--- a/module/VuFind/src/VuFind/Auth/Database.php
+++ b/module/VuFind/src/VuFind/Auth/Database.php
@@ -141,23 +141,18 @@ class Database extends AbstractBase
         }
 
         // If we got this far, we're ready to create the account:
-        $data = [
-            'username'  => $params['username'],
-            'firstname' => $params['firstname'],
-            'lastname'  => $params['lastname'],
-            'email'     => $params['email'],
-            'created'   => date('Y-m-d H:i:s')
-        ];
-
+        $user = $table->createRowForUsername($params['username']);
+        $user->firstname = $params['firstname'];
+        $user->lastname = $params['lastname'];
+        $user->email = $params['email'];
         if ($this->passwordHashingEnabled()) {
             $bcrypt = new Bcrypt();
-            $data['pass_hash'] = $bcrypt->create($params['password']);
+            $user->pass_hash = $bcrypt->create($params['password']);
         } else {
-            $data['password'] = $params['password'];
+            $user->password = $params['password'];
         }
-        // Create the row and send it back to the caller:
-        $table->insert($data);
-        return $table->getByUsername($params['username'], false);
+        $user->save();
+        return $user;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Auth/InvalidArgumentException.php b/module/VuFind/src/VuFind/Auth/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ae825f3f017f9068e2d235abcfd604b4c78757d
--- /dev/null
+++ b/module/VuFind/src/VuFind/Auth/InvalidArgumentException.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Invalid Authentication Argument Exception
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2011.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Exceptions
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
+ */
+namespace VuFind\Auth;
+
+/**
+ * Invalid Authentication Argument Exception
+ *
+ * @category VuFind2
+ * @package  Exceptions
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
+ */
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Auth/Manager.php b/module/VuFind/src/VuFind/Auth/Manager.php
index ac0e2cc6f1aca51ab245639f07c9910a6b83cecc..d4b0fa0eca53397ee1b0c80d02aed56e5ee1e7e9 100644
--- a/module/VuFind/src/VuFind/Auth/Manager.php
+++ b/module/VuFind/src/VuFind/Auth/Manager.php
@@ -248,7 +248,22 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
      */
     public function getSessionInitiator($target)
     {
-        return $this->getAuth()->getSessionInitiator($target);
+        try {
+            return $this->getAuth()->getSessionInitiator($target);
+        } catch (InvalidArgumentException $e) {
+            // If the authentication is in an illegal state but there is an
+            // active user session, we should clear everything out so the user
+            // can try again. This is useful, for example, if a user is logged
+            // in at the same time that an administrator changes the [ChoiceAuth]
+            // settings in config.ini. However, if the user is not logged in,
+            // they are probably attempting something nasty and should be given
+            // an error message.
+            if (!$this->isLoggedIn()) {
+                throw $e;
+            }
+            $this->logout('');
+            return $this->getAuth()->getSessionInitiator($target);
+        }
     }
 
     /**
@@ -409,7 +424,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
      */
     public function getIdentity()
     {
-        return ($user = $this->isLoggedIn()) ?: null;
+        return $this->isLoggedIn() ?: null;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Autocomplete/Solr.php b/module/VuFind/src/VuFind/Autocomplete/Solr.php
index de819dfeb6dd535c0d8de64b9925c55341d979ee..e3cceec2d65f8a950ddd37257e84c2c611c90f16 100644
--- a/module/VuFind/src/VuFind/Autocomplete/Solr.php
+++ b/module/VuFind/src/VuFind/Autocomplete/Solr.php
@@ -148,7 +148,6 @@ class Solr implements AutocompleteInterface
         // Build a new search object:
         $this->searchObject = $this->resultsManager->get($this->searchClassId);
         $this->searchObject->getOptions()->spellcheckEnabled(false);
-        $this->searchObject->getParams()->recommendationsEnabled(false);
     }
 
     /**
@@ -207,7 +206,7 @@ class Solr implements AutocompleteInterface
         } catch (\Exception $e) {
             // Ignore errors -- just return empty results if we must.
         }
-        return array_unique($results);
+        return isset($results) ? array_unique($results) : [];
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Bootstrapper.php b/module/VuFind/src/VuFind/Bootstrapper.php
index 8f31b5d13f6edbcde16f06a94e4577645410610b..4c80683c42c494b749468d9c4194627530ff90d5 100644
--- a/module/VuFind/src/VuFind/Bootstrapper.php
+++ b/module/VuFind/src/VuFind/Bootstrapper.php
@@ -343,8 +343,8 @@ class Bootstrapper
             $viewModel->setVariable('userLang', $language);
             $viewModel->setVariable('allLangs', $config->Languages);
         };
-        $this->events->attach('dispatch.error', $callback, 9000);
-        $this->events->attach('dispatch', $callback, 9000);
+        $this->events->attach('dispatch.error', $callback, 10000);
+        $this->events->attach('dispatch', $callback, 10000);
     }
 
     /**
@@ -371,8 +371,8 @@ class Bootstrapper
             $theme = new \VuFindTheme\Initializer($config, $event);
             $theme->init();
         };
-        $this->events->attach('dispatch.error', $callback, 10000);
-        $this->events->attach('dispatch', $callback, 10000);
+        $this->events->attach('dispatch.error', $callback, 9000);
+        $this->events->attach('dispatch', $callback, 9000);
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Content/Reviews/Amazon.php b/module/VuFind/src/VuFind/Content/Reviews/Amazon.php
index 63b31ea75d17e990bba6e17a9ce1364ac5157f19..99c0f9039e59571177a2c6bac0d2d52d22710593 100644
--- a/module/VuFind/src/VuFind/Content/Reviews/Amazon.php
+++ b/module/VuFind/src/VuFind/Content/Reviews/Amazon.php
@@ -120,6 +120,8 @@ class Amazon extends \VuFind\Content\AbstractAmazon
                 // CSS for iframe (explicit dimensions needed for IE
                 // compatibility -- using 100% has bad results there):
                 $css = "width: 700px; height: 500px;";
+                // Replacement for http/https compatibility
+                $iframe = str_replace('http://', '//', $iframe);
                 $result[] = [
                     'Rating' => '',
                     'Summary' => '',
diff --git a/module/VuFind/src/VuFind/Controller/AbstractBase.php b/module/VuFind/src/VuFind/Controller/AbstractBase.php
index e79136759def4c6d63725ee6a2d6f649be518785..db3c3733d45230c8f721375e3159433575b45d23 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractBase.php
@@ -417,6 +417,11 @@ class AbstractBase extends AbstractActionController
         if (($username = $this->params()->fromPost('cat_username', false))
             && ($password = $this->params()->fromPost('cat_password', false))
         ) {
+            // Check for multiple ILS target selection
+            $target = $this->params()->fromPost('target', false);
+            if ($target) {
+                $username = "$target.$username";
+            }
             $patron = $ilsAuth->newCatalogLogin($username, $password);
 
             // If login failed, store a warning message:
diff --git a/module/VuFind/src/VuFind/Controller/AbstractRecord.php b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
index 74a2e1049d73df5d35d72f93074371c0d3c779a4..f6cd9e6fa36822a6bf7687c6cf75076ddf3d4570 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractRecord.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
@@ -185,10 +185,11 @@ class AbstractRecord extends AbstractBase
         $driver = $this->loadRecord();
 
         // Save tags, if any:
-        if ($this->formWasSubmitted('submit')) {
-            $tags = $this->params()->fromPost('tag');
+        if ($tags = $this->params()->fromPost('tag')) {
             $tagParser = $this->getServiceLocator()->get('VuFind\Tags');
             $driver->addTags($user, $tagParser->parse($tags));
+            $this->flashMessenger()->setNamespace('info')
+                ->addMessage(['msg' => 'add_tag_success']);
             return $this->redirectToRecord();
         }
 
@@ -198,6 +199,41 @@ class AbstractRecord extends AbstractBase
         return $view;
     }
 
+    /**
+     * Delete a tag
+     *
+     * @return mixed
+     */
+    public function deletetagAction()
+    {
+        // Make sure tags are enabled:
+        if (!$this->tagsEnabled()) {
+            throw new \Exception('Tags disabled');
+        }
+
+        // Force login:
+        if (!($user = $this->getUser())) {
+            return $this->forceLogin();
+        }
+
+        // Obtain the current record object:
+        $driver = $this->loadRecord();
+
+        // Save tags, if any:
+        if ($tag = $this->params()->fromPost('tag')) {
+            $driver->deleteTags($user, [$tag]);
+            $this->flashMessenger()->setNamespace('info')
+                ->addMessage(
+                    [
+                        'msg' => 'tags_deleted',
+                        'tokens' => ['%count%' => 1]
+                    ]
+                );
+        }
+
+        return $this->redirectToRecord();
+    }
+
     /**
      * Home (default) action -- forward to requested (or default) tab.
      *
diff --git a/module/VuFind/src/VuFind/Controller/AbstractSearch.php b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
index 73f719155770146deaba230fa694505e9ea939c0..955150fe9bb19ddbc9da957578624f202051141c 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractSearch.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
@@ -26,7 +26,7 @@
  * @link     http://www.vufind.org  Main Page
  */
 namespace VuFind\Controller;
-use VuFind\Solr\Utils as SolrUtils;
+use VuFind\Search\RecommendListener, VuFind\Solr\Utils as SolrUtils;
 use Zend\Stdlib\Parameters;
 
 /**
@@ -201,7 +201,7 @@ class AbstractSearch extends AbstractBase
     protected function getActiveRecommendationSettings()
     {
         // Enable recommendations unless explicitly told to disable them:
-        $all = ['top', 'side', 'noresults'];
+        $all = ['top', 'side', 'noresults', 'bottom'];
         $noRecommend = $this->params()->fromQuery('noRecommend', false);
         if ($noRecommend === 1 || $noRecommend === '1'
             || $noRecommend === 'true' || $noRecommend === true
@@ -217,6 +217,47 @@ class AbstractSearch extends AbstractBase
         );
     }
 
+    /**
+     * Get a callback for setting up a search (or null if callback is unnecessary).
+     *
+     * @return mixed
+     */
+    protected function getSearchSetupCallback()
+    {
+        // Setup callback to attach listener if appropriate:
+        $activeRecs = $this->getActiveRecommendationSettings();
+        if (empty($activeRecs)) {
+            return null;
+        }
+
+        $rManager = $this->getServiceLocator()->get('VuFind\RecommendPluginManager');
+
+        // Special case: override recommend settings through parameter (used by
+        // combined search)
+        if ($override = $this->params()->fromQuery('recommendOverride')) {
+            return function ($runner, $p, $searchId) use ($rManager, $override) {
+                $listener = new RecommendListener($rManager, $searchId);
+                $listener->setConfig($override);
+                $listener->attach($runner->getEventManager()->getSharedManager());
+            };
+        }
+
+        // Standard case: retrieve recommend settings from params object:
+        return function ($runner, $params, $searchId) use ($rManager, $activeRecs) {
+            $listener = new RecommendListener($rManager, $searchId);
+            $config = [];
+            $rawConfig = $params->getOptions()
+                ->getRecommendationSettings($params->getSearchHandler());
+            foreach ($rawConfig as $key => $value) {
+                if (in_array($key, $activeRecs)) {
+                    $config[$key] = $value;
+                }
+            }
+            $listener->setConfig($config);
+            $listener->attach($runner->getEventManager()->getSharedManager());
+        };
+    }
+
     /**
      * Send search results to results view
      *
@@ -232,36 +273,30 @@ class AbstractSearch extends AbstractBase
             return $this->redirectToSavedSearch($savedId);
         }
 
-        $results = $this->getResultsManager()->get($this->searchClassId);
-        $params = $results->getParams();
-        $params->recommendationsEnabled($this->getActiveRecommendationSettings());
+        $runner = $this->getServiceLocator()->get('VuFind\SearchRunner');
 
         // Send both GET and POST variables to search class:
-        $params->initFromRequest(
-            new Parameters(
-                $this->getRequest()->getQuery()->toArray()
-                + $this->getRequest()->getPost()->toArray()
-            )
-        );
-
-        // Make parameters available to the view:
-        $view->params = $params;
-
-        // Attempt to perform the search; if there is a problem, inspect any Solr
-        // exceptions to see if we should communicate to the user about them.
-        try {
-            // Explicitly execute search within controller -- this allows us to
-            // catch exceptions more reliably:
-            $results->performAndProcessSearch();
+        $request = $this->getRequest()->getQuery()->toArray()
+            + $this->getRequest()->getPost()->toArray();
 
+        $view->results = $results = $runner->run(
+            $request, $this->searchClassId, $this->getSearchSetupCallback()
+        );
+        $view->params = $results->getParams();
+
+        // If we received an EmptySet back, that indicates that the real search
+        // failed due to some kind of syntax error, and we should display a
+        // warning to the user; otherwise, we should proceed with normal post-search
+        // processing.
+        if ($results instanceof \VuFind\Search\EmptySet\Results) {
+            $view->parseError = true;
+        } else {
             // If a "jumpto" parameter is set, deal with that now:
             if ($jump = $this->processJumpTo($results)) {
                 return $jump;
             }
 
-            // Send results to the view and remember the current URL as the last
-            // search.
-            $view->results = $results;
+            // Remember the current URL as the last search.
             $this->rememberSearch($results);
 
             // Add to search history:
@@ -282,22 +317,8 @@ class AbstractSearch extends AbstractBase
             if ($this->resultScrollerActive()) {
                 $this->resultScroller()->init($results);
             }
-        } catch (\VuFindSearch\Backend\Exception\BackendException $e) {
-            if ($e->hasTag('VuFind\Search\ParserError')) {
-                // If it's a parse error or the user specified an invalid field, we
-                // should display an appropriate message:
-                $view->parseError = true;
-
-                // We need to create and process an "empty results" object to
-                // ensure that recommendation modules and templates behave
-                // properly when displaying the error message.
-                $view->results = $this->getResultsManager()->get('EmptySet');
-                $view->results->setParams($params);
-                $view->results->performAndProcessSearch();
-            } else {
-                throw $e;
-            }
         }
+
         // Save statistics:
         if ($this->logStatistics) {
             $this->getServiceLocator()->get('VuFind\SearchStats')
@@ -305,9 +326,7 @@ class AbstractSearch extends AbstractBase
         }
 
         // Special case: If we're in RSS view, we need to render differently:
-        if (isset($view->results)
-            && $view->results->getParams()->getView() == 'rss'
-        ) {
+        if (isset($view->params) && $view->params->getView() == 'rss') {
             $response = $this->getResponse();
             $response->getHeaders()->addHeaderLine('Content-type', 'text/xml');
             $feed = $this->getViewRenderer()->plugin('resultfeed');
@@ -386,9 +405,13 @@ class AbstractSearch extends AbstractBase
 
         // Fail if this is not the right type of search:
         if ($savedSearch->getParams()->getSearchType() != 'advanced') {
-            $this->flashMessenger()->setNamespace('error')
-                ->addMessage('advSearchError_notAdvanced');
-            return false;
+            try {
+                $savedSearch->getParams()->convertToAdvancedSearch();
+            } catch (\Exception $ex) {
+                $this->flashMessenger()->setNamespace('error')
+                    ->addMessage('advSearchError_notAdvanced');
+                return false;
+            }
         }
 
         // Activate facets so we get appropriate descriptions in the filter list:
diff --git a/module/VuFind/src/VuFind/Controller/AjaxController.php b/module/VuFind/src/VuFind/Controller/AjaxController.php
index 054a0230e855ba6b4d392bdc91e15e4561b8ae11..7089d8e119cdf0c6f5746c52a2b71bb46f012f31 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxController.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxController.php
@@ -636,11 +636,15 @@ class AjaxController extends AbstractBase
             $tag = $this->params()->fromPost('tag', '');
             $tagParser = $this->getServiceLocator()->get('VuFind\Tags');
             if (strlen($tag) > 0) { // don't add empty tags
-                $driver->addTags($user, $tagParser->parse($tag));
+                if ('false' === $this->params()->fromPost('remove', 'false')) {
+                    $driver->addTags($user, $tagParser->parse($tag));
+                } else {
+                    $driver->deleteTags($user, $tagParser->parse($tag));
+                }
             }
         } catch (\Exception $e) {
             return $this->output(
-                $this->translate('Failed'),
+                ('development' == APPLICATION_ENV) ? $e->getMessage() : 'Failed',
                 self::STATUS_ERROR
             );
         }
@@ -655,27 +659,36 @@ class AjaxController extends AbstractBase
      */
     protected function getRecordTagsAjax()
     {
+        $user = $this->getUser();
+        $is_me_id = null === $user ? null : $user->id;
         // Retrieve from database:
         $tagTable = $this->getTable('Tags');
         $tags = $tagTable->getForResource(
             $this->params()->fromQuery('id'),
-            $this->params()->fromQuery('source', 'VuFind')
+            $this->params()->fromQuery('source', 'VuFind'),
+            0, null, null, 'count', $is_me_id
         );
 
         // Build data structure for return:
         $tagList = [];
         foreach ($tags as $tag) {
-            $tagList[] = ['tag' => $tag->tag, 'cnt' => $tag->cnt];
-        }
-
-        // If we don't have any tags, provide a user-appropriate message:
-        if (empty($tagList)) {
-            $msg = $this->translate('No Tags') . ', ' .
-                $this->translate('Be the first to tag this record') . '!';
-            return $this->output($msg, self::STATUS_ERROR);
+            $tagList[] = [
+                'tag'   => $tag->tag,
+                'cnt'   => $tag->cnt,
+                'is_me' => $tag->is_me == 1 ? true : false
+            ];
         }
 
-        return $this->output($tagList, self::STATUS_OK);
+        // Set layout to render the page inside a lightbox:
+        $this->layout()->setTemplate('layout/lightbox');
+        $view = $this->createViewModel(
+            [
+                'tagList' => $tagList,
+                'loggedin' => null !== $user
+            ]
+        );
+        $view->setTemplate('record/taglist');
+        return $view;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Controller/AuthorController.php b/module/VuFind/src/VuFind/Controller/AuthorController.php
index a64233c56d0df363b3487e6efd43c4216153c4e4..c69dd31f0036fdf66273883acbfb166fb332ffda 100644
--- a/module/VuFind/src/VuFind/Controller/AuthorController.php
+++ b/module/VuFind/src/VuFind/Controller/AuthorController.php
@@ -46,7 +46,14 @@ class AuthorController extends AbstractSearch
     public function resultsAction()
     {
         $this->searchClassId = 'SolrAuthor';
-        $this->saveToHistory = false;
+
+        // Save author searches if next_prev_navigation is enabled - otherwise
+        // there are wacky results when trying to page through results (the
+        // next/prev links only appear for records which were included in the
+        // results for the previous keyword search, and the next/prev links will
+        // iterate you through that search).
+        $this->saveToHistory = $this->resultScrollerActive();
+
         return parent::resultsAction();
     }
 
@@ -78,5 +85,17 @@ class AuthorController extends AbstractSearch
         }
         return $this->createViewModel();
     }
+
+    /**
+     * Is the result scroller active?
+     *
+     * @return bool
+     */
+    protected function resultScrollerActive()
+    {
+        $config = $this->getServiceLocator()->get('VuFind\Config')->get('config');
+        return (isset($config->Record->next_prev_navigation)
+            && $config->Record->next_prev_navigation);
+    }
 }
 
diff --git a/module/VuFind/src/VuFind/Controller/BrowseController.php b/module/VuFind/src/VuFind/Controller/BrowseController.php
index a7576dd4f4df8cf17b638a5df2c5e82a29520fdc..3d57b46eea83d5e354f349dde6ac2b9582d9c808 100644
--- a/module/VuFind/src/VuFind/Controller/BrowseController.php
+++ b/module/VuFind/src/VuFind/Controller/BrowseController.php
@@ -356,7 +356,7 @@ class BrowseController extends AbstractBase
             'query_field' => 'callnumber-first',
             'facet_field' => 'callnumber-subject'
         ];
-        $view->searchParams = [];
+        $view->searchParams = ['sort' => 'callnumber-sort'];
         return $this->performSearch($view);
     }
 
@@ -378,6 +378,7 @@ class BrowseController extends AbstractBase
             ];
         }
         $view->categoryList = $categoryList;
+        $view->dewey_flag = 1;
         if ($this->params()->fromQuery('findby')) {
             $secondaryList = $this->quoteValues(
                 $this->getFacetList(
@@ -397,6 +398,7 @@ class BrowseController extends AbstractBase
                 'query_field' => 'dewey-tens',
                 'facet_field' => 'dewey-ones'
             ];
+            $view->searchParams = ['sort' => 'dewey-sort'];
         }
         return $this->performSearch($view);
     }
@@ -596,7 +598,6 @@ class BrowseController extends AbstractBase
         $params->setOverrideQuery($query);
         $params->getOptions()->disableHighlighting();
         $params->getOptions()->spellcheckEnabled(false);
-        $params->recommendationsEnabled(false);
         // Get limit from config
         $params->setFacetLimit($this->config->Browse->result_limit);
         $params->setLimit(0);
diff --git a/module/VuFind/src/VuFind/Controller/CombinedController.php b/module/VuFind/src/VuFind/Controller/CombinedController.php
index 44d68f918ffe6cb5582468aa7ae052f318d32c47..fb319fda7d44793965d446cbdd9be690498c2f1c 100644
--- a/module/VuFind/src/VuFind/Controller/CombinedController.php
+++ b/module/VuFind/src/VuFind/Controller/CombinedController.php
@@ -26,7 +26,6 @@
  * @link     http://vufind.org   Main Site
  */
 namespace VuFind\Controller;
-use Zend\Stdlib\Parameters;
 
 /**
  * Redirects the user to the appropriate default VuFind action.
@@ -131,14 +130,10 @@ class CombinedController extends AbstractSearch
     public function resultsAction()
     {
         // Set up current request context:
-        $results = $this->getResultsManager()->get('Combined');
-        $params = $results->getParams();
-        $params->recommendationsEnabled(true);
-        $params->initFromRequest(
-            new Parameters(
-                $this->getRequest()->getQuery()->toArray()
-                + $this->getRequest()->getPost()->toArray()
-            )
+        $request = $this->getRequest()->getQuery()->toArray()
+            + $this->getRequest()->getPost()->toArray();
+        $results = $this->getServiceLocator()->get('VuFind\SearchRunner')->run(
+            $request, 'Combined', $this->getSearchSetupCallback()
         );
 
         // Remember the current URL, then disable memory so multi-search results
@@ -203,7 +198,7 @@ class CombinedController extends AbstractSearch
                 'columns' => $columns,
                 'combinedResults' => $combinedResults,
                 'config' => $config,
-                'params' => $params,
+                'params' => $results->getParams(),
                 'placement' => $placement,
                 'results' => $results,
                 'supportsCart' => $supportsCart,
@@ -261,8 +256,22 @@ class CombinedController extends AbstractSearch
         $query = $this->getRequest()->getQuery();
         $query->limit = isset($settings['limit']) ? $settings['limit'] : null;
 
-        // Disable top/side recommendations but leave noresults active:
-        $query->noRecommend = 'top,side';
+        // Reset override to avoid bleed-over from one section to the next!
+        $query->recommendOverride = false;
+
+        // Always leave noresults active (useful for 0-hit searches) and
+        // side inactive (no room to display) but display or hide top based
+        // on include_recommendations setting.
+        if (isset($settings['include_recommendations'])
+            && $settings['include_recommendations']
+        ) {
+            $query->noRecommend = 'side';
+            if (is_array($settings['include_recommendations'])) {
+                $query->recommendOverride
+                    = ['top' => $settings['include_recommendations']];
+            }
+        } else {
+            $query->noRecommend = 'top,side';
+        }
     }
 }
-
diff --git a/module/VuFind/src/VuFind/Controller/LibraryCardsController.php b/module/VuFind/src/VuFind/Controller/LibraryCardsController.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad9020eaf67db5003be9c25a5361fa30cc190243
--- /dev/null
+++ b/module/VuFind/src/VuFind/Controller/LibraryCardsController.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * LibraryCards Controller
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Controller
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Controller;
+
+/**
+ * Controller for the library card functionality.
+ *
+ * @category VuFind2
+ * @package  Controller
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class LibraryCardsController extends AbstractBase
+{
+    /**
+     * Send user's library cards to the view
+     *
+     * @return mixed
+     */
+    public function homeAction()
+    {
+        if (!($user = $this->getUser())) {
+            return $this->forceLogin();
+        }
+
+        // Check for "delete card" request; parameter may be in GET or POST depending
+        // on calling context.
+        $deleteId = $this->params()->fromPost(
+            'delete', $this->params()->fromQuery('delete')
+        );
+        if ($deleteId) {
+            // If the user already confirmed the operation, perform the delete now;
+            // otherwise prompt for confirmation:
+            $confirm = $this->params()->fromPost(
+                'confirm', $this->params()->fromQuery('confirm')
+            );
+            if ($confirm) {
+                $success = $this->performDeleteLibraryCard($deleteId);
+                if ($success !== true) {
+                    return $success;
+                }
+            } else {
+                return $this->confirmDeleteLibraryCard($deleteId);
+            }
+        }
+
+        // Connect to the ILS for login drivers:
+        $catalog = $this->getILS();
+
+        return $this->createViewModel(
+            [
+                'libraryCards' => $user->getLibraryCards(),
+                'multipleTargets' => $catalog->checkCapability('getLoginDrivers')
+            ]
+        );
+    }
+
+    /**
+     * Send user's library card to the edit view
+     *
+     * @return mixed
+     */
+    public function editCardAction()
+    {
+        // User must be logged in to edit library cards:
+        $user = $this->getUser();
+        if ($user == false) {
+            return $this->forceLogin();
+        }
+
+        // Process form submission:
+        if ($this->formWasSubmitted('submit')) {
+            if ($redirect = $this->processEditLibraryCard($user)) {
+                return $redirect;
+            }
+        }
+
+        $id = $this->params()->fromRoute('id', $this->params()->fromQuery('id'));
+        $card = $user->getLibraryCard($id == 'NEW' ? null : $id);
+
+        $target = null;
+        $username = $card->cat_username;
+        $targets = null;
+        $defaultTarget = null;
+        // Connect to the ILS and check if multiple target support is available:
+        $catalog = $this->getILS();
+        if ($catalog->checkCapability('getLoginDrivers')) {
+            $targets = $catalog->getLoginDrivers();
+            $defaultTarget = $catalog->getDefaultLoginDriver();
+            if (strstr($username, '.')) {
+                list($target, $username) = explode('.', $username, 2);
+            }
+        }
+        $cardName = $this->params()->fromPost('card_name', $card->card_name);
+        $username = $this->params()->fromPost('username', $username);
+        $target = $this->params()->fromPost('target', $target);
+
+        // Send the card to the view:
+        return $this->createViewModel(
+            [
+                'card' => $card,
+                'cardName' => $cardName,
+                'target' => $target ? $target : $defaultTarget,
+                'username' => $username,
+                'password' => $card->cat_password,
+                'targets' => $targets,
+                'defaultTarget' => $defaultTarget
+            ]
+        );
+    }
+
+    /**
+     * Creates a confirmation box to delete or not delete the current list
+     *
+     * @return mixed
+     */
+    public function deleteCardAction()
+    {
+        // User must be logged in to edit library cards:
+        $user = $this->getUser();
+        if ($user == false) {
+            return $this->forceLogin();
+        }
+
+        // Get requested library card ID:
+        $cardID = $this->params()
+            ->fromPost('cardID', $this->params()->fromQuery('cardID'));
+
+        // Have we confirmed this?
+        $confirm = $this->params()->fromPost(
+            'confirm', $this->params()->fromQuery('confirm')
+        );
+        if ($confirm) {
+            $user->deleteLibraryCard($cardID);
+
+            // Success Message
+            $this->flashMessenger()->setNamespace('info')
+                ->addMessage('Library Card Deleted');
+            // Redirect to MyResearch library cards
+            return $this->redirect()->toRoute('librarycards-home');
+        }
+
+        // If we got this far, we must display a confirmation message:
+        return $this->confirm(
+            'confirm_delete_library_card_brief',
+            $this->url()->fromRoute('librarycards-deletecard'),
+            $this->url()->fromRoute('librarycards-home'),
+            'confirm_delete_library_card_text', ['cardID' => $cardID]
+        );
+    }
+
+    /**
+     * Activates a library card
+     *
+     * @return \Zend\Http\Response
+     */
+    public function selectCardAction()
+    {
+        $user = $this->getUser();
+        if ($user == false) {
+            return $this->forceLogin();
+        }
+
+        $cardID = $this->params()->fromQuery('cardID');
+        $user->activateLibraryCard($cardID);
+
+        $this->setFollowupUrlToReferer();
+        if ($url = $this->getFollowupUrl()) {
+            $this->clearFollowupUrl();
+            return $this->redirect()->toUrl($url);
+        }
+        return $this->redirect()->toRoute('myresearch-home');
+    }
+
+    /**
+     * Process the "edit library card" submission.
+     *
+     * @param \VuFind\Db\Row\User $user Logged in user
+     *
+     * @return object|bool        Response object if redirect is
+     * needed, false if form needs to be redisplayed.
+     */
+    protected function processEditLibraryCard($user)
+    {
+        $cardName = $this->params()->fromPost('card_name', '');
+        $target = $this->params()->fromPost('target', '');
+        $username = $this->params()->fromPost('username', '');
+        $password = $this->params()->fromPost('password', '');
+
+        if (!$username || !$password) {
+            $this->flashMessenger()->setNamespace('error')
+                ->addMessage('authentication_error_blank');
+            return false;
+        }
+
+        if ($target) {
+            $username = "$target.$username";
+        }
+
+        // Connect to the ILS and check that the credentials are correct:
+        $catalog = $this->getILS();
+        $patron = $catalog->patronLogin($username, $password);
+        if (!$patron) {
+            $this->flashMessenger()->setNamespace('error')
+                ->addMessage('authentication_error_invalid');
+            return false;
+        }
+
+        $id = $this->params()->fromRoute('id', $this->params()->fromQuery('id'));
+        try {
+            $user->saveLibraryCard(
+                $id == 'NEW' ? null : $id, $cardName, $username, $password
+            );
+        } catch(\VuFind\Exception\LibraryCard $e) {
+            $this->flashMessenger()->setNamespace('error')
+                ->addMessage($e->getMessage());
+            return false;
+        }
+
+        return $this->redirect()->toRoute('librarycards-home');
+    }
+}
diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php
index 4f572a3bc0505f4a3aee2edcb33dafc9a547dbba..7f5329af3cee17dc78c20c5465a472617934d756 100644
--- a/module/VuFind/src/VuFind/Controller/MyResearchController.php
+++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php
@@ -31,7 +31,7 @@ use VuFind\Exception\Auth as AuthException,
     VuFind\Exception\Mail as MailException,
     VuFind\Exception\ListPermission as ListPermissionException,
     VuFind\Exception\RecordMissing as RecordMissingException,
-    Zend\Stdlib\Parameters;
+    VuFind\Search\RecommendListener, Zend\Stdlib\Parameters;
 
 /**
  * Controller for the user account area.
@@ -357,8 +357,13 @@ class MyResearchController extends AbstractBase
      */
     public function catalogloginAction()
     {
-        // No special action needed -- just display form
-        return $this->createViewModel();
+        // Connect to the ILS and check if multiple target support is available:
+        $targets = null;
+        $catalog = $this->getILS();
+        if ($catalog->checkCapability('getLoginDrivers')) {
+            $targets = $catalog->getLoginDrivers();
+        }
+        return $this->createViewModel(['targets' => $targets]);
     }
 
     /**
@@ -450,7 +455,7 @@ class MyResearchController extends AbstractBase
         }
 
         // Perform delete and send appropriate flash message:
-        if (!is_null($listID)) {
+        if (null !== $listID) {
             // ...Specific List
             $table = $this->getTable('UserList');
             $list = $table->getExisting($listID);
@@ -636,24 +641,28 @@ class MyResearchController extends AbstractBase
 
         // If we got this far, we just need to display the favorites:
         try {
-            $results = $this->getServiceLocator()
-                ->get('VuFind\SearchResultsPluginManager')->get('Favorites');
-            $params = $results->getParams();
-            $params->setAuthManager($this->getAuthManager());
+            $runner = $this->getServiceLocator()->get('VuFind\SearchRunner');
 
             // We want to merge together GET, POST and route parameters to
             // initialize our search object:
-            $params->initFromRequest(
-                new Parameters(
-                    $this->getRequest()->getQuery()->toArray()
-                    + $this->getRequest()->getPost()->toArray()
-                    + ['id' => $this->params()->fromRoute('id')]
-                )
-            );
+            $request = $this->getRequest()->getQuery()->toArray()
+                + $this->getRequest()->getPost()->toArray()
+                + ['id' => $this->params()->fromRoute('id')];
+
+            // Set up listener for recommendations:
+            $rManager = $this->getServiceLocator()
+                ->get('VuFind\RecommendPluginManager');
+            $setupCallback = function ($runner, $params, $searchId) use ($rManager) {
+                $listener = new RecommendListener($rManager, $searchId);
+                $listener->setConfig(
+                    $params->getOptions()->getRecommendationSettings()
+                );
+                $listener->attach($runner->getEventManager()->getSharedManager());
+            };
 
-            $results->performAndProcessSearch();
+            $results = $runner->run($request, 'Favorites', $setupCallback);
             return $this->createViewModel(
-                ['params' => $params, 'results' => $results]
+                ['params' => $results->getParams(), 'results' => $results]
             );
         } catch (ListPermissionException $e) {
             if (!$this->getUser()) {
@@ -1048,8 +1057,28 @@ class MyResearchController extends AbstractBase
 
         // Get checked out item details:
         $result = $catalog->getMyTransactions($patron);
-        $transactions = [];
-        foreach ($result as $current) {
+
+        // Get page size:
+        $config = $this->getConfig();
+        $limit = isset($config->Catalog->checked_out_page_size)
+            ? $config->Catalog->checked_out_page_size : 50;
+
+        // Build paginator if needed:
+        if ($limit > 0 && $limit < count($result)) {
+            $adapter = new \Zend\Paginator\Adapter\ArrayAdapter($result);
+            $paginator = new \Zend\Paginator\Paginator($adapter);
+            $paginator->setItemCountPerPage($limit);
+            $paginator->setCurrentPageNumber($this->params()->fromQuery('page', 1));
+            $pageStart = $paginator->getAbsoluteItemNumber(1) - 1;
+            $pageEnd = $paginator->getAbsoluteItemNumber($limit) - 1;
+        } else {
+            $paginator = false;
+            $pageStart = 0;
+            $pageEnd = count($result);
+        }
+
+        $transactions = $hiddenTransactions = [];
+        foreach ($result as $i => $current) {
             // Add renewal details if appropriate:
             $current = $this->renewals()->addRenewDetails(
                 $catalog, $current, $renewStatus
@@ -1061,15 +1090,19 @@ class MyResearchController extends AbstractBase
                 $renewForm = true;
             }
 
-            // Build record driver:
-            $transactions[] = $this->getDriverForILSRecord($current);
+            // Build record driver (only for the current visible page):
+            if ($i >= $pageStart && $i <= $pageEnd) {
+                $transactions[] = $this->getDriverForILSRecord($current);
+            } else {
+                $hiddenTransactions[] = $current;
+            }
         }
 
         return $this->createViewModel(
-            [
-                'transactions' => $transactions, 'renewForm' => $renewForm,
-                'renewResult' => $renewResult
-            ]
+            compact(
+                'transactions', 'renewForm', 'renewResult', 'paginator',
+                'hiddenTransactions'
+            )
         );
     }
 
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php b/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
index 6302c03f152c94c3e842fd1666b1e981424d22c9..88d49b257a62093e799f87ee9a6031511de5a56d 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
@@ -117,28 +117,20 @@ class Recaptcha extends AbstractPlugin
         if (!$this->active()) {
             return true;
         }
-        $captchaPassed = false;
-        $recaptchaChallenge = $this->getController()->params()
-            ->fromPost('recaptcha_challenge_field');
-        $recaptchaResponse = $this->getController()->params()
-            ->fromPost('recaptcha_response_field', 'manual_challenge');
-        if (!empty($recaptchaChallenge)) {
-            try {
-                $result = $this->recaptcha->verify(
-                    $recaptchaChallenge,
-                    $recaptchaResponse
-                );
-            } catch (\ZendService\ReCaptcha\Exception $e) {
-                $result = false;
-            }
-            $captchaPassed = $result && $result->isValid();
-            if (!$captchaPassed) {
-                if ($this->errorMode == 'flash') {
-                    $this->getController()->flashMessenger()->setNamespace('error')
-                        ->addMessage('recaptcha_not_passed');
-                } else {
-                    throw new \Exception('recaptcha_not_passed');
-                }
+        $responseField = $this->getController()->params()
+            ->fromPost('g-recaptcha-response');
+        try {
+            $response = $this->recaptcha->verify($responseField);
+        } catch (\ZendService\ReCaptcha\Exception $e) {
+            $response = false;
+        }
+        $captchaPassed = $response && $response->isValid();
+        if (!$captchaPassed) {
+            if ($this->errorMode == 'flash') {
+                $this->getController()->flashMessenger()->setNamespace('error')
+                    ->addMessage('recaptcha_not_passed');
+            } else {
+                throw new \Exception('recaptcha_not_passed');
             }
         }
         return $captchaPassed;
@@ -157,4 +149,4 @@ class Recaptcha extends AbstractPlugin
         && ($domain == false || $this->domains === true
         || in_array($domain, $this->domains));
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
index d9f9d23681e8ae4f70feb78fd5ba24e75dc8fc83..c0cb13990fd51fd44051fc42b07eae417f87be65 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
@@ -98,7 +98,7 @@ class ResultScroller extends AbstractPlugin
         unset($this->data->prevIds);
         unset($this->data->nextIds);
 
-        return true;
+        return (bool)$this->data->currIds;
     }
 
     /**
@@ -393,6 +393,9 @@ class ResultScroller extends AbstractPlugin
 
         $retVal = [];
         foreach ($searchObject->getResults() as $record) {
+            if (!($record instanceof \VuFind\RecordDriver\AbstractBase)) {
+                return false;
+            }
             $retVal[] = $record->getResourceSource() . '|' . $record->getUniqueId();
         }
         return $retVal;
diff --git a/module/VuFind/src/VuFind/Controller/SearchController.php b/module/VuFind/src/VuFind/Controller/SearchController.php
index 42b8f374b478bd8aff0e960946cf1748bf7ec3c8..e0181673575db362e91005d7bcaf028f1101a25e 100644
--- a/module/VuFind/src/VuFind/Controller/SearchController.php
+++ b/module/VuFind/src/VuFind/Controller/SearchController.php
@@ -462,6 +462,10 @@ class SearchController extends AbstractSearch
         // Don't save to history -- history page doesn't handle correctly:
         $this->saveToHistory = false;
 
+        // Set up RSS feed title just in case:
+        $this->getViewRenderer()->plugin('resultfeed')
+            ->setOverrideTitle('Reserves Search Results');
+
         // Call rather than forward, so we can use custom template
         $view = $this->resultsAction();
 
@@ -473,12 +477,16 @@ class SearchController extends AbstractSearch
             $view->course = $result[0]['course'];
         }
 
-        // Customize the URL helper to make sure it builds proper reserves URLs:
-        $url = $view->results->getUrlQuery();
-        $url->setDefaultParameter('course', $course);
-        $url->setDefaultParameter('inst', $inst);
-        $url->setDefaultParameter('dept', $dept);
-        $url->setSuppressQuery(true);
+        // Customize the URL helper to make sure it builds proper reserves URLs
+        // (but only do this if we have access to a results object, which we
+        // won't in RSS mode):
+        if (isset($view->results)) {
+            $url = $view->results->getUrlQuery();
+            $url->setDefaultParameter('course', $course);
+            $url->setDefaultParameter('inst', $inst);
+            $url->setDefaultParameter('dept', $dept);
+            $url->setSuppressQuery(true);
+        }
         return $view;
     }
 
diff --git a/module/VuFind/src/VuFind/Controller/SummonController.php b/module/VuFind/src/VuFind/Controller/SummonController.php
index eaff57a207193c03ae1e1e2cd5117d8bba2898f0..0ee5bb7cd702496faf0f50c83dedb798abd4bfce 100644
--- a/module/VuFind/src/VuFind/Controller/SummonController.php
+++ b/module/VuFind/src/VuFind/Controller/SummonController.php
@@ -63,9 +63,13 @@ class SummonController extends AbstractSearch
     /**
      * Use preDispatch event to add Summon message.
      *
+     * @param MvcEvent $e Event object
+     *
      * @return void
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function preDispatch()
+    public function preDispatch(MvcEvent $e)
     {
         $this->layout()->poweredBy
             = 'Powered by Summonâ„¢ from Serials Solutions, a division of ProQuest.';
diff --git a/module/VuFind/src/VuFind/Controller/SummonrecordController.php b/module/VuFind/src/VuFind/Controller/SummonrecordController.php
index 3f727e231d163f123cb7ddae033bfab38ad1b6c7..38eb7cf72b017dd8bb6887fb01a9e09c465425fa 100644
--- a/module/VuFind/src/VuFind/Controller/SummonrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/SummonrecordController.php
@@ -67,9 +67,13 @@ class SummonrecordController extends AbstractRecord
     /**
      * Use preDispatch event to add Summon message.
      *
+     * @param MvcEvent $e Event object
+     *
      * @return void
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function preDispatch()
+    public function preDispatch(MvcEvent $e)
     {
         $this->layout()->poweredBy
             = 'Powered by Summonâ„¢ from Serials Solutions, a division of ProQuest.';
diff --git a/module/VuFind/src/VuFind/Db/Row/Resource.php b/module/VuFind/src/VuFind/Db/Row/Resource.php
index 19f299f20e908eab0dcc33a49457b3740131b6e0..a5a408bf36c2ea4bee7028717dea53812537713a 100644
--- a/module/VuFind/src/VuFind/Db/Row/Resource.php
+++ b/module/VuFind/src/VuFind/Db/Row/Resource.php
@@ -92,6 +92,30 @@ class Resource extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterf
         }
     }
 
+    /**
+     * Remove a tag from the current resource.
+     *
+     * @param string              $tagText The tag to save.
+     * @param \VuFind\Db\Row\User $user    The user posting the tag.
+     * @param string              $list_id The list associated with the tag
+     * (optional).
+     *
+     * @return void
+     */
+    public function deleteTag($tagText, $user, $list_id = null)
+    {
+        $tagText = trim($tagText);
+        if (!empty($tagText)) {
+            $tags = $this->getDbTable('Tags');
+            $tag = $tags->getByText($tagText);
+
+            $linker = $this->getDbTable('ResourceTags');
+            $linker->destroyLinks(
+                $this->id, $user->id, $list_id, $tag->id
+            );
+        }
+    }
+
     /**
      * Add a comment to the current resource.
      *
diff --git a/module/VuFind/src/VuFind/Db/Row/User.php b/module/VuFind/src/VuFind/Db/Row/User.php
index 52d4f0588b6e34edfd821e4984030ff75bd89d86..4445602c2e1d39b88d6413aca4aa5d6264c14089 100644
--- a/module/VuFind/src/VuFind/Db/Row/User.php
+++ b/module/VuFind/src/VuFind/Db/Row/User.php
@@ -121,7 +121,14 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
             $this->cat_password = $password;
             $this->cat_pass_enc = null;
         }
-        return $this->save();
+
+        $result = $this->save();
+
+        // Update library card entry after saving the user so that we always have a
+        // user id:
+        $this->updateLibraryCardEntry();
+
+        return $result;
     }
 
     /**
@@ -199,6 +206,7 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
     public function changeHomeLibrary($homeLibrary)
     {
         $this->home_library = $homeLibrary;
+        $this->updateLibraryCardEntry();
         return $this->save();
     }
 
@@ -400,7 +408,228 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
 
         // Remove Resource (related tags are also removed implicitly)
         $userResourceTable = $this->getDbTable('UserResource');
-        $userResourceTable->destroyLinks($resourceIDs, $this->id);
+        // true here makes sure that only tags in lists are deleted
+        $userResourceTable->destroyLinks($resourceIDs, $this->id, true);
+    }
+
+    /**
+     * Whether library cards are enabled
+     *
+     * @return boolean
+     */
+    public function libraryCardsEnabled()
+    {
+        return isset($this->config->Catalog->library_cards)
+            && $this->config->Catalog->library_cards;
+    }
+
+    /**
+     * Get all library cards associated with the user.
+     *
+     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @throws \VuFind\Exception\LibraryCard
+     */
+    public function getLibraryCards()
+    {
+        if (!$this->libraryCardsEnabled()) {
+            return new \Zend\Db\ResultSet\ResultSet();
+        }
+        $userCard = $this->getDbTable('UserCard');
+        return $userCard->select(['user_id' => $this->id]);
+    }
+
+    /**
+     * Get library card data
+     *
+     * @param int $id Library card ID
+     *
+     * @return UserCard|false Card data if found, false otherwise
+     * @throws \VuFind\Exception\LibraryCard
+     */
+    public function getLibraryCard($id = null)
+    {
+        if (!$this->libraryCardsEnabled()) {
+            throw new \VuFind\Exception\LibraryCard('Library Cards Disabled');
+        }
+
+        $userCard = $this->getDbTable('UserCard');
+        if ($id === null) {
+            $row = $userCard->createRow();
+            $row->card_name = '';
+            $row->user_id = $this->id;
+            $row->cat_username = '';
+            $row->cat_password = '';
+        } else {
+            $row = $userCard->select(['user_id' => $this->id, 'id' => $id])
+                ->current();
+            if ($row === false) {
+                throw new \VuFind\Exception\LibraryCard('Library Card Not Found');
+            }
+            if ($this->passwordEncryptionEnabled()) {
+                $row->cat_password = $this->encryptOrDecrypt(
+                    $row->cat_pass_enc, false
+                );
+            }
+        }
+
+        return $row;
+    }
+
+    /**
+     * Delete library card
+     *
+     * @param int $id Library card ID
+     *
+     * @return void
+     * @throws \VuFind\Exception\LibraryCard
+     */
+    public function deleteLibraryCard($id)
+    {
+        if (!$this->libraryCardsEnabled()) {
+            throw new \VuFind\Exception\LibraryCard('Library Cards Disabled');
+        }
+
+        $userCard = $this->getDbTable('UserCard');
+        $row = $userCard->select(['id' => $id, 'user_id' => $this->id])->current();
+
+        if (empty($row)) {
+            throw new \Exception('Library card not found');
+        }
+        $row->delete();
+
+        if ($row->cat_username == $this->cat_username) {
+            // Activate another card (if any) or remove cat_username and cat_password
+            $cards = $this->getLibraryCards();
+            if ($cards->count() > 0) {
+                $this->activateLibraryCard($cards->current()->id);
+            } else {
+                $this->cat_username = null;
+                $this->cat_password = null;
+                $this->cat_pass_enc = null;
+                $this->save();
+            }
+        }
+    }
+
+    /**
+     * Activate a library card for the given username
+     *
+     * @param int $id Library card ID
+     *
+     * @return void
+     * @throws \VuFind\Exception\LibraryCard
+     */
+    public function activateLibraryCard($id)
+    {
+        if (!$this->libraryCardsEnabled()) {
+            throw new \VuFind\Exception\LibraryCard('Library Cards Disabled');
+        }
+        $userCard = $this->getDbTable('UserCard');
+        $row = $userCard->select(['id' => $id, 'user_id' => $this->id])->current();
+
+        if (!empty($row)) {
+            $this->cat_username = $row->cat_username;
+            $this->cat_password = $row->cat_password;
+            $this->cat_pass_enc = $row->cat_pass_enc;
+            $this->home_library = $row->home_library;
+            $this->save();
+        }
+    }
+
+    /**
+     * Save library card with the given information
+     *
+     * @param int    $id       Card ID
+     * @param string $cardName Card name
+     * @param string $username Username
+     * @param string $password Password
+     * @param string $homeLib  Home Library
+     *
+     * @return int Card ID
+     * @throws \VuFind\Exception\LibraryCard
+     */
+    public function saveLibraryCard($id, $cardName, $username,
+        $password, $homeLib = ''
+    ) {
+        if (!$this->libraryCardsEnabled()) {
+            throw new \VuFind\Exception\LibraryCard('Library Cards Disabled');
+        }
+        $userCard = $this->getDbTable('UserCard');
+
+        // Check that the username is not already in use in another card
+        $row = $userCard->select(
+            ['user_id' => $this->id, 'cat_username' => $username]
+        )->current();
+        if (!empty($row) && ($id === null || $row->id != $id)) {
+            throw new \VuFind\Exception\LibraryCard(
+                'Username is already in use in another library card'
+            );
+        }
+
+        $row = null;
+        if ($id !== null) {
+            $row = $userCard->select(['user_id' => $this->id, 'id' => $id])
+                ->current();
+        }
+        if (empty($row)) {
+            $row = $userCard->createRow();
+            $row->user_id = $this->id;
+            $row->created = date('Y-m-d H:i:s');
+        }
+        $row->card_name = $cardName;
+        $row->cat_username = $username;
+        if (!empty($homeLib)) {
+            $row->home_library = $homeLib;
+        }
+        if ($this->passwordEncryptionEnabled()) {
+            $row->cat_password = null;
+            $row->cat_pass_enc = $this->encryptOrDecrypt($password, true);
+        } else {
+            $row->cat_password = $password;
+            $row->cat_pass_enc = null;
+        }
+
+        $row->save();
+
+        // If this is the first library card or no credentials are currently set,
+        // activate the card now
+        if ($this->getLibraryCards()->count() == 1 || empty($this->cat_username)) {
+            $this->activateLibraryCard($row->id);
+        }
+
+        return $row->id;
+    }
+
+    /**
+     * Verify that the current card information exists in user's library cards
+     * (if enabled) and is up to date.
+     *
+     * @return void
+     * @throws \VuFind\Exception\PasswordSecurity
+     */
+    protected function updateLibraryCardEntry()
+    {
+        if (!$this->libraryCardsEnabled() || empty($this->cat_username)) {
+            return;
+        }
+
+        $userCard = $this->getDbTable('UserCard');
+        $row = $userCard->select(
+            ['user_id' => $this->id, 'cat_username' => $this->cat_username]
+        )->current();
+        if (empty($row)) {
+            $row = $userCard->createRow();
+            $row->user_id = $this->id;
+            $row->cat_username = $this->cat_username;
+            $row->card_name = $this->cat_username;
+            $row->created = date('Y-m-d H:i:s');
+        }
+        // Always update home library and password
+        $row->home_library = $this->home_library;
+        $row->cat_password = $this->cat_password;
+        $row->cat_pass_enc = $this->cat_pass_enc;
+
+        $row->save();
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Db/Row/UserCard.php b/module/VuFind/src/VuFind/Db/Row/UserCard.php
new file mode 100644
index 0000000000000000000000000000000000000000..2995794e426218c5e2f9219628432deb6b880ad3
--- /dev/null
+++ b/module/VuFind/src/VuFind/Db/Row/UserCard.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Row Definition for user_card
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Db_Row
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Db\Row;
+
+/**
+ * Row Definition for user_card
+ *
+ * @category VuFind2
+ * @package  Db_Row
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class UserCard extends RowGateway
+{
+    /**
+     * Constructor
+     *
+     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     */
+    public function __construct($adapter)
+    {
+        parent::__construct('id', 'user_card', $adapter);
+    }
+}
diff --git a/module/VuFind/src/VuFind/Db/Table/Gateway.php b/module/VuFind/src/VuFind/Db/Table/Gateway.php
index 474abc0c93c3b96a70c3814cd3d3f595b2e1a641..cc010df9acb0a84dac774785c5b7f0bf11750abb 100644
--- a/module/VuFind/src/VuFind/Db/Table/Gateway.php
+++ b/module/VuFind/src/VuFind/Db/Table/Gateway.php
@@ -139,7 +139,8 @@ class Gateway extends AbstractTableGateway implements ServiceLocatorAwareInterfa
 
         // If this is a PostgreSQL connection, we may need to initialize the ID
         // from a sequence:
-        if ($this->adapter->getDriver()->getDatabasePlatformName() == "Postgresql"
+        if ($this->adapter
+            && $this->adapter->getDriver()->getDatabasePlatformName() == "Postgresql"
             && $obj instanceof \VuFind\Db\Row\RowGateway
         ) {
             // Do we have a sequence feature?
diff --git a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
index 853cde2c9fb314abd4ff20bfee85a63950b864ec..5ddbed5358f9fa660e5662a32c4d51bab23d2601 100644
--- a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
+++ b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
@@ -200,12 +200,12 @@ class ResourceTags extends Gateway
      * Unlink rows for the specified resource.
      *
      * @param string|array $resource ID (or array of IDs) of resource(s) to
-     *                                  unlink (null for ALL matching resources)
+     * unlink (null for ALL matching resources)
      * @param string       $user     ID of user removing links
      * @param string       $list     ID of list to unlink (null for ALL matching
-     *                                  lists, 'none' for tags not in a list)
+     * tags, 'none' for tags not in a list, true for tags only found in a list)
      * @param string       $tag      ID of tag to unlink (null for ALL matching
-     *                                  tags)
+     * tags)
      *
      * @return void
      */
@@ -220,12 +220,16 @@ class ResourceTags extends Gateway
                 $select->where->in('resource_id', $resource);
             }
             if (!is_null($list)) {
-                if ($list != 'none') {
-                    $select->where->equalTo('list_id', $list);
-                } else {
+                if (true === $list) {
+                    // special case -- if $list is set to boolean true, we
+                    // want to only delete tags that are associated with lists.
+                    $select->where->isNotNull('list_id');
+                } elseif ('none' === $list) {
                     // special case -- if $list is set to the string "none", we
                     // want to delete tags that are not associated with lists.
                     $select->where->isNull('list_id');
+                } else {
+                    $select->where->equalTo('list_id', $list);
                 }
             }
             if (!is_null($tag)) {
diff --git a/module/VuFind/src/VuFind/Db/Table/Tags.php b/module/VuFind/src/VuFind/Db/Table/Tags.php
index 4343d59fed50b871c8cf4c29174190186e629d33..7f66631deba59d0c8acc28beda918acd956e8e2a 100644
--- a/module/VuFind/src/VuFind/Db/Table/Tags.php
+++ b/module/VuFind/src/VuFind/Db/Table/Tags.php
@@ -26,7 +26,7 @@
  * @link     http://vufind.org   Main Site
  */
 namespace VuFind\Db\Table;
-use Zend\Db\Sql\Expression;
+use Zend\Db\Sql\Expression, Zend\Db\Sql\Select;
 
 /**
  * Table Definition for tags
@@ -87,38 +87,60 @@ class Tags extends Gateway
     /**
      * Get tags associated with the specified resource.
      *
-     * @param string $id     Record ID to look up
-     * @param string $source Source of record to look up
-     * @param int    $limit  Max. number of tags to return (0 = no limit)
-     * @param int    $list   ID of list to load tags from (null for no restriction,
-     * true for on ANY list, false for on NO list)
-     * @param int    $user   ID of user to load tags from (null for all users)
-     * @param string $sort   Sort type ('count' or 'tag')
+     * @param string $id          Record ID to look up
+     * @param string $source      Source of record to look up
+     * @param int    $limit       Max. number of tags to return (0 = no limit)
+     * @param int    $list        ID of list to load tags from (null for no
+     * restriction,  true for on ANY list, false for on NO list)
+     * @param int    $user        ID of user to load tags from (null for all users)
+     * @param string $sort        Sort type ('count' or 'tag')
+     * @param int    $userToCheck ID of user to check for ownership (this will
+     * not filter the result list, but rows owned by this user will have an is_me
+     * column set to 1)
      *
      * @return array
      */
     public function getForResource($id, $source = 'VuFind', $limit = 0,
-        $list = null, $user = null, $sort = 'count'
+        $list = null, $user = null, $sort = 'count', $userToCheck = null
     ) {
         return $this->select(
-            function ($select) use ($id, $source, $limit, $list, $user, $sort) {
+            function ($select) use (
+                $id, $source, $limit, $list, $user, $sort, $userToCheck
+            ) {
+                // If we're looking for ownership, create sub query to merge in
+                // an "is_me" flag value if the selected resource is tagged by
+                // the specified user.
+                if (!empty($userToCheck)) {
+                    $subq = $this->getIsMeSubquery($id, $source, $userToCheck);
+                    $select->join(
+                        ['subq' => $subq],
+                        'tags.id = subq.tag_id',
+                        [
+                            'is_me' => new Expression(
+                                'MAX(?)', ['subq.is_me'],
+                                [Expression::TYPE_IDENTIFIER]
+                            )
+                        ],
+                        Select::JOIN_LEFT
+                    );
+                }
+                // SELECT (do not add table prefixes)
                 $select->columns(
                     [
                         'id', 'tag',
                         'cnt' => new Expression(
-                            'COUNT(?)', ['tags.tag'],
+                            'COUNT(DISTINCT(?))', ["rt.user_id"],
                             [Expression::TYPE_IDENTIFIER]
                         )
                     ]
                 );
                 $select->join(
-                    ['rt' => 'resource_tags'], 'tags.id = rt.tag_id', []
+                    ['rt' => 'resource_tags'], 'rt.tag_id = tags.id', []
                 );
                 $select->join(
                     ['r' => 'resource'], 'rt.resource_id = r.id', []
                 );
-                $select->where->equalTo('r.record_id', $id)
-                    ->equalTo('r.source', $source);
+                $select->where(['r.record_id' => $id, 'r.source' => $source]);
                 $select->group(['tags.id', 'tag']);
 
                 if ($sort == 'count') {
@@ -142,6 +164,37 @@ class Tags extends Gateway
                 }
             }
         );
+
+        return $resultset->toArray();
+    }
+
+    /**
+     * Get a subquery used for flagging tag ownership (see getForResource).
+     *
+     * @param string $id          Record ID to look up
+     * @param string $source      Source of record to look up
+     * @param int    $userToCheck ID of user to check for ownership
+     *
+     * @return Select
+     */
+    protected function getIsMeSubquery($id, $source, $userToCheck)
+    {
+        $sub = new Select('resource_tags');
+        $sub->columns(['tag_id', 'is_me' => new Expression("1")])
+            ->join(
+                // Convert record_id to resource_id
+                ['r' => 'resource'],
+                'resource_id = r.id',
+                []
+            )
+            ->where(
+                [
+                    'r.record_id' => $id,
+                    'r.source' => $source,
+                    'user_id' => $userToCheck
+                ]
+            );
+        return $sub;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Db/Table/User.php b/module/VuFind/src/VuFind/Db/Table/User.php
index 08c893d533c27a48d40b4c77dbac9abad82cdb98..9444c836e079978eefc240fd867b2d4df6cde7f6 100644
--- a/module/VuFind/src/VuFind/Db/Table/User.php
+++ b/module/VuFind/src/VuFind/Db/Table/User.php
@@ -57,8 +57,23 @@ class User extends Gateway
     }
 
     /**
-     * Retrieve a user object from the database based on username; create a new
-     * row if no existing match is found.
+     * Create a row for the specified username.
+     *
+     * @param string $username Username to use for retrieval.
+     *
+     * @return UserRow
+     */
+    public function createRowForUsername($username)
+    {
+        $row = $this->createRow();
+        $row->username = $username;
+        $row->created = date('Y-m-d H:i:s');
+        return $row;
+    }
+
+    /**
+     * Retrieve a user object from the database based on username; when requested,
+     * create a new row if no existing match is found.
      *
      * @param string $username Username to use for retrieval.
      * @param bool   $create   Should we create users that don't already exist?
@@ -68,12 +83,8 @@ class User extends Gateway
     public function getByUsername($username, $create = true)
     {
         $row = $this->select(['username' => $username])->current();
-        if ($create && empty($row)) {
-            $row = $this->createRow();
-            $row->username = $username;
-            $row->created = date('Y-m-d H:i:s');
-        }
-        return $row;
+        return ($create && empty($row))
+            ? $this->createRowForUsername($username) : $row;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Db/Table/UserCard.php b/module/VuFind/src/VuFind/Db/Table/UserCard.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd78b358b8f304cf3f227053d9175b34f004de48
--- /dev/null
+++ b/module/VuFind/src/VuFind/Db/Table/UserCard.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Table Definition for user_card
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Db_Table
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+namespace VuFind\Db\Table;
+
+/**
+ * Table Definition for user_card
+ *
+ * @category VuFind2
+ * @package  Db_Table
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+class UserCard extends Gateway
+{
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        parent::__construct('user_card', 'VuFind\Db\Row\UserCard');
+    }
+}
diff --git a/module/VuFind/src/VuFind/Db/Table/UserResource.php b/module/VuFind/src/VuFind/Db/Table/UserResource.php
index b6645fbd7a3aa6ca3d0856d557f8346926776723..182b7cefa6e0f13fca0434346809ff0817bd525a 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserResource.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserResource.php
@@ -133,7 +133,9 @@ class UserResource extends Gateway
      * unlink (null for ALL matching resources)
      * @param string       $user_id     ID of user removing links
      * @param string       $list_id     ID of list to unlink
-     *                                  (null for ALL matching lists)
+     * (null for ALL matching lists, with the destruction of all tags associated
+     * with the $resource_id value; true for ALL matching lists, but retaining
+     * any tags associated with the $resource_id independently of lists)
      *
      * @return void
      */
@@ -148,13 +150,18 @@ class UserResource extends Gateway
         // Now build the where clause to figure out which rows to remove:
         $callback = function ($select) use ($resource_id, $user_id, $list_id) {
             $select->where->equalTo('user_id', $user_id);
-            if (!is_null($resource_id)) {
+            if (null !== $resource_id) {
                 if (!is_array($resource_id)) {
                     $resource_id = [$resource_id];
                 }
                 $select->where->in('resource_id', $resource_id);
             }
-            if (!is_null($list_id)) {
+            // null or true values of $list_id have different meanings in the
+            // context of the $resourceTags->destroyLinks() call above, since
+            // some tags have a null $list_id value. In the case of user_resource
+            // rows, however, every row has a non-null $list_id value, so the
+            // two cases are equivalent and may be handled identically.
+            if (null !== $list_id && true !== $list_id) {
                 $select->where->equalTo('list_id', $list_id);
             }
         };
diff --git a/module/VuFind/src/VuFind/Exception/LibraryCard.php b/module/VuFind/src/VuFind/Exception/LibraryCard.php
new file mode 100644
index 0000000000000000000000000000000000000000..069f3dcfe0e3fdcfb49793a947dc5fa10cc50857
--- /dev/null
+++ b/module/VuFind/src/VuFind/Exception/LibraryCard.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Library Card Exception
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Exceptions
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
+ */
+namespace VuFind\Exception;
+
+/**
+ * Library Card Exception
+ *
+ * @category VuFind2
+ * @package  Exceptions
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
+ */
+class LibraryCard extends \Exception
+{
+}
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/AbstractBase.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/AbstractBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..29702ee847016cc333b45e64a5a66d219ada7fc1
--- /dev/null
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/AbstractBase.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Hierarchy Tree Data Formatter (abstract base)
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+namespace VuFind\Hierarchy\TreeDataFormatter;
+
+/**
+ * Hierarchy Tree Data Formatter (abstract base)
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+abstract class AbstractBase
+{
+    /**
+     * Top-level record from index
+     *
+     * @var object
+     */
+    protected $topNode;
+
+    /**
+     * Child data map from index
+     *
+     * @var array
+     */
+    protected $childMap;
+
+    /**
+     * Is sorting enabled?
+     *
+     * @var bool
+     */
+    protected $sort;
+
+    /**
+     * Collection mode
+     *
+     * @var string
+     */
+    protected $collectionType;
+
+    /**
+     * How many nodes have we formatted?
+     *
+     * @var int;
+     */
+    protected $count = 0;
+
+    /**
+     * Set raw data.
+     *
+     * @param object $topNode  Full record for top node
+     * @param array  $childMap Data map from index
+     * @param bool   $sort     Is sorting enabled?
+     * @param string $cType    Collection type
+     *
+     * @return void
+     */
+    public function setRawData($topNode, $childMap, $sort = false, $cType = 'All')
+    {
+        $this->topNode = $topNode;
+        $this->childMap = $childMap;
+        $this->sort = $sort;
+        $this->collectionType = $cType;
+    }
+
+    /**
+     * Get number of nodes formatted.
+     *
+     * @return int;
+     */
+    public function getCount()
+    {
+        return $this->count;
+    }
+
+    /**
+     * Get the formatted metadata.
+     *
+     * @return string
+     */
+    abstract public function getData();
+
+    /**
+     * Get the positions of this item within parent collections. Returns an array
+     * of parent ID => sequence number.
+     *
+     * @param object $fields Solr fields
+     *
+     * @return array
+     */
+    protected function getHierarchyPositionsInParents($fields)
+    {
+        $retVal = [];
+        if (isset($fields->hierarchy_parent_id)
+            && isset($fields->hierarchy_sequence)
+        ) {
+            foreach ($fields->hierarchy_parent_id as $key => $val) {
+                $retVal[$val] = $fields->hierarchy_sequence[$key];
+            }
+        }
+        return $retVal;
+    }
+
+     /**
+     * Get the titles of this item within parent collections. Returns an array
+     * of parent ID => sequence number.
+     *
+     * @param object $fields Solr fields
+     *
+     * @return Array
+     */
+    protected function getTitlesInHierarchy($fields)
+    {
+        $retVal = [];
+        if (isset($fields->title_in_hierarchy)
+            && is_array($fields->title_in_hierarchy)
+        ) {
+            $titles = $fields->title_in_hierarchy;
+            $parentIDs = $fields->hierarchy_parent_id;
+            if (count($titles) === count($parentIDs)) {
+                foreach ($parentIDs as $key => $val) {
+                    $retVal[$val] = $titles[$key];
+                }
+            }
+        }
+        return $retVal;
+    }
+
+    /**
+     * Identify whether the provided record is a collection.
+     *
+     * NOTE: \VuFind\RecordDriver\SolrDefault::isCollection() duplicates some of\
+     * this logic.
+     *
+     * @param object $fields Solr fields
+     *
+     * @return bool
+     */
+    protected function isCollection($fields)
+    {
+        // Check config setting for what constitutes a collection
+        switch ($this->collectionType) {
+        case 'All':
+            return (isset($fields->is_hierarchy_id));
+        case 'Top':
+            return isset($fields->is_hierarchy_id)
+                && in_array($fields->is_hierarchy_id, $fields->hierarchy_top_id);
+        default:
+            // Default to not be a collection level record
+            return false;
+        }
+    }
+
+    /**
+     * Choose a title for the record.
+     *
+     * @param object $record   Solr record to format
+     * @param string $parentID The starting point for the current recursion
+     * (equivalent to Solr field hierarchy_parent_id)
+     *
+     * @return string
+     */
+    protected function pickTitle($record, $parentID)
+    {
+        $titles = $this->getTitlesInHierarchy($record);
+        // TODO: handle missing titles more gracefully (title not available?)
+        $title = isset($record->title) ? $record->title : $record->id;
+        return null != $parentID && isset($titles[$parentID])
+            ? $titles[$parentID] : $title;
+    }
+
+    /**
+     * Sort Nodes
+     * Convert an unsorted array of [ key, value ] pairs into a sorted array
+     * of values.
+     *
+     * @param array $array The array of arrays to sort
+     *
+     * @return array
+     */
+    protected function sortNodes($array)
+    {
+        // Sort arrays based on first element
+        $sorter = function ($a, $b) {
+            return strcmp($a[0], $b[0]);
+        };
+        usort($array, $sorter);
+
+        // Collapse array to remove sort values
+        $mapper = function ($i) {
+            return $i[1];
+        };
+        return array_map($mapper, $array);
+    }
+}
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Json.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Json.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0fb8d03c70490a23904184bfb8dbcc69d2799e8
--- /dev/null
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Json.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Hierarchy Tree Data Formatter (JSON)
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+namespace VuFind\Hierarchy\TreeDataFormatter;
+
+/**
+ * Hierarchy Tree Data Formatter (JSON)
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+class Json extends AbstractBase
+{
+    /**
+     * Get the formatted metadata.
+     *
+     * @return string
+     */
+    public function getData()
+    {
+        return json_encode($this->formatNode($this->topNode));
+    }
+
+    /**
+     * Get Solr Children for JSON
+     *
+     * @param object $record   Solr record to format
+     * @param string $parentID The starting point for the current recursion
+     * (equivalent to Solr field hierarchy_parent_id)
+     *
+     * @return string
+     */
+    protected function formatNode($record, $parentID = null)
+    {
+        $raw = [
+            'id' => $record->id,
+            'type' => $this->isCollection($record) ? 'collection' : 'record',
+            'title' => $this->pickTitle($record, $parentID)
+        ];
+
+        if (isset($this->childMap[$record->id])) {
+            $children = $this->mapChildren($record->id);
+            if (!empty($children)) {
+                $raw['children'] = $children;
+            }
+        }
+
+        return (object)$raw;
+    }
+
+    /**
+     * Get Solr Children for JSON
+     *
+     * @param string $parentID The starting point for the current recursion
+     * (equivalent to Solr field hierarchy_parent_id)
+     *
+     * @return string
+     */
+    protected function mapChildren($parentID)
+    {
+        $json = [];
+        foreach ($this->childMap[$parentID] as $current) {
+            ++$this->count;
+
+            $childNode = $this->formatNode($current, $parentID);
+
+            // If we're in sorting mode, we need to create key-value arrays;
+            // otherwise, we can just collect flat values.
+            if ($this->sort) {
+                $positions = $this->getHierarchyPositionsInParents($current);
+                $sequence = isset($positions[$parentID]) ? $positions[$parentID] : 0;
+                $json[] = [$sequence, $childNode];
+            } else {
+                $json[] = $childNode;
+            }
+        }
+
+        return $this->sort ? $this->sortNodes($json) : $json;
+    }
+}
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..143b893d683936c121d7aa930b7bc813c3266357
--- /dev/null
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Hierarchy tree data formatter plugin manager
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataSource
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+namespace VuFind\Hierarchy\TreeDataFormatter;
+
+/**
+ * Hierarchy tree data formatter plugin manager
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataSource
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
+{
+    /**
+     * Return the name of the base class or interface that plug-ins must conform
+     * to.
+     *
+     * @return string
+     */
+    protected function getExpectedInterface()
+    {
+        return 'VuFind\Hierarchy\TreeDataFormatter\AbstractBase';
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Xml.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Xml.php
new file mode 100644
index 0000000000000000000000000000000000000000..65a068b1798e188ce68b6b4137ae6028a954fa55
--- /dev/null
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/Xml.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Hierarchy Tree Data Formatter (XML)
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+namespace VuFind\Hierarchy\TreeDataFormatter;
+
+/**
+ * Hierarchy Tree Data Formatter (XML)
+ *
+ * @category VuFind2
+ * @package  HierarchyTree_DataFormatter
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
+ */
+class Xml extends AbstractBase
+{
+    /**
+     * Get the formatted metadata.
+     *
+     * @return string
+     */
+    public function getData()
+    {
+        return '<root>'
+            . $this->formatNode($this->topNode)
+            . '</root>';
+    }
+
+    /**
+     * Get Solr Children for JSON
+     *
+     * @param object $record   Solr record to format
+     * @param string $parentID The starting point for the current recursion
+     * (equivalent to Solr field hierarchy_parent_id)
+     *
+     * @return string
+     */
+    protected function formatNode($record, $parentID = null)
+    {
+        $isCollection = $this->isCollection($record) ? "true" : "false";
+        return '<item id="' . htmlspecialchars($record->id)
+            . '" isCollection="' . $isCollection . '">'
+            . '<content><name>'
+            . htmlspecialchars($this->pickTitle($record, $parentID))
+            . '</name></content>'
+            . $this->mapChildren($record->id)
+            . '</item>';
+    }
+
+    /**
+     * Get Solr Children for JSON
+     *
+     * @param string $parentID The starting point for the current recursion
+     * (equivalent to Solr field hierarchy_parent_id)
+     *
+     * @return string
+     */
+    protected function mapChildren($parentID)
+    {
+        if (!isset($this->childMap[$parentID])) {
+            return '';
+        }
+        $parts = [];
+        foreach ($this->childMap[$parentID] as $current) {
+            ++$this->count;
+
+            $childNode = $this->formatNode($current, $parentID);
+
+            // If we're in sorting mode, we need to create key-value arrays;
+            // otherwise, we can just collect flat values.
+            if ($this->sort) {
+                $positions = $this->getHierarchyPositionsInParents($current);
+                $sequence = isset($positions[$parentID]) ? $positions[$parentID] : 0;
+                $parts[] = [$sequence, $childNode];
+            } else {
+                $parts[] = $childNode;
+            }
+        }
+
+        return implode('', $this->sort ? $this->sortNodes($parts) : $parts);
+    }
+}
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Factory.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Factory.php
index 403360853e1c37192b83d8d6aa09ca31ad5f4877..ca21f2b09721e0984e0715ad02aceeebd291bb0b 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Factory.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Factory.php
@@ -59,9 +59,12 @@ class Factory
         $filters = isset($hierarchyFilters->HierarchyTree->filterQueries)
           ? $hierarchyFilters->HierarchyTree->filterQueries->toArray()
           : [];
+        $solr = $sm->getServiceLocator()->get('VuFind\Search\BackendManager')
+            ->get('Solr')->getConnector();
+        $formatterManager = $sm->getServiceLocator()
+            ->get('VuFind\HierarchyTreeDataFormatterPluginManager');
         return new Solr(
-            $sm->getServiceLocator()->get('VuFind\Search'),
-            rtrim($cacheDir, '/') . '/hierarchy',
+            $solr, $formatterManager, rtrim($cacheDir, '/') . '/hierarchy',
             $filters
         );
     }
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Solr.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Solr.php
index bff8f2fc3b3a98d0589ee27b900e885cbd5706e2..80097c1ae3b3f68d2b9be3c269e9df71e5954052 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Solr.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/Solr.php
@@ -26,8 +26,9 @@
  * @link     http://vufind.org/wiki/vufind2:hierarchy_components Wiki
  */
 namespace VuFind\Hierarchy\TreeDataSource;
+use VuFind\Hierarchy\TreeDataFormatter\PluginManager as FormatterManager;
 use VuFindSearch\Query\Query;
-use VuFindSearch\Service as SearchService;
+use VuFindSearch\Backend\Solr\Connector;
 use VuFindSearch\ParamBag;
 
 /**
@@ -46,9 +47,16 @@ class Solr extends AbstractBase
     /**
      * Search service
      *
-     * @var SearchService
+     * @var Connector
      */
-    protected $searchService;
+    protected $solrConnector;
+
+    /**
+     * Formatter manager
+     *
+     * @var FormatterManager
+     */
+    protected $formatterManager;
 
     /**
      * Cache directory
@@ -67,14 +75,16 @@ class Solr extends AbstractBase
     /**
      * Constructor.
      *
-     * @param SearchService $search   Search service
-     * @param string        $cacheDir Directory to hold cache results (optional)
-     * @param array         $filters  Filters to apply to Solr tree queries
+     * @param Connector        $connector Solr connector
+     * @param FormatterManager $fm        Formatter manager
+     * @param string           $cacheDir  Directory to hold cache results (optional)
+     * @param array            $filters   Filters to apply to Solr tree queries
      */
-    public function __construct(SearchService $search, $cacheDir = null,
-        $filters = []
+    public function __construct(Connector $connector, FormatterManager $fm,
+        $cacheDir = null, $filters = []
     ) {
-        $this->searchService = $search;
+        $this->solrConnector = $connector;
+        $this->formatterManager = $fm;
         if (null !== $cacheDir) {
             $this->cacheDir = rtrim($cacheDir, '/');
         }
@@ -94,102 +104,97 @@ class Solr extends AbstractBase
      */
     public function getXML($id, $options = [])
     {
-        $top = $this->searchService->retrieve('Solr', $id)->getRecords();
-        if (!isset($top[0])) {
-            return '';
-        }
-        $top = $top[0];
-        $cacheFile = (null !== $this->cacheDir)
-            ? $this->cacheDir . '/hierarchyTree_' . urlencode($id) . '.xml'
-            : false;
+        return $this->getFormattedData($id, 'xml', $options, 'hierarchyTree_%s.xml');
+    }
 
-        $useCache = isset($options['refresh']) ? !$options['refresh'] : true;
-        $cacheTime = $this->getHierarchyDriver()->getTreeCacheTime();
+    /**
+     * Search Solr.
+     *
+     * @param string $q    Search query
+     * @param int    $rows Max rows to retrieve (default = int max)
+     *
+     * @return array
+     */
+    protected function searchSolr($q, $rows = 2147483647)
+    {
+        $params = new ParamBag(
+            [
+                'q'  => [$q],
+                'fq' => $this->filters,
+                'hl' => ['false'],
+                'fl' => ['title,id,hierarchy_parent_id,hierarchy_top_id,'
+                    . 'is_hierarchy_id,hierarchy_sequence,title_in_hierarchy'],
+                'wt' => ['json'],
+                'json.nl' => ['arrarr'],
+                'rows' => [$rows], // Integer max
+                'start' => [0]
+            ]
+        );
+        $response = $this->solrConnector->search($params);
+        return json_decode($response);
+    }
 
-        if ($useCache && file_exists($cacheFile)
-            && ($cacheTime < 0 || filemtime($cacheFile) > (time() - $cacheTime))
-        ) {
-            $this->debug("Using cached data from $cacheFile");
-            $xml = file_get_contents($cacheFile);
-        } else {
-            $starttime = microtime(true);
-            $isCollection = $top->isCollection() ? "true" : "false";
-            $xml = '<root><item id="' .
-                htmlspecialchars($id) .
-                '" isCollection="' . $isCollection . '">' .
-                '<content><name>' . htmlspecialchars($top->getTitle()) .
-                '</name></content>';
-            $count = 0;
-            $xml .= $this->getChildren($id, $count);
-            $xml .= '</item></root>';
-            if ($cacheFile) {
-                if (!file_exists($this->cacheDir)) {
-                    mkdir($this->cacheDir);
+    /**
+     * Retrieve a map of children for the provided hierarchy.
+     *
+     * @param string $id Record ID
+     *
+     * @return array
+     */
+    protected function getMapForHierarchy($id)
+    {
+        // Static cache of last map; if the user requests the same map twice
+        // in a row (as when generating XML and JSON in sequence) this will
+        // save a Solr hit.
+        static $map;
+        static $lastId = null;
+        if ($id === $lastId) {
+            return $map;
+        }
+        $lastId = $id;
+
+        $results = $this->searchSolr('hierarchy_top_id:"' . $id . '"');
+        if ($results->response->numFound < 1) {
+            return [];
+        }
+        $map = [$id => []];
+        foreach ($results->response->docs as $current) {
+            $parents = isset($current->hierarchy_parent_id)
+                ? $current->hierarchy_parent_id : [];
+            foreach ($parents as $parentId) {
+                if (!isset($map[$parentId])) {
+                    $map[$parentId] = [$current];
+                } else {
+                    $map[$parentId][] = $current;
                 }
-                file_put_contents($cacheFile, $xml);
             }
-            $this->debug(
-                "Hierarchy of $count records built in " .
-                abs(microtime(true) - $starttime)
-            );
         }
-        return $xml;
+        return $map;
     }
 
     /**
-     * Get Solr Children
+     * Get a record from Solr (return false if not found).
      *
-     * @param string $parentID The starting point for the current recursion
-     * (equivlent to Solr field hierarchy_parent_id)
-     * @param string $count    The total count of items in the tree
-     * before this recursion
+     * @param string $id ID to fetch.
      *
-     * @return string
+     * @return array|bool
      */
-    protected function getChildren($parentID, &$count)
+    protected function getRecord($id)
     {
-        $query = new Query(
-            'hierarchy_parent_id:"' . addcslashes($parentID, '"') . '"'
-        );
-        $results = $this->searchService->search(
-            'Solr', $query, 0, 10000,
-            new ParamBag(['fq' => $this->filters, 'hl' => 'false'])
-        );
-        if ($results->getTotal() < 1) {
-            return '';
-        }
-        $xml = [];
-        $sorting = $this->getHierarchyDriver()->treeSorting();
-
-        foreach ($results->getRecords() as $current) {
-            ++$count;
-
-            $titles = $current->getTitlesInHierarchy();
-            $title = isset($titles[$parentID])
-                ? $titles[$parentID] : $current->getTitle();
-
-            $this->debug("$parentID: " . $current->getUniqueID());
-            $xmlNode = '';
-            $isCollection = $current->isCollection() ? "true" : "false";
-            $xmlNode .= '<item id="' . htmlspecialchars($current->getUniqueID()) .
-                '" isCollection="' . $isCollection . '"><content><name>' .
-                htmlspecialchars($title) . '</name></content>';
-            $xmlNode .= $this->getChildren($current->getUniqueID(), $count);
-            $xmlNode .= '</item>';
-
-            // If we're in sorting mode, we need to create key-value arrays;
-            // otherwise, we can just collect flat strings.
-            if ($sorting) {
-                $positions = $current->getHierarchyPositionsInParents();
-                $sequence = isset($positions[$parentID]) ? $positions[$parentID] : 0;
-                $xml[] = [$sequence, $xmlNode];
-            } else {
-                $xml[] = $xmlNode;
-            }
+        // Static cache of last record; if the user requests the same map twice
+        // in a row (as when generating XML and JSON in sequence) this will
+        // save a Solr hit.
+        static $record;
+        static $lastId = null;
+        if ($id === $lastId) {
+            return $record;
         }
+        $lastId = $id;
 
-        // Assemble the XML, sorting it first if necessary:
-        return implode('', $sorting ? $this->sortNodes($xml) : $xml);
+        $recordResults = $this->searchSolr('id:"' . $id . '"', 1);
+        $record = isset($recordResults->response->docs[0])
+            ? $recordResults->response->docs[0] : false;
+        return $record;
     }
 
     /**
@@ -205,13 +210,26 @@ class Solr extends AbstractBase
      */
     public function getJSON($id, $options = [])
     {
-        $top = $this->searchService->retrieve('Solr', $id)->getRecords();
-        if (!isset($top[0])) {
-            return '';
-        }
-        $top = $top[0];
+        return $this->getFormattedData($id, 'json', $options, 'tree_%s.json');
+    }
+
+    /**
+     * Get formatted data for the specified hierarchy ID.
+     *
+     * @param string $id            Hierarchy ID.
+     * @param string $format        Name of formatter service to use.
+     * @param array  $options       Additional options for JSON generation.
+     * (Currently one option is supported: 'refresh' may be set to true to
+     * bypass caching).
+     * @param string $cacheTemplate Template for cache filenames
+     *
+     * @return string
+     */
+    public function getFormattedData($id, $format, $options = [],
+        $cacheTemplate = 'tree_%s'
+    ) {
         $cacheFile = (null !== $this->cacheDir)
-            ? $this->cacheDir . '/tree_' . urlencode($id) . '.json'
+            ? $this->cacheDir . '/' . sprintf($cacheTemplate, urlencode($id))
             : false;
 
         $useCache = isset($options['refresh']) ? !$options['refresh'] : true;
@@ -225,19 +243,23 @@ class Solr extends AbstractBase
             return $json;
         } else {
             $starttime = microtime(true);
-            $json = [
-                'id' => $id,
-                'type' => $top->isCollection()
-                    ? 'collection'
-                    : 'record',
-                'title' => $top->getTitle()
-            ];
-            $children = $this->getChildrenJson($id, $count);
-            if (!empty($children)) {
-                $json['children'] = $children;
+            $map = $this->getMapForHierarchy($id);
+            if (empty($map)) {
+                return '';
             }
+            // Get top record's info
+            $formatter = $this->formatterManager->get($format);
+            $formatter->setRawData(
+                $this->getRecord($id), $map,
+                $this->getHierarchyDriver()->treeSorting(),
+                $this->getHierarchyDriver()->getCollectionLinkType()
+            );
+            $encoded = $formatter->getData();
+            $count = $formatter->getCount();
+
+            $this->debug('Done: ' . abs(microtime(true) - $starttime));
+
             if ($cacheFile) {
-                $encoded = json_encode($json);
                 // Write file
                 if (!file_exists($this->cacheDir)) {
                     mkdir($this->cacheDir);
@@ -245,101 +267,13 @@ class Solr extends AbstractBase
                 file_put_contents($cacheFile, $encoded);
             }
             $this->debug(
-                "Hierarchy of $count records built in " .
+                "Hierarchy of {$count} records built in " .
                 abs(microtime(true) - $starttime)
             );
             return $encoded;
         }
     }
 
-    /**
-     * Get Solr Children for JSON
-     *
-     * @param string $parentID The starting point for the current recursion
-     * (equivlent to Solr field hierarchy_parent_id)
-     * @param string $count    The total count of items in the tree
-     * before this recursion
-     *
-     * @return string
-     */
-    protected function getChildrenJson($parentID, &$count)
-    {
-        $query = new Query(
-            'hierarchy_parent_id:"' . addcslashes($parentID, '"') . '"'
-        );
-        $results = $this->searchService->search(
-            'Solr', $query, 0, 10000,
-            new ParamBag(['fq' => $this->filters, 'hl' => 'false'])
-        );
-        if ($results->getTotal() < 1) {
-            return '';
-        }
-        $json = [];
-        $sorting = $this->getHierarchyDriver()->treeSorting();
-
-        foreach ($results->getRecords() as $current) {
-            ++$count;
-
-            $titles = $current->getTitlesInHierarchy();
-            $title = isset($titles[$parentID])
-                ? $titles[$parentID] : $current->getTitle();
-
-            $this->debug("$parentID: " . $current->getUniqueID());
-            $childNode = [
-                'id' => $current->getUniqueID(),
-                'type' => $current->isCollection()
-                    ? 'collection'
-                    : 'record',
-                'title' => $title
-            ];
-            if ($current->isCollection()) {
-                $children = $this->getChildrenJson(
-                    $current->getUniqueID(),
-                    $count
-                );
-                if (!empty($children)) {
-                    $childNode['children'] = $children;
-                }
-            }
-
-            // If we're in sorting mode, we need to create key-value arrays;
-            // otherwise, we can just collect flat values.
-            if ($sorting) {
-                $positions = $current->getHierarchyPositionsInParents();
-                $sequence = isset($positions[$parentID]) ? $positions[$parentID] : 0;
-                $json[] = [$sequence, $childNode];
-            } else {
-                $json[] = $childNode;
-            }
-        }
-
-        return $sorting ? $this->sortNodes($json) : $json;
-    }
-
-    /**
-     * Sort Nodes
-     * Convert an unsorted array of [ key, value ] pairs into a sorted array
-     * of values.
-     *
-     * @param array $array The array of arrays to sort
-     *
-     * @return array
-     */
-    protected function sortNodes($array)
-    {
-        // Sort arrays based on first element
-        $sorter = function ($a, $b) {
-            return strcmp($a[0], $b[0]);
-        };
-        usort($array, $sorter);
-
-        // Collapse array to remove sort values
-        $mapper = function ($i) {
-            return $i[1];
-        };
-        return array_map($mapper, $array);
-    }
-
     /**
      * Does this data source support the specified hierarchy ID?
      *
@@ -354,10 +288,7 @@ class Solr extends AbstractBase
         if (!isset($settings['checkAvailability'])
             || $settings['checkAvailability'] == 1
         ) {
-            $results = $this->searchService->retrieve(
-                'Solr', $id, new ParamBag(['fq' => $this->filters])
-            );
-            if ($results->getTotal() < 1) {
+            if (!$this->getRecord($id)) {
                 return false;
             }
         }
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
index eec0d74e2a304a18c3dee2bd85dfb6c5e2f003cd..9c01672cee4259443a741c9730335e52019638d0 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
@@ -202,27 +202,45 @@ class JSTree extends AbstractBase
      */
     protected function getContextualUrl($node, $context, $collectionID)
     {
-        $params = [
-            'id' => $node->id,
-            'tab' => 'HierarchyTree'
-        ];
-        $options = [
-            'query' => [
-                'recordID' => $node->id
-            ]
-        ];
         if ($context == 'Collection') {
-            return $this->router->fromRoute('collection', $params, $options)
+            return $this->getUrlFromRouteCache('collection', $node->id)
                 . '#tabnav';
         } else {
             $options['query']['hierarchy'] = $collectionID;
-            $url = $this->router->fromRoute($node->type, $params, $options);
+            $url = $this->getUrlFromRouteCache($node->type, $node->id);
             return $node->type == 'collection'
                 ? $url . '#tabnav'
                 : $url . '#tree-' . preg_replace('/\W/', '-', $node->id);
         }
     }
 
+    /**
+     * Get the URL for a record and cache it to avoid the relatively slow routing
+     * calls.
+     *
+     * @param string $route Route
+     * @param string $id    Record ID
+     *
+     * @return string URL
+     */
+    protected function getUrlFromRouteCache($route, $id)
+    {
+        static $cache = [];
+        if (!isset($cache[$route])) {
+            $params = [
+                'id' => '__record_id__',
+                'tab' => 'HierarchyTree'
+            ];
+            $options = [
+                'query' => [
+                    'recordID' => '__record_id__'
+                ]
+            ];
+            $cache[$route] = $this->router->fromRoute($route, $params, $options);
+        }
+        return str_replace('__record_id__', $id, $cache[$route]);
+    }
+
     /**
      * Convert JSTree JSON structure to HTML
      *
diff --git a/module/VuFind/src/VuFind/I18n/TranslatableString.php b/module/VuFind/src/VuFind/I18n/TranslatableString.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0eab6cb04f4fd7b606a44f9153c512f3d154c08
--- /dev/null
+++ b/module/VuFind/src/VuFind/I18n/TranslatableString.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Class for translatable string with a special default translation.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Translator
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\I18n;
+
+/**
+ * Class for translatable string with a special default translation.
+ *
+ * @category VuFind2
+ * @package  Translator
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class TranslatableString implements TranslatableStringInterface
+{
+    /**
+     * Original string
+     *
+     * @var string
+     */
+    protected $string;
+
+    /**
+     * Default display string
+     *
+     * @var string
+     */
+    protected $displayString;
+
+    /**
+     * Constructor
+     *
+     * @param string $string        Original string
+     * @param string $displayString Translatable display string
+     */
+    public function __construct($string, $displayString)
+    {
+        $this->string = $string;
+        $this->displayString = $displayString;
+    }
+
+    /**
+     * Return the original string by default
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->string;
+    }
+
+    /**
+     * Return string for display if raw value has no translation available (can be
+     * further translated)
+     *
+     * @return string
+     */
+    public function getDisplayString()
+    {
+        return $this->displayString;
+    }
+}
diff --git a/module/VuFind/src/VuFind/I18n/TranslatableStringInterface.php b/module/VuFind/src/VuFind/I18n/TranslatableStringInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9484f9a5d21b9889e8b8d05447e0cd53581a816a
--- /dev/null
+++ b/module/VuFind/src/VuFind/I18n/TranslatableStringInterface.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Interface for translatable strings.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Translator
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\I18n;
+
+/**
+ * Interface for translatable strings.
+ *
+ * @category VuFind2
+ * @package  Translator
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+interface TranslatableStringInterface
+{
+    /**
+     * Return string for display if raw value has no translation available (can be
+     * further translated)
+     *
+     * @return string
+     */
+    public function getDisplayString();
+}
diff --git a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
index 903f60ca8128340a7538cf18fef8c132c0a822fe..ee06acb90b4871068400f9ca95844a74b44b90fb 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
@@ -87,7 +87,34 @@ trait TranslatorAwareTrait
     }
 
     /**
-     * Translate a string
+     * Translate a string (or string-castable object)
+     *
+     * @param string|object $str     String to translate
+     * @param array         $tokens  Tokens to inject into the translated string
+     * @param string        $default Default value to use if no translation is found
+     * (null for no default).
+     *
+     * @return string
+     */
+    public function translate($str, $tokens = [], $default = null)
+    {
+        // Special case: deal with objects with a designated display value:
+        if ($str instanceof \VuFind\I18n\TranslatableStringInterface) {
+            $translated = $this->translateString((string)$str, $tokens, $default);
+            if ($translated !== (string)$str) {
+                return $translated;
+            }
+            return $this->translateString(
+                $str->getDisplayString(), $tokens, $default
+            );
+        }
+
+        // Default case: deal with ordinary strings (or string-castable objects):
+        return $this->translateString((string)$str, $tokens, $default);
+    }
+
+    /**
+     * Get translation for a string
      *
      * @param string $str     String to translate
      * @param array  $tokens  Tokens to inject into the translated string
@@ -96,7 +123,7 @@ trait TranslatorAwareTrait
      *
      * @return string
      */
-    public function translate($str, $tokens = [], $default = null)
+    protected function translateString($str, $tokens = [], $default = null)
     {
         $msg = null === $this->translator
             ? $str : $this->translator->translate($str);
diff --git a/module/VuFind/src/VuFind/ILS/Driver/DAIA.php b/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
index 268d754a05033862e8cbe5ff0b8b25c022ca5d6d..6d6cac9cdb2ecc4dc8d0dbd8f8dbdbb846440b30 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
@@ -47,7 +47,7 @@ use DOMDocument, VuFind\Exception\ILS as ILSException,
  * @link     http://vufind.org/wiki/vufind2:building_an_ils_driver Wiki
  */
 class DAIA extends AbstractBase implements
-   HttpServiceAwareInterface, LoggerAwareInterface
+    HttpServiceAwareInterface, LoggerAwareInterface
 {
     use \VuFindHttp\HttpServiceAwareTrait;
     use \VuFind\Log\LoggerAwareTrait;
@@ -74,10 +74,18 @@ class DAIA extends AbstractBase implements
     protected $daiaResponseFormat;
 
     /**
-     * DAIA legacySupport flag
+     * Flag to enable multiple DAIA-queries
      *
      * @var boolean
      */
+    protected $multiQuery = false;
+
+    /**
+     * DAIA legacySupport flag
+     *
+     * @var        boolean
+     * @deprecated Will be removed in the next driver version
+     */
     protected $legacySupport = false;
 
     /**
@@ -117,6 +125,11 @@ class DAIA extends AbstractBase implements
             $this->debug("No daiaIdPrefix setting found, using default: ppn:");
             $this->daiaIdPrefix = "ppn:";
         }
+        if (isset($this->config['DAIA']['multiQuery'])) {
+            $this->multiQuery = $this->config['DAIA']['multiQuery'];
+        } else {
+            $this->debug("No multiQuery setting found, using default: false");
+        }
     }
 
     /**
@@ -159,19 +172,27 @@ class DAIA extends AbstractBase implements
      *
      * @param string $id The record id to retrieve the holdings for
      *
-     * @throws ILSException
      * @return mixed     On success, an associative array with the following keys:
      * id, availability (boolean), status, location, reserve, callnumber.
      */
     public function getStatus($id)
     {
-        if ($this->daiaResponseFormat == 'xml') {
+        if ($this->legacySupport) {
+            // we are in legacySupport mode, so use the deprecated
+            // getXMLStatus() method
             return $this->getXMLStatus($id);
-        } elseif ($this->daiaResponseFormat == 'json') {
-            return $this->getJSONStatus($id);
         } else {
-            throw new ILSException('No matching format found for status retrieval.');
+            // let's retrieve the DAIA document by URI
+            $rawResult = $this->doHTTPRequest($this->generateURI($id));
+            // extract the DAIA document for the current id from the
+            // HTTPRequest's result
+            $doc = $this->extractDaiaDoc($id, $rawResult);
+            if (!is_null($doc)) {
+                // parse the extracted DAIA document and return the status info
+                return $this->parseDaiaDoc($id, $doc);
+            }
         }
+        return [];
     }
 
     /**
@@ -179,29 +200,58 @@ class DAIA extends AbstractBase implements
      *
      * This is responsible for retrieving the status information for a
      * collection of records.
+     * As the DAIA Query API supports querying multiple ids simultaneously
+     * (all ids divided by "|") getStatuses(ids) would call getStatus(id) only
+     * once, id containing the list of ids to be retrieved. Apart from the
+     * legacySupport this would cause some trouble as the list of ids does not
+     * necessarily correspond to the VuFind Record-id. Therefore getStatuses(ids)
+     * has its own logic for multiQuery-support and performs the HTTPRequest
+     * itself, retrieving one DAIA response for all ids and uses helper
+     * functions to split this one response into documents corresponding to the
+     * queried ids.
+     * If multiQueries are not supported, getStatus(id) is used.
      *
      * @param array $ids The array of record ids to retrieve the status for
      *
-     * @throws ILSException
-     * @return array     An array of getStatus() return values on success.
+     * @return array    An array of status information values on success.
      */
     public function getStatuses($ids)
     {
-        $items = [];
+        $status = [];
 
-        if ($this->daiaResponseFormat == 'xml') {
+        if ($this->legacySupport) {
+            // we are in legacySupport mode, so use the deprecated
+            // getXMLStatus() method for each id
             foreach ($ids as $id) {
-                $items[] = $this->getXMLShortStatus($id);
-            }
-        } elseif ($this->daiaResponseFormat == 'json') {
-            foreach ($ids as $id) {
-                $items[] = $this->getJSONStatus($id);
+                $status[] = $this->getXMLShortStatus($id);
             }
         } else {
-            throw new ILSException('No matching format found for status retrieval.');
+            if ($this->multiQuery) {
+                // perform one DAIA query with multiple URIs
+                $rawResult = $this->doHTTPRequest($this->generateMultiURIs($ids));
+                // now we need to reestablish the key-value pair id=>document as
+                // the id used in VuFind can differ from the document-URI
+                // (depending on how the URI is generated)
+                foreach ($ids as $id) {
+                    // it is assumed that each DAIA document has a unique URI,
+                    // so get the document with the corresponding id
+                    $doc = $this->extractDaiaDoc($id, $rawResult);
+                    if (!is_null($doc)) {
+                        // a document with the corresponding id exists, which
+                        // means we got status information for that record
+                        $status[] = $this->parseDaiaDoc($id, $doc);
+                    }
+                    unset($doc);
+                }
+            } else {
+                // multiQuery is not supported, so retrieve DAIA documents by
+                // performing getStatus(id) for all ids
+                foreach ($ids as $id) {
+                    $status[] = $this->getStatus($id);
+                }
+            }
         }
-
-        return $items;
+        return $status;
     }
 
     /**
@@ -213,8 +263,6 @@ class DAIA extends AbstractBase implements
      * @param string $id     The record id to retrieve the holdings for
      * @param array  $patron Patron data
      *
-     * @throws \VuFind\Exception\Date
-     * @throws ILSException
      * @return array         On success, an associative array with the following
      * keys: id, availability (boolean), status, location, reserve, callnumber,
      * duedate, number, barcode.
@@ -257,11 +305,11 @@ class DAIA extends AbstractBase implements
 
         $http_headers = [
             "Content-type: " . $contentTypes[$this->daiaResponseFormat],
-            "Accept: " .  $contentTypes[$this->daiaResponseFormat]
+            "Accept: " .  $contentTypes[$this->daiaResponseFormat],
         ];
 
         $params = [
-            "id" => $this->daiaIdPrefix . $id,
+            "id" => $id,
             "format" => $this->daiaResponseFormat,
         ];
 
@@ -296,99 +344,494 @@ class DAIA extends AbstractBase implements
             // return false as DAIA request failed
             return false;
         }
+
+        // check if result matches daiaResponseFormat
+        if (!preg_match(
+            "/^" .
+            str_replace("/", "\/", $contentTypes[$this->daiaResponseFormat]) .
+            "(\s*)(\;.*)?/",
+            strtolower($result->getHeaders()->get("ContentType")->getFieldValue())
+        )) {
+            throw new ILSException(
+                "DAIA-ResponseFormat not supported. Received: " .
+                $result->getHeaders()->get("ContentType")->getFieldValue() . " - " .
+                "Expected: " . $contentTypes[$this->daiaResponseFormat]
+            );
+        }
+
         return ($result->getBody());
+    }
 
+    /**
+     * Generate a DAIA URI necessary for the query
+     *
+     * @param string $id Id of the record whose DAIA document should be queried
+     *
+     * @return string     URI of the DAIA document
+     *
+     * @see http://gbv.github.io/daiaspec/daia.html#query-api
+     */
+    protected function generateURI($id)
+    {
+        if ($this->legacySupport) {
+            return $id;
+        } else {
+            return $this->daiaIdPrefix . $id;
+        }
     }
 
     /**
-     * Get Status of JSON Result
+     * Combine several ids to DAIA Query API conform URIs
      *
-     * This method gets a json result from the DAIA server and
-     * analyses it. Than a vufind result is build.
+     * @param array $ids Array of ids which shall be converted into URIs and
+     *                  combined for querying multiple DAIA documents.
      *
-     * @param string $id The id of the bib record
+     * @return string   Combined URIs (delimited by "|")
      *
-     * @return array()      of items
+     * @see http://gbv.github.io/daiaspec/daia.html#query-api
      */
-    protected function getJSONStatus($id)
+    protected function generateMultiURIs($ids)
     {
-        // get daia json request for id and decode it
-        $daia = json_decode($this->doHTTPRequest($id), true);
-        $result = [];
-        if (array_key_exists("message", $daia)) {
-            // analyse the message for the error handling and debugging
+        $multiURI = '';
+        foreach ($ids as $id) {
+            $multiURI .= $this->generateURI($id) . "|";
         }
-        if (array_key_exists("instituion", $daia)) {
-            // information about the institution that grants or
-            // knows about services and their availability
-            // this fields could be analyzed: href, content, id
+        return rtrim($multiURI, "|");
+    }
+
+    /**
+     * Parse a DAIA document depending on its type.
+     *
+     * Parse a DAIA document depending on its type and return a VuFind
+     * compatible array of status information.
+     * Supported types are:
+     *      - array (for JSON results)
+     *      - DOMNode (for XML results)
+     *
+     * @param string $id      Record Id corresponding to the DAIA document
+     * @param mixed  $daiaDoc The DAIA document, supported types are array and
+     *                        DOMNode
+     *
+     * @return array An array with status information for the record
+     * @throws ILSException
+     */
+    protected function parseDaiaDoc($id, $daiaDoc)
+    {
+        if (is_array($daiaDoc)) {
+            return $this->parseDaiaArray($id, $daiaDoc);
+        } elseif (is_subclass_of($daiaDoc, "DOMNode")) {
+            return $this->parseDaiaDom($id, $daiaDoc);
+        } else {
+            throw new ILSException(
+                'Unsupported document type (did not match Array or DOMNode).'
+            );
         }
-        if (array_key_exists("document", $daia)) {
-            // analyse the items
-            $dummy_item = ["id" => "0815",
-                "availability" => true,
-                "status" => "Available",
-                "location" => "physical location no HTML",
-                "reserve" => "N",
-                "callnumber" => "007",
-                "number" => "1",
-                "item_id" => "0815",
-                "barcode" => "1"];
-            // each document may contain: id, href, message, item
-            foreach ($daia["document"] as $document) {
-                $doc_id = null;
-                $doc_href = null;
-                $doc_message = null;
-                if (array_key_exists("id", $document)) {
-                    $doc_id = $document["id"];
-                }
-                if (array_key_exists("href", $document)) {
-                    // url of the document
-                    $doc_href = $document["href"];
-                }
-                if (array_key_exists("message", $document)) {
-                    // array of messages with language code and content
-                    $doc_message = $document["message"];
-                }
-                // if one or more items exist, iterate and build result-item
-                if (array_key_exists("item", $document)) {
-                    $number = 0;
-                    foreach ($document["item"] as $item) {
-                        $result_item = [];
-                        $result_item["id"] = $id;
-                        $result_item["item_id"] = $id;
-                        $number++; // count items
-                        $result_item["number"] = $number;
-                        // set default value for barcode
-                        $result_item["barcode"] = "1";
-                        // set default value for reserve
-                        $result_item["reserve"] = "N";
-                        // get callnumber
-                        if (isset($item["label"])) {
-                            $result_item["callnumber"] = $item["label"];
-                        } else {
-                            $result_item["callnumber"] = "Unknown";
-                        }
-                        // get location
-                        if (isset($item["storage"])) {
-                            $result_item["location"] = $item["storage"]["content"];
-                        } else {
-                            $result_item["location"] = "Unknown";
+    }
+
+    /**
+     * Extract a DAIA document identified by an id
+     *
+     * This method loops through all the existing DAIA document-elements in
+     * the given DAIA response and returns the first document whose id matches
+     * the given id.
+     *
+     * @param string $id           Record Id of the DAIA document in question.
+     * @param string $daiaResponse Raw response from DAIA request.
+     *
+     * @return Array|DOMNode|null   The DAIA document identified by id and
+     *                                  type depending on daiaResponseFormat.
+     * @throws ILSException
+     */
+    protected function extractDaiaDoc($id, $daiaResponse)
+    {
+
+        if ($this->daiaResponseFormat == 'xml') {
+            try {
+                $docs = new DOMDocument();
+                $docs->loadXML($daiaResponse);
+                // get all the DAIA documents
+                $doc = $docs->getElementsByTagName("document");
+                if (!is_null($doc) && $this->multiQuery) {
+                    // now loop through the found DAIA documents
+                    for ($i = 0; $i < $doc->length; $i++) {
+                        $attr = $doc->item($i)->attributes;
+                        // DAIA documents should use URIs as value for id
+                        $nodeValue = $attr->getNamedItem("id")->nodeValue;
+                        if ($nodeValue == $this->generateURI($id)) {
+                            // we've found the document element with the
+                            // matching URI
+                            return $doc->item($i);
                         }
-                        // status and availability will be calculated in own function
-                        $result_item = $this->calculateStatus($item)+$result_item;
-                        // add result_item to the result array
-                        $result[] = $result_item;
-                    } // end iteration on item
-                }
-            } // end iteration on document
-            // $result[]=$dummy_item;
+                    }
+                } elseif (!is_null($doc)) {
+                    // as multiQuery is not enabled we can be sure that the
+                    // DAIA response only contains one document.
+                    return $doc->item(0);
+                }
+                // no (id matching) document element found
+                return null;
+            } catch (\Exception $e) {
+                throw new ILSException($e->getMessage());
+            }
+
+        } elseif ($this->daiaResponseFormat == 'json') {
+            $docs = json_decode($daiaResponse, true);
+            // do DAIA documents exist?
+            if (array_key_exists("document", $docs) && $this->multiQuery) {
+                // now loop through the found DAIA documents
+                foreach ($docs["document"] as $doc) {
+                    // DAIA documents should use URIs as value for id
+                    if (isset($doc["id"])
+                        && $doc["id"] == $this->generateURI($id)
+                    ) {
+                        // we've found the document element with the matching URI
+                        return $doc;
+                    }
+                }
+            } elseif (array_key_exists("document", $docs)) {
+                // since a document exists but multiQuery is disabled, the first
+                // document is returned
+                return array_shift($docs['document']);
+            }
+            // no (id matching) document element found
+            return null;
+        } else {
+            throw new ILSException('Unsupported document format.');
         }
+    }
+
+    /**
+     * Parse an array with DAIA status information.
+     *
+     * @param string $id        Record id for the DAIA array.
+     * @param array  $daiaArray Array with raw DAIA status information.
+     *
+     * @return array            Array with VuFind compatible status information.
+     */
+    protected function parseDaiaArray($id, $daiaArray)
+    {
+        $doc_id = null;
+        $doc_href = null;
+        $doc_message = null;
+        if (array_key_exists("id", $daiaArray)) {
+            $doc_id = $daiaArray["id"];
+        }
+        if (array_key_exists("href", $daiaArray)) {
+            // url of the document
+            $doc_href = $daiaArray["href"];
+        }
+        if (array_key_exists("message", $daiaArray)) {
+            // array of messages with language code and content
+            $doc_message = $daiaArray["message"];
+        }
+        // if one or more items exist, iterate and build result-item
+        if (array_key_exists("item", $daiaArray)) {
+            $number = 0;
+            foreach ($daiaArray["item"] as $item) {
+                $result_item = [];
+                $result_item["id"] = $id;
+                $result_item["item_id"] = $item["id"];
+                $result_item["ilslink"] = $doc_href;
+                $number++; // count items
+                $result_item["number"] = $number;
+                // set default value for barcode
+                $result_item["barcode"] = "1";
+                // set default value for reserve
+                $result_item["reserve"] = "N";
+                // get callnumber
+                if (isset($item["label"])) {
+                    $result_item["callnumber"] = $item["label"];
+                } else {
+                    $result_item["callnumber"] = "Unknown";
+                }
+                // get location
+                if (isset($item["storage"]["content"])) {
+                    $result_item["location"] = $item["storage"]["content"];
+                } else {
+                    $result_item["location"] = "Unknown";
+                }
+                // status and availability will be calculated in own function
+                $result_item = $this->calculateStatus($item)+$result_item;
+                // add result_item to the result array
+                $result[] = $result_item;
+            } // end iteration on item
+        }
+
         return $result;
     }
 
     /**
-     * Calaculate Status and Availability of an item
+     * Parse a DOMNode Object with DAIA status information.
+     *
+     * @param string  $id      Record id for the DAIA array.
+     * @param DOMNode $daiaDom DOMNode object with raw DAIA status information.
+     *
+     * @return array            Array with VuFind compatible status information.
+     */
+    protected function parseDaiaDom($id, $daiaDom)
+    {
+        $itemlist = $daiaDom->getElementsByTagName('item');
+        $ilslink = '';
+        if ($daiaDom->attributes->getNamedItem('href') !== null) {
+            $ilslink = $daiaDom->attributes
+                ->getNamedItem('href')->nodeValue;
+        }
+        $emptyResult = [
+            'callnumber' => '-',
+            'availability' => '0',
+            'number' => 1,
+            'reserve' => 'No',
+            'duedate' => '',
+            'queue'   => '',
+            'delay'   => '',
+            'barcode' => 'No samples',
+            'status' => '',
+            'id' => $id,
+            'location' => '',
+            'ilslink' => $ilslink,
+            'label' => 'No samples'
+        ];
+        for ($c = 0; $itemlist->item($c) !== null; $c++) {
+            $result = [
+                'callnumber' => '',
+                'availability' => '0',
+                'number' => ($c+1),
+                'reserve' => 'No',
+                'duedate' => '',
+                'queue'   => '',
+                'delay'   => '',
+                'barcode' => 1,
+                'status' => '',
+                'id' => $id,
+                'item_id' => '',
+                'recallhref' => '',
+                'location' => '',
+                'location.id' => '',
+                'location.href' => '',
+                'label' => '',
+                'notes' => [],
+            ];
+            if ($itemlist->item($c)->attributes->getNamedItem('id') !== null) {
+                $result['item_id'] = $itemlist->item($c)->attributes
+                    ->getNamedItem('id')->nodeValue;
+            }
+            if ($itemlist->item($c)->attributes->getNamedItem('href') !== null) {
+                $result['recallhref'] = $itemlist->item($c)->attributes
+                    ->getNamedItem('href')->nodeValue;
+            }
+            $departmentElements = $itemlist->item($c)
+                ->getElementsByTagName('department');
+            if ($departmentElements->length > 0) {
+                if ($departmentElements->item(0)->nodeValue) {
+                    $result['location']
+                        = $departmentElements->item(0)->nodeValue;
+                    $result['location.id'] = $departmentElements
+                        ->item(0)->attributes->getNamedItem('id')->nodeValue;
+                    $result['location.href'] = $departmentElements
+                        ->item(0)->attributes->getNamedItem('href')->nodeValue;
+                }
+            }
+            $storageElements
+                = $itemlist->item($c)->getElementsByTagName('storage');
+            if ($storageElements->length > 0) {
+                if ($storageElements->item(0)->nodeValue) {
+                    $result['location'] = $storageElements->item(0)->nodeValue;
+                    //$result['location.id'] = $storageElements->item(0)
+                    //  ->attributes->getNamedItem('id')->nodeValue;
+                    $href = $storageElements->item(0)->attributes
+                        ->getNamedItem('href');
+                    if ($href !== null) {
+                        //href attribute is recommended but not mandatory
+                        $result['location.href'] = $storageElements->item(0)
+                            ->attributes->getNamedItem('href')->nodeValue;
+                    }
+                    //$result['barcode'] = $result['location.id'];
+                }
+            }
+            $barcodeElements
+                = $itemlist->item($c)->getElementsByTagName('identifier');
+            if ($barcodeElements->length > 0) {
+                if ($barcodeElements->item(0)->nodeValue) {
+                    $result['barcode'] = $barcodeElements->item(0)->nodeValue;
+                }
+            }
+            $labelElements = $itemlist->item($c)->getElementsByTagName('label');
+            if ($labelElements->length > 0) {
+                if ($labelElements->item(0)->nodeValue) {
+                    $result['label'] = $labelElements->item(0)->nodeValue;
+                    $result['callnumber']
+                        = urldecode($labelElements->item(0)->nodeValue);
+                }
+            }
+            $messageElements
+                = $itemlist->item($c)->getElementsByTagName('message');
+            if ($messageElements->length > 0) {
+                for ($m = 0; $messageElements->item($m) !== null; $m++) {
+                    $errno = $messageElements->item($m)->attributes
+                        ->getNamedItem('errno')->nodeValue;
+                    if ($errno === '404') {
+                        $result['status'] = 'missing';
+                    } else if ($this->logger) {
+                        $lang = $messageElements->item($m)->attributes
+                            ->getNamedItem('lang')->nodeValue;
+                        $logString = "[DAIA] message for {$lang}: "
+                            . $messageElements->item($m)->nodeValue;
+                        $this->debug($logString);
+                    }
+                }
+            }
+
+            //$loanAvail = 0;
+            //$loanExp = 0;
+            //$presAvail = 0;
+            //$presExp = 0;
+
+            $unavailableElements = $itemlist->item($c)
+                ->getElementsByTagName('unavailable');
+            if ($unavailableElements->item(0) !== null) {
+                for ($n = 0; $unavailableElements->item($n) !== null; $n++) {
+                    $service = $unavailableElements->item($n)->attributes
+                        ->getNamedItem('service');
+                    $expectedNode = $unavailableElements->item($n)->attributes
+                        ->getNamedItem('expected');
+                    $queueNode = $unavailableElements->item($n)->attributes
+                        ->getNamedItem('queue');
+                    if ($service !== null) {
+                        $service = $service->nodeValue;
+                        if ($service === 'presentation') {
+                            $result['presentation.availability'] = '0';
+                            $result['presentation_availability'] = '0';
+                            if ($expectedNode !== null) {
+                                $result['presentation.duedate']
+                                    = $expectedNode->nodeValue;
+                            }
+                            if ($queueNode !== null) {
+                                $result['presentation.queue']
+                                    = $queueNode->nodeValue;
+                            }
+                            $result['availability'] = '0';
+                        } elseif ($service === 'loan') {
+                            $result['loan.availability'] = '0';
+                            $result['loan_availability'] = '0';
+                            if ($expectedNode !== null) {
+                                $result['loan.duedate']
+                                    = $expectedNode->nodeValue;
+                            }
+                            if ($queueNode !== null) {
+                                $result['loan.queue'] = $queueNode->nodeValue;
+                            }
+                            $result['availability'] = '0';
+                        } elseif ($service === 'interloan') {
+                            $result['interloan.availability'] = '0';
+                            if ($expectedNode !== null) {
+                                $result['interloan.duedate']
+                                    = $expectedNode->nodeValue;
+                            }
+                            if ($queueNode !== null) {
+                                $result['interloan.queue']
+                                    = $queueNode->nodeValue;
+                            }
+                            $result['availability'] = '0';
+                        } elseif ($service === 'openaccess') {
+                            $result['openaccess.availability'] = '0';
+                            if ($expectedNode !== null) {
+                                $result['openaccess.duedate']
+                                    = $expectedNode->nodeValue;
+                            }
+                            if ($queueNode !== null) {
+                                $result['openaccess.queue']
+                                    = $queueNode->nodeValue;
+                            }
+                            $result['availability'] = '0';
+                        }
+                    }
+                    // TODO: message/limitation
+                    if ($expectedNode !== null) {
+                        $result['duedate'] = $expectedNode->nodeValue;
+                    }
+                    if ($queueNode !== null) {
+                        $result['queue'] = $queueNode->nodeValue;
+                    }
+                }
+            }
+
+            $availableElements = $itemlist->item($c)
+                ->getElementsByTagName('available');
+            if ($availableElements->item(0) !== null) {
+                for ($n = 0; $availableElements->item($n) !== null; $n++) {
+                    $service = $availableElements->item($n)->attributes
+                        ->getNamedItem('service');
+                    $delayNode = $availableElements->item($n)->attributes
+                        ->getNamedItem('delay');
+                    if ($service !== null) {
+                        $service = $service->nodeValue;
+                        if ($service === 'presentation') {
+                            $result['presentation.availability'] = '1';
+                            $result['presentation_availability'] = '1';
+                            if ($delayNode !== null) {
+                                $result['presentation.delay']
+                                    = $delayNode->nodeValue;
+                            }
+                            $result['availability'] = '1';
+                        } elseif ($service === 'loan') {
+                            $result['loan.availability'] = '1';
+                            $result['loan_availability'] = '1';
+                            if ($delayNode !== null) {
+                                $result['loan.delay'] = $delayNode->nodeValue;
+                            }
+                            $result['availability'] = '1';
+                        } elseif ($service === 'interloan') {
+                            $result['interloan.availability'] = '1';
+                            if ($delayNode !== null) {
+                                $result['interloan.delay']
+                                    = $delayNode->nodeValue;
+                            }
+                            $result['availability'] = '1';
+                        } elseif ($service === 'openaccess') {
+                            $result['openaccess.availability'] = '1';
+                            if ($delayNode !== null) {
+                                $result['openaccess.delay']
+                                    = $delayNode->nodeValue;
+                            }
+                            $result['availability'] = '1';
+                        }
+                    }
+                    // TODO: message/limitation
+                    if ($delayNode !== null) {
+                        $result['delay'] = $delayNode->nodeValue;
+                    }
+                }
+            }
+            // document has no availability elements, so set availability
+            // and barcode to -1
+            if ($availableElements->item(0) === null
+                && $unavailableElements->item(0) === null
+            ) {
+                $result['availability'] = '-1';
+                $result['barcode'] = '-1';
+            }
+            $result['ilslink'] = $ilslink;
+            $status[] = $result;
+            /* $status = "available";
+            if (loanAvail) return 0;
+            if (presAvail) {
+                if (loanExp) return 1;
+                return 2;
+            }
+            if (loanExp) return 3;
+            if (presExp) return 4;
+            return 5;
+            */
+        }
+        if (count($status) === 0) {
+            $status[] = $emptyResult;
+        }
+
+        return $status;
+    }
+
+    /**
+     * Calculate Status and Availability of an item
      *
      * If availability is false the string of status will be shown in vufind
      *
@@ -399,26 +842,33 @@ class DAIA extends AbstractBase implements
     protected function calculateStatus($item)
     {
         $availability = false;
-        $status = null;
+        $status = ''; // status cannot be null as this will crash the translator
         $duedate = null;
         if (array_key_exists("available", $item)) {
             // check if item is loanable or presentation
             foreach ($item["available"] as $available) {
-                if ($available["service"] == "loan") {
-                    $availability = true;
-                }
-                if ($available["service"] == "presentation") {
-                    $availability = true;
+                // attribute service can be set once or not
+                if (isset($available["service"])) {
+                    if ($available["service"] == "loan") {
+                        $availability = true;
+                    }
+                    if ($available["service"] == "presentation") {
+                        $availability = true;
+                    }
                 }
             }
         }
         if (array_key_exists("unavailable", $item)) {
             foreach ($item["unavailable"] as $unavailable) {
-                if ($unavailable["service"] == "loan") {
-                    if (isset($unavailable["expected"])) {
-                        $duedate = $unavailable["expected"];
+                // attribute service can be set once or not
+                if (isset($unavailable["service"])) {
+                    if ($unavailable["service"] == "loan") {
+                        $status = "dummy text";
                     }
-                    $status = "dummy text";
+                }
+                // attribute expected is mandatory for unavailable element
+                if (isset($unavailable["expected"])) {
+                    $duedate = $unavailable["expected"];
                 }
             }
         }
@@ -433,6 +883,8 @@ class DAIA extends AbstractBase implements
      * @param string $id Document to look up.
      *
      * @return array
+     *
+     * @deprecated Only kept for legacySupport
      */
     protected function getXMLStatus($id)
     {
@@ -460,19 +912,19 @@ class DAIA extends AbstractBase implements
                     ->getNamedItem('href')->nodeValue;
             }
             $emptyResult = [
-                    'callnumber' => '-',
-                    'availability' => '0',
-                    'number' => 1,
-                    'reserve' => 'No',
-                    'duedate' => '',
-                    'queue'   => '',
-                    'delay'   => '',
-                    'barcode' => 'No samples',
-                    'status' => '',
-                    'id' => $id,
-                    'location' => '',
-                    'ilslink' => $ilslink,
-                    'label' => 'No samples'
+                'callnumber' => '-',
+                'availability' => '0',
+                'number' => 1,
+                'reserve' => 'No',
+                'duedate' => '',
+                'queue'   => '',
+                'delay'   => '',
+                'barcode' => 'No samples',
+                'status' => '',
+                'id' => $id,
+                'location' => '',
+                'ilslink' => $ilslink,
+                'label' => 'No samples'
             ];
             for ($c = 0; $itemlist->item($c) !== null; $c++) {
                 $result = [
@@ -721,6 +1173,8 @@ class DAIA extends AbstractBase implements
      * @return mixed     On success, an associative array with the following keys:
      * id, availability (boolean), status, location, reserve, callnumber, duedate,
      * number
+     *
+     * @deprecated Only kept for legacySupport
      */
     public function getXMLShortStatus($id)
     {
@@ -815,9 +1269,9 @@ class DAIA extends AbstractBase implements
                         if ($earliest_counter === 0) {
                             $earliest_duedate = $earliest_value;
                             $earliest_href = isset($hrefs[$earliest_key])
-                                 ? $hrefs[$earliest_key] : '';
+                                ? $hrefs[$earliest_key] : '';
                             $earliest_queue = isset($queue[$earliest_key])
-                                 ? $queue[$earliest_key] : '';
+                                ? $queue[$earliest_key] : '';
                         }
                         $earliest_counter = 1;
                     }
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Demo.php b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
index f628194583c88685a38f4fa122f06e6193017e99..063ba088de1ab4185f6e6d1e49102467cf474cf9 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Demo.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
@@ -1216,7 +1216,8 @@ class Demo extends AbstractBase
             return [
                 'blocks' => [
                     'Simulated account block; try again and it will work eventually.'
-                ]
+                ],
+                'details' => []
             ];
         }
 
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Koha.php b/module/VuFind/src/VuFind/ILS/Driver/Koha.php
index ef1e3e689414e32afacc26c8c2487c5a113a7dee..0129137eb1360b16dc3b010330c7410cc33de184 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Koha.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Koha.php
@@ -83,7 +83,8 @@ class Koha extends AbstractBase
             ';port=' . $this->config['Catalog']['port'] .
             ';dbname=' . $this->config['Catalog']['database'],
             $this->config['Catalog']['username'],
-            $this->config['Catalog']['password']
+            $this->config['Catalog']['password'],
+            [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']
         );
         // Throw PDOExceptions if something goes wrong
         $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
diff --git a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
index 93f35937c58bf29c68921e01fe86b1a59d8d35c5..0ee17a5e98355b6e444e9d88c181597c8007b2fb 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
@@ -88,13 +88,6 @@ class MultiBackend extends AbstractBase
      */
     protected $config = [];
 
-    /**
-     * The separating values to be used for each ILS.
-     * Not yet implemented
-     * @var object
-     */
-    protected $delimiters = [];
-
     /**
      * Configuration loader
      *
@@ -152,9 +145,6 @@ class MultiBackend extends AbstractBase
         $this->defaultDriver = isset($this->config['General']['default_driver'])
             ? $this->config['General']['default_driver']
             : null;
-        $this->delimiters['login'] = isset($this->config['Delimiters']['login'])
-            ? $this->config['Delimiters']['login']
-            : '.';
     }
 
     /**
@@ -334,7 +324,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyProfile($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             $profile = $driver
@@ -357,14 +347,14 @@ class MultiBackend extends AbstractBase
      */
     public function patronLogin($username, $password)
     {
-        $source = $this->getSource($username, 'login');
+        $source = $this->getSource($username);
         if (!$source) {
             $source = $this->getDefaultLoginDriver();
         }
         $driver = $this->getDriver($source);
         if ($driver) {
             $patron = $driver->patronLogin(
-                $this->getLocalId($username, $this->delimiters['login']), $password
+                $this->getLocalId($username), $password
             );
             $patron = $this->addIdPrefixes($patron, $source);
             return $patron;
@@ -384,7 +374,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyTransactions($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             $transactions = $driver->getMyTransactions(
@@ -433,7 +423,7 @@ class MultiBackend extends AbstractBase
      */
     public function renewMyItems($renewDetails)
     {
-        $source = $this->getSource($renewDetails['patron']['cat_username'], 'login');
+        $source = $this->getSource($renewDetails['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             $details = $driver->renewMyItems(
@@ -455,7 +445,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyFines($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             $fines = $driver->getMyFines($this->stripIdPrefixes($patron, $source));
@@ -475,7 +465,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyHolds($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             $holds = $driver->getMyHolds($this->stripIdPrefixes($patron, $source));
@@ -497,7 +487,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyStorageRetrievalRequests($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if (!$this->methodSupported(
@@ -530,7 +520,7 @@ class MultiBackend extends AbstractBase
         if (!isset($patron['cat_username'])) {
             return false;
         }
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if ($this->getSource($id) != $source) {
@@ -558,7 +548,7 @@ class MultiBackend extends AbstractBase
      */
     public function checkStorageRetrievalRequestIsValid($id, $data, $patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if ($this->getSource($id) != $source
@@ -596,7 +586,7 @@ class MultiBackend extends AbstractBase
      */
     public function getPickUpLocations($patron = false, $holdDetails = null)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if ($holdDetails) {
@@ -630,7 +620,7 @@ class MultiBackend extends AbstractBase
      */
     public function getDefaultPickUpLocation($patron = false, $holdDetails = null)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if ($holdDetails) {
@@ -663,7 +653,7 @@ class MultiBackend extends AbstractBase
         $source = $this->getSource($id);
         $driver = $this->getDriver($source);
         if ($driver) {
-            if ($this->getSource($patron['cat_username'], 'login') != $source
+            if ($this->getSource($patron['cat_username']) != $source
                 || !$this->methodSupported(
                     $driver, 'getRequestGroups', compact('id', 'patron')
                 )
@@ -697,7 +687,7 @@ class MultiBackend extends AbstractBase
      */
     public function getDefaultRequestGroup($patron, $holdDetails = null)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if (!empty($holdDetails)) {
@@ -734,7 +724,7 @@ class MultiBackend extends AbstractBase
      */
     public function placeHold($holdDetails)
     {
-        $source = $this->getSource($holdDetails['patron']['cat_username'], 'login');
+        $source = $this->getSource($holdDetails['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if ($this->getSource($holdDetails['id']) != $source) {
@@ -762,9 +752,7 @@ class MultiBackend extends AbstractBase
      */
     public function cancelHolds($cancelDetails)
     {
-        $source = $this->getSource(
-            $cancelDetails['patron']['cat_username'], 'login'
-        );
+        $source = $this->getSource($cancelDetails['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             return $driver->cancelHolds(
@@ -812,7 +800,7 @@ class MultiBackend extends AbstractBase
      */
     public function placeStorageRetrievalRequest($details)
     {
-        $source = $this->getSource($details['patron']['cat_username'], 'login');
+        $source = $this->getSource($details['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver
             && is_callable([$driver, 'placeStorageRetrievalRequest'])
@@ -843,9 +831,7 @@ class MultiBackend extends AbstractBase
      */
     public function cancelStorageRetrievalRequests($cancelDetails)
     {
-        $source = $this->getSource(
-            $cancelDetails['patron']['cat_username'], 'login'
-        );
+        $source = $this->getSource($cancelDetails['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver
             && $this->methodSupported(
@@ -1015,7 +1001,7 @@ class MultiBackend extends AbstractBase
      */
     public function getMyILLRequests($patron)
     {
-        $source = $this->getSource($patron['cat_username'], 'login');
+        $source = $this->getSource($patron['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver) {
             if (!$this->methodSupported(
@@ -1048,9 +1034,7 @@ class MultiBackend extends AbstractBase
      */
     public function cancelILLRequests($cancelDetails)
     {
-        $source = $this->getSource(
-            $cancelDetails['patron']['cat_username'], 'login'
-        );
+        $source = $this->getSource($cancelDetails['patron']['cat_username']);
         $driver = $this->getDriver($source);
         if ($driver
             && $this->methodSupported(
@@ -1135,7 +1119,7 @@ class MultiBackend extends AbstractBase
         if (!$source) {
             $patron = $this->ilsAuth->storedCatalogLogin();
             if ($patron && isset($patron['cat_username'])) {
-                $source = $this->getSource($patron['cat_username'], 'login');
+                $source = $this->getSource($patron['cat_username']);
             }
         }
 
@@ -1186,40 +1170,35 @@ class MultiBackend extends AbstractBase
     /**
      * Extract local ID from the given prefixed ID
      *
-     * @param string $id        The id to be split
-     * @param string $delimiter The delimiter to be used
+     * @param string $id The id to be split
      *
      * @return string  Local ID
      */
-    protected function getLocalId($id, $delimiter = '.')
+    protected function getLocalId($id)
     {
-        $pos = strpos($id, $delimiter);
+        $pos = strpos($id, '.');
         if ($pos > 0) {
             return substr($id, $pos + 1);
         }
-        $this->debug("Could not find local id in '$id' using '$delimiter'");
+        $this->debug("Could not find local id in '$id'");
         return $id;
     }
 
     /**
      * Extract source from the given ID
      *
-     * @param string $id        The id to be split
-     * @param string $delimiter The delimiter to be used from $this->delimiters
+     * @param string $id The id to be split
      *
      * @return string  Source
      */
-    protected function getSource($id, $delimiter = '')
+    protected function getSource($id)
     {
-        $delimiter = $delimiter && isset($this->delimiters[$delimiter])
-            ? $this->delimiters[$delimiter]
-            : '.';
-        $pos = strpos($id, $delimiter);
+        $pos = strpos($id, '.');
         if ($pos > 0) {
             return substr($id, 0, $pos);
         }
 
-        $this->debug("Could not find source id in '$id' using '$delimiter'");
+        $this->debug("Could not find source id in '$id'");
         return '';
     }
 
@@ -1246,9 +1225,7 @@ class MultiBackend extends AbstractBase
             if (is_array($value) && (is_int($key) || $key === 'patron')) {
                 $source = $this->getSourceFromParams($value);
             } elseif ($key === 0 || $key === 'id' || $key === 'cat_username') {
-                $source = $this->getSource(
-                    $value, $key === 'cat_username' ? 'login' : ''
-                );
+                $source = $this->getSource($value);
             }
             if ($source && isset($this->drivers[$source])) {
                 return $source;
@@ -1409,10 +1386,7 @@ class MultiBackend extends AbstractBase
                     && $value !== ''
                     && in_array($key, $modifyFields)
                 ) {
-                    $delimiter = $key === 'cat_username'
-                        ? $this->delimiters['login']
-                        : '.';
-                    $data[$key] = "$source$delimiter$value";
+                    $data[$key] = "$source.$value";
                 }
             }
         }
@@ -1444,12 +1418,9 @@ class MultiBackend extends AbstractBase
                     $value, $source, $modifyFields
                 );
             } else {
-                $delimiter = $key === 'cat_username'
-                    ? $this->delimiters['login']
-                    : '.';
-                $prefixLen = strlen($source) + strlen($delimiter);
+                $prefixLen = strlen($source) + 1;
                 if ((!is_array($data) || in_array($key, $modifyFields))
-                    && strncmp($source . $delimiter, $value, $prefixLen) == 0
+                    && strncmp("$source.", $value, $prefixLen) == 0
                 ) {
                     $array[$key] = substr($value, $prefixLen);
                 }
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Polaris.php b/module/VuFind/src/VuFind/ILS/Driver/Polaris.php
index ca12a0dba114789e708307a11838ba9fadf52381..5b6d8477b211b7391dfe4dceca3705ae4a4e28dd 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Polaris.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Polaris.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Polaris ILS Driver (POCA)
+ * Polaris ILS Driver
  *
  * PHP version 5
  *
@@ -120,9 +120,12 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
     protected function makeRequest($api_query, $http_method = "GET",
         $patronpassword = "", $json = false
     ) {
-        // TODO, just make this for this one call
+
+        // auth has to be in GMT, otherwise use config-level TZ
+        $site_config_TZ = date_default_timezone_get();
         date_default_timezone_set('GMT');
         $date = date("D, d M Y H:i:s T");
+        date_default_timezone_set($site_config_TZ);
 
         $url = $this->ws_host . $this->ws_app . $api_query;
 
@@ -149,6 +152,10 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
                 $client->setEncType('application/json');
             }
 
+            // httpService doesn't explicitly support PUT, so add this:
+            if ($http_method == 'PUT') {
+                $http_headers[] = "Content-Length: " . strlen($json_data);
+            }
             $client->setHeaders($http_headers);
             $client->setMethod($http_method);
             $result = $client->send();
@@ -173,11 +180,34 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
     public function formatJSONTime($jsontime)
     {
         preg_match('/Date\((\d+)\-(\d){2}(\d){2}\)/', $jsontime, $matches);
-        $matchestmp = intval($matches[1]/1000);
-        $date = gmdate("n-j-Y", $matchestmp);
+        if (count($matches) > 0) {
+            $matchestmp = intval($matches[1]/1000);
+            $date = date("n-j-Y", $matchestmp);
+        } else {
+            $date = 'n/a';
+        }
         return $date;
     }
 
+    /**
+     * Encode from human-readable date to text like Date(1360051200000-0800)
+     *
+     * @param string $date Input
+     *
+     * @return string
+     */
+    public function encodeJSONTime($date)
+    {
+        // auth has to be in GMT, otherwise use config-level TZ
+        //$site_config_TZ = date_default_timezone_get();
+        //date_default_timezone_set('GMT');
+        $unix_time = strtotime($date);
+        //date_default_timezone_set($site_config_TZ);
+
+        $json_time = "/Date(" . $unix_time . "000)/";
+        return $json_time;
+    }
+
     /**
      * Get Patron Holds
      *
@@ -191,22 +221,28 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
     {
         $holds = [];
         $response = $this->makeRequest(
-            "patron/{$patron['cat_username']}/holdrequests/active", 'GET',
+            "patron/{$patron['cat_username']}/holdrequests/all", 'GET',
             $patron['cat_password']
         );
         $holds_response_array = $response->PatronHoldRequestsGetRows;
         foreach ($holds_response_array as $holds_response) {
+            // only display item if it is NOT expired
+            if ($holds_response->StatusID > 8) {
+                continue;
+            }
 
             $create = $this->formatJSONTime($holds_response->ActivationDate);
             $expire = $this->formatJSONTime($holds_response->ExpirationDate);
+
             $holds[] = [
-                'id'             => $holds_response->BibID,
+                'type'     => $holds_response->StatusDescription,
+                'id'       => $holds_response->BibID,
                 'location' => $holds_response->PickupBranchName,
-                'reqnum'     => $holds_response->HoldRequestID,
-                'expire'     => $expire,
-                'create'     => $create,
+                'reqnum'   => $holds_response->HoldRequestID,
+                'expire'   => $expire,
+                'create'   => $create,
                 'position' => $holds_response->QueuePosition,
-                'title'      => $holds_response->Title,
+                'title'    => $holds_response->Title,
             ];
 
         }
@@ -239,6 +275,7 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
             if (($holdings_response->CircStatus == 'In')
                 || ($holdings_response->CircStatus == 'Just Returned')
                 || ($holdings_response->CircStatus == 'On Shelf')
+                || ($holdings_response->CircStatus == 'Available - Check shelves')
             ) {
                 $availability = 1;
             }
@@ -250,15 +287,20 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
 
             $holding[] = [
                 'availability' => $availability,
-                'id'                 => $id,
-                'status'         => $holdings_response->CircStatus,
+                'id'         => $id,
+                'status'     => $holdings_response->CircStatus,
                 'location'   => $holdings_response->LocationName,
-                //'reserve'      => 'No',
+                //'reserve'  => 'No',
                 'callnumber' => $holdings_response->CallNumber,
                 'duedate'    => $duedate,
                 //'number'   => $holdings_response->ItemsIn,
-                'number'         => $copy_count,
-                'barcode'    => $holdings_response->Barcode,
+                'number'     => $copy_count,
+                'barcode'         => $holdings_response->Barcode,
+                'shelf_location'  => $holdings_response->ShelfLocation,
+                'collection_name' => $holdings_response->CollectionName,
+            'per_item_holdable' => $per_item_holdable,
+            'designation' => $designation,
+            'holdable' => $holdings_response->Holdable,
             ];
 
         }
@@ -345,29 +387,55 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
         // all activations are for now(), for now.
         // microtime is msec or sec?? seems to have changed
         $activationdate = '/Date(' . intval(microtime(true) * 1000) . ')/';
+        if (empty($holdDetails['barcode'])) {
+            $holdDetails['barcode'] = '';
+        }
 
         $jsonrequest = [
-            'PatronID' => $holdDetails['patron']['id'],
-            'BibID'      => $holdDetails['id'],
-            'ItemBarcode'  => '',
+            'PatronID'     => $holdDetails['patron']['id'],
+            'BibID'        => $holdDetails['id'],
+            'ItemBarcode'  => $holdDetails['barcode'],
             'VolumeNumber' => '',
             'Designation'  => '',
-            'PickupOrgID'       => $holdDetails['pickUpLocation'],
-            'IsBorrowByMail'    => '0',
-            'PatronNotes'       => $holdDetails['comment'],
-            'ActivationDate'    => $activationdate,
-            'WorkstationID'     => $workstationid,
-            'UserID'                    => $userid,
+            'PickupOrgID'     => $holdDetails['pickUpLocation'],
+            'IsBorrowByMail'  => '0',
+            'PatronNotes'     => $holdDetails['comment'],
+            'ActivationDate'  => $activationdate,
+            'WorkstationID'   => $workstationid,
+            'UserID'          => $userid,
             'RequestingOrgID' => $this->ws_requestingorgid,
-            'TargetGUID'            => '',
+            'TargetGUID'      => '',
         ];
 
         $response = $this->makeRequest('holdrequest', 'POST', '', $jsonrequest);
 
         if ($response->StatusValue == 1) {
-            return ['success' => true,  'sysMessage' => $response->Message];
+            return [ 'success' => true,  'sysMessage' => $response->Message ];
+        } elseif ($response->StatusValue == 5) {
+            // auto say "yes" to Conditional: Accept even with existing holds
+            // response
+            $reply_jsonrequest = [
+                // apparent bug in API, TxnGroupQualifer missing final "i"
+                'TxnGroupQualifier' => $response->TxnGroupQualifer,
+                'TxnQualifier' => $response->TxnQualifier,
+                'RequestingOrgID' => $this->ws_requestingorgid,
+                'Answer' => 1,
+                'State' => 5,
+            ];
+
+            $reply_response = $this->makeRequest(
+                "holdrequest/{$response->RequestGUID}", 'PUT', '',
+                $reply_jsonrequest
+            );
+      
+            if ($reply_response->StatusValue == 1) {
+                // auto-reply success
+                  return [ 'success' => true,  'sysMessage' => $response->Message ];
+            } else {
+                  return [ 'success' => false, 'sysMessage' => $response->Message ];
+            }
         } else {
-            return ['success' => false, 'sysMessage' => $response->Message];
+            return [ 'success' => false, 'sysMessage' => $response->Message ];
         }
 
     }
@@ -398,7 +466,7 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
             // hardcoded pickup locations in the .ini file? or...
             foreach ($this->ws_pickUpLocations as $code => $library) {
                 $locations[] = [
-                    'locationID'            => $code,
+                    'locationID'      => $code,
                     'locationDisplay' => $library
                 ];
             }
@@ -408,7 +476,7 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
             $locations_response_array = $response->OrganizationsGetRows;
             foreach ($locations_response_array as $location_response) {
                 $locations[] = [
-                    'locationID'            => $location_response->OrganizationID,
+                    'locationID'      => $location_response->OrganizationID,
                     'locationDisplay' => $location_response->Name,
                 ];
             }
@@ -516,30 +584,464 @@ class Polaris extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf
 
         $user = [];
 
-        $user['id']                     = $response->PatronID;
-        $user['firstname']      = null;
-        $user['lastname']       = null;
-        $user['cat_username'] = $response->Barcode;
+        $user['id']           = $response->PatronID;
+        $user['firstname']    = null;
+        $user['lastname']     = null;
+        $user['cat_username'] = $response->PatronBarcode;
         $user['cat_password'] = $password;
-        $user['email']              = null;
-        $user['major']              = null;
-        $user['college']            = null;
+        $user['email']        = null;
+        $user['major']        = null;
+        $user['college']      = null;
 
         return $user;
     }
 
+    /**
+     * Get Patron Fines
+     *
+     * This is responsible for retrieving all fines by a specific patron.
+     *
+     * @param array $patron The patron array from patronLogin
+     *
+     * @return mixed        Array of the patron's fines on success.
+     */
+    public function getMyFines($patron)
+    {
+        $fineList = [];
+
+        $response = $this->makeRequest(
+            "patron/{$patron['cat_username']}/account/outstanding", 'GET',
+            $patron['cat_password']
+        );
+        $fines_response_array = $response->PatronAccountGetRows;
+
+        foreach ($fines_response_array as $fines_response) {
+            $fineList[] = [
+            // fees in vufind are in pennies
+            'amount'   => $fines_response->TransactionAmount*100,
+            'checkout' => $this->formatJSONTime($fines_response->CheckOutDate),
+            'fine'     => $fines_response->FeeDescription,
+            'balance'  => $fines_response->OutstandingAmount*100,
+            'duedate'    => $this->formatJSONTime($fines_response->DueDate),
+            'createdate' => $this->formatJSONTime($fines_response->TransactionDate),
+            'id'    => $fines_response->BibID,
+            'title' => $fines_response->Title,
+            ];
+        }
+
+        return $fineList;
+
+    }
     /**
      * Get Patron Profile
      *
      * This is responsible for retrieving the profile for a specific patron.
      *
-     * @param array $userinfo The patron array
+     * @param array $patron The patron array
      *
      * @throws ILSException
-     * @return array          Array of the patron's profile data on success.
+     * @return array Array of the patron's profile data on success.
+     */
+    public function getMyProfile($patron)
+    {
+        // firstname, lastname, address1, address2, zip, phone, group
+        $response = $this->makeRequest(
+            "patron/{$patron['cat_username']}/basicdata", 'GET',
+            $patron['cat_password']
+        );
+        $profile_response = $response->PatronBasicData;
+        $profile = [
+          'firstname' => $profile_response->NameFirst,
+          'lastname'  => $profile_response->NameLast,
+          'phone'     => $profile_response->PhoneNumber,
+        ];
+        return $profile;
+    }
+
+    /**
+     * Get Patron Transactions
+     *
+     * This is responsible for retrieving all transactions (i.e. checked out items)
+     * by a specific patron.
+     *
+     * @param array $patron The patron array from patronLogin
+     *
+     * @return mixed Array of associative arrays of the patron's transactions on
+     * success.
+     */
+    public function getMyTransactions($patron)
+    {
+        // duedate, id, barcode, renew (count), request (pending count),
+        // volume (vol number), publication_year, renewable, message, title, item_id
+        // polaris apis: PatronItemsOutGet, Patron_RewewBlocksGet
+        $transactions = [];
+        $response = $this->makeRequest(
+            "patron/{$patron['cat_username']}/itemsout/all", 'GET',
+            $patron['cat_password']
+        );
+
+        foreach ($response->PatronItemsOutGetRows as $trResponse) {
+            // any more renewals available?
+            if (($trResponse->RenewalLimit - $trResponse->RenewalCount) > 0) {
+                $renewable = true;
+            } else {
+                $renewable = false;
+            }
+            $transactions[] = [
+                'duedate' => $this->formatJSONTime($trResponse->DueDate),
+                'id'      => $trResponse->BibID,
+                'barcode' => $trResponse->Barcode,
+                'renew'   => $trResponse->RenewalCount,
+                'renewLimit' => $trResponse->RenewalLimit,
+                'renewable' => $renewable,
+                'title'   => $trResponse->Title,
+                'item_id' => $trResponse->ItemID,
+            ];
+        }
+        return $transactions;
+    }
+
+    /**
+     * Renew My Items
+     *
+     * Function for attempting to renew a patron's items.  The data in
+     * $renewDetails['details'] is determined by getRenewDetails().
+     *
+     * @param array $renewDetails An array of data required for renewing items
+     * including the Patron ID and an array of renewal IDS
+     *
+     * @return array              An array of renewal information keyed by item ID
+     */
+    public function renewMyItems($renewDetails)
+    {
+        $renew_ids = $renewDetails['details'];
+        $patron = $renewDetails['patron'];
+        $count = 0;
+        $item_response = [];
+        $item_blocks = [];
+
+        foreach ($renew_ids as $renew_id) {
+            $jsonrequest = [];
+            $jsonrequest['Action'] = 'renew';
+            $jsonrequest['LogonBranchID']      = '1';
+            $jsonrequest['LogonUserID']        = '1';
+            $jsonrequest['LogonWorkstationID'] = '1';
+            $jsonrequest['RenewData']['IgnoreOverrideErrors'] = 'true';
+
+            $response = $this->makeRequest(
+                "patron/{$patron['cat_username']}/itemsout/$renew_id", 'PUT',
+                $patron['cat_password'], $jsonrequest
+            );
+            if ($response->PAPIErrorCode == 0) {
+                $count++;
+                $item_response[$renew_id] = [
+                'success'  => true,
+                'new_date' => $this->formatJSONTime(
+                    $response->ItemRenewResult->DueDateRows[0]->DueDate
+                ),
+                'item_id'  =>
+                    $response->ItemRenewResult->DueDateRows[0]->ItemRecordID,
+                ];
+            } elseif ($response->PAPIErrorCode == -2) {
+                $item_blocks[$renew_id]
+                    = $response->ItemRenewResult->BlockRows[0]->ErrorDesc;
+                $item_response[$hold_id] = [
+                'success'  => -1,
+                'new_date' => false,
+                'item_id' => $response->ItemRenewResult->BlockRows[0]->ItemRecordID,
+                'sysMessage' => $response->ItemRenewResult->BlockRows[0]->ErrorDesc,
+                ];
+            }
+
+        }
+        $result = [
+            'count' => $count, 'details' => $item_response,
+            'blocks' => $item_blocks
+        ];
+
+        return $result;
+    }
+
+    /**
+     * Get Renew Details
+     *
+     * In order to renew an item, Voyager requires the patron details and an item
+     * id. This function returns the item id as a string which is then used
+     * as submitted form data in checkedOut.php. This value is then extracted by
+     * the RenewMyItems function.
+     *
+     * @param array $checkOutDetails An array of item data
+     *
+     * @return string Data for use in a form field
      */
-    public function getMyProfile($userinfo)
+    public function getRenewDetails($checkOutDetails)
     {
-        return $userinfo;
+        $renewDetails = $checkOutDetails['item_id'];
+        return $renewDetails;
+    }
+
+    /**
+     * Cancel Holds
+     *
+     * Attempts to Cancel a hold or recall on a particular item. The
+     * data in $cancelDetails['details'] is determined by getCancelHoldDetails().
+     *
+     * @param array $cancelDetails An array of item and patron data
+     *
+     * @return array An array of data on each request including whether or not it
+     * was successful and a system message (if available)
+     */
+    public function cancelHolds($cancelDetails)
+    {
+        $hold_ids = $cancelDetails['details'];
+        $patron = $cancelDetails['patron'];
+        $count = 0;
+        $item_response = [];
+
+        foreach ($hold_ids as $hold_id) {
+            $response = $this->makeRequest(
+                "patron/{$patron['cat_username']}/holdrequests/$hold_id/cancelled"
+                . "?wsid=1&userid=1", 'PUT', $patron['cat_password']
+            );
+
+            if ($response->PAPIErrorCode == 0) {
+                $count++;
+                $item_response[$hold_id] = [
+                'success' => true,
+                'status'  => 'hold_cancel_success'
+                ];
+            } else {
+                $item_response[$hold_id] = [
+                'success' => false,
+                'status'  => 'hold_cancel_fail',
+                'sysMessage' => 'Failure calling ILS to cancel hold'
+                ];
+            }
+        }
+
+        $result = [ 'count' => $count, 'items' => $item_response ];
+        return $result;
+    }
+
+    /**
+     * Get Cancel Hold Details
+     *
+     * @param array $holdDetails An array of item data
+     *
+     * @return string Data for use in a form field (just request id is all Polaris
+     * needs)
+     */
+    public function getCancelHoldDetails($holdDetails)
+    {
+        return $holdDetails['reqnum'];
+    }
+
+    /**
+     * Get Checkout History
+     *
+     * Returns the patrons checkout / reading history
+     *
+     * @param array $patron The patron array from patronLogin
+     *
+     * @return mixed Array of the patron's checkouts on success.
+     */
+    public function getCheckoutHistory($patron)
+    {
+        // get number of pages, only get most recent max 200 items (last 2 pages)
+        // TODO: use real pagination, not just recent items.
+        $items_per_page = 100;
+
+        $response = $this->makeRequest(
+            "patron/{$patron['cat_username']}/readinghistory?rowsperpage=1&page=-1",
+            'GET', $patron['cat_password']
+        );
+
+        // error code returns number of results
+        $count = $response->PAPIErrorCode;
+
+        if ($count == 0) {
+            return;
+        }
+
+        $offset = $count-$items_per_page;
+        $pages = ceil($count / $items_per_page);
+
+        $penultimate_page = $pages-1;
+
+        if ($penultimate_page > 0) {
+            $page_offset = $penultimate_page;
+        } else {
+            $page_offset = $pages;
+        }
+
+        while ($page_offset <= $pages) {
+            $response = $this->makeRequest(
+                "patron/{$patron['cat_username']}/readinghistory?rowsperpage="
+                . "$items_per_page&page=$page_offset", 'GET',
+                $patron['cat_password']
+            );
+    
+            $checkout_history_array = $response->PatronReadingHistoryGetRows;
+            foreach ($checkout_history_array as $checkout_response) {
+                $date = $this->formatJSONTime($checkout_response->CheckOutDate);
+                $checkouts[] = [
+                   'id' => $checkout_response->BibID,
+                   'title' => $checkout_response->Title,
+                   'format' => $checkout_response->FormatDescription,
+                   'location' => $checkout_response->LoaningBranchName,
+                   'date' => $date,
+                   'author' => $checkout_response->Author,
+                   ];
+            }
+            $page_offset++;
+        }
+        // show most recent checkouts first
+        $checkouts = array_reverse($checkouts);
+
+        return $checkouts;
+    }
+
+    /**
+     * Get Hold Count
+     *
+     * Returns the count of a hold based on API call to bibid
+     *
+     * @param array $id bib id
+     *
+     * @return string count of holds
+     */
+    public function getHoldCount($id)
+    {
+        $response = $this->makeRequest("bib/$id");
+        $holdings_response_array = $response->BibGetRows;
+        $hold_count = 0;
+        foreach ($holdings_response_array as $response) {
+            if ($response->ElementID == '8') {
+                // that's the current holds field, could also be pulled by label
+                // instead?
+                if ($response->Value > 0) {
+                    $hold_count = $response->Value;
+                }
+                break;
+            }
+        }
+        return $hold_count;
+    }
+
+    /**
+     * Suspend Holds
+     *
+     * Attempts to Suspend a hold or recall on a particular item. The
+     * data in $suspendDetails['details'] is determined by getSuspendHoldDetails().
+     *
+     * @param array $suspendDetails An array of item and patron data
+     *
+     * @return array An array of data on each request including whether or not it
+     * was successful and a system message (if available)
+     */
+    public function suspendHolds($suspendDetails)
+    {
+        $hold_ids = $suspendDetails['details'];
+        $patron = $suspendDetails['patron'];
+
+        $jsondate = $this->encodeJSONTime($suspendDetails['date']);
+
+        $count = 0;
+        $item_response = [];
+
+        foreach ($hold_ids as $hold_id) {
+            $jsonrequest = [
+                 'UserID' => '1',
+                 'ActivationDate' => "$jsondate"
+                ];
+    
+            $response = $this->makeRequest(
+                "patron/{$patron['cat_username']}/holdrequests/$hold_id/inactive",
+                'PUT', $patron['cat_password'], $jsonrequest
+            );
+
+            if ($response->PAPIErrorCode == 0) {
+                $count++;
+                $item_response[$hold_id] = [
+                  'success' => true,
+                  'status'  => 'hold_suspend_success'
+                ];
+            } else {
+                $item_response[$hold_id] = [
+                'success' => false,
+                'status'  => 'hold_suspend_fail',
+                'sysMessage' => 'Failure calling ILS to suspend hold'
+                ];
+            }
+        }
+
+        $result = [ 'count' => $count, 'items' => $item_response ];
+        return $result;
+    }
+
+    /**
+     * Get Suspend Hold Details
+     *
+     * @param array $holdDetails An array of item data
+     *
+     * @return string Data for use in a form field (just request id is all Polaris
+     * needs)
+     */
+    public function getSuspendHoldDetails($holdDetails)
+    {
+        return $holdDetails['reqnum'];
+    }
+
+    /**
+     * Reactivate Holds
+     *
+     * Attempts to Reactivate a hold or recall on a particular item. The
+     * data in $reactivateDetails['details'] is determined by
+     * getReactivateHoldDetails().
+     *
+     * @param array $reactivateDetails An array of item and patron data
+     *
+     * @return array An array of data on each request including whether or not it
+     * was successful and a system message (if available)
+     */
+    public function reactivateHolds($reactivateDetails)
+    {
+        $hold_ids = $reactivateDetails['details'];
+        $patron = $reactivateDetails['patron'];
+
+        $date = date("d/M/Y");
+        $jsondate = $this->encodeJSONTime($date);
+
+        $count = 0;
+        $item_response = [];
+
+        foreach ($hold_ids as $hold_id) {
+            $jsonrequest = [
+                 'UserID' => '1',
+                 'ActivationDate' => "$jsondate"
+                 ];
+    
+            $response = $this->makeRequest(
+                "patron/{$patron['cat_username']}/holdrequests/$hold_id/active",
+                'PUT', $patron['cat_password'], $jsonrequest
+            );
+
+            if ($response->PAPIErrorCode == 0) {
+                $count++;
+                $item_response[$hold_id] = [
+                  'success' => true,
+                  'status'  => 'hold_reactivate_success'
+                ];
+            } else {
+                $item_response[$hold_id] = [
+                'success' => false,
+                'status'  => 'hold_reactivate_fail',
+                'sysMessage' => 'Failure calling ILS to reactivate hold'
+                ];
+            }
+        }
+
+        $result = [ 'count' => $count, 'items' => $item_response ];
+        return $result;
     }
-}
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Sierra.php b/module/VuFind/src/VuFind/ILS/Driver/Sierra.php
index 093c4fdab741d4109af6ee11094d9ef96099aba0..56f982f229020efffe0e7ed10c00ce36909ef369 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Sierra.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Sierra.php
@@ -28,7 +28,8 @@
  */
 namespace VuFind\ILS\Driver;
 
-use VuFind\Exception\ILS as ILSException;
+use VuFind\Exception\ILS as ILSException,
+    VuFind\I18n\Translator\TranslatorAwareInterface;
 
 /**
  * Sierra (III) ILS Driver for Vufind2
@@ -39,8 +40,10 @@ use VuFind\Exception\ILS as ILSException;
  * @license  http://opensource.org/licenses/GPL-3.0 GNU General Public License
  * @link     http://vufind.org/wiki/building_an_ils_driver Wiki
  */
-class Sierra extends AbstractBase
+class Sierra extends AbstractBase implements TranslatorAwareInterface
 {
+    use \VuFind\I18n\Translator\TranslatorAwareTrait;
+
     /**
      * Database connection
      *
@@ -114,6 +117,39 @@ class Sierra extends AbstractBase
         return $itemRecords;
     }
 
+    /**
+     * Modify location string to add status information, if necessary
+     *
+     * @param string $location Original location string
+     * @param string $cattime  Date and time item record was created
+     *
+     * @return string
+     */
+    protected function getLocationText($location, $cattime)
+    {
+        // No "just cataloged" setting? Default to unmodified location.
+        if (!isset($this->config['Catalog']['just_cataloged_time'])) {
+            return $location;
+        }
+
+        // Convert hours to seconds:
+        $seconds = 60*60*$this->config['Catalog']['just_cataloged_time'];
+
+        // Was this a recently cataloged item? If so, return a special string
+        // based on the append setting....
+        if (time() - $seconds < strtotime($cattime)) {
+            if (isset($this->config['Catalog']['just_cataloged_append'])
+                && $this->config['Catalog']['just_cataloged_append'] == 'Y'
+            ) {
+                return $location . ' ' . $this->translate('just_cataloged');
+            }
+            return $this->translate('just_cataloged');
+        }
+
+        // Default case: return the location unmodified:
+        return $location;
+    }
+
     /**
      * Some call number processing used for both getStatus and getHoldings
      *
@@ -163,7 +199,6 @@ class Sierra extends AbstractBase
                 . " dbname=" . $this->config['Catalog']['dna_db']
                 . " user=" . $this->config['Catalog']['dna_user']
                 . " password=" . $this->config['Catalog']['dna_password'];
-
             $this->db = pg_connect($conn_string);
         } catch (\Exception $e) {
             throw new ILSException($e->getMessage());
@@ -360,7 +395,8 @@ class Sierra extends AbstractBase
                     . "location_name.name, "
                     . "varfield_view.field_content, "
                     . "varfield_view.varfield_type_code, "
-                    . "checkout.due_gmt "
+                    . "checkout.due_gmt, "
+                    . "item_view.record_creation_date_gmt "
                     . "FROM sierra_view.item_view "
                     . "LEFT JOIN sierra_view.varfield_view "
                     . "ON (item_view.id = varfield_view.record_id) "
@@ -394,11 +430,11 @@ class Sierra extends AbstractBase
                 } else {
                     $availability = false;
                 }
-
+                $location = $this->getLocationText($resultArray[1], $resultArray[5]);
                 $itemInfo = [
                     "id" => $id,
                     "status" => $resultArray[0],
-                    "location" => $resultArray[1],
+                    "location" => $location,
                     "reserve" => "N",
                     "callnumber" => $finalcallnumber,
                     "availability" => $availability
@@ -439,9 +475,10 @@ class Sierra extends AbstractBase
                         location_name.name,
                         checkout.due_gmt,
                         varfield_view.field_content,
-                        varfield_view.varfield_type_code
-                            FROM
-                            sierra_view.item_view
+                        varfield_view.varfield_type_code,
+                        item_view.record_creation_date_gmt
+                        FROM
+                        sierra_view.item_view
                         LEFT JOIN sierra_view.location
                         ON (item_view.location_code = location.code)
                         LEFT JOIN sierra_view.location_name
@@ -478,12 +515,12 @@ class Sierra extends AbstractBase
                 } else {
                     $availability = false;
                 }
-
+                $location = $this->getLocationText($resultArray[1], $resultArray[5]);
                 $itemInfo = [
                     "id" => $id,
                     "availability" => $availability,
                     "status" => $resultArray[0],
-                    "location" => $resultArray[1],
+                    "location" => $location,
                     "reserve" => "N",
                     "callnumber" => $finalcallnumber,
                     "duedate" => $resultArray[2],
@@ -673,4 +710,4 @@ class Sierra extends AbstractBase
             throw new ILSException($e->getMessage());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Symphony.php b/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
index d95a72ffeb5da8c6c77a41aa1166c75269767f78..9b98564bcf7ffbbaffb28e826b4d30dfe443cda6 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
@@ -1354,8 +1354,7 @@ class Symphony extends AbstractBase
                         'fine' => $fee->billReasonDescription,
                         'balance' => $fee->amountOutstanding->_ * 100,
                         'createdate' =>
-                            isset($fee->feeItemInfo->dateBilled) ?
-                            $fee->feeItemInfo->dateBilled : null,
+                            isset($fee->dateBilled) ? $fee->dateBilled : null,
                         'duedate' =>
                             isset($fee->feeItemInfo->dueDate) ?
                             $fee->feeItemInfo->dueDate : null,
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Voyager.php b/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
index 438b73a70d36b3ade4cfcc59e79345fc4856ca4e..2469be811081c1fd0253ce133d39303c02885d6a 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
@@ -250,6 +250,12 @@ class Voyager extends AbstractBase
                 $this->statusRankings[$row['ITEM_STATUS_DESC']]
                     = $row['ITEM_STATUS_TYPE'];
             }
+
+            if (!empty($this->config['StatusRankings'])) {
+                $this->statusRankings = array_merge(
+                    $this->statusRankings, $this->config['StatusRankings']
+                );
+            }
         }
 
         // We may occasionally get a status message not found in the array (i.e. the
@@ -1150,6 +1156,19 @@ class Voyager extends AbstractBase
             ? [] : $this->getPurchaseHistoryData($id);
     }
 
+    /**
+     * Sanitize patron PIN code (remove characters Voyager doesn't handle properly)
+     *
+     * @param string $pin PIN code to sanitize
+     *
+     * @return string Sanitized PIN code
+     */
+    protected function sanitizePIN($pin)
+    {
+        $pin = preg_replace('/[^0-9a-zA-Z#&<>+^`~]+/', '', $pin);
+        return $pin;
+    }
+
     /**
      * Patron Login
      *
@@ -1210,7 +1229,8 @@ class Voyager extends AbstractBase
                     ? mb_strtolower(utf8_encode($row['FALLBACK_LOGIN']), 'UTF-8')
                     : null;
 
-                if ((!is_null($primary) && $primary == $compareLogin)
+                if ((!is_null($primary) && ($primary == $compareLogin
+                    || $primary == $this->sanitizePIN($compareLogin)))
                     || ($fallback_login_field && is_null($primary)
                     && $fallback == $compareLogin)
                 ) {
@@ -1245,24 +1265,29 @@ class Voyager extends AbstractBase
     {
         // Expressions
         $sqlExpressions = [
-            "to_char(CIRC_TRANSACTIONS.CURRENT_DUE_DATE, 'MM-DD-YY HH24:MI')" .
+            "to_char(MAX(CIRC_TRANSACTIONS.CURRENT_DUE_DATE), 'MM-DD-YY HH24:MI')" .
             " as DUEDATE",
-            "to_char(CURRENT_DUE_DATE, 'YYYYMMDD HH24:MI') as FULLDATE",
-            "BIB_ITEM.BIB_ID",
-            "CIRC_TRANSACTIONS.ITEM_ID as ITEM_ID",
-            "MFHD_ITEM.ITEM_ENUM",
-            "MFHD_ITEM.YEAR",
-            "BIB_TEXT.TITLE_BRIEF",
-            "BIB_TEXT.TITLE",
-            "CIRC_TRANSACTIONS.RENEWAL_COUNT",
-            "CIRC_POLICY_MATRIX.RENEWAL_COUNT as RENEWAL_LIMIT",
-            "LOCATION.LOCATION_DISPLAY_NAME as BORROWING_LOCATION"
+            "to_char(MAX(CURRENT_DUE_DATE), 'YYYYMMDD HH24:MI') as FULLDATE",
+            "MAX(BIB_ITEM.BIB_ID) AS BIB_ID",
+            "MAX(CIRC_TRANSACTIONS.ITEM_ID) as ITEM_ID",
+            "MAX(MFHD_ITEM.ITEM_ENUM) AS ITEM_ENUM",
+            "MAX(MFHD_ITEM.YEAR) AS YEAR",
+            "MAX(BIB_TEXT.TITLE_BRIEF) AS TITLE_BRIEF",
+            "MAX(BIB_TEXT.TITLE) AS TITLE",
+            "LISTAGG(ITEM_STATUS_DESC, CHR(9)) "
+            . "WITHIN GROUP (ORDER BY ITEM_STATUS_DESC) as status",
+            "MAX(CIRC_TRANSACTIONS.RENEWAL_COUNT) AS RENEWAL_COUNT",
+            "MAX(CIRC_POLICY_MATRIX.RENEWAL_COUNT) as RENEWAL_LIMIT",
+            "MAX(LOCATION.LOCATION_DISPLAY_NAME) as BORROWING_LOCATION"
         ];
 
         // From
         $sqlFrom = [
             $this->dbName . ".CIRC_TRANSACTIONS",
             $this->dbName . ".BIB_ITEM",
+            $this->dbName . ".ITEM",
+            $this->dbName . ".ITEM_STATUS",
+            $this->dbName . ".ITEM_STATUS_TYPE",
             $this->dbName . ".MFHD_ITEM",
             $this->dbName . ".BIB_TEXT",
             $this->dbName . ".CIRC_POLICY_MATRIX",
@@ -1277,11 +1302,14 @@ class Voyager extends AbstractBase
             "BIB_TEXT.BIB_ID = BIB_ITEM.BIB_ID",
             "CIRC_TRANSACTIONS.CIRC_POLICY_MATRIX_ID = " .
             "CIRC_POLICY_MATRIX.CIRC_POLICY_MATRIX_ID",
-            "CIRC_TRANSACTIONS.CHARGE_LOCATION = LOCATION.LOCATION_ID"
+            "CIRC_TRANSACTIONS.CHARGE_LOCATION = LOCATION.LOCATION_ID",
+            "BIB_ITEM.ITEM_ID = ITEM.ITEM_ID",
+            "ITEM.ITEM_ID = ITEM_STATUS.ITEM_ID",
+            "ITEM_STATUS.ITEM_STATUS = ITEM_STATUS_TYPE.ITEM_STATUS_TYPE",
         ];
 
         // Order
-        $sqlOrder = ["FULLDATE ASC"];
+        $sqlOrder = ["FULLDATE ASC", "TITLE ASC"];
 
         // Bind
         $sqlBind = [':id' => $patron['id']];
@@ -1291,12 +1319,35 @@ class Voyager extends AbstractBase
             'from' => $sqlFrom,
             'where' => $sqlWhere,
             'order' => $sqlOrder,
-            'bind' => $sqlBind
+            'bind' => $sqlBind,
+            'group' => ['CIRC_TRANSACTIONS.ITEM_ID']
         ];
 
         return $sqlArray;
     }
 
+    /**
+     * Pick a transaction status worth displaying to the user (or return false
+     * if nothing important is found).
+     *
+     * @param array $statuses Status strings
+     *
+     * @return string|bool
+     */
+    protected function pickTransactionStatus($statuses)
+    {
+        $regex = isset($this->config['Loans']['show_statuses'])
+            ? $this->config['Loans']['show_statuses']
+            : '/lost|missing|claim/i';
+        $retVal = [];
+        foreach ($statuses as $status) {
+            if (preg_match($regex, $status)) {
+                $retVal[] = $status;
+            }
+        }
+        return empty($retVal) ? false : implode(', ', $retVal);
+    }
+
     /**
      * Protected support method for getMyTransactions.
      *
@@ -1344,7 +1395,9 @@ class Voyager extends AbstractBase
             'title' => empty($sqlRow['TITLE_BRIEF'])
                 ? $sqlRow['TITLE'] : $sqlRow['TITLE_BRIEF'],
             'renew' => $sqlRow['RENEWAL_COUNT'],
-            'renewLimit' => $sqlRow['RENEWAL_LIMIT']
+            'renewLimit' => $sqlRow['RENEWAL_LIMIT'],
+            'message' =>
+                $this->pickTransactionStatus(explode(chr(9), $sqlRow['STATUS'])),
         ];
         if (isset($this->config['Loans']['display_borrowing_location'])
             && $this->config['Loans']['display_borrowing_location']
diff --git a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
index bef3148482c64f2d3d0e24d943688a62e5b1464f..6ab787492efab4e30fe6b1d32954dc0bc0db7f91 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
@@ -335,9 +335,10 @@ class VoyagerRestful extends Voyager implements \VuFindHttp\HttpServiceAwareInte
     {
         if (isset($this->session->cache[$id])) {
             $item = $this->session->cache[$id];
-            if (time() - $item['time'] > 30) {
+            if (time() - $item['time'] < 30) {
                 return $item['entry'];
             }
+            unset($this->session->cache[$id]);
         }
         return null;
     }
@@ -675,7 +676,6 @@ class VoyagerRestful extends Voyager implements \VuFindHttp\HttpServiceAwareInte
 
         // We'll verify renewability later in getMyTransactions
         $transactions['renewable'] = true;
-        $transactions['message'] = false;
 
         return $transactions;
     }
@@ -3150,15 +3150,24 @@ EOT;
         $lastname = htmlspecialchars($patron['lastname'], ENT_COMPAT, 'UTF-8');
         $ubId = htmlspecialchars($this->ws_patronHomeUbId, ENT_COMPAT, 'UTF-8');
         $oldPIN = trim(
-            htmlspecialchars($details['oldPassword'], ENT_COMPAT, 'UTF-8')
+            htmlspecialchars(
+                $this->sanitizePIN($details['oldPassword']), ENT_COMPAT, 'UTF-8'
+            )
         );
         if ($oldPIN === '') {
             // Voyager requires the PIN code to be set even if it was empty
             $oldPIN = '     ';
         }
         $newPIN = trim(
-            htmlspecialchars($details['newPassword'], ENT_COMPAT, 'UTF-8')
+            htmlspecialchars(
+                $this->sanitizePIN($details['newPassword']), ENT_COMPAT, 'UTF-8'
+            )
         );
+        if ($newPIN === '') {
+            return [
+                'success' => false, 'status' => 'password_error_invalid'
+            ];
+        }
         $barcode = htmlspecialchars($patron['cat_username'], ENT_COMPAT, 'UTF-8');
 
         $xml =  <<<EOT
@@ -3202,12 +3211,11 @@ EOT;
                 ];
             }
             if ($code == $exceptionNamespace . 'ValidateLengthException') {
-                // This issue should not be encountered if the settings are correct.
-                // Log an error and let through for an exception
-                $this->error(
-                    'ValidateLengthException encountered when trying to'
-                    . ' change patron PIN. Verify PIN length settings.'
-                );
+                // This error may happen even with correct settings if the new PIN
+                // contains invalid characters.
+                return [
+                    'success' => false, 'status' => 'password_error_invalid'
+                ];
             }
             throw new ILSException((string)$error);
         }
diff --git a/module/VuFind/src/VuFind/OAI/Server.php b/module/VuFind/src/VuFind/OAI/Server.php
index e7a4c7bceea040bdf761e4417d08f2c255be5636..8a54e2a3495a694127a0544faeb77a214dc49be7 100644
--- a/module/VuFind/src/VuFind/OAI/Server.php
+++ b/module/VuFind/src/VuFind/OAI/Server.php
@@ -312,6 +312,13 @@ class Server
             }
         }
 
+        // Headers should be returned only if the metadata format matching
+        // the supplied metadataPrefix is available.
+        // If RecordDriver returns nothing, skip this record.
+        if (empty($xml)) {
+            return true;
+        }
+
         // Check for sets:
         $fields = $record->getRawData();
         if (!is_null($this->setField) && !empty($fields[$this->setField])) {
@@ -592,7 +599,7 @@ class Server
             $from, $until, $solrOffset, $solrLimit, $params['set']
         );
         $nonDeletedCount = $result->getResultTotal();
-        $format = $verb == 'ListIdentifiers' ? false : $params['metadataPrefix'];
+        $format = $params['metadataPrefix'];
         foreach ($result->getResults() as $doc) {
             if (!$this->attachNonDeleted($xml, $doc, $format, $headersOnly)) {
                 $this->unexpectedError('Cannot load document');
@@ -710,7 +717,6 @@ class Server
         $params->setLimit($limit);
         $params->getOptions()->disableHighlighting();
         $params->getOptions()->spellcheckEnabled(false);
-        $params->recommendationsEnabled(false);
         $params->setSort('last_indexed asc', true);
 
         // Construct a range query based on last indexed time:
diff --git a/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php b/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php
new file mode 100644
index 0000000000000000000000000000000000000000..246e76e3045746bb3781790c0bc7cf6415775292
--- /dev/null
+++ b/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * AlphaBrowseLink Recommendations Module
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Recommendations
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:recommendation_modules Wiki
+ */
+namespace VuFind\Recommend;
+
+/**
+ * AlphaBrowseLink Recommendations Module
+ *
+ * This class recommends a look at the alphabrowse index.
+ *
+ * @category VuFind2
+ * @package  Recommendations
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Anna Headley <aheadle1@swarthmore.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:recommendation_modules Wiki
+ */
+class AlphaBrowseLink implements RecommendInterface
+{
+    /**
+     * Search query submitted
+     *
+     * @var string
+     */
+    protected $query;
+
+    /**
+     * Alphabrowse index to link to
+     *
+     * @var string
+     */
+    protected $index;
+
+    /**
+     * Store the configuration of the recommendation module.
+     *
+     * @param string $settings Settings from searches.ini.
+     *
+     * @return void
+     */
+    public function setConfig($settings)
+    {
+        // so far there's just the one setting.
+        $this->index = $settings;
+    }
+
+    /**
+     * Called at the end of the Search Params objects' initFromRequest() method.
+     * This method is responsible for setting search parameters needed by the
+     * recommendation module and for reading any existing search parameters that may
+     * be needed.
+     *
+     * @param \VuFind\Search\Base\Params $params  Search parameter object
+     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * request.
+     *
+     * @return void
+     */
+    public function init($params, $request)
+    {
+    }
+
+    /**
+     * Called after the Search Results object has performed its main search.  This
+     * may be used to extract necessary information from the Search Results object
+     * or to perform completely unrelated processing.
+     *
+     * @param \VuFind\Search\Base\Results $results Search results object
+     *
+     * @return void
+     */
+    public function process($results)
+    {
+        $this->query = $results->getParams()->getDisplayQuery();
+    }
+
+    /**
+     * Get the search query.
+     *
+     * @return string
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    /**
+     * Get the alphabrowse index to link to
+     *
+     * @return string
+     */
+    public function getIndex()
+    {
+        return $this->index;
+    }
+}
diff --git a/module/VuFind/src/VuFind/Recommend/Factory.php b/module/VuFind/src/VuFind/Recommend/Factory.php
index 3d1eac471aac06f5662544603ef22f842f11facb..85a8c2580321de0377a78a4344f714917f8a7715 100644
--- a/module/VuFind/src/VuFind/Recommend/Factory.php
+++ b/module/VuFind/src/VuFind/Recommend/Factory.php
@@ -96,7 +96,7 @@ class Factory
     public static function getCatalogResults(ServiceManager $sm)
     {
         return new CatalogResults(
-            $sm->getServiceLocator()->get('VuFind\SearchResultsPluginManager')
+            $sm->getServiceLocator()->get('VuFind\SearchRunner')
         );
     }
 
@@ -247,7 +247,7 @@ class Factory
     public static function getSummonResults(ServiceManager $sm)
     {
         return new SummonResults(
-            $sm->getServiceLocator()->get('VuFind\SearchResultsPluginManager')
+            $sm->getServiceLocator()->get('VuFind\SearchRunner')
         );
     }
 
@@ -316,9 +316,7 @@ class Factory
      */
     public static function getWebResults(ServiceManager $sm)
     {
-        return new WebResults(
-            $sm->getServiceLocator()->get('VuFind\SearchResultsPluginManager')
-        );
+        return new WebResults($sm->getServiceLocator()->get('VuFind\SearchRunner'));
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Recommend/SearchObject.php b/module/VuFind/src/VuFind/Recommend/SearchObject.php
index 319b79fd548912067ad6ff06d8c14ca31badb9c4..4b2d350529606aab89488de92bd4879aefbd4a8d 100644
--- a/module/VuFind/src/VuFind/Recommend/SearchObject.php
+++ b/module/VuFind/src/VuFind/Recommend/SearchObject.php
@@ -27,6 +27,7 @@
  * @link     http://vufind.org/wiki/vufind2:recommendation_modules Wiki
  */
 namespace VuFind\Recommend;
+use VuFind\Search\SearchRunner;
 
 /**
  * Abstract SearchObject Recommendations Module (needs to be extended to use
@@ -62,20 +63,20 @@ abstract class SearchObject implements RecommendInterface
     protected $requestParam;
 
     /**
-     * Results plugin manager
+     * Search runner
      *
-     * @var \VuFind\Search\Results\PluginManager
+     * @var SearchRunner
      */
-    protected $resultsManager;
+    protected $runner;
 
     /**
      * Constructor
      *
-     * @param \VuFind\Search\Results\PluginManager $results Results plugin manager
+     * @param SearchRunner $runner Search runner
      */
-    public function __construct(\VuFind\Search\Results\PluginManager $results)
+    public function __construct(SearchRunner $runner)
     {
-        $this->resultsManager = $results;
+        $this->runner = $runner;
     }
 
     /**
@@ -123,17 +124,18 @@ abstract class SearchObject implements RecommendInterface
             $lookfor = $params->getQuery()->getAllTerms();
         }
 
-        // Set up the parameters:
-        $this->results = $this->resultsManager->get($this->getSearchClassId());
-        $params = $this->results->getParams();
-        $params->setLimit($this->limit);
-        $params->setBasicSearch(
-            $lookfor,
-            $params->getOptions()->getHandlerForLabel($typeLabel)
-        );
+        // Set up the callback to initialize the parameters:
+        $limit = $this->limit;
+        $callback = function ($runner, $params) use ($lookfor, $limit, $typeLabel) {
+            $params->setLimit($limit);
+            $params->setBasicSearch(
+                $lookfor, $params->getOptions()->getHandlerForLabel($typeLabel)
+            );
+        };
 
         // Perform the search:
-        $this->results->performAndProcessSearch();
+        $this->results
+            = $this->runner->run([], $this->getSearchClassId(), $callback);
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
index f67d722d62eb083d12251095e20a74c0126a6f68..fa72063a578355efbc35b878ec37cc9d51232693 100644
--- a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
+++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
@@ -159,7 +159,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     public function getSortTitle()
     {
         // Child classes should override this with smarter behavior, and the "strip
-        // articles" logic probably belongs in a more appropriate place, but for now,
+        // articles" logic probably belongs in a more appropriate place, but for now
         // in the absence of a better plan, we'll just use the XSLT Importer's strip
         // articles functionality.
         return ArticleStripper::stripArticles($this->getBreadcrumb());
@@ -171,15 +171,18 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      * @param int    $list_id ID of list to load tags from (null for all lists)
      * @param int    $user_id ID of user to load tags from (null for all users)
      * @param string $sort    Sort type ('count' or 'tag')
+     * @param int    $ownerId ID of user to check for ownership
      *
      * @return array
      */
-    public function getTags($list_id = null, $user_id = null, $sort = 'count')
-    {
+    public function getTags($list_id = null, $user_id = null, $sort = 'count',
+        $ownerId = null
+    ) {
         $tags = $this->getDbTable('Tags');
         return $tags->getForResource(
-            $this->getUniqueId(), $this->getResourceSource(), 0, $list_id, $user_id,
-            $sort
+            $this->getUniqueId(),
+            $this->getResourceSource(),
+            0, $list_id, $user_id, $sort, $ownerId
         );
     }
 
@@ -202,6 +205,25 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
         }
     }
 
+    /**
+     * Remove tags from the record.
+     *
+     * @param \VuFind\Db\Row\User $user The user posting the tag
+     * @param array               $tags The user-provided tags
+     *
+     * @return void
+     */
+    public function deleteTags($user, $tags)
+    {
+        $resources = $this->getDbTable('Resource');
+        $resource = $resources->findResource(
+            $this->getUniqueId(), $this->getResourceSource()
+        );
+        foreach ($tags as $tag) {
+            $resource->deleteTag($tag, $user);
+        }
+    }
+
     /**
      * Save this record to the user's favorites.
      *
diff --git a/module/VuFind/src/VuFind/RecordDriver/Factory.php b/module/VuFind/src/VuFind/RecordDriver/Factory.php
index f788c9aa6cacebb37e629b7eaa64735bcb55e973..eef46f8b0a2f6353d6a9d565e67756764ac71b50 100644
--- a/module/VuFind/src/VuFind/RecordDriver/Factory.php
+++ b/module/VuFind/src/VuFind/RecordDriver/Factory.php
@@ -174,6 +174,29 @@ class Factory
         return $driver;
     }
 
+    /**
+     * Factory for SolrMarcRemote record driver.
+     *
+     * @param ServiceManager $sm Service manager.
+     *
+     * @return SolrMarc
+     */
+    public static function getSolrMarcRemote(ServiceManager $sm)
+    {
+        $driver = new SolrMarcRemote(
+            $sm->getServiceLocator()->get('VuFind\Config')->get('config'),
+            null,
+            $sm->getServiceLocator()->get('VuFind\Config')->get('searches')
+        );
+        $driver->attachILS(
+            $sm->getServiceLocator()->get('VuFind\ILSConnection'),
+            $sm->getServiceLocator()->get('VuFind\ILSHoldLogic'),
+            $sm->getServiceLocator()->get('VuFind\ILSTitleHoldLogic')
+        );
+        $driver->attachSearchService($sm->getServiceLocator()->get('VuFind\Search'));
+        return $driver;
+    }
+
     /**
      * Factory for SolrReserves record driver.
      *
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
index 71d4adae92f6c763593865dd7e90ddf037054194..1ca12ae421bc02226698d365323dad9520decd54 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
@@ -161,6 +161,16 @@ class SolrDefault extends AbstractBase
         parent::__construct($mainConfig, $recordConfig);
     }
 
+    /**
+     * Get highlighting details from the object.
+     *
+     * @return array
+     */
+    public function getHighlightDetails()
+    {
+        return $this->highlightDetails;
+    }
+
     /**
      * Add highlighting details to the object.
      *
@@ -850,19 +860,12 @@ class SolrDefault extends AbstractBase
     public function getOpenURL()
     {
         // Set up parameters based on the format of the record:
-        switch ($format = $this->getOpenURLFormat()) {
-        case 'Book':
-            $params = $this->getBookOpenURLParams();
-            break;
-        case 'Article':
-            $params = $this->getArticleOpenURLParams();
-            break;
-        case 'Journal':
-            $params = $this->getJournalOpenURLParams();
-            break;
-        default:
+        $format = $this->getOpenURLFormat();
+        $method = "get{$format}OpenURLParams";
+        if (method_exists($this, $method)) {
+            $params = $this->$method();
+        } else {
             $params = $this->getUnknownFormatOpenURLParams($format);
-            break;
         }
 
         // Assemble the URL:
@@ -1401,6 +1404,9 @@ class SolrDefault extends AbstractBase
     /**
      * Get the value of whether or not this is a collection level record
      *
+     * NOTE: \VuFind\Hierarchy\TreeDataFormatter\AbstractBase::isCollection()
+     * duplicates some of this logic.
+     *
      * @return bool
      */
     public function isCollection()
@@ -1427,48 +1433,6 @@ class SolrDefault extends AbstractBase
         }
     }
 
-    /**
-     * Get the positions of this item within parent collections.  Returns an array
-     * of parent ID => sequence number.
-     *
-     * @return array
-     */
-    public function getHierarchyPositionsInParents()
-    {
-        $retVal = [];
-        if (isset($this->fields['hierarchy_parent_id'])
-            && isset($this->fields['hierarchy_sequence'])
-        ) {
-            foreach ($this->fields['hierarchy_parent_id'] as $key => $val) {
-                $retVal[$val] = $this->fields['hierarchy_sequence'][$key];
-            }
-        }
-        return $retVal;
-    }
-
-     /**
-     * Get the titles of this item within parent collections.  Returns an array
-     * of parent ID => sequence number.
-     *
-     * @return Array
-     */
-    public function getTitlesInHierarchy()
-    {
-        $retVal = [];
-        if (isset($this->fields['title_in_hierarchy'])
-            && is_array($this->fields['title_in_hierarchy'])
-        ) {
-            $titles = $this->fields['title_in_hierarchy'];
-            $parentIDs = $this->fields['hierarchy_parent_id'];
-            if (count($titles) === count($parentIDs)) {
-                foreach ($parentIDs as $key => $val) {
-                    $retVal[$val] = $titles[$key];
-                }
-            }
-        }
-        return $retVal;
-    }
-
     /**
      * Get a list of hierarchy trees containing this record.
      *
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
index e03500f4cb18bffcfa02fa0a1eecdace3f4c9f68..d2d173952264a82971f6f8549768a63d0b4a745f 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
@@ -5,6 +5,7 @@
  * PHP version 5
  *
  * Copyright (C) Villanova University 2010.
+ * Copyright (C) The National Library of Finland 2015.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -22,6 +23,7 @@
  * @category VuFind2
  * @package  RecordDrivers
  * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     http://vufind.org/wiki/vufind2:record_drivers Wiki
  */
@@ -36,17 +38,18 @@ use VuFind\Exception\ILS as ILSException,
  * @category VuFind2
  * @package  RecordDrivers
  * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Ere Maijala <ere.maijala@helsinki.fi>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     http://vufind.org/wiki/vufind2:record_drivers Wiki
  */
 class SolrMarc extends SolrDefault
 {
     /**
-     * MARC record
+     * MARC record. Access only via getMarcRecord() as this is initialized lazily.
      *
      * @var \File_MARC_Record
      */
-    protected $marcRecord;
+    protected $lazyMarcRecord = null;
 
     /**
      * ILS connection
@@ -69,42 +72,6 @@ class SolrMarc extends SolrDefault
      */
     protected $titleHoldLogic;
 
-    /**
-     * Set raw data to initialize the object.
-     *
-     * @param mixed $data Raw data representing the record; Record Model
-     * objects are normally constructed by Record Driver objects using data
-     * passed in from a Search Results object.  In this case, $data is a Solr record
-     * array containing MARC data in the 'fullrecord' field.
-     *
-     * @return void
-     */
-    public function setRawData($data)
-    {
-        // Call the parent's set method...
-        parent::setRawData($data);
-
-        // Also process the MARC record:
-        $marc = trim($data['fullrecord']);
-
-        // check if we are dealing with MARCXML
-        if (substr($marc, 0, 1) == '<') {
-            $marc = new \File_MARCXML($marc, \File_MARCXML::SOURCE_STRING);
-        } else {
-            // When indexing over HTTP, SolrMarc may use entities instead of certain
-            // control characters; we should normalize these:
-            $marc = str_replace(
-                ['#29;', '#30;', '#31;'], ["\x1D", "\x1E", "\x1F"], $marc
-            );
-            $marc = new \File_MARC($marc, \File_MARC::SOURCE_STRING);
-        }
-
-        $this->marcRecord = $marc->next();
-        if (!$this->marcRecord) {
-            throw new \File_MARC_Exception('Cannot Process MARC Record');
-        }
-    }
-
     /**
      * Get access restriction notes for the record.
      *
@@ -135,7 +102,7 @@ class SolrMarc extends SolrDefault
         // Try each MARC field one at a time:
         foreach ($fields as $field) {
             // Do we have any results for the current field?  If not, try the next.
-            $results = $this->marcRecord->getFields($field);
+            $results = $this->getMarcRecord()->getFields($field);
             if (!$results) {
                 continue;
             }
@@ -184,7 +151,7 @@ class SolrMarc extends SolrDefault
      */
     public function getBibliographicLevel()
     {
-        $leader = $this->marcRecord->getLeader();
+        $leader = $this->getMarcRecord()->getLeader();
         $biblioLevel = strtoupper($leader[7]);
 
         switch ($biblioLevel) {
@@ -255,7 +222,7 @@ class SolrMarc extends SolrDefault
 
         // Try to look up the specified field, return empty array if it doesn't
         // exist.
-        $fields = $this->marcRecord->getFields($field);
+        $fields = $this->getMarcRecord()->getFields($field);
         if (!is_array($fields)) {
             return $matches;
         }
@@ -348,7 +315,7 @@ class SolrMarc extends SolrDefault
         // consistent with default SolrMarc handling of names/dates.
         $pubResults = $copyResults = [];
 
-        $fields = $this->marcRecord->getFields('264');
+        $fields = $this->getMarcRecord()->getFields('264');
         if (is_array($fields)) {
             foreach ($fields as $currentField) {
                 $currentVal = $currentField->getSubfield($subfield);
@@ -496,7 +463,7 @@ class SolrMarc extends SolrDefault
         // Loop through the field specification....
         foreach ($fieldInfo as $field => $subfields) {
             // Did we find any matching fields?
-            $series = $this->marcRecord->getFields($field);
+            $series = $this->getMarcRecord()->getFields($field);
             if (is_array($series)) {
                 foreach ($series as $currentField) {
                     // Can we find a name using the specified subfield list?
@@ -634,7 +601,7 @@ class SolrMarc extends SolrDefault
     public function getTOC()
     {
         // Return empty array if we have no table of contents:
-        $fields = $this->marcRecord->getFields('505');
+        $fields = $this->getMarcRecord()->getFields('505');
         if (!$fields) {
             return [];
         }
@@ -663,7 +630,7 @@ class SolrMarc extends SolrDefault
     public function getHierarchicalPlaceNames()
     {
         $placeNames = [];
-        if ($fields = $this->marcRecord->getFields('752')) {
+        if ($fields = $this->getMarcRecord()->getFields('752')) {
             foreach ($fields as $field) {
                 $subfields = $field->getSubfields();
                 $current = [];
@@ -698,12 +665,12 @@ class SolrMarc extends SolrDefault
 
         // Which fields/subfields should we check for URLs?
         $fieldsToCheck = [
-            '856' => ['y', 'z'],   // Standard URL
+            '856' => ['y', 'z', '3'],   // Standard URL
             '555' => ['a']         // Cumulative index/finding aids
         ];
 
         foreach ($fieldsToCheck as $field => $subfields) {
-            $urls = $this->marcRecord->getFields($field);
+            $urls = $this->getMarcRecord()->getFields($field);
             if ($urls) {
                 foreach ($urls as $url) {
                     // Is there an address in the current field?
@@ -760,7 +727,7 @@ class SolrMarc extends SolrDefault
         $retVal = [];
         foreach ($fieldsNames as $value) {
             $value = trim($value);
-            $fields = $this->marcRecord->getFields($value);
+            $fields = $this->getMarcRecord()->getFields($value);
             if (!empty($fields)) {
                 foreach ($fields as $field) {
                     // Check to see if we should display at all
@@ -944,7 +911,7 @@ class SolrMarc extends SolrDefault
 
         // Try to look up the specified field, return empty array if it doesn't
         // exist.
-        $fields = $this->marcRecord->getFields($field);
+        $fields = $this->getMarcRecord()->getFields($field);
         if (!is_array($fields)) {
             return $matches;
         }
@@ -999,7 +966,7 @@ class SolrMarc extends SolrDefault
     {
         // Special case for MARC:
         if ($format == 'marc21') {
-            $xml = $this->marcRecord->toXML();
+            $xml = $this->getMarcRecord()->toXML();
             $xml = str_replace(
                 [chr(27), chr(28), chr(29), chr(30), chr(31)], ' ', $xml
             );
@@ -1116,11 +1083,32 @@ class SolrMarc extends SolrDefault
     /**
      * Get access to the raw File_MARC object.
      *
-     * @return File_MARCBASE
+     * @return \File_MARCBASE
      */
     public function getMarcRecord()
     {
-        return $this->marcRecord;
+        if (null === $this->lazyMarcRecord) {
+            $marc = trim($this->fields['fullrecord']);
+
+            // check if we are dealing with MARCXML
+            if (substr($marc, 0, 1) == '<') {
+                $marc = new \File_MARCXML($marc, \File_MARCXML::SOURCE_STRING);
+            } else {
+                // When indexing over HTTP, SolrMarc may use entities instead of
+                // certain control characters; we should normalize these:
+                $marc = str_replace(
+                    ['#29;', '#30;', '#31;'], ["\x1D", "\x1E", "\x1F"], $marc
+                );
+                $marc = new \File_MARC($marc, \File_MARC::SOURCE_STRING);
+            }
+
+            $this->lazyMarcRecord = $marc->next();
+            if (!$this->lazyMarcRecord) {
+                throw new \File_MARC_Exception('Cannot Process MARC Record');
+            }
+        }
+
+        return $this->lazyMarcRecord;
     }
 
     /**
@@ -1131,7 +1119,7 @@ class SolrMarc extends SolrDefault
     public function getRDFXML()
     {
         return XSLTProcessor::process(
-            'record-rdf-mods.xsl', trim($this->marcRecord->toXML())
+            'record-rdf-mods.xsl', trim($this->getMarcRecord()->toXML())
         );
     }
 
@@ -1144,4 +1132,24 @@ class SolrMarc extends SolrDefault
     {
         return $this->getFieldArray('035', 'a', true);
     }
+
+    /**
+     * Magic method for legacy compatibility with marcRecord property.
+     *
+     * @param string $key Key to access.
+     *
+     * @return mixed
+     */
+    public function __get($key)
+    {
+        if ($key === 'marcRecord') {
+            // property deprecated as of release 2.5.
+            trigger_error(
+                'marcRecord property is deprecated; use getMarcRecord()',
+                E_USER_DEPRECATED
+            );
+            return $this->getMarcRecord();
+        }
+        return null;
+    }
 }
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php b/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php
new file mode 100644
index 0000000000000000000000000000000000000000..03c4516725b49f1db078dea324a86e536af3d23c
--- /dev/null
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * Model for MARC records without a fullrecord in Solr. The fullrecord is being
+ * retrieved from an external source.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Leipzig University Library 2014.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  RecordDrivers
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Ulf Seltmann <seltmann@ub.uni-leipzig.de>
+ * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:record_drivers Wiki
+ */
+namespace VuFind\RecordDriver;
+use VuFindHttp\HttpServiceAwareInterface as HttpServiceAwareInterface,
+    Zend\Log\LoggerAwareInterface as LoggerAwareInterface;
+
+/**
+ * Model for MARC records without a fullrecord in Solr. The fullrecord is being
+ * retrieved from an external source.
+ *
+ * @category VuFind2
+ * @package  RecordDrivers
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Ulf Seltmann <seltmann@ub.uni-leipzig.de>
+ * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:record_drivers Wiki
+ * @link     https://vufind.org/wiki/remote_marc_records
+ */
+class SolrMarcRemote extends SolrMarc implements
+    HttpServiceAwareInterface, LoggerAwareInterface
+{
+    use \VuFindHttp\HttpServiceAwareTrait;
+    use \VuFind\Log\LoggerAwareTrait;
+
+    /**
+     * Holds the URI-Pattern of the service that returns the marc binary blob by id
+     *
+     * @var string
+     */
+    protected $uriPattern = '';
+
+    /**
+     * Constructor
+     *
+     * @param \Zend\Config\Config $mainConfig     VuFind main configuration (omit for
+     * built-in defaults)
+     * @param \Zend\Config\Config $recordConfig   Record-specific configuration file
+     * (omit to use $mainConfig as $recordConfig)
+     * @param \Zend\Config\Config $searchSettings Search-specific configuration file
+     *
+     * @throws \Exception
+     */
+    public function __construct($mainConfig = null, $recordConfig = null,
+        $searchSettings = null
+    ) {
+        parent::__construct($mainConfig, $recordConfig, $searchSettings);
+
+        // get config values for remote fullrecord service
+        if (! $mainConfig->Record->get('remote_marc_url')) {
+            throw new \Exception('SolrMarcRemote baseUrl-setting missing.');
+        } else {
+            $this->uriPattern = $mainConfig->Record->get('remote_marc_url');
+        }
+    }
+
+    /**
+     * Get access to the raw File_MARC object.
+     *
+     * @return \File_MARCBASE
+     * @throws \Exception
+     * @throws \File_MARC_Exception
+     */
+    public function getMarcRecord()
+    {
+        // handle availability of fullrecord
+        if (!isset($this->fields['fullrecord'])) {
+            // retrieve fullrecord from external source
+            if (! isset($this->fields['id'])) {
+                throw new \Exception(
+                    'No unique id given for fullrecord retrieval'
+                );
+            }
+            $this->fields['fullrecord']
+                = $this->getRemoteFullrecord($this->fields['id']);
+        }
+
+        return parent::getMarcRecord();
+    }
+
+    /**
+     * Retrieves the full Marcrecord from a remote service defined by uriPattern
+     *
+     * @param String $id - this record's unique identifier
+     *
+     * @return bool|string
+     * @throws \Exception
+     */
+    protected function getRemoteFullrecord($id)
+    {
+        if (empty($id)) {
+            throw new \Exception('empty id given');
+        }
+
+        if (empty($this->uriPattern)) {
+            throw new \Exception('no Marc-Server configured');
+        }
+
+        $url = sprintf($this->uriPattern, $id);
+
+        try {
+            $response = $this->httpService->get($url);
+        } catch (\Exception $e) {
+            throw new \Exception($e->getMessage());
+        }
+
+        if (!$response->isSuccess()) {
+            $this->debug(
+                'HTTP status ' . $response->getStatusCode() .
+                ' received, retrieving data for record: ' . $id
+            );
+            return false;
+        }
+
+        return $response->getBody();
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/RecordDriver/WorldCat.php b/module/VuFind/src/VuFind/RecordDriver/WorldCat.php
index 7fcefa1d3cd8b0bc39fdbcbc73f651bcd257b681..f47ab078962c310eb4129efa94524a6f99ce4d7f 100644
--- a/module/VuFind/src/VuFind/RecordDriver/WorldCat.php
+++ b/module/VuFind/src/VuFind/RecordDriver/WorldCat.php
@@ -148,7 +148,7 @@ class WorldCat extends SolrMarc
      */
     public function getUniqueID()
     {
-        return (string)$this->marcRecord->getField('001')->getData();
+        return (string)$this->getMarcRecord()->getField('001')->getData();
     }
 
     /**
@@ -200,7 +200,7 @@ class WorldCat extends SolrMarc
     public function getLanguages()
     {
         $retVal = [];
-        $field = $this->marcRecord->getField('008');
+        $field = $this->getMarcRecord()->getField('008');
         if ($field) {
             $content = $field->getData();
             if (strlen($content) >= 38) {
@@ -227,7 +227,7 @@ class WorldCat extends SolrMarc
      */
     public function getSortTitle()
     {
-        $field = $this->marcRecord->getField('245');
+        $field = $this->getMarcRecord()->getField('245');
         if ($field) {
             $title = $field->getSubfield('a');
             if ($title) {
diff --git a/module/VuFind/src/VuFind/RecordTab/CollectionList.php b/module/VuFind/src/VuFind/RecordTab/CollectionList.php
index eff74b5c74ab1ab48f4516071de97a202fc9dfd9..f2f5920b2fce7413562baf8ef114af6b726676f4 100644
--- a/module/VuFind/src/VuFind/RecordTab/CollectionList.php
+++ b/module/VuFind/src/VuFind/RecordTab/CollectionList.php
@@ -26,6 +26,8 @@
  * @link     http://vufind.org/wiki/vufind2:record_tabs Wiki
  */
 namespace VuFind\RecordTab;
+use VuFind\Recommend\PluginManager as RecommendManager,
+    VuFind\Search\RecommendListener, VuFind\Search\SearchRunner;
 
 /**
  * Collection list tab
@@ -39,27 +41,36 @@ namespace VuFind\RecordTab;
 class CollectionList extends AbstractBase
 {
     /**
-     * Search results object
+     * Search results object (null prior to processing)
      *
      * @var \VuFind\Search\SolrCollection\Results
      */
-    protected $results;
+    protected $results = null;
 
     /**
-     * Flag indicating whether results have been processed yet
+     * Search runner
      *
-     * @var bool
+     * @var SearchRunner
      */
-    protected $processed = false;
+    protected $runner;
+
+    /**
+     * Recommendation manager
+     *
+     * @var RecommendManager
+     */
+    protected $recommendManager;
 
     /**
      * Constructor
      *
-     * @param \VuFind\Search\SolrCollection\Results $results Search object
+     * @param SearchRunner     $runner Search runner
+     * @param RecommendManager $recMan Recommendation manager
      */
-    public function __construct(\VuFind\Search\SolrCollection\Results $results)
+    public function __construct(SearchRunner $runner, RecommendManager $recMan)
     {
-        $this->results = $results;
+        $this->runner = $runner;
+        $this->recommendManager = $recMan;
     }
 
     /**
@@ -89,16 +100,21 @@ class CollectionList extends AbstractBase
      */
     public function getResults()
     {
-        if (!$this->processed) {
-            $params = new \Zend\Stdlib\Parameters(
-                $this->getRequest()->getQuery()->toArray()
-                + $this->getRequest()->getPost()->toArray()
-            );
-            $this->results->getParams()->initFromRecordDriver(
-                $this->getRecordDriver(), $params
-            );
-            $this->results->getParams()->recommendationsEnabled(true);
-            $this->processed = true;
+        if (null === $this->results) {
+            $driver = $this->getRecordDriver();
+            $request = $this->getRequest()->getQuery()->toArray()
+                + $this->getRequest()->getPost()->toArray();
+            $rManager = $this->recommendManager;
+            $cb = function ($runner, $params, $searchId) use ($driver, $rManager) {
+                $params->initFromRecordDriver($driver);
+                $listener = new RecommendListener($rManager, $searchId);
+                $listener->setConfig(
+                    $params->getOptions()->getRecommendationSettings()
+                );
+                $listener->attach($runner->getEventManager()->getSharedManager());
+            };
+            $this->results
+                = $this->runner->run($request, 'SolrCollection', $cb);
         }
         return $this->results;
     }
diff --git a/module/VuFind/src/VuFind/RecordTab/Factory.php b/module/VuFind/src/VuFind/RecordTab/Factory.php
index 05176450b4c39ff8b350dd71c6e3af71f1e4f7c1..f4cd5b27c38537d61a9d5170ca93938b99773e3b 100644
--- a/module/VuFind/src/VuFind/RecordTab/Factory.php
+++ b/module/VuFind/src/VuFind/RecordTab/Factory.php
@@ -66,8 +66,8 @@ class Factory
     public static function getCollectionList(ServiceManager $sm)
     {
         return new CollectionList(
-            $sm->getServiceLocator()->get('VuFind\SearchResultsPluginManager')
-                ->get('SolrCollection')
+            $sm->getServiceLocator()->get('VuFind\SearchRunner'),
+            $sm->getServiceLocator()->get('VuFind\RecommendPluginManager')
         );
     }
 
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Factory.php b/module/VuFind/src/VuFind/Resolver/Driver/Factory.php
index 8441cb4ad59764a7ab5fc3b6d853d9d092352623..8c306f27ca0681b82eeb50b38c50ea7d61b2cf46 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Factory.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Factory.php
@@ -88,4 +88,20 @@ class Factory
             $sm->getServiceLocator()->get('VuFind\Http')->createClient()
         );
     }
+
+    /**
+     * Factory for Redi record driver.
+     *
+     * @param ServiceManager $sm Service manager.
+     *
+     * @return Redi
+     */
+    public static function getRedi(ServiceManager $sm)
+    {
+        $config = $sm->getServiceLocator()->get('VuFind\Config')->get('config');
+        return new Redi(
+            $config->OpenURL->url,
+            $sm->getServiceLocator()->get('VuFind\Http')->createClient()
+        );
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Redi.php b/module/VuFind/src/VuFind/Resolver/Driver/Redi.php
new file mode 100644
index 0000000000000000000000000000000000000000..93f624c634452f996a3d080bfc42413074483376
--- /dev/null
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Redi.php
@@ -0,0 +1,283 @@
+<?php
+/**
+ * ReDi Link Resolver Driver
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Leipzig University Library 2015
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Resolver_Drivers
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:link_resolver_drivers Wiki
+ */
+namespace VuFind\Resolver\Driver;
+use DOMDocument, Zend\Dom\DOMXPath;
+
+/**
+ * ReDi Link Resolver Driver
+ *
+ * @category VuFind2
+ * @package  Resolver_Drivers
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:link_resolver_drivers Wiki
+ */
+class Redi implements DriverInterface
+{
+    /**
+     * HTTP client
+     *
+     * @var \Zend\Http\Client
+     */
+    protected $httpClient;
+
+    /**
+     * Base URL for link resolver
+     *
+     * @var string
+     */
+    protected $baseUrl;
+
+    /**
+     * Parsed resolver links
+     *
+     * @var array
+     */
+    protected $links;
+
+    /**
+     * Constructor
+     *
+     * @param string            $baseUrl    Base URL for link resolver
+     * @param \Zend\Http\Client $httpClient HTTP client
+     */
+    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    {
+        $this->baseUrl = $baseUrl;
+        $this->httpClient = $httpClient;
+    }
+
+    /**
+     * Fetch Links
+     *
+     * Fetches a set of links corresponding to an OpenURL
+     *
+     * @param string $openURL openURL (url-encoded)
+     *
+     * @return string         raw XML returned by resolver
+     */
+    public function fetchLinks($openURL)
+    {
+        $url = $this->baseUrl . '?' . $openURL;
+        $feed = $this->httpClient->setUri($url)->send()->getBody();
+        return $feed;
+    }
+
+    /**
+     * Parse Links
+     *
+     * Parses an XML file returned by a link resolver
+     * and converts it to a standardised format for display
+     *
+     * @param string $xmlstr Raw XML returned by resolver
+     *
+     * @return array         Array of values
+     */
+    public function parseLinks($xmlstr)
+    {
+        $xml = new DOMDocument();
+        if (!@$xml->loadHTML($xmlstr)) {
+            return [];
+        }
+
+        // parse the raw resolver-data
+        $this->links = array_merge(
+            $this->parseDOI($xml),
+            $this->parseRediOpenURLs($xml)
+        );
+
+        // perform (individual) postprocessing on parsed resolver-data
+        $this->postProcessing();
+
+        return $this->links;
+    }
+
+    /**
+     * Parse the Redi XML response and return array with DOI information.
+     *
+     * @param DOMDocument $xml Loaded xml document
+     *
+     * @return array Get back a array with title, URL and service_type
+     */
+    protected function parseDOI($xml)
+    {
+        $retval = [];
+
+        $xpath = new DOMXPath($xml);
+
+        $doiTerm = $xpath
+            ->query("//dt[@class='doi_t']");
+        $doiDefinition = $xpath
+            ->query("//dd[@class='doi_d']");
+
+        if ($doiTerm->length == $doiDefinition->length) {
+            for ($i = 0; $i<$doiTerm->length; $i++) {
+                $href = $xpath
+                    ->query(".//@href", $doiDefinition->item($i))
+                    ->item(0)->textContent;
+                $retval[] = [
+                    'title' => $doiTerm->item($i)->textContent
+                        . $doiDefinition->item($i)->textContent,
+                    'href' => $href,
+                    'service_type' => 'getFullTxt',
+                ];
+            }
+        }
+
+        return $retval;
+    }
+
+    /**
+     * Parse Redi additional information elements and return the one identified by
+     * the infoToken provided (e.g. "*")
+     *
+     * @param DOMDocument $xml       Loaded xml document
+     * @param string      $infoToken InfoToken to search for
+     *
+     * @return string
+     */
+    protected function parseRediInfo($xml, $infoToken)
+    {
+        $xpath = new DOMXPath($xml);
+
+        // additional info nodes - marked by "<sup>*</sup>"
+        $infoTokenNodes = $xpath->query("//div[@id='t_ezb']/div[@class='t']/p/sup");
+
+        if ($infoTokenNodes->length > 0) {
+            for ($i = 0; $i<$infoTokenNodes->length; $i++) {
+                if ($infoToken == $infoTokenNodes->item($i)->textContent) {
+                    return $xpath
+                        ->query("//div[@id='t_ezb']/div[@class='t']/p/sup/..")
+                        ->item($i)->textContent;
+                }
+            }
+        }
+
+        return '';
+    }
+
+    /**
+     * Parse if the Redi xml snippet contains Redi urls.
+     *
+     * @param DOMDocument $xml Loaded xml document
+     *
+     * @return array Get back Redi direct link to sources containing title, URL and
+     *               service_type
+     */
+    protected function parseRediOpenURLs($xml)
+    {
+        $retval = [];
+
+        $xpath = new DOMXPath($xml);
+
+        $ezbResultsNodesText = $xpath
+            ->query("//div[@class='t_ezb_result']/p");
+        $ezbResultsNodesURL = $xpath
+            ->query("//div[@class='t_ezb_result']/p/span[@class='t_link']/a");
+
+        if ($ezbResultsNodesText->length == $ezbResultsNodesURL->length) {
+            for ($i = 0; $i<$ezbResultsNodesText->length; $i++) {
+
+                $accessClass = 'unknown';
+                $accessClassExpressions = [
+                    "denied"    => "//div[@class='t_ezb_result']["
+                        . ($i+1) . "]/p/span[@class='t_ezb_red']",
+                    "limited" => "//div[@class='t_ezb_result']["
+                        . ($i+1) . "]/p/span[@class='t_ezb_yellow']",
+                    "open"  => "//div[@class='t_ezb_result']["
+                        . ($i+1) . "]/p/span[@class='t_ezb_green']",
+                ]; // $i+1 because XPath-element-counting starts with 1
+                foreach ($accessClassExpressions as $key => $value) {
+                    if ($xpath->evaluate("count({$value})") == 1) {
+                        $accessClass = $key;
+                    }
+                }
+
+                $itemInfo = '';
+
+                $expression = "//div[@class='t_ezb_result']["
+                    . ($i+1) . "]/p/sup";
+                if ($xpath->evaluate("count({$expression})") == 1) {
+                    $itemInfo = $this->parseRediInfo(
+                        $xml, $xpath->query($expression)->item(0)->textContent
+                    );
+                }
+
+                $retval[] = [
+                    'title' => $ezbResultsNodesText->item($i)->textContent,
+                    'href' => $ezbResultsNodesURL->item($i)
+                        ->attributes->getNamedItem("href")->textContent,
+                    'access'       => $accessClass,
+                    'coverage'     => $itemInfo,
+                    'service_type' => 'getFullTxt',
+                ];
+            }
+        }
+
+        return $retval;
+    }
+
+    /**
+     * Hook for post processing of the parsed resolver response (e.g. by removing any
+     * double angle quotation mark from each link['title']).
+     *
+     * @return void
+     */
+    protected function postProcessing()
+    {
+        for ($i = 0; $i < count($this->links); $i++) {
+            if (isset($this->links[$i]['title'])) {
+                $this->links[$i]['title'] = $this
+                    ->removeDoubleAngleQuotationMarks($this->links[$i]['title']);
+                $this->links[$i]['title'] = trim($this->links[$i]['title']);
+            }
+            if (isset($this->links[$i]['coverage'])) {
+                $this->links[$i]['coverage'] = trim($this->links[$i]['coverage']);
+            }
+        }
+    }
+
+    /**
+     * Helper function to remove hardcoded link-string "»" in Redi response
+     *
+     * @param string $string String to be manipulated
+     *
+     * @return string
+     */
+    protected function removeDoubleAngleQuotationMarks($string)
+    {
+        return str_replace(
+            ['»', chr(194) . chr(160)],
+            ['', ''],
+            $string
+        ); // hack to replace \u00a0
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php b/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
index bae6009f769a6ce3ee9b77fce87e3f80eac325da..0c951583479fcae209b833fd35c68eee1e7af4ba 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
@@ -111,8 +111,15 @@ class Sfx implements DriverInterface
             $record['title'] = (string)$target->target_public_name;
             $record['href'] = (string)$target->target_url;
             $record['service_type'] = (string)$target->service_type;
-            $record['coverage'] = (string)$target->coverage->coverage_text
-                ->threshold_text->coverage_statement;
+            if (isset($target->coverage->coverage_text)) {
+                $coverageText = & $target->coverage->coverage_text;
+                $record['coverage'] = (string)$coverageText
+                    ->threshold_text->coverage_statement;
+                if (isset($coverageText->embargo_text->embargo_statement)) {
+                    $record['coverage'] .= ' ' . (string)$coverageText
+                        ->embargo_text->embargo_statement;
+                }
+            }
             array_push($records, $record);
         }
         return $records;
diff --git a/module/VuFind/src/VuFind/Route/RouteGenerator.php b/module/VuFind/src/VuFind/Route/RouteGenerator.php
index dbff777dabcaee46dde40ea8ee696b555981173e..6fad1be0f26dcd07843dfa804bc692e572fe2419 100644
--- a/module/VuFind/src/VuFind/Route/RouteGenerator.php
+++ b/module/VuFind/src/VuFind/Route/RouteGenerator.php
@@ -58,9 +58,9 @@ class RouteGenerator
     {
         if (null === $nonTabRecordActions) {
             $this->nonTabRecordActions = [
-                'AddComment', 'DeleteComment', 'AddTag', 'Save', 'Email', 'SMS',
-                'Cite', 'Export', 'RDF', 'Hold', 'BlockedHold', 'Home',
-                'StorageRetrievalRequest', 'AjaxTab',
+                'AddComment', 'DeleteComment', 'AddTag', 'DeleteTag', 'Save',
+                'Email', 'SMS', 'Cite', 'Export', 'RDF', 'Hold', 'BlockedHold',
+                'Home', 'StorageRetrievalRequest', 'AjaxTab',
                 'BlockedStorageRetrievalRequest', 'ILLRequest', 'BlockedILLRequest',
                 'PDF',
             ];
@@ -216,4 +216,4 @@ class RouteGenerator
             $this->addStaticRoute($config, $route);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/Search/Base/Options.php b/module/VuFind/src/VuFind/Search/Base/Options.php
index 330dad11856f2ef56d923e4f648aef63e0ab5059..102d11380db23f0483a51996a995faee4a77d7ab 100644
--- a/module/VuFind/src/VuFind/Search/Base/Options.php
+++ b/module/VuFind/src/VuFind/Search/Base/Options.php
@@ -205,16 +205,34 @@ abstract class Options implements TranslatorAwareInterface
      */
     protected $facetsIni = 'facets';
 
+    /**
+     * Configuration loader
+     *
+     * @var \VuFind\Config\PluginManager
+     */
+    protected $configLoader;
+
     /**
      * Constructor
      *
      * @param \VuFind\Config\PluginManager $configLoader Config loader
-     *
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function __construct(\VuFind\Config\PluginManager $configLoader)
     {
         $this->limitOptions = [$this->defaultLimit];
+        $this->setConfigLoader($configLoader);
+    }
+
+    /**
+     * Set the config loader
+     *
+     * @param \VuFind\Config\PluginManager $configLoader Config loader
+     *
+     * @return void
+     */
+    public function setConfigLoader(\VuFind\Config\PluginManager $configLoader)
+    {
+        $this->configLoader = $configLoader;
     }
 
     /**
@@ -710,6 +728,64 @@ abstract class Options implements TranslatorAwareInterface
         return -1;
     }
 
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // Load the necessary settings to determine the appropriate recommendations
+        // module:
+        $searchSettings = $this->configLoader->get($this->getSearchIni());
+
+        // Load a type-specific recommendations setting if possible, or the default
+        // otherwise:
+        $recommend = [];
+
+        if (null !== $handler
+            && isset($searchSettings->TopRecommendations->$handler)
+        ) {
+            $recommend['top'] = $searchSettings->TopRecommendations
+                ->$handler->toArray();
+        } else {
+            $recommend['top']
+                = isset($searchSettings->General->default_top_recommend)
+                ? $searchSettings->General->default_top_recommend->toArray()
+                : false;
+        }
+        if (null !== $handler
+            && isset($searchSettings->SideRecommendations->$handler)
+        ) {
+            $recommend['side'] = $searchSettings->SideRecommendations
+                ->$handler->toArray();
+        } else {
+            $recommend['side']
+                = isset($searchSettings->General->default_side_recommend)
+                ? $searchSettings->General->default_side_recommend->toArray()
+                : false;
+        }
+        if (null !== $handler
+            && isset($searchSettings->NoResultsRecommendations->$handler)
+        ) {
+            $recommend['noresults'] = $searchSettings->NoResultsRecommendations
+                ->$handler->toArray();
+        } else {
+            $recommend['noresults']
+                = isset($searchSettings->General->default_noresults_recommend)
+                ? $searchSettings->General->default_noresults_recommend
+                    ->toArray()
+                : false;
+        }
+
+        return $recommend;
+    }
+
     /**
      * Sleep magic method -- the translator can't be serialized, so we need to
      * exclude it from serialization.  Since we can't obtain a new one in the
@@ -720,6 +796,7 @@ abstract class Options implements TranslatorAwareInterface
     public function __sleep()
     {
         $vars = get_object_vars($this);
+        unset($vars['configLoader']);
         unset($vars['translator']);
         $vars = array_keys($vars);
         return $vars;
diff --git a/module/VuFind/src/VuFind/Search/Base/Params.php b/module/VuFind/src/VuFind/Search/Base/Params.php
index 2069b63f5ba1c330baff9b59558bf899b26dba00..6873b2f1ce9d83e592c4723f31d2ee0575c6d671 100644
--- a/module/VuFind/src/VuFind/Search/Base/Params.php
+++ b/module/VuFind/src/VuFind/Search/Base/Params.php
@@ -28,7 +28,8 @@
 namespace VuFind\Search\Base;
 use Zend\ServiceManager\ServiceLocatorAwareInterface,
     Zend\ServiceManager\ServiceLocatorInterface;
-use VuFindSearch\Backend\Solr\LuceneSyntaxHelper, VuFindSearch\Query\Query;
+use VuFindSearch\Backend\Solr\LuceneSyntaxHelper, VuFindSearch\Query\Query,
+    VuFindSearch\Query\QueryGroup;
 use VuFind\Search\QueryAdapter, VuFind\Solr\Utils as SolrUtils;
 
 /**
@@ -111,20 +112,6 @@ class Params implements ServiceLocatorAwareInterface
      */
     protected $options;
 
-    /**
-     * Recommendation settings
-     *
-     * @var array
-     */
-    protected $recommend = [];
-
-    /**
-     * Are recommendations turned on?
-     *
-     * @var bool
-     */
-    protected $recommendationEnabled = [];
-
     /**
      * Main facet configuration
      *
@@ -252,10 +239,6 @@ class Params implements ServiceLocatorAwareInterface
         $this->initSort($request);
         $this->initFilters($request);
 
-        // Always initialize recommendations last (since they rely on knowing
-        // other search settings that were set above).
-        $this->initRecommendations($request);
-
         // Remember the user's settings for future reference (we only want to do
         // this in initFromRequest, since other code may call the set methods from
         // other contexts!):
@@ -421,6 +404,26 @@ class Params implements ServiceLocatorAwareInterface
         $this->query = new Query($lookfor, $handler);
     }
 
+    /**
+     * Convert a basic query into an advanced query:
+     *
+     * @return void
+     */
+    public function convertToAdvancedSearch()
+    {
+        if ($this->searchType === 'basic') {
+            $this->query = new QueryGroup(
+                'AND', [new QueryGroup('AND', [$this->query])]
+            );
+            $this->searchType = 'advanced';
+        }
+        if ($this->searchType !== 'advanced') {
+            throw new \Exception(
+                'Unsupported search type: ' . $this->searchType
+            );
+        }
+    }
+
     /**
      * Support method for initSearch() -- handle advanced settings.  Advanced
      * searches have numeric subscripts on the lookfor and type parameters --
@@ -657,184 +660,6 @@ class Params implements ServiceLocatorAwareInterface
         return QueryAdapter::display($this->getQuery(), $translate, $showField);
     }
 
-    /**
-     * Get an array of recommendation objects for augmenting the results display.
-     *
-     * @param string $location Name of location to use as a filter (null to get
-     * associative array of all locations); legal non-null values: 'top', 'side'
-     *
-     * @return array
-     */
-    public function getRecommendations($location = 'top')
-    {
-        $enabled = $this->recommendationsEnabled();
-        if (null === $location) {
-            $active = [];
-            foreach ($enabled as $current) {
-                if (isset($this->recommend[$current])) {
-                    $active[$current] = $this->recommend[$current];
-                }
-            }
-            return $active;
-        }
-        return in_array($location, $enabled) && isset($this->recommend[$location])
-            ? $this->recommend[$location] : [];
-    }
-
-    /**
-     * Set the enabled status of recommendation modules -- it is often useful to turn
-     * off recommendations when retrieving results in a context other than standard
-     * display of results.
-     *
-     * @param bool|array $new New setting (true to enable all, false to disable all,
-     * array to set which areas are active, null to leave unchanged)
-     *
-     * @return array          Current active recommendation areas
-     */
-    public function recommendationsEnabled($new = null)
-    {
-        if (true === $new) {
-            $this->recommendationEnabled = ['top', 'side', 'noresults'];
-        } else if (false === $new) {
-            $this->recommendationEnabled = [];
-        } else if (null !== $new) {
-            $this->recommendationEnabled = $new;
-        }
-        return $this->recommendationEnabled;
-    }
-
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // Bypass settings if recommendations are disabled.
-        $enabled = $this->recommendationsEnabled();
-        if (empty($enabled)) {
-            return [];
-        }
-
-        // Load the necessary settings to determine the appropriate recommendations
-        // module:
-        $searchSettings = $this->getServiceLocator()->get('VuFind\Config')
-            ->get($this->getOptions()->getSearchIni());
-
-        // If we have a search type set, save it so we can try to load a
-        // type-specific recommendations module:
-        $handler = $this->getSearchHandler();
-
-        // Load a type-specific recommendations setting if possible, or the default
-        // otherwise:
-        $recommend = [];
-
-        if (in_array('top', $enabled)) {
-            if (null !== $handler
-                && isset($searchSettings->TopRecommendations->$handler)
-            ) {
-                $recommend['top'] = $searchSettings->TopRecommendations
-                    ->$handler->toArray();
-            } else {
-                $recommend['top']
-                    = isset($searchSettings->General->default_top_recommend)
-                    ? $searchSettings->General->default_top_recommend->toArray()
-                    : false;
-            }
-        }
-        if (in_array('side', $enabled)) {
-            if (null !== $handler
-                && isset($searchSettings->SideRecommendations->$handler)
-            ) {
-                $recommend['side'] = $searchSettings->SideRecommendations
-                    ->$handler->toArray();
-            } else {
-                $recommend['side']
-                    = isset($searchSettings->General->default_side_recommend)
-                    ? $searchSettings->General->default_side_recommend->toArray()
-                    : false;
-            }
-        }
-        if (in_array('noresults', $enabled)) {
-            if (null !== $handler
-                && isset($searchSettings->NoResultsRecommendations->$handler)
-            ) {
-                $recommend['noresults'] = $searchSettings->NoResultsRecommendations
-                    ->$handler->toArray();
-            } else {
-                $recommend['noresults']
-                    = isset($searchSettings->General->default_noresults_recommend)
-                    ? $searchSettings->General->default_noresults_recommend
-                        ->toArray()
-                    : false;
-            }
-        }
-
-        return $recommend;
-    }
-
-    /**
-     * Initialize the recommendations modules.
-     *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
-     * request.
-     *
-     * @return void
-     */
-    protected function initRecommendations($request)
-    {
-        // If no settings were found, quit now:
-        $settings = $this->getRecommendationSettings();
-        if (empty($settings)) {
-            return;
-        }
-
-        // Get the plugin manager (skip recommendations if it is unavailable):
-        $sm = $this->getServiceLocator();
-        if (!is_object($sm) || !$sm->has('VuFind\RecommendPluginManager')) {
-            return;
-        }
-        $manager = $sm->get('VuFind\RecommendPluginManager');
-
-        // Process recommendations for each location:
-        $this->recommend = [
-            'top' => [], 'side' => [], 'noresults' => [],
-            'bottom' => [],
-        ];
-        foreach ($settings as $location => $currentSet) {
-            // If the current location is disabled, skip processing!
-            if (empty($currentSet)) {
-                continue;
-            }
-            // Make sure the current location's set of recommendations is an array;
-            // if it's a single string, this normalization will simplify processing.
-            if (!is_array($currentSet)) {
-                $currentSet = [$currentSet];
-            }
-            // Now loop through all recommendation settings for the location.
-            foreach ($currentSet as $current) {
-                // Break apart the setting into module name and extra parameters:
-                $current = explode(':', $current);
-                $module = array_shift($current);
-                $params = implode(':', $current);
-                if (!$manager->has($module)) {
-                    throw new \Exception(
-                        'Could not load recommendation module: ' . $module
-                    );
-                }
-
-                // Build a recommendation module with the provided settings.
-                $obj = $manager->get($module);
-                $obj->setConfig($params);
-                $obj->init($this, $request);
-                $this->recommend[$location][] = $obj;
-            }
-        }
-    }
-
     /**
      * Parse apart the field and value from a URL filter string.
      *
@@ -844,6 +669,13 @@ class Params implements ServiceLocatorAwareInterface
      */
     public function parseFilter($filter)
     {
+        // Special case: complex filters cannot be split into field/value
+        // since they have multiple parts (e.g. field1:a OR field2:b). Use
+        // a fake "#" field to collect these types of filters.
+        if ($this->isAdvancedFilter($filter) == true) {
+            return ['#', $filter];
+        }
+
         // Split the string and assign the parts to $field and $value
         $temp = explode(':', $filter, 2);
         $field = array_shift($temp);
@@ -893,15 +725,33 @@ class Params implements ServiceLocatorAwareInterface
      */
     public function addFilter($newFilter)
     {
-        // Extract field and value from URL string:
-        list($field, $value) = $this->parseFilter($newFilter);
-
         // Check for duplicates -- if it's not in the array, we can add it
         if (!$this->hasFilter($newFilter)) {
+            // Extract field and value from filter string:
+            list($field, $value) = $this->parseFilter($newFilter);
             $this->filterList[$field][] = $value;
         }
     }
 
+    /**
+     * Detects if a filter is advanced (true) or simple (false). An advanced
+     * filter is currently defined as one surrounded by parentheses, while a
+     * simple filter is of the form field:value. Advanced filters are used to
+     * express more complex queries, such as combining multiple values from
+     * multiple fields using boolean operators.
+     *
+     * @param string $filter A filter string
+     *
+     * @return bool
+     */
+    public function isAdvancedFilter($filter)
+    {
+        if (substr($filter, 0, 1) == '(') {
+            return true;
+        }
+        return false;
+    }
+
     /**
      * Remove a filter from the list.
      *
diff --git a/module/VuFind/src/VuFind/Search/Base/Results.php b/module/VuFind/src/VuFind/Search/Base/Results.php
index ead46d04ca052891e8c82fa71006bf26bd404892..80bed2d0ea6cfd4a7da09eb535255a6945a132dd 100644
--- a/module/VuFind/src/VuFind/Search/Base/Results.php
+++ b/module/VuFind/src/VuFind/Search/Base/Results.php
@@ -126,6 +126,13 @@ abstract class Results implements ServiceLocatorAwareInterface
      */
     protected $suggestions = null;
 
+    /**
+     * Recommendations
+     *
+     * @var array
+     */
+    protected $recommend = [];
+
     /**
      * Search service.
      *
@@ -233,16 +240,6 @@ abstract class Results implements ServiceLocatorAwareInterface
         $this->startQueryTimer();
         $this->performSearch();
         $this->stopQueryTimer();
-
-        // Process recommendations:
-        $recommendations = $this->getParams()->getRecommendations(null);
-        if (is_array($recommendations)) {
-            foreach ($recommendations as $currentSet) {
-                foreach ($currentSet as $current) {
-                    $current->process($this);
-                }
-            }
-        }
     }
 
     /**
@@ -503,11 +500,22 @@ abstract class Results implements ServiceLocatorAwareInterface
      */
     public function getRecommendations($location = 'top')
     {
-        // Proxy the params object's getRecommendations call -- we need to set up
-        // the recommendations in the params object since they need to be
-        // query-aware, but from a caller's perspective, it makes more sense to
-        // pull them from the results object.
-        return $this->getParams()->getRecommendations($location);
+        if (null === $location) {
+            return $this->recommend;
+        }
+        return isset($this->recommend[$location]) ? $this->recommend[$location] : [];
+    }
+
+    /**
+     * Set the recommendation objects (see \VuFind\Search\RecommendListener).
+     *
+     * @param array $recommend Recommendations
+     *
+     * @return void
+     */
+    public function setRecommendations($recommend)
+    {
+        $this->recommend = $recommend;
     }
 
     /**
@@ -543,6 +551,8 @@ abstract class Results implements ServiceLocatorAwareInterface
         // Restore translator:
         $this->getOptions()
             ->setTranslator($serviceLocator->get('VuFind\Translator'));
+        $this->getOptions()
+            ->setConfigLoader($serviceLocator->get('VuFind\Config'));
         return $this;
     }
 
diff --git a/module/VuFind/src/VuFind/Search/Combined/Options.php b/module/VuFind/src/VuFind/Search/Combined/Options.php
index 52cd7d60a40e03ba1efeced083b37e31f669dca7..b13902bbb76fd3ff8f6767187a5fc8ac2c6ed2f2 100644
--- a/module/VuFind/src/VuFind/Search/Combined/Options.php
+++ b/module/VuFind/src/VuFind/Search/Combined/Options.php
@@ -47,4 +47,27 @@ class Options extends \VuFind\Search\Base\Options
     {
         return 'combined-results';
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        $recommend = [];
+        $config = $this->configLoader->get('combined');
+        foreach (['top', 'bottom'] as $location) {
+            if (isset($config->RecommendationModules->$location)) {
+                $recommend[$location]
+                    = $config->RecommendationModules->$location->toArray();
+            }
+        }
+        return $recommend;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Combined/Params.php b/module/VuFind/src/VuFind/Search/Combined/Params.php
index 8fa09345a39225cdc589eb761f22202448d7379a..c6b555f32d419213e50eaacdfb939ac31cfd1199 100644
--- a/module/VuFind/src/VuFind/Search/Combined/Params.php
+++ b/module/VuFind/src/VuFind/Search/Combined/Params.php
@@ -38,28 +38,4 @@ namespace VuFind\Search\Combined;
  */
 class Params extends \VuFind\Search\Solr\Params
 {
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        $enabled = $this->recommendationsEnabled();
-        $recommend = [];
-        $config = $this->getServiceLocator()->get('VuFind\Config')
-            ->get('combined');
-        foreach (['top', 'bottom'] as $location) {
-            if (in_array($location, $enabled)
-                && isset($config->RecommendationModules->$location)
-            ) {
-                $recommend[$location]
-                    = $config->RecommendationModules->$location->toArray();
-            }
-        }
-        return $recommend;
-    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
index c861f67bfd99b8ef24276abc9e956a8a770a651d..e62e1131001f2d01f0f14bd85fcd21506c7e1dc4 100644
--- a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
@@ -28,7 +28,10 @@
  */
 namespace VuFind\Search\Factory;
 
+use VuFind\Search\Solr\FilterFieldConversionListener;
+use VuFind\Search\Solr\HideFacetValueListener;
 use VuFind\Search\Solr\InjectHighlightingListener;
+use VuFind\Search\Solr\InjectConditionalFilterListener;
 use VuFind\Search\Solr\InjectSpellingListener;
 use VuFind\Search\Solr\MultiIndexListener;
 use VuFind\Search\Solr\V3\ErrorListener as LegacyErrorListener;
@@ -173,10 +176,18 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface
         // Load configurations:
         $config = $this->config->get('config');
         $search = $this->config->get($this->searchConfig);
+        $facet = $this->config->get($this->facetConfig);
 
         // Highlighting
         $this->getInjectHighlightingListener($backend, $search)->attach($events);
 
+        // Conditional Filters
+        if (isset($search->ConditionalHiddenFilters)
+            && $search->ConditionalHiddenFilters->count() > 0
+        ) {
+            $this->getInjectConditionalFilterListener($search)->attach($events);
+        }
+
         // Spellcheck
         if (isset($config->Spelling->enabled) && $config->Spelling->enabled) {
             if (isset($config->Spelling->simple) && $config->Spelling->simple) {
@@ -204,15 +215,29 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface
         }
 
         // Apply deduplication if applicable:
-        if (isset($search->Records->deduplication)
-            && $search->Records->deduplication
-        ) {
-            $this->getDeduplicationListener($backend)->attach($events);
+        if (isset($search->Records->deduplication)) {
+            $this->getDeduplicationListener(
+                $backend, $search->Records->deduplication
+            )->attach($events);
         }
 
         // Attach hierarchical facet listener:
         $this->getHierarchicalFacetListener($backend)->attach($events);
 
+        // Apply legacy filter conversion if necessary:
+        $facets = $this->config->get($this->facetConfig);
+        if (!empty($facets->LegacyFields)) {
+            $filterFieldConversionListener = new FilterFieldConversionListener(
+                $facets->LegacyFields->toArray()
+            );
+            $filterFieldConversionListener->attach($events);
+        }
+
+        // Attach hide facet value listener:
+        if ($hfvListener = $this->getHideFacetValueListener($backend, $facet)) {
+            $hfvListener->attach($events);
+        }
+
         // Attach error listeners for Solr 3.x and Solr 4.x (for backward
         // compatibility with VuFind 1.x instances).
         $legacyErrorListener = new LegacyErrorListener($backend);
@@ -352,15 +377,41 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface
      * Get a deduplication listener for the backend
      *
      * @param BackendInterface $backend Search backend
+     * @param bool             $enabled Whether deduplication is enabled
      *
      * @return DeduplicationListener
      */
-    protected function getDeduplicationListener(BackendInterface $backend)
+    protected function getDeduplicationListener(BackendInterface $backend, $enabled)
     {
         return new DeduplicationListener(
             $backend,
             $this->serviceLocator,
-            $this->searchConfig
+            $this->searchConfig,
+            'datasources',
+            $enabled
+        );
+    }
+
+    /**
+    * Get a hide facet value listener for the backend
+    *
+    * @param BackendInterface $backend Search backend
+    * @param Config           $facet   Configuration of facets
+    *
+    * @return mixed null|HideFacetValueListener
+    */
+    protected function getHideFacetValueListener(
+        BackendInterface $backend,
+        Config $facet
+    ) {
+        if (!isset($facet->HideFacetValue)
+            || ($facet->HideFacetValue->count()) == 0
+        ) {
+            return null;
+        }
+        return new HideFacetValueListener(
+            $backend,
+            $facet->HideFacetValue->toArray()
         );
     }
 
@@ -395,4 +446,22 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface
             ? $search->General->highlighting_fields : '*';
         return new InjectHighlightingListener($backend, $fl);
     }
+
+    /**
+     * Get a Conditional Filter Listener
+     *
+     * @param Config $search Search configuration
+     *
+     * @return InjectConditionalFilterListener
+     */
+    protected function getInjectConditionalFilterListener(Config $search)
+    {
+        $listener = new InjectConditionalFilterListener(
+            $search->ConditionalHiddenFilters->toArray()
+        );
+        $listener->setAuthorizationService(
+            $this->serviceLocator->get('ZfcRbac\Service\AuthorizationService')
+        );
+        return $listener;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Options.php b/module/VuFind/src/VuFind/Search/Favorites/Options.php
index 1bdd53f33cf92b99b8d9e9b79e33b3130078aefd..cf794559b6e89cbd4bc88e40056c9a58ee1e7ae9 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Options.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Options.php
@@ -63,4 +63,19 @@ class Options extends \VuFind\Search\Base\Options
     {
         return 'myresearch-favorites';
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        return ['side' => 'FavoriteFacets'];
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Params.php b/module/VuFind/src/VuFind/Search/Favorites/Params.php
index 90abd863104fb4e0c67f919ba124be14dfa8ea54..53f89769f8fc416c5b33080424ebebb2c92f5156 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Params.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Params.php
@@ -38,13 +38,6 @@ namespace VuFind\Search\Favorites;
  */
 class Params extends \VuFind\Search\Base\Params
 {
-    /**
-     * Auth manager
-     *
-     * @var \VuFind\Auth\Manager
-     */
-    protected $account;
-
     /**
      * Constructor
      *
@@ -54,20 +47,6 @@ class Params extends \VuFind\Search\Base\Params
     public function __construct($options, \VuFind\Config\PluginManager $configLoader)
     {
         parent::__construct($options, $configLoader);
-        $this->recommendationsEnabled(true);
-    }
-
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        return ['side' => 'FavoriteFacets'];
     }
 
     /**
@@ -89,26 +68,4 @@ class Params extends \VuFind\Search\Base\Params
         // Otherwise use standard parent behavior:
         return parent::initFilters($request);
     }
-
-    /**
-     * Get account manager.
-     *
-     * @return \VuFind\Auth\Manager
-     */
-    public function getAuthManager()
-    {
-        return $this->account;
-    }
-
-    /**
-     * Inject dependency: account manager.
-     *
-     * @param \VuFind\Auth\Manager $account Auth manager object.
-     *
-     * @return void
-     */
-    public function setAuthManager($account)
-    {
-        $this->account = $account;
-    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Results.php b/module/VuFind/src/VuFind/Search/Favorites/Results.php
index 8dd48a49640471f37d2a38058c343ef35a593728..da1c30b858bfcf191bc34f972856b7c178a7284a 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Results.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Results.php
@@ -27,7 +27,9 @@
  */
 namespace VuFind\Search\Favorites;
 use VuFind\Exception\ListPermission as ListPermissionException,
-    VuFind\Search\Base\Results as BaseResults;
+    VuFind\Search\Base\Results as BaseResults,
+    ZfcRbac\Service\AuthorizationServiceAwareInterface,
+    ZfcRbac\Service\AuthorizationServiceAwareTrait;
 
 /**
  * Search Favorites Results
@@ -39,7 +41,10 @@ use VuFind\Exception\ListPermission as ListPermissionException,
  * @link     http://vufind.org   Main Site
  */
 class Results extends BaseResults
+    implements AuthorizationServiceAwareInterface
 {
+    use AuthorizationServiceAwareTrait;
+
     /**
      * Object if user is logged in, false otherwise.
      *
@@ -120,8 +125,8 @@ class Results extends BaseResults
     protected function performSearch()
     {
         $list = $this->getListObject();
-        $account = $this->getParams()->getAuthManager();
-        $this->user = $account ? $account->isLoggedIn() : false;
+        $auth = $this->getAuthorizationService();
+        $this->user = $auth ? $auth->getIdentity() : false;
 
         // Make sure the user and/or list objects make it possible to view
         // the current result set -- we need to check logged in status and
diff --git a/module/VuFind/src/VuFind/Search/MixedList/Options.php b/module/VuFind/src/VuFind/Search/MixedList/Options.php
index 6cef2642a44efed69f1591b494506b3b28126f04..68094e824c3018083315af4b6e8a27d83b4fe063 100644
--- a/module/VuFind/src/VuFind/Search/MixedList/Options.php
+++ b/module/VuFind/src/VuFind/Search/MixedList/Options.php
@@ -47,4 +47,20 @@ class Options extends \VuFind\Search\Base\Options
     {
         return 'records-home';
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // No recommendation modules in mixed list view currently:
+        return [];
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/MixedList/Params.php b/module/VuFind/src/VuFind/Search/MixedList/Params.php
index 333c39c0cfebc769946c0b8b49d3a84f4caa62af..554cdb3e80a2cff488d862190852f630e48dbce0 100644
--- a/module/VuFind/src/VuFind/Search/MixedList/Params.php
+++ b/module/VuFind/src/VuFind/Search/MixedList/Params.php
@@ -70,18 +70,4 @@ class Params extends \VuFind\Search\Base\Params
     {
         return $this->recordsToRequest;
     }
-
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // No recommendation modules in mixed list view currently:
-        return [];
-    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/RecommendListener.php b/module/VuFind/src/VuFind/Search/RecommendListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..af4811c490929a21b3ea13fb488191bb230e1cb7
--- /dev/null
+++ b/module/VuFind/src/VuFind/Search/RecommendListener.php
@@ -0,0 +1,194 @@
+<?php
+
+/**
+ * Recommend listener.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2013.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Search;
+
+use VuFind\Recommend\PluginManager, VuFind\Search\SearchRunner;
+use Zend\EventManager\SharedEventManagerInterface;
+use Zend\EventManager\EventInterface;
+
+/**
+ * Recommend listener.
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class RecommendListener
+{
+    /**
+     * Recommendation configuration.
+     *
+     * @var array
+     */
+    protected $config = [];
+
+    /**
+     * Recommendation modules, indexed by location.
+     *
+     * @var array
+     */
+    protected $objects = [];
+
+    /**
+     * Recommendation module plugin manager.
+     *
+     * @var PluginManager
+     */
+    protected $pluginManager;
+
+    /**
+     * The ID of the search for which this listener should respond. Value is set
+     * by \VuFind\Search\SearchRunner and makes sure that each search run by the
+     * runner is handled by its own independent RecommendListener. Otherwise,
+     * the wrong recommendations might be injected into the wrong objects!
+     *
+     * @var int
+     */
+    protected $searchId;
+
+    /**
+     * Constructor.
+     *
+     * @param PluginManager $pluginManager Plugin manager for recommendation
+     * modules
+     * @param int           $searchId      The ID of the search for which this
+     * listener should respond
+     */
+    public function __construct(PluginManager $pluginManager, $searchId)
+    {
+        $this->pluginManager = $pluginManager;
+        $this->searchId = $searchId;
+    }
+
+    /**
+     * Attach listener to shared event manager.
+     *
+     * @param SharedEventManagerInterface $manager Shared event manager
+     *
+     * @return void
+     */
+    public function attach(SharedEventManagerInterface $manager)
+    {
+        $manager->attach(
+            'VuFind\Search\SearchRunner', SearchRunner::EVENT_CONFIGURED,
+            [$this, 'onSearchConfigured']
+        );
+        $manager->attach(
+            'VuFind\Search\SearchRunner', SearchRunner::EVENT_COMPLETE,
+            [$this, 'onSearchComplete']
+        );
+    }
+
+    /**
+     * Set configuration
+     *
+     * @param array $config Configuration array
+     *
+     * @return void
+     */
+    public function setConfig($config)
+    {
+        $this->config = $config;
+    }
+
+    /**
+     * Set up recommendation modules.
+     *
+     * @param EventInterface $event Event
+     *
+     * @return EventInterface
+     */
+    public function onSearchConfigured(EventInterface $event)
+    {
+        // Make sure we're triggering in the appropriate context:
+        if ($this->searchId != $event->getParam('runningSearchId')) {
+            return;
+        }
+        $params = $event->getParam('params');
+        $request = $event->getParam('request');
+
+        // Process recommendations for each location:
+        $this->objects = [
+            'top' => [], 'side' => [], 'noresults' => [],
+            'bottom' => [],
+        ];
+        foreach ($this->config as $location => $currentSet) {
+            // If the current location is disabled, skip processing!
+            if (empty($currentSet)) {
+                continue;
+            }
+            // Now loop through all recommendation settings for the location.
+            foreach ((array)$currentSet as $current) {
+                // Break apart the setting into module name and extra parameters:
+                $current = explode(':', $current);
+                $module = array_shift($current);
+                $config = implode(':', $current);
+                if (!$this->pluginManager->has($module)) {
+                    throw new \Exception(
+                        'Could not load recommendation module: ' . $module
+                    );
+                }
+
+                // Build a recommendation module with the provided settings.
+                $obj = $this->pluginManager->get($module);
+                $obj->setConfig($config);
+                $obj->init($params, $request);
+                $this->objects[$location][] = $obj;
+            }
+        }
+
+        return $event;
+    }
+
+    /**
+     * Inject additional spelling suggestions.
+     *
+     * @param EventInterface $event Event
+     *
+     * @return EventInterface
+     */
+    public function onSearchComplete(EventInterface $event)
+    {
+        // Make sure we're triggering in the appropriate context:
+        if ($this->searchId != $event->getParam('runningSearchId')) {
+            return;
+        }
+        $results = $event->getParam('results');
+        // Process recommendations:
+        foreach ($this->objects as $currentSet) {
+            foreach ($currentSet as $current) {
+                $current->process($results);
+            }
+        }
+        $results->setRecommendations($this->objects);
+        return $event;
+    }
+}
diff --git a/module/VuFind/src/VuFind/Search/Results/Factory.php b/module/VuFind/src/VuFind/Search/Results/Factory.php
index d97123075bd030017126ff994683a935d402a38e..c4f9f1db76283fc62e3b5aef0f99df2c27a97a8f 100644
--- a/module/VuFind/src/VuFind/Search/Results/Factory.php
+++ b/module/VuFind/src/VuFind/Search/Results/Factory.php
@@ -41,6 +41,22 @@ use Zend\ServiceManager\ServiceManager;
  */
 class Factory
 {
+    /**
+     * Factory for Favorites results object.
+     *
+     * @param ServiceManager $sm Service manager.
+     *
+     * @return Favorites
+     */
+    public static function getFavorites(ServiceManager $sm)
+    {
+        $factory = new PluginFactory();
+        $obj = $factory->createServiceWithName($sm, 'favorites', 'Favorites');
+        $init = new \ZfcRbac\Initializer\AuthorizationServiceInitializer();
+        $init->initialize($obj, $sm);
+        return $obj;
+    }
+
     /**
      * Factory for Solr results object.
      *
diff --git a/module/VuFind/src/VuFind/Search/SearchRunner.php b/module/VuFind/src/VuFind/Search/SearchRunner.php
new file mode 100644
index 0000000000000000000000000000000000000000..26284d190d755738c6ca99c1b8bf03873db48500
--- /dev/null
+++ b/module/VuFind/src/VuFind/Search/SearchRunner.php
@@ -0,0 +1,182 @@
+<?php
+/**
+ * VuFind Search Runner
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+namespace VuFind\Search;
+use VuFind\Search\Results\PluginManager as ResultsManager;
+use Zend\EventManager\EventManagerInterface;
+use Zend\EventManager\EventManager;
+use Zend\Stdlib\Parameters;
+
+/**
+ * VuFind Search Runner
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+class SearchRunner
+{
+    /**
+     * Event identifiers.
+     *
+     * @var string
+     */
+    const EVENT_CONFIGURED = 'configured';
+    const EVENT_COMPLETE = 'complete';
+
+    /**
+     * Event manager.
+     *
+     * @var EventManager
+     */
+    protected $events = null;
+
+    /**
+     * Search results object manager.
+     *
+     * @var ResultsManager
+     */
+    protected $resultsManager;
+
+    /**
+     * Counter of how many searches we have run (for differentiating listeners).
+     *
+     * @var int
+     */
+    protected $searchId = 0;
+
+    /**
+     * Constructor
+     *
+     * @param ResultsManager $resultsManager Results manager
+     */
+    public function __construct(ResultsManager $resultsManager)
+    {
+        $this->resultsManager = $resultsManager;
+    }
+
+    /**
+     * Run the search.
+     *
+     * @param array|Parameters $rawRequest    Incoming parameters for search
+     * @param string           $searchClassId Type of search to perform
+     * @param mixed            $setupCallback Optional callback for setting up params
+     * and attaching listeners; if provided, will be passed three parameters:
+     * this object, the search parameters object, and a unique identifier for
+     * the current running search.
+     *
+     * @return \VuFind\Search\Base\Results
+     *
+     * @throws \VuFindSearch\Backend\Exception\BackendException
+     */
+    public function run($rawRequest, $searchClassId = 'Solr', $setupCallback = null)
+    {
+        // Increment the ID counter, then save the current value to a variable;
+        // since events within this run could theoretically trigger additional
+        // runs of the SearchRunner, we can't rely on the property value past
+        // this point!
+        $this->searchId++;
+        $runningSearchId = $this->searchId;
+
+        // Format the request object:
+        $request = $rawRequest instanceof Parameters
+            ? $rawRequest
+            : new Parameters(is_array($rawRequest) ? $rawRequest : []);
+
+        // Set up the search:
+        $results = $this->resultsManager->get($searchClassId);
+        $params = $results->getParams();
+        $params->initFromRequest($request);
+
+        if (is_callable($setupCallback)) {
+            $setupCallback($this, $params, $runningSearchId);
+        }
+
+        // Trigger the "configuration done" event.
+        $this->getEventManager()->trigger(
+            self::EVENT_CONFIGURED, $this,
+            compact('params', 'request', 'runningSearchId')
+        );
+
+        // Attempt to perform the search; if there is a problem, inspect any Solr
+        // exceptions to see if we should communicate to the user about them.
+        try {
+            // Explicitly execute search within controller -- this allows us to
+            // catch exceptions more reliably:
+            $results->performAndProcessSearch();
+        } catch (\VuFindSearch\Backend\Exception\BackendException $e) {
+            if ($e->hasTag('VuFind\Search\ParserError')) {
+                // We need to create and process an "empty results" object to
+                // ensure that recommendation modules and templates behave
+                // properly when displaying the error message.
+                $results = $this->resultsManager->get('EmptySet');
+                $results->setParams($params);
+                $results->performAndProcessSearch();
+            } else {
+                throw $e;
+            }
+        }
+
+        // Trigger the "search completed" event.
+        $this->getEventManager()->trigger(
+            self::EVENT_COMPLETE, $this, compact('results', 'runningSearchId')
+        );
+
+        return $results;
+    }
+
+    /**
+     * Set EventManager instance.
+     *
+     * @param EventManagerInterface $events Event manager
+     *
+     * @return void
+     * @todo   Deprecate `VuFind\Search' event namespace (2.2)
+     */
+    public function setEventManager(EventManagerInterface $events)
+    {
+        $events->setIdentifiers([__CLASS__]);
+        $this->events = $events;
+    }
+
+    /**
+     * Return EventManager instance.
+     *
+     * Lazy loads a new EventManager if none was set.
+     *
+     * @return EventManagerInterface
+     */
+    public function getEventManager()
+    {
+        if (!$this->events) {
+            $this->setEventManager(new EventManager());
+        }
+        return $this->events;
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
index 282d9037694b20768d8c38eb0ac23178f5551754..886c04e5b3cf3d25522f2ca08af8256852d04a10 100644
--- a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
@@ -76,6 +76,13 @@ class DeduplicationListener
      */
     protected $dataSourceConfig;
 
+    /**
+     * Whether deduplication is enabled.
+     *
+     * @var bool
+     */
+    protected $enabled;
+
     /**
      * Constructor.
      *
@@ -83,18 +90,21 @@ class DeduplicationListener
      * @param ServiceLocatorInterface $serviceLocator   Service locator
      * @param string                  $searchConfig     Search config file id
      * @param string                  $dataSourceConfig Data source file id
+     * @param bool                    $enabled          Whether deduplication is
+     * enabled
      *
      * @return void
      */
     public function __construct(
         BackendInterface $backend,
         ServiceLocatorInterface $serviceLocator,
-        $searchConfig, $dataSourceConfig = 'datasources'
+        $searchConfig, $dataSourceConfig = 'datasources', $enabled = true
     ) {
         $this->backend = $backend;
         $this->serviceLocator = $serviceLocator;
         $this->searchConfig = $searchConfig;
         $this->dataSourceConfig = $dataSourceConfig;
+        $this->enabled = $enabled;
     }
 
     /**
@@ -125,7 +135,18 @@ class DeduplicationListener
             $params = $event->getParam('params');
             $context = $event->getParam('context');
             if (($context == 'search' || $context == 'similar') && $params) {
-                $params->add('fq', '-merged_child_boolean:TRUE');
+                // If deduplication is enabled, filter out merged child records,
+                // otherwise filter out dedup records.
+                if ($this->enabled) {
+                    $fq = '-merged_child_boolean:true';
+                    if ($context == 'similar' && $id = $event->getParam('id')) {
+                        $fq .= ' AND -local_ids_str_mv:"'
+                            . addcslashes($id, '"') . '"';
+                    }
+                } else {
+                    $fq = '-merged_boolean:true';
+                }
+                $params->add('fq', $fq);
             }
         }
         return $event;
@@ -147,7 +168,7 @@ class DeduplicationListener
             return $event;
         }
         $context = $event->getParam('context');
-        if ($context == 'search') {
+        if ($this->enabled && ($context == 'search' || $context == 'similar')) {
             $this->fetchLocalRecords($event);
         }
         return $event;
@@ -269,6 +290,7 @@ class DeduplicationListener
                 $sourcePriority
             );
             $foundLocalRecord->setRawData($localRecordData);
+            $foundLocalRecord->setHighlightDetails($record->getHighlightDetails());
             $result->replace($record, $foundLocalRecord);
         }
     }
diff --git a/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php b/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..8906d0a8e1a36a54055aaa7387e33d37d6b2bb69
--- /dev/null
+++ b/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * Listener to convert one field to another in filters (for legacy purposes).
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2013.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Search\Solr;
+
+use Zend\EventManager\SharedEventManagerInterface;
+use Zend\EventManager\EventInterface;
+
+/**
+ * Listener to convert one field to another in filters (for legacy purposes).
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class FilterFieldConversionListener
+{
+    /**
+     * Map of old field => new field.
+     *
+     * @var array
+     */
+    protected $map;
+
+    /**
+     * Constructor.
+     *
+     * @param array $map Map of old field => new field.
+     *
+     * @return void
+     */
+    public function __construct(array $map)
+    {
+        $this->map = $map;
+    }
+
+    /**
+     * Attach listener to shared event manager.
+     *
+     * @param SharedEventManagerInterface $manager Shared event manager
+     *
+     * @return void
+     */
+    public function attach(SharedEventManagerInterface $manager)
+    {
+        $manager->attach('VuFind\Search', 'pre', [$this, 'onSearchPre']);
+    }
+
+    /**
+     * Set up conditional hidden filters.
+     *
+     * @param EventInterface $event Event
+     *
+     * @return EventInterface
+     */
+    public function onSearchPre(EventInterface $event)
+    {
+        $params = $event->getParam('params');
+        $fq = $params->get('fq');
+        if (is_array($fq) && !empty($fq)) {
+            // regex lookahead to ignore strings inside quotes:
+            $lookahead = '(?=(?:[^\"]*+\"[^\"]*+\")*+[^\"]*+$)';
+            $new_fq = [];
+            foreach ($fq as $currentFilter) {
+                foreach ($this->map as $oldField => $newField) {
+                    $currentFilter = preg_replace(
+                        "/\b$oldField:$lookahead/", "$newField:", $currentFilter
+                    );
+                }
+                $new_fq[] = $currentFilter;
+            }
+            $params->set('fq', $new_fq);
+        }
+
+        return $event;
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php b/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c7672839afaed63722a0b881241fedb87c14b22
--- /dev/null
+++ b/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Hide values of facet for displaying
+ *
+ * PHP version 5
+ *
+ * Copyright (C) The National Library of Finland 2014.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Frank Morgner <morgnerf@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Search\Solr;
+
+use VuFindSearch\Backend\BackendInterface;
+use Zend\EventManager\SharedEventManagerInterface;
+use Zend\EventManager\EventInterface;
+
+/**
+ * Hide single facet values from displaying.
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Frank Morgner <morgnerf@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class HideFacetValueListener
+{
+    /**
+     * Backend.
+     *
+     * @var BackendInterface
+     */
+    protected $backend;
+
+    /**
+     * List of facets to hide.
+     *
+     * @var array
+     */
+    protected $hideFacets = [];
+
+    /**
+     * Constructor.
+     *
+     * @param BackendInterface $backend         Search backend
+     * @param array            $hideFacetValues Facet config file id
+     */
+    public function __construct(
+        BackendInterface $backend,
+        array $hideFacetValues
+    ) {
+        $this->backend = $backend;
+        $this->hideFacets = $hideFacetValues;
+    }
+
+    /**
+     * Attach listener to shared event manager.
+     *
+     * @param SharedEventManagerInterface $manager Shared event manager
+     *
+     * @return void
+     */
+    public function attach(
+        SharedEventManagerInterface $manager
+    ) {
+        $manager->attach('VuFind\Search', 'post', [$this, 'onSearchPost']);
+    }
+
+    /**
+     * Hide facet values from display
+     *
+     * @param EventInterface $event Event
+     *
+     * @return EventInterface
+     */
+    public function onSearchPost(EventInterface $event)
+    {
+        $backend = $event->getParam('backend');
+
+        if ($backend != $this->backend->getIdentifier()) {
+            return $event;
+        }
+        $context = $event->getParam('context');
+        if ($context == 'search' || $context == 'retrieve') {
+            $this->processHideFacetValue($event);
+        }
+        return $event;
+    }
+
+    /**
+     * Process hide facet value
+     *
+     * @param EventInterface $event Event
+     *
+     * @return void
+     */
+    protected function processHideFacetValue($event)
+    {
+        $result = $event->getTarget();
+        $facets = $result->getFacets()->getFieldFacets();
+
+        foreach ($this->hideFacets as $facet => $value) {
+            if (isset($facets[$facet])) {
+                foreach ((array)$value as $config_value) {
+                    foreach ($facets[$facet] as $facet_value => $count) {
+                        if ($facet_value == $config_value) {
+                            $facets[$facet]->remove();
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php
index 013ecc81a4e1475458d3061b072b23fa7350b5ca..7b62c2b269cc57174fa7f362c770f8d0168e304f 100644
--- a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php
+++ b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php
@@ -27,6 +27,8 @@
  */
 namespace VuFind\Search\Solr;
 
+use \VuFind\I18n\TranslatableString;
+
 /**
  * Functions for manipulating facets
  *
@@ -151,21 +153,23 @@ class HierarchicalFacetHelper
      * the current one
      * @param string $separator   Separator string displayed between levels
      *
-     * @return string Formatted text
+     * @return TranslatableString Formatted text
      */
     public function formatDisplayText(
         $displayText, $allLevels = false, $separator = '/'
     ) {
+        $originalText = $displayText;
         $parts = explode('/', $displayText);
         if (count($parts) > 1 && is_numeric($parts[0])) {
             if (!$allLevels && isset($parts[$parts[0] + 1])) {
-                return $parts[$parts[0] + 1];
+                $displayText = $parts[$parts[0] + 1];
+            } else {
+                array_shift($parts);
+                array_pop($parts);
+                $displayText = implode($separator, $parts);
             }
-            array_shift($parts);
-            array_pop($parts);
-            return implode($separator, $parts);
         }
-        return $displayText;
+        return new TranslatableString($originalText, $displayText);
     }
 
     /**
@@ -203,7 +207,8 @@ class HierarchicalFacetHelper
         $displayText = $item['displayText'];
         if ($displayText == $item['value']) {
             // Only show the current level part
-            $displayText = $this->formatDisplayText($displayText);
+            $displayText = $this->formatDisplayText($displayText)
+                ->getDisplayString();
         }
 
         list($level, $value) = explode('/', $item['value'], 2);
diff --git a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
index b60d50365746005918d66286cadd1fbff1624872..5bf8f765388250755c0ad6640e9556230906aa3e 100644
--- a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
@@ -35,7 +35,6 @@ use VuFindSearch\Backend\BackendInterface;
 use Zend\EventManager\SharedEventManagerInterface;
 use Zend\EventManager\EventInterface;
 use Zend\ServiceManager\ServiceLocatorInterface;
-use Zend\I18n\Translator\TranslatorInterface;
 
 /**
  * Solr hierarchical facet handling listener.
@@ -77,13 +76,6 @@ class HierarchicalFacetListener
      */
     protected $facetHelper;
 
-    /**
-     * Translator.
-     *
-     * @var TranslatorInterface
-     */
-    protected $translator;
-
     /**
      * Translated facets.
      *
@@ -127,7 +119,6 @@ class HierarchicalFacetListener
         $this->facetHelper
             = $this->serviceLocator->get('VuFind\HierarchicalFacetHelper');
 
-        $this->translator = $this->serviceLocator->get('VuFind\Translator');
         $this->translatedFacets
             = isset($this->facetConfig->Advanced_Settings->translated_facets)
             ? $this->facetConfig->Advanced_Settings->translated_facets->toArray()
@@ -196,25 +187,14 @@ class HierarchicalFacetListener
                 if (!isset($fields[$facetName])) {
                     continue;
                 }
-                // Keep the original data too
-                $fields["__unprocessed_$facetName"] = $fields[$facetName];
                 if (is_array($fields[$facetName])) {
-                    // If full facet display style is used, discard all but the
-                    // most significant value
-                    if (isset($this->displayStyles[$facetName])
-                        && $this->displayStyles[$facetName] == 'full'
-                    ) {
-                        $fields[$facetName] = [
-                            $this->formatFacetField(
-                                $facetName, end($fields[$facetName])
-                            )
-                        ];
-                    } else {
-                        foreach ($fields[$facetName] as &$value) {
-                            $value = $this->formatFacetField($facetName, $value);
-                        }
-                        $fields[$facetName] = array_unique($fields[$facetName]);
+                    $lastElem = end($fields[$facetName]);
+                    foreach ($fields[$facetName] as &$value) {
+                        $value = $this->formatFacetField(
+                            $facetName, $value, $value == $lastElem
+                        );
                     }
+                    $fields[$facetName] = array_unique($fields[$facetName]);
                 } else {
                     $fields[$facetName]
                         = $this->formatFacetField($facetName, $fields[$facetName]);
@@ -230,15 +210,12 @@ class HierarchicalFacetListener
      *
      * @param string $facet Facet field
      * @param string $value Facet value
+     * @param bool   $last  Whether this is the last of multiple values
      *
      * @return string Formatted field
      */
-    protected function formatFacetField($facet, $value)
+    protected function formatFacetField($facet, $value, $last)
     {
-        if (in_array($facet, $this->translatedFacets)) {
-            $value = $this->translator->translate($value);
-        }
-
         $allLevels = isset($this->displayStyles[$facet])
             ? $this->displayStyles[$facet] == 'full'
             : false;
@@ -249,6 +226,12 @@ class HierarchicalFacetListener
             $value, $allLevels, $separator
         );
 
+        // If full display style is used, clear out default display text for all but
+        // the last value:
+        if ($allLevels && !$last) {
+            $value = new \VuFind\I18n\TranslatableString((string)$value, '');
+        }
+
         return $value;
     }
 }
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..74c69d3c0bf508f866e729601ab90c80959d1a7f
--- /dev/null
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Conditional Filter listener.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2013.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFind\Search\Solr;
+
+use Zend\EventManager\SharedEventManagerInterface;
+use Zend\EventManager\EventInterface;
+
+use ZfcRbac\Service\AuthorizationServiceAwareInterface,
+    ZfcRbac\Service\AuthorizationServiceAwareTrait;
+
+/**
+ * Conditional Filter listener.
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class InjectConditionalFilterListener
+{
+    use AuthorizationServiceAwareTrait;
+
+    /**
+     * Filters to apply.
+     *
+     * @var array
+     */
+    protected $filterList;
+
+    /**
+     * Filters from configuration.
+     *
+     * @var array
+     */
+    protected $filters;
+
+    /**
+     * Constructor.
+     *
+     * @param array $searchConf Search configuration parameters
+     *
+     * @return void
+     */
+    public function __construct($searchConf)
+    {
+        $this->filters = $searchConf;
+        $this->filterList = [];
+    }
+
+    /**
+     * Attach listener to shared event manager.
+     *
+     * @param SharedEventManagerInterface $manager Shared event manager
+     *
+     * @return void
+     */
+    public function attach(SharedEventManagerInterface $manager)
+    {
+        $manager->attach('VuFind\Search', 'pre', [$this, 'onSearchPre']);
+    }
+
+    /**
+     * Add a conditional filter.
+     *
+     * @param String $configOption Conditional Filter
+     *
+     * @return void
+     */
+    protected function addConditionalFilter($configOption)
+    {
+        $filterArr = explode('|', $configOption);
+        $filterCondition = $filterArr[0];
+        $filter = $filterArr[1];
+        $authService = $this->getAuthorizationService();
+
+        // if no authorization service is available, don't do anything
+        if (!$authService) {
+            return;
+        }
+
+        // if the filter condition starts with a minus (-), it should not match
+        // to get the filter applied
+        if (substr($filterCondition, 0, 1) == '-') {
+            if (!$authService->isGranted(substr($filterCondition, 1))) {
+                $this->filterList[] = $filter;
+            }
+        } else {
+            // otherwise the condition should match to apply the filter
+            if ($authService->isGranted($filterCondition)) {
+                $this->filterList[] = $filter;
+            }
+        }
+    }
+
+    /**
+     * Set up conditional hidden filters.
+     *
+     * @param EventInterface $event Event
+     *
+     * @return EventInterface
+     */
+    public function onSearchPre(EventInterface $event)
+    {
+        // Add conditional filters
+        foreach ($this->filters as $fc) {
+            $this->addConditionalFilter($fc);
+        }
+
+        $params = $event->getParam('params');
+        $fq = $params->get('fq');
+        if (!is_array($fq)) {
+            $fq = [];
+        }
+        $new_fq = array_merge($fq, $this->filterList);
+        $params->set('fq', $new_fq);
+
+        return $event;
+    }
+
+}
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
index 3652c9ffbbb240c6eca45227afbd8228094187cf..f9343beb5157c539dc486491bc6fdba14fe5eb4e 100644
--- a/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
@@ -101,6 +101,9 @@ class InjectHighlightingListener
      */
     public function onSearchPre(EventInterface $event)
     {
+        if ($event->getParam('context') != 'search') {
+            return $event;
+        }
         $backend = $event->getTarget();
         if ($backend === $this->backend) {
             $params = $event->getParam('params');
@@ -132,8 +135,8 @@ class InjectHighlightingListener
      */
     public function onSearchPost(EventInterface $event)
     {
-        // Do nothing if highlighting is disabled....
-        if (!$this->active) {
+        // Do nothing if highlighting is disabled or context is wrong
+        if (!$this->active || $event->getParam('context') != 'search') {
             return $event;
         }
 
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
index 7491b40cc046f40aa2e281d761ea04ad4df18157..312df10ae77483209477308f64e7b54eeca4425f 100644
--- a/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
@@ -109,6 +109,9 @@ class InjectSpellingListener
      */
     public function onSearchPre(EventInterface $event)
     {
+        if ($event->getParam('context') != 'search') {
+            return $event;
+        }
         $backend = $event->getTarget();
         if ($backend === $this->backend) {
             $params = $event->getParam('params');
@@ -148,8 +151,8 @@ class InjectSpellingListener
      */
     public function onSearchPost(EventInterface $event)
     {
-        // Do nothing if spelling is disabled....
-        if (!$this->active) {
+        // Do nothing if spelling is disabled or context is wrong
+        if (!$this->active || $event->getParam('context') != 'search') {
             return $event;
         }
 
diff --git a/module/VuFind/src/VuFind/Search/Solr/Options.php b/module/VuFind/src/VuFind/Search/Solr/Options.php
index c851c81aa3083f2d5407f759082096cffa5c8cd4..efb5cbc75f62e6f234118a3350bc54e9745281ca 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Options.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Options.php
@@ -59,6 +59,13 @@ class Options extends \VuFind\Search\Base\Options
      */
     protected $hierarchicalFacetSeparators = [];
 
+    /**
+     * Relevance sort override for empty searches
+     *
+     * @var string
+     */
+    protected $emptySearchRelevanceOverride = null;
+
     /**
      * Constructor
      *
@@ -78,6 +85,10 @@ class Options extends \VuFind\Search\Base\Options
         if (isset($searchSettings->General->default_sort)) {
             $this->defaultSort = $searchSettings->General->default_sort;
         }
+        if (isset($searchSettings->General->empty_search_relevance_override)) {
+            $this->emptySearchRelevanceOverride
+                = $searchSettings->General->empty_search_relevance_override;
+        }
         if (isset($searchSettings->DefaultSortingByType)
             && count($searchSettings->DefaultSortingByType) > 0
         ) {
@@ -252,6 +263,16 @@ class Options extends \VuFind\Search\Base\Options
         return 'search-advanced';
     }
 
+    /**
+     * Get the relevance sort override for empty searches.
+     *
+     * @return string Sort field or null if not set
+     */
+    public function getEmptySearchRelevanceOverride()
+    {
+        return $this->emptySearchRelevanceOverride;
+    }
+
     /**
      * Get an array of hierarchical facets.
      *
diff --git a/module/VuFind/src/VuFind/Search/Solr/Params.php b/module/VuFind/src/VuFind/Search/Solr/Params.php
index d1580544f60c846ad19ab92706fc24dc0dc14cd2..16fb111dc22dd892a420f68cd4632f338e9baa53 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Params.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Params.php
@@ -67,6 +67,13 @@ class Params extends \VuFind\Search\Base\Params
      */
     protected $facetSort = null;
 
+    /**
+     * Sorting order of single facet by index
+     *
+     * @var array
+     */
+    protected $indexSortedFacets = null;
+
     /**
      * Fields for visual faceting
      *
@@ -83,7 +90,6 @@ class Params extends \VuFind\Search\Base\Params
     public function __construct($options, \VuFind\Config\PluginManager $configLoader)
     {
         parent::__construct($options, $configLoader);
-
         // Use basic facet limit by default, if set:
         $config = $configLoader->get('facets');
         if (isset($config->Results_Settings->facet_limit)
@@ -91,6 +97,13 @@ class Params extends \VuFind\Search\Base\Params
         ) {
             $this->setFacetLimit($config->Results_Settings->facet_limit);
         }
+        if (isset($config->Results_Settings->sorted_by_index)
+            && count($config->Results_Settings->sorted_by_index) > 0
+        ) {
+            $this->setIndexSortedFacets(
+                $config->Results_Settings->sorted_by_index->toArray()
+            );
+        }
     }
 
     /**
@@ -108,10 +121,13 @@ class Params extends \VuFind\Search\Base\Params
                 $field = substr($field, 1);
             }
             foreach ($filter as $value) {
-                // Special case -- allow trailing wildcards and ranges:
-                if (substr($value, -1) == '*'
+                // Special case -- complex filter, that should be taken as-is:
+                if ($field == '#') {
+                    $q = $value;
+                } else if (substr($value, -1) == '*'
                     || preg_match('/\[[^\]]+\s+TO\s+[^\]]+\]/', $value)
                 ) {
+                    // Special case -- allow trailing wildcards and ranges
                     $q = $field . ':' . $value;
                 } else {
                     $q = $field . ':"' . addcslashes($value, '"\\') . '"';
@@ -141,6 +157,7 @@ class Params extends \VuFind\Search\Base\Params
     {
         // Build a list of facets we want from the index
         $facetSet = [];
+
         if (!empty($this->facetConfig)) {
             $facetSet['limit'] = $this->facetLimit;
             foreach (array_keys($this->facetConfig) as $facetField) {
@@ -164,6 +181,9 @@ class Params extends \VuFind\Search\Base\Params
                 // so making this explicit ensures consistent behavior.
                 $facetSet['sort'] = ($this->facetLimit > 0) ? 'count' : 'index';
             }
+            if ($this->indexSortedFacets != null) {
+                $facetSet['indexSortedFacets'] = $this->indexSortedFacets;
+            }
         }
         return $facetSet;
     }
@@ -236,6 +256,18 @@ class Params extends \VuFind\Search\Base\Params
         $this->facetSort = $s;
     }
 
+    /**
+     * Set Index Facet Sorting
+     *
+     * @param array $s the facets sorted by index
+     *
+     * @return void
+     */
+    public function setIndexSortedFacets(array $s)
+    {
+        $this->indexSortedFacets = $s;
+    }
+
     /**
      * Initialize facet settings for the specified configuration sections.
      *
@@ -443,8 +475,16 @@ class Params extends \VuFind\Search\Base\Params
         $facets = $this->getFacetSettings();
         if (!empty($facets)) {
             $backendParams->add('facet', 'true');
+
+            if (isset($facets['indexSortedFacets'])) {
+                foreach ($facets['indexSortedFacets'] as $field) {
+                    $backendParams->add("f.{$field}.facet.sort", 'index');
+                }
+                unset($facets['indexSortedFacets']);
+            }
+
             foreach ($facets as $key => $value) {
-                $backendParams->add("facet.{$key}", $value);
+                    $backendParams->add("facet.{$key}", $value);
             }
             $backendParams->add('facet.mincount', 1);
         }
@@ -475,6 +515,13 @@ class Params extends \VuFind\Search\Base\Params
         // Sort
         $sort = $this->getSort();
         if ($sort) {
+            // If we have an empty search with relevance sort, see if there is
+            // an override configured:
+            if ($sort == 'relevance' && $this->getQuery()->getAllTerms() == ''
+                && ($relOv = $this->getOptions()->getEmptySearchRelevanceOverride())
+            ) {
+                $sort = $relOv;
+            }
             $backendParams->add('sort', $this->normalizeSort($sort));
         }
 
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php b/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
index 7604540ed1695722819b2599f2303864d3e88f68..642f67e6c440d6ab4f7eceaaed875ab083717ad6 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
@@ -60,4 +60,37 @@ class Options extends \VuFind\Search\Solr\Options
     {
         return 'author-home';
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // Load the necessary settings to determine the appropriate recommendations
+        // module:
+        $ss = $this->configLoader->get($this->getSearchIni());
+
+        // Load the AuthorModuleRecommendations configuration if available, use
+        // standard defaults otherwise:
+        if (isset($ss->AuthorModuleRecommendations)) {
+            $recommend = [];
+            foreach ($ss->AuthorModuleRecommendations as $section => $content) {
+                $recommend[$section] = [];
+                foreach ($content as $current) {
+                    $recommend[$section][] = $current;
+                }
+            }
+        } else {
+            $recommend = ['side' => ['ExpandFacets:Author']];
+        }
+
+        return $recommend;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
index 5e4ea1fd3884e4ef545e1661480abbd43bef5269..9e4a702a6a357cf27c67ec6f005c9f80b83ccc9f 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
@@ -75,36 +75,4 @@ class Params extends \VuFind\Search\Solr\Params
         $q = parent::getDisplayQuery();
         return str_replace('\"', '"', substr($q, 1, -1));
     }
-
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // Load the necessary settings to determine the appropriate recommendations
-        // module:
-        $ss = $this->getServiceLocator()->get('VuFind\Config')
-            ->get($this->getOptions()->getSearchIni());
-
-        // Load the AuthorModuleRecommendations configuration if available, use
-        // standard defaults otherwise:
-        if (isset($ss->AuthorModuleRecommendations)) {
-            $recommend = [];
-            foreach ($ss->AuthorModuleRecommendations as $section => $content) {
-                $recommend[$section] = [];
-                foreach ($content as $current) {
-                    $recommend[$section][] = $current;
-                }
-            }
-        } else {
-            $recommend = ['side' => ['ExpandFacets:Author']];
-        }
-
-        return $recommend;
-    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
index 541c114367fc5672766f16272bf1f4e639666e03..c77311dac47b9f047309b6d02774a302bb761802 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
@@ -80,4 +80,20 @@ class Options extends \VuFind\Search\Solr\Options
         // Not currently supported
         return false;
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // No recommendations here:
+        return [];
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
index ab635328cc3e6064d526e2e2bc7ca6c0f850b008..03a998b0168ca8a18b7297cbba7ec149e360f23d 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
@@ -85,20 +85,6 @@ class Params extends \VuFind\Search\Solr\Params
         return true;
     }
 
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // No recommendations here:
-        return [];
-    }
-
     /**
      * Initialize view
      *
diff --git a/module/VuFind/src/VuFind/Search/SolrCollection/Options.php b/module/VuFind/src/VuFind/Search/SolrCollection/Options.php
index f952e6ceceaaf33d9601625dffafcdde70f987d5..309d492c48859d20cddd565a7ec8605347d0de21 100644
--- a/module/VuFind/src/VuFind/Search/SolrCollection/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrCollection/Options.php
@@ -63,4 +63,23 @@ class Options extends \VuFind\Search\Solr\Options
         }
         $this->defaultSort = key($this->sortOptions);
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // Collection recommendations
+        $searchSettings = $this->configLoader->get('Collection');
+        return isset($searchSettings->Recommend)
+            ? $searchSettings->Recommend->toArray()
+            : ['side' => ['CollectionSideFacets:Facets::Collection:true']];
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrCollection/Params.php b/module/VuFind/src/VuFind/Search/SolrCollection/Params.php
index e1858684bbc641b1fe8236b6f203d4b985a31d66..a2ee6d41b17d089e5b320343500c2e2b3072f9e2 100644
--- a/module/VuFind/src/VuFind/Search/SolrCollection/Params.php
+++ b/module/VuFind/src/VuFind/Search/SolrCollection/Params.php
@@ -58,13 +58,11 @@ class Params extends \VuFind\Search\Solr\Params
      * Pull the search parameters from the query and set up additional options using
      * a record driver representing a collection.
      *
-     * @param \VuFind\RecordDriver\AbstractBase $driver  Record driver
-     * @param \Zend\StdLib\Parameters           $request Parameter object
-     * representing user request.
+     * @param \VuFind\RecordDriver\AbstractBase $driver Record driver
      *
      * @return void
      */
-    public function initFromRecordDriver($driver, $request)
+    public function initFromRecordDriver($driver)
     {
         $this->collectionID = $driver->getUniqueID();
         if ($hierarchyDriver = $driver->getHierarchyDriver()) {
@@ -77,26 +75,13 @@ class Params extends \VuFind\Search\Solr\Params
                 break;
             }
         }
-        $this->initFromRequest($request);
-    }
 
-    /**
-     * Pull the search parameters
-     *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
-     * request.
-     *
-     * @return void
-     */
-    public function initFromRequest($request)
-    {
         if (null === $this->collectionID) {
             throw new \Exception('Collection ID missing');
         }
         if (null === $this->collectionField) {
             throw new \Exception('Collection field missing');
         }
-        parent::initFromRequest($request);
 
         // We don't spellcheck this screen; it's not for free user input anyway
         $options = $this->getOptions();
@@ -108,24 +93,6 @@ class Params extends \VuFind\Search\Solr\Params
         $options->addHiddenFilter('!id:"' . $safeId . '"');
     }
 
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // Collection recommendations
-        $searchSettings = $this->getServiceLocator()->get('VuFind\Config')
-            ->get('Collection');
-        return isset($searchSettings->Recommend)
-            ? $searchSettings->Recommend->toArray()
-            : ['side' => ['CollectionSideFacets:Facets::Collection:true']];
-    }
-
     /**
      * Get collection field
      *
diff --git a/module/VuFind/src/VuFind/Search/SolrReserves/Options.php b/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
index 626af887634485fba84a3a21a0c0f03d1597e078..e342e5ade6f735b6818e9a8a3bef6b75bd9bdf96 100644
--- a/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
@@ -47,9 +47,9 @@ class Options extends \VuFind\Search\Solr\Options
      */
     public function __construct(\VuFind\Config\PluginManager $configLoader)
     {
-        parent::__construct($configLoader);
         $this->facetsIni = $this->searchIni = 'reserves';
         $this->spellcheck = false;
+        parent::__construct($configLoader);
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Search/Summon/Options.php b/module/VuFind/src/VuFind/Search/Summon/Options.php
index 72389f9a110b7f0d1c685f2f046c211ac3ce9cea..2d567d96b09e089e250eae440729bbbd5b76ea67 100644
--- a/module/VuFind/src/VuFind/Search/Summon/Options.php
+++ b/module/VuFind/src/VuFind/Search/Summon/Options.php
@@ -52,6 +52,13 @@ class Options extends \VuFind\Search\Base\Options
      */
     protected $maxTopicRecommendations = false;
 
+    /**
+     * Relevance sort override for empty searches
+     *
+     * @var string
+     */
+    protected $emptySearchRelevanceOverride = null;
+
     /**
      * Constructor
      *
@@ -142,6 +149,10 @@ class Options extends \VuFind\Search\Base\Options
                 $this->defaultSortByHandler[$key] = $val;
             }
         }
+        if (isset($searchSettings->General->empty_search_relevance_override)) {
+            $this->emptySearchRelevanceOverride
+                = $searchSettings->General->empty_search_relevance_override;
+        }
 
         // Load view preferences (or defaults if none in .ini file):
         if (isset($searchSettings->Views)) {
@@ -176,6 +187,16 @@ class Options extends \VuFind\Search\Base\Options
         return 'summon-advanced';
     }
 
+    /**
+     * Get the relevance sort override for empty searches.
+     *
+     * @return string Sort field or null if not set
+     */
+    public function getEmptySearchRelevanceOverride()
+    {
+        return $this->emptySearchRelevanceOverride;
+    }
+
     /**
      * If there is a limit to how many search results a user can access, this
      * method will return that limit.  If there is no limit, this will return
diff --git a/module/VuFind/src/VuFind/Search/Summon/Params.php b/module/VuFind/src/VuFind/Search/Summon/Params.php
index 245f1b6c8beb6586d768fd8712522680326aef91..10d9ea269526ec05cbdc9b609fb8c82737e8a210 100644
--- a/module/VuFind/src/VuFind/Search/Summon/Params.php
+++ b/module/VuFind/src/VuFind/Search/Summon/Params.php
@@ -154,9 +154,19 @@ class Params extends \VuFind\Search\Base\Params
 
         $options = $this->getOptions();
 
+        $sort = $this->getSort();
+        if ($sort) {
+            // If we have an empty search with relevance sort, see if there is
+            // an override configured:
+            if ($sort == 'relevance' && $this->getQuery()->getAllTerms() == ''
+                && ($relOv = $this->getOptions()->getEmptySearchRelevanceOverride())
+            ) {
+                $sort = $relOv;
+            }
+        }
+
         // The "relevance" sort option is a VuFind reserved word; we need to make
         // this null in order to achieve the desired effect with Summon:
-        $sort = $this->getSort();
         $finalSort = ($sort == 'relevance') ? null : $sort;
         $backendParams->set('sort', $finalSort);
 
diff --git a/module/VuFind/src/VuFind/Search/Tags/Options.php b/module/VuFind/src/VuFind/Search/Tags/Options.php
index 6766014d7da87fcb460f5be585d45d6892f056ea..998be17c420fabbba150e1921b72098a861f0b38 100644
--- a/module/VuFind/src/VuFind/Search/Tags/Options.php
+++ b/module/VuFind/src/VuFind/Search/Tags/Options.php
@@ -63,4 +63,20 @@ class Options extends \VuFind\Search\Base\Options
     {
         return 'tag-home';
     }
+
+    /**
+     * Load all recommendation settings from the relevant ini file.  Returns an
+     * associative array where the key is the location of the recommendations (top
+     * or side) and the value is the settings found in the file (which may be either
+     * a single string or an array of strings).
+     *
+     * @param string $handler Name of handler for which to load specific settings.
+     *
+     * @return array associative: location (top/side/etc.) => search settings
+     */
+    public function getRecommendationSettings($handler = null)
+    {
+        // No recommendation modules in tag view currently:
+        return [];
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Tags/Params.php b/module/VuFind/src/VuFind/Search/Tags/Params.php
index a0141285c3243ee87025fb1d15df37f4b6143e4e..28872effb2163549381058e2f1ad815425679828 100644
--- a/module/VuFind/src/VuFind/Search/Tags/Params.php
+++ b/module/VuFind/src/VuFind/Search/Tags/Params.php
@@ -38,17 +38,4 @@ namespace VuFind\Search\Tags;
  */
 class Params extends \VuFind\Search\Base\Params
 {
-    /**
-     * Load all recommendation settings from the relevant ini file.  Returns an
-     * associative array where the key is the location of the recommendations (top
-     * or side) and the value is the settings found in the file (which may be either
-     * a single string or an array of strings).
-     *
-     * @return array associative: location (top/side) => search settings
-     */
-    protected function getRecommendationSettings()
-    {
-        // No recommendation modules in tag view currently:
-        return [];
-    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Service/Factory.php b/module/VuFind/src/VuFind/Service/Factory.php
index bcecfa33eeeeceac2dcedf37f5c2f5ded975958e..dd279d3564440406857d1c9101c6e091622d030e 100644
--- a/module/VuFind/src/VuFind/Service/Factory.php
+++ b/module/VuFind/src/VuFind/Service/Factory.php
@@ -299,6 +299,19 @@ class Factory
         return static::getGenericPluginManager($sm, 'Hierarchy\Driver');
     }
 
+    /**
+     * Construct the Hierarchy\TreeDataFormatter Plugin Manager.
+     *
+     * @param ServiceManager $sm Service manager.
+     *
+     * @return \VuFind\Hierarchy\TreeDataFormatter\PluginManager
+     */
+    public static function getHierarchyTreeDataFormatterPluginManager(
+        ServiceManager $sm
+    ) {
+        return static::getGenericPluginManager($sm, 'Hierarchy\TreeDataFormatter');
+    }
+
     /**
      * Construct the Hierarchy\TreeDataSource Plugin Manager.
      *
@@ -458,42 +471,27 @@ class Factory
     public static function getRecaptcha(ServiceManager $sm)
     {
         $config = $sm->get('VuFind\Config')->get('config');
-        $recaptcha = new \ZendService\ReCaptcha\ReCaptcha(
-            isset($config->Captcha->publicKey) ? $config->Captcha->publicKey : '',
-            isset($config->Captcha->privateKey) ? $config->Captcha->privateKey : ''
+        $siteKey = isset($config->Captcha->siteKey)
+            ? $config->Captcha->siteKey
+            : (isset($config->Captcha->publicKey)
+                ? $config->Captcha->publicKey
+                : '');
+        $secretKey = isset($config->Captcha->secretKey)
+            ? $config->Captcha->secretKey
+            : (isset($config->Captcha->privateKey)
+                ? $config->Captcha->privateKey
+                : '');
+        $recaptcha = new \LosReCaptcha\Service\ReCaptcha(
+            $siteKey, $secretKey, ['ssl' => true]
         );
         if (isset($config->Captcha->theme)) {
             $recaptcha->setOption('theme', $config->Captcha->theme);
-            $recaptcha->setOption('custom_theme_widget', 'custom_recaptcha_widget');
-            $translator = $sm->get('VuFind\Translator');
-            $recaptcha->setOption(
-                'custom_translations',
-                [
-                    'audio_challenge' =>
-                        $translator->translate('recaptcha_audio_challenge'),
-                    'cant_hear_this' =>
-                        $translator->translate('recaptcha_cant_hear_this'),
-                    'help_btn' =>
-                        $translator->translate('recaptcha_help_btn'),
-                    'image_alt_text' =>
-                        $translator->translate('recaptcha_image_alt_text'),
-                    'incorrect_try_again' =>
-                        $translator->translate('recaptcha_incorrect_try_again'),
-                    'instructions_audio' =>
-                        $translator->translate('recaptcha_instructions_audio'),
-                    'instructions_visual' =>
-                        $translator->translate('recaptcha_instructions_visual'),
-                    'play_again' =>
-                        $translator->translate('recaptcha_play_again'),
-                    'privacy_and_terms' =>
-                        $translator->translate('recaptcha_privacy_and_terms'),
-                    'refresh_btn' =>
-                        $translator->translate('recaptcha_refresh_btn'),
-                    'visual_challenge' =>
-                        $translator->translate('recaptcha_visual_challenge')
-                ]
-            );
         }
+        $translator = $sm->get('VuFind\Translator');
+        $recaptcha->setOption('lang', $translator->getLocale());
+
+        $httpClient = $sm->get('VuFind\Http')->createClient();
+        $recaptcha->setHttpClient($httpClient);
         return $recaptcha;
     }
 
@@ -659,6 +657,20 @@ class Factory
         return static::getGenericPluginManager($sm, 'Search\Results');
     }
 
+    /**
+     * Construct the Search runner.
+     *
+     * @param ServiceManager $sm Service manager.
+     *
+     * @return \VuFind\Search\SearchRunner
+     */
+    public static function getSearchRunner(ServiceManager $sm)
+    {
+        return new \VuFind\Search\SearchRunner(
+            $sm->get('VuFind\SearchResultsPluginManager')
+        );
+    }
+
     /**
      * Construct the search specs reader.
      *
diff --git a/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php b/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
index eeb71898d3124e4444db37dc1c1b42462d6e8dc4..3b924d77738fb9570133ca56050b7a45157f580d 100644
--- a/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
+++ b/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
@@ -45,14 +45,23 @@ abstract class AbstractLayoutClass extends \Zend\View\Helper\AbstractHelper
      */
     protected $left;
 
+    /**
+     * Is the sidebar offcanvas?
+     *
+     * @var bool
+     */
+    protected $offcanvas;
+
     /**
      * Constructor
      *
-     * @param bool $left Does the sidebar go on the left?
+     * @param bool $left      Does the sidebar go on the left?
+     * @param bool $offcanvas Offcanvas config setting
      */
-    public function __construct($left = false)
+    public function __construct($left = false, $offcanvas = false)
     {
         $this->left = $left;
+        $this->offcanvas = $offcanvas;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Factory.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Factory.php
index cc3871317778d1da72250ed1feaccaada2920bed..19ef6ebd4aadf10e3ad93ddfc2b257cf3070f496 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Factory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Factory.php
@@ -67,6 +67,8 @@ class Factory
         $config = $sm->getServiceLocator()->get('VuFind\Config')->get('config');
         $left = !isset($config->Site->sidebarOnLeft)
             ? false : $config->Site->sidebarOnLeft;
-        return new LayoutClass($left);
+        $offcanvas = !isset($config->Site->offcanvas)
+            ? false : $config->Site->offcanvas;
+        return new LayoutClass($left, $offcanvas);
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
index 23ac5129059dafd9f78998f0bb4b11929c675189..2d419a19bd4df65544b212b528ed8a74959bb58c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClass.php
@@ -53,11 +53,20 @@ class LayoutClass extends \VuFind\View\Helper\AbstractLayoutClass
     {
         switch ($class) {
         case 'mainbody':
-            return $this->left ? 'col-sm-9 col-sm-push-3' : 'col-sm-9';
+            return $this->left
+                ? 'col-sm-9 col-sm-push-3'
+                : 'col-sm-9';
         case 'sidebar':
             return $this->left
                 ? 'sidebar col-sm-3 col-sm-pull-9 hidden-print'
                 : 'sidebar col-sm-3 hidden-print';
+        case 'offcanvas-row':
+            if (!$this->offcanvas) {
+                return "";
+            }
+            return $this->left
+                ? 'offcanvas offcanvas-left'
+                : 'offcanvas offcanvas-right';
         }
     }
 }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Auth.php b/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
index 4c951e373323148738b076c052d830cf05624bde..6b10626a641195c698c987856be552e16c35af72 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
@@ -75,15 +75,16 @@ class Auth extends \Zend\View\Helper\AbstractHelper
         // template.
         $className = $this->getManager()->getAuthClassForTemplateRendering();
         $topClassName = $className; // for error message
+        $resolver = $this->getView()->resolver();
         while (true) {
             // Guess the template name for the current class:
             $template = 'Auth/' . $this->getBriefClass($className) . '/' . $name;
-            try {
+            if ($resolver->resolve($template)) {
                 // Try to render the template....
                 $html = $this->getView()->render($template);
                 $contextHelper($this->getView())->restore($oldContext);
                 return $html;
-            } catch (RuntimeException $e) {
+            } else {
                 // If the template doesn't exist, let's see if we can inherit a
                 // template from a parent class:
                 $className = get_parent_class($className);
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php b/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
index b2fc213ed4c393fc2f4bb970aaa62e3cb71800c2..6ebc7097eed7d43a33b1bd384ed41727aaf1e722 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
@@ -27,8 +27,6 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Exception\RuntimeException;
-
 /**
  * "Load help text" view helper
  *
@@ -116,18 +114,19 @@ class HelpText extends \Zend\View\Helper\AbstractHelper
         // Clear warnings
         $this->warnings = [];
 
-        try {
-            $tpl = "HelpTranslations/{$this->language}/{$safe_topic}.phtml";
+        $resolver = $this->getView()->resolver();
+        $tpl = "HelpTranslations/{$this->language}/{$safe_topic}.phtml";
+        if ($resolver->resolve($tpl)) {
             $html = $this->getView()->render($tpl);
-        } catch (RuntimeException $e) {
-            try {
-                // language missing -- try default language
-                $tplFallback = 'HelpTranslations/' . $this->defaultLanguage . '/'
-                    . $safe_topic . '.phtml';
+        } else {
+            // language missing -- try default language
+            $tplFallback = 'HelpTranslations/' . $this->defaultLanguage . '/'
+                . $safe_topic . '.phtml';
+            if ($resolver->resolve($tplFallback)) {
                 $html = $this->getView()->render($tplFallback);
                 $this->warnings[] = 'Sorry, but the help you requested is '
                     . 'unavailable in your language.';
-            } catch (RuntimeException $e) {
+            } else {
                 // no translation available at all!
                 $html = false;
             }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
index bda2f1baced81a7099bce2ad9135cc96fe8d538c..f06481a776efc4bdfa0c38e99a73252d8be047fb 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
@@ -95,8 +95,11 @@ class JsTranslations extends AbstractHelper
     {
         $parts = [];
         foreach ($this->strings as $k => $v) {
-            $parts[] = $k . ': "' . addslashes($this->transEsc->__invoke($v)) . '"';
+            $translation = is_array($v)
+                ? call_user_func_array([$this->transEsc, '__invoke'], $v)
+                : $this->transEsc->__invoke($v);
+            $parts[] = $k . ': "' . addslashes($translation) . '"';
         }
         return $this->varName . ' = {' . implode(',', $parts) . '};';
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php b/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
index 64ff02545a54399a095c15871b262902a6d43e48..696918d83ba20d4f65012a4da642f2aca1a4165d 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
@@ -288,12 +288,14 @@ class Piwik extends \Zend\View\Helper\AbstractHelper
     protected function getOpeningTrackingCode()
     {
         return <<<EOT
-var _paq = _paq || [];
-(function(){
-_paq.push(['setSiteId', {$this->siteId}]);
-_paq.push(['setTrackerUrl', '{$this->url}piwik.php']);
-_paq.push(['setCustomUrl', location.protocol + '//'
-     + location.host + location.pathname]);
+
+function initVuFindPiwikTracker(){
+    var VuFindPiwikTracker = Piwik.getTracker();
+
+    VuFindPiwikTracker.setSiteId({$this->siteId});
+    VuFindPiwikTracker.setTrackerUrl('{$this->url}piwik.php');
+    VuFindPiwikTracker.setCustomUrl(location.protocol + '//'
+        + location.host + location.pathname);
 
 EOT;
     }
@@ -306,12 +308,14 @@ EOT;
     protected function getClosingTrackingCode()
     {
         return <<<EOT
-_paq.push(['enableLinkTracking']);
+    VuFindPiwikTracker.enableLinkTracking();
+};
+(function(){
 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
     g.type='text/javascript'; g.defer=true; g.async=true;
     g.src='{$this->url}piwik.js';
+    g.onload=initVuFindPiwikTracker;
 s.parentNode.insertBefore(g,s); })();
-
 EOT;
     }
 
@@ -338,7 +342,7 @@ EOT;
 
             $value = $escape($value);
             $code .= <<<EOT
-_paq.push(['setCustomVariable', $i, '$key', '$value', 'page']);
+    VuFindPiwikTracker.setCustomVariable($i, '$key', '$value', 'page');
 
 EOT;
         }
@@ -362,7 +366,7 @@ EOT;
 
         // Use trackSiteSearch *instead* of trackPageView in searches
         return <<<EOT
-_paq.push(['trackSiteSearch', '$searchTerms', '$searchType', $resultCount]);
+    VuFindPiwikTracker.trackSiteSearch('$searchTerms', '$searchType', $resultCount);
 
 EOT;
     }
@@ -375,7 +379,7 @@ EOT;
     protected function getTrackPageViewCode()
     {
         return <<<EOT
-_paq.push(['trackPageView']);
+    VuFindPiwikTracker.trackPageView();
 
 EOT;
     }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php b/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
index be8789486f39340ee96ef0c4c74af914ad2492e8..7d324e90a14a7cd16b9fc64cca058a040583190b 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
@@ -87,49 +87,7 @@ class Recaptcha extends AbstractHelper
         if (!isset($useRecaptcha) || !$useRecaptcha) {
             return false;
         }
-
-        if ($this->recaptcha->getPublicKey() === null) {
-            throw new Exception('Missing public key');
-        }
-
-        $host = \ZendService\Recaptcha\Recaptcha::API_SERVER;
-
-        $params = $this->recaptcha->getParams();
-        if ((bool) $params['ssl'] === true) {
-            $host = \ZendService\Recaptcha\Recaptcha::API_SECURE_SERVER;
-        }
-
-        $errorPart = '';
-        if (!empty($params['error'])) {
-            $errorPart = '&error=' . urlencode($params['error']);
-        }
-
-        $options = $this->recaptcha->getOptions();
-        if (!empty($options)) {
-            $encoded = \Zend\Json\Json::encode($options);
-        } else {
-            $encoded = "{}";
-        }
-        $challengeField = 'recaptcha_challenge_field';
-        $responseField  = 'recaptcha_response_field';
-        if (!empty($name)) {
-            $challengeField = $name . '[' . $challengeField . ']';
-            $responseField  = $name . '[' . $responseField . ']';
-        }
-
-        return $this->view->render(
-            'Service/recaptcha.phtml',
-            [
-                'challengeField'   => $challengeField,
-                'errorPart'        => $errorPart,
-                'host'             => $host,
-                'options'          => $encoded,
-                'publicKey'        => $this->recaptcha->getPublicKey(),
-                'responseField'    => $responseField,
-                'theme'            => $options['theme'],
-                'useRecaptcha'     => $useRecaptcha,
-            ]
-        );
+        return $this->recaptcha->getHtml();
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Recommend.php b/module/VuFind/src/VuFind/View/Helper/Root/Recommend.php
index 333452d5c6b698cf940f9e3085c7ba75444f7435..6e3f62870df6d70fc7ac07ad87dd40d05957eddc 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Recommend.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Recommend.php
@@ -59,16 +59,17 @@ class Recommend extends AbstractHelper
         // in case we need to use a parent class' name to find the appropriate
         // template.
         $className = get_class($recommend);
+        $resolver = $this->getView()->resolver();
         while (true) {
             // Guess the template name for the current class:
             $classParts = explode('\\', $className);
             $template = 'Recommend/' . array_pop($classParts) . '.phtml';
-            try {
+            if ($resolver->resolve($template)) {
                 // Try to render the template....
                 $html = $this->getView()->render($template);
                 $contextHelper($this->getView())->restore($oldContext);
                 return $html;
-            } catch (RuntimeException $e) {
+            } else {
                 // If the template doesn't exist, let's see if we can inherit a
                 // template from a parent recommendation class:
                 $className = get_parent_class($className);
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Record.php b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
index bc6edf40660f3b127211c5fc4bfbe5b7e67145de..466887445337da2079b3035259e0ad6cc5a93ad0 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Record.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
@@ -94,16 +94,17 @@ class Record extends AbstractHelper
         // in case we need to use a parent class' name to find the appropriate
         // template.
         $className = get_class($this->driver);
+        $resolver = $this->view->resolver();
         while (true) {
             // Guess the template name for the current class:
             $classParts = explode('\\', $className);
             $template = 'RecordDriver/' . array_pop($classParts) . '/' . $name;
-            try {
+            if ($resolver->resolve($template)) {
                 // Try to render the template....
                 $html = $this->view->render($template);
                 $this->contextHelper->restore($oldContext);
                 return $html;
-            } catch (RuntimeException $e) {
+            } else {
                 // If the template doesn't exist, let's see if we can inherit a
                 // template from a parent class:
                 $className = get_parent_class($className);
@@ -302,6 +303,31 @@ class Record extends AbstractHelper
         return $idClasses;
     }
 
+    /**
+     * Get HTML to render a title.
+     *
+     * @param int $maxLength Maximum length of non-highlighted title.
+     *
+     * @return string
+     */
+    public function getTitleHtml($maxLength = 180)
+    {
+        $highlightedTitle = $this->driver->tryMethod('getHighlightedTitle');
+        $title = $this->driver->tryMethod('getTitle');
+        if (!empty($highlightedTitle)) {
+            $highlight = $this->getView()->plugin('highlight');
+            $addEllipsis = $this->getView()->plugin('addEllipsis');
+            return $highlight($addEllipsis($highlightedTitle, $title));
+        }
+        if (!empty($title)) {
+            $escapeHtml = $this->getView()->plugin('escapeHtml');
+            $truncate = $this->getView()->plugin('truncate');
+            return $escapeHtml($truncate($title, $maxLength));
+        }
+        $transEsc = $this->getView()->plugin('transEsc');
+        return $transEsc('Title not available');
+    }
+
     /**
      * Get the name of the controller used by the record route.
      *
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Related.php b/module/VuFind/src/VuFind/View/Helper/Root/Related.php
index 07a1b6b8c2e0974e12a7d1a01f20e5c5d2186983..afaf9c3cb39bbb17fdd60a0db61eabc9261b2367 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Related.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Related.php
@@ -89,16 +89,17 @@ class Related extends AbstractHelper
         // in case we need to use a parent class' name to find the appropriate
         // template.
         $className = get_class($related);
+        $resolver = $this->getView()->resolver();
         while (true) {
             // Guess the template name for the current class:
             $classParts = explode('\\', $className);
             $template = 'Related/' . array_pop($classParts) . '.phtml';
-            try {
-                // Try to render the template....
+            // Try to resolve the template....
+            if ($resolver->resolve($template)) {
                 $html = $this->getView()->render($template);
                 $contextHelper($this->getView())->restore($oldContext);
                 return $html;
-            } catch (RuntimeException $e) {
+            } else {
                 // If the template doesn't exist, let's see if we can inherit a
                 // template from a parent class:
                 $className = get_parent_class($className);
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
index 922798c80d12eb482f6f6b83d3ebb5b2ce8b0cf8..b297856778637204b3c3e474fd791ddc7b79e8a1 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
@@ -45,6 +45,25 @@ class ResultFeed extends AbstractHelper implements TranslatorAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
 
+    /**
+     * Override title
+     *
+     * @var string
+     */
+    protected $overrideTitle = null;
+
+    /**
+     * Set override title.
+     *
+     * @param string $title Title
+     *
+     * @return void
+     */
+    public function setOverrideTitle($title)
+    {
+        $this->overrideTitle = $title;
+    }
+
     /**
      * Set up Dublin Core extension.
      *
@@ -93,10 +112,14 @@ class ResultFeed extends AbstractHelper implements TranslatorAwareInterface
 
         // Create the parent feed
         $feed = new Feed();
-        $feed->setTitle(
-            $this->translate('Results for') . ' '
-            . $results->getParams()->getDisplayQuery()
-        );
+        if (null !== $this->overrideTitle) {
+            $feed->setTitle($this->translate($this->overrideTitle));
+        } else {
+            $feed->setTitle(
+                $this->translate('Results for') . ' '
+                . $results->getParams()->getDisplayQuery()
+            );
+        }
         $feed->setLink(
             $baseUrl . $results->getUrlQuery()->setViewParam(null, false)
         );
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
index 22c98cd16bb81be7c851fc60e5fde2b7746cc268..130bb457a81f3747e4f2c6f6b6d282b762525ce4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
@@ -44,10 +44,10 @@ class Translate extends \Zend\View\Helper\AbstractHelper
     /**
      * Translate a string
      *
-     * @param string $str     String to translate
-     * @param array  $tokens  Tokens to inject into the translated string
-     * @param string $default Default value to use if no translation is found (null
-     * for no default).
+     * @param string|object $str     String to translate
+     * @param array         $tokens  Tokens to inject into the translated string
+     * @param string        $default Default value to use if no translation is found
+     * (null for no default).
      *
      * @return string
      */
@@ -55,4 +55,4 @@ class Translate extends \Zend\View\Helper\AbstractHelper
     {
         return $this->translate($str, $tokens, $default);
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/tests/fixtures/daia/response/daia.json b/module/VuFind/tests/fixtures/daia/response/daia.json
new file mode 100644
index 0000000000000000000000000000000000000000..f006f8c7e59472e8b719826e44e14b9b41eb7c82
--- /dev/null
+++ b/module/VuFind/tests/fixtures/daia/response/daia.json
@@ -0,0 +1,112 @@
+HTTP/1.1 200 OK
+Content-Type: application/json
+Date: Wed, 18 Mar 2015 11:49:40 GMT
+
+{
+   "timestamp" : "2015-03-18T11:49:40Z",
+   "version" : "0.5",
+   "document" : [
+      {
+         "href" : "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+         "item" : [
+            {
+               "department" : {
+                  "href" : "http://www.example-library.edu",
+                  "content" : "Example Library for DAIA Tests",
+                  "id" : "http://uri.gbv.de/organization/isil/DE-000"
+               },
+               "href" : "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+               "label" : "ABC 12",
+               "id" : "http://uri.gbv.de/document/opac-de-000:epn:711134758",
+               "storage" : {
+                  "content" : "Abteilung III"
+               },
+               "available" : [
+                  {
+                     "href" : "http://opac.example-library.edu/loan/REQ?EPN=711134758",
+                     "delay" : "unknown",
+                     "service" : "presentation"
+                  },
+                  {
+                     "href" : "http://opac.example-library.edu/loan/REQ?EPN=711134758",
+                     "delay" : "unknown",
+                     "service" : "loan"
+                  },
+                  {
+                     "href" : "http://opac.example-library.edu/loan/REQ?EPN=711134758",
+                     "delay" : "unknown",
+                     "service" : "interloan"
+                  }
+               ]
+            },
+            {
+               "department" : {
+                  "href" : "http://www.example-library.edu",
+                  "content" : "Example Library for DAIA Tests",
+                  "id" : "http://uri.gbv.de/organization/isil/DE-000"
+               },
+               "href" : "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+               "label" : "DEF 34",
+               "id" : "http://uri.gbv.de/document/opac-de-000:epn:711134766",
+               "storage" : {
+                  "content" : "Abteilung III"
+               },
+               "available" : [
+                  {
+                     "service" : "presentation"
+                  },
+                  {
+                     "service" : "loan",
+                     "limitation" : [
+                        {
+                           "content" : "mit Zustimmung"
+                        }
+                     ]
+                  },
+                  {
+                     "service" : "interloan",
+                     "limitation" : [
+                        {
+                           "content" : "nur Kopie"
+                        }
+                     ]
+                  }
+               ]
+            },
+            {
+               "department" : {
+                  "href" : "http://www.example-library.edu",
+                  "content" : "Example Library for DAIA Tests",
+                  "id" : "http://uri.gbv.de/organization/isil/DE-000"
+               },
+               "href" : "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+               "label" : "GHI 56",
+               "id" : "http://uri.gbv.de/document/opac-de-000:epn:7111347777",
+               "storage" : {
+                  "content" : "Abteilung III"
+               },
+               "unavailable" : [
+                  {
+                     "expected" : "2115-02-09",
+                     "service" : "presentation"
+                  },
+                  {
+                     "expected" : "2115-02-09",
+                     "service" : "loan"
+                  },
+                  {
+                     "expected" : "2115-02-09",
+                     "service" : "interloan"
+                  }
+               ]
+            }
+         ],
+         "id" : "http://uri.gbv.de/document/opac-de-000:ppn:027586081"
+      }
+   ],
+   "institution" : {
+      "href" : "http://www.example-library.edu",
+      "content" : "Example Library for DAIA Tests",
+      "id" : "http://uri.gbv.de/organization/isil/DE-000"
+   }
+}
diff --git a/module/VuFind/tests/fixtures/daia/response/daia.xml b/module/VuFind/tests/fixtures/daia/response/daia.xml
new file mode 100644
index 0000000000000000000000000000000000000000..acdbf43cb825b79a1b141a627e3a47dfadea5ffe
--- /dev/null
+++ b/module/VuFind/tests/fixtures/daia/response/daia.xml
@@ -0,0 +1,39 @@
+HTTP/1.1 200 OK
+Content-Type: application/xml
+Date: Wed, 18 Mar 2015 11:49:40 GMT
+
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="/daia.xsl"?>
+<daia xmlns="http://ws.gbv.de/daia/" timestamp="2015-03-18T11:49:40Z" version="0.5">
+    <institution href="http://www.example-library.edu" id="http://uri.gbv.de/organization/isil/DE-000">Example Library for DAIA Tests</institution>
+    <document href="http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081" id="http://uri.gbv.de/document/opac-de-000:ppn:027586081">
+        <item href="http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081" id="http://uri.gbv.de/document/opac-de-000:epn:711134758">
+            <label>ABC 12</label>
+            <department href="http://www.example-library.edu" id="http://uri.gbv.de/organization/isil/DE-000">Example Library for DAIA Tests</department>
+            <storage>Abteilung III</storage>
+            <available href="http://opac.example-library.edu/loan/REQ?EPN=711134758" delay="unknown" service="presentation" />
+            <available href="http://opac.example-library.edu/loan/REQ?EPN=711134758" delay="unknown" service="loan" />
+            <available href="http://opac.example-library.edu/loan/REQ?EPN=711134758" delay="unknown" service="interloan" />
+        </item>
+        <item href="http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081" id="http://uri.gbv.de/document/opac-de-000:epn:711134766">
+            <label>DEF 34</label>
+            <department href="http://www.example-library.edu" id="http://uri.gbv.de/organization/isil/DE-000">Example Library for DAIA Tests</department>
+            <storage>Abteilung III</storage>
+            <available service="presentation" />
+            <available service="loan">
+                <limitation>mit Zustimmung</limitation>
+            </available>
+            <available service="interloan">
+                <limitation>nur Kopie</limitation>
+            </available>
+        </item>
+        <item href="http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081" id="http://uri.gbv.de/document/opac-de-000:epn:7111347777">
+            <label>GHI 56</label>
+            <department href="http://www.example-library.edu" id="http://uri.gbv.de/organization/isil/DE-000">Example Library for DAIA Tests</department>
+            <storage>Abteilung III</storage>
+            <unavailable expected="2115-02-09" service="presentation" />
+            <unavailable expected="2115-02-09" service="loan" />
+            <unavailable expected="2115-02-09" service="interloan" />
+        </item>
+    </document>
+</daia>
\ No newline at end of file
diff --git a/module/VuFind/tests/fixtures/resolver/response/redi.xhtml b/module/VuFind/tests/fixtures/resolver/response/redi.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..b135890e23f279ac4ca842fea0271ffda42233e7
--- /dev/null
+++ b/module/VuFind/tests/fixtures/resolver/response/redi.xhtml
@@ -0,0 +1,240 @@
+HTTP/1.1 200 OK
+Date: Wed, 13 May 2015 12:27:18 GMT
+Server: Apache
+Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
+Pragma: no-cache
+Content-Length: 2548
+Content-Type: text/html; charset=utf-8
+
+
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <title>ReDI&#187;Links Universität Leipzig</title>
+    <link rel="stylesheet" type="text/css" href="css/links.css" />
+    <link rel="stylesheet" type="text/css" href="css/ubl.css" />
+</head>
+<body>
+<div id="main">
+
+    <div id="header">
+        <div id="header_text">
+            <a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=site&amp;rl_link_name=title&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">
+                <img src="gifs/ubl_title.gif" alt="Universitätsbibliothek Leipzig" border="0" />
+            </a>
+        </div>
+        <div id="header_logo">
+        </div>
+    </div>
+    <div id="header_end">
+    </div>
+
+    <div id="navigation">
+        <ul id="languages">
+            <li><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=services&amp;rl_language=en&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7">English</a></li>
+        </ul>
+
+        <ul id="actions">
+            <li><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=services&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" class="active">UB Leipzig&#187;Links</a></li>
+            <li><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=config&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" class="inactive">Einstellungen</a></li>
+        </ul>
+    </div>
+    <div id="navigation_end">
+    </div>
+    <div id="progress">
+        <p>Bestand prüfen: Elektronische Zeitschriftenbibliothek (EZB) ... ok</p>
+    </div>
+
+    <div id="content">
+
+        <div id="citation">
+            <dl>
+                <dt class="title_t">Titel:</dt>
+                <dd class="title_d">Are ACOs on Uncertain Ethical Ground and a Threat to the Autonomy of Patients and Physicians?</dd>
+                <dt class="author_t">Autor:</dt>
+                <dd class="author_d">Lindsey, Gene</dd>
+                <dt class="source_t">Quelle:</dt>
+                <dd class="source_d">Journal of General Internal Medicine, 29(10):1319-1321, 2014</dd>
+                <dt class="source_t">ISSN:</dt>
+                <dd class="source_d">0884-8734, 1525-1497 (elektronisch)</dd>
+                <dt class="doi_t">DOI:</dt>
+                <dd class="doi_d">10.1007/s11606-014-2915-9 <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=citation&amp;rl_link_name=doi&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span></dd>
+            </dl>
+        </div>
+        <div id="citation_end">
+        </div>
+
+        <div id="services">
+            <a name="a_holding"></a>
+            <div id="tg_holding">
+                <div class="tg">
+
+                    <h2>
+                        Lokale Verfügbarkeit
+                    </h2>
+                    <div class="tg_targets">
+                        <div id="t_ezb">
+                            <div class="t">
+                                <p>
+                                    Der gesuchte Aufsatz ist über ein Online-Abonnement Ihrer Bibliothek <b>freigeschaltet</b><span class="t_infolink"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=ezb&amp;rl_link_name=issnlink&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">i</a></span>.
+                                </p>
+                                <div class="t_ezb_result">
+                                    <p>
+                                        <span class="t_ezb_yellow">&nbsp;</span> Zum Volltext (via SpringerLink) <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=ezb&amp;rl_link_name=0.article&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                    </p>
+                                </div>
+                                <div class="t_ezb_result">
+                                    <p>
+                                        <span class="t_ezb_green">&nbsp;</span> Zur Zeitschriftenhomepage<sup>*</sup> (via www.ncbi.nlm.nih.gov) <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=ezb&amp;rl_link_name=1.article&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                    </p>
+                                </div>
+                                <p>
+                                    <sup>*</sup>Es konnte nicht zuverlässig festgestellt werden, ob der gesuchte Aufsatz in den Zeitraum fällt, für den bei diesem Anbieter der Volltext verfügbar ist.
+                                </p>
+                            </div>
+                        </div>
+                        <div id="t_zdb">
+                            <div class="t">
+                                <p>
+            <span class="t_title">
+	     Zeitschriftendatenbank (ZDB)
+            </span>
+                                    <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=zdb&amp;rl_link_name=issn1&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                </p>
+                            </div>
+                        </div>
+                        <div id="t_ubl_vufind_local">
+                            <div class="t_last">
+                                <p>
+            <span class="t_title">
+	     Katalog der Universitätsbibliothek Leipzig
+            </span>
+                                    <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=ubl_vufind_local&amp;rl_link_name=issn1&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                </p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <a name="a_catalog"></a>
+            <div id="tg_catalog">
+                <div class="tg">
+
+                    <h2>
+                        Bestände anderer Bibliotheken
+                    </h2>
+                    <div class="tg_targets">
+                        <div id="t_slub_primo">
+                            <div class="t">
+                                <p>
+            <span class="t_title">
+	     Bestandsnachweis im SLUB-Katalog
+            </span>
+                                    <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=slub_primo&amp;rl_link_name=issn1&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                </p>
+                            </div>
+                        </div>
+                        <div id="t_tuche_vufind">
+                            <div class="t">
+                                <p>
+            <span class="t_title">
+	     Katalog UB Chemnitz
+            </span>
+                                    <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=tuche_vufind&amp;rl_link_name=issn1&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                </p>
+                            </div>
+                        </div>
+                        <div id="t_tubfr_vufind">
+                            <div class="t_last">
+                                <p>
+            <span class="t_title">
+	     Katalog der UB Freiberg
+            </span>
+                                    <span class="t_link"><a href="http://www-fr.redi-bw.de/links/?rl_site=ubl&amp;rl_action=link&amp;rl_link_target=tubfr_vufind&amp;rl_link_name=issn1&amp;rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" target="_blank">&#187;</a></span>
+                                </p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <a name="a_web"></a>
+            <div id="tg_web">
+                <div class="tg">
+
+                    <h2>
+                        Suche im Internet
+                    </h2>
+                    <div class="tg_targets">
+                        <div id="t_google_scholar">
+                            <div class="t">
+                                <form name="rl_google_scholar_form" class="t_select" action="http://www-fr.redi-bw.de/links/" method="get" target="_blank">
+                                    <p>
+                                        <input type="hidden" name="rl_site" value="ubl" /><input type="hidden" name="rl_action" value="link" /><input type="hidden" name="rl_link_target" value="google_scholar" /><input type="hidden" name="rl_citation" value="9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" />
+             <span class="t_title">
+              Google-Scholar Suche nach
+             </span>
+                                        <select name="rl_link_name" size="1">
+                                            <option value="atau">Titel und Autor</option>
+                                            <option value="at">Titel</option>
+                                            <option value="au">Autor</option>
+                                            <option value="ti1">Zeitschriftentitel</option>
+                                        </select>
+                                        <button class="t_link" type="submit" name="rl_google_scholar_go"><span>&#187;</span></button>
+                                    </p>
+                                </form>
+                            </div>
+                        </div>
+                        <div id="t_google">
+                            <div class="t_last">
+                                <form name="rl_google_form" class="t_select" action="http://www-fr.redi-bw.de/links/" method="get" target="_blank">
+                                    <p>
+                                        <input type="hidden" name="rl_site" value="ubl" /><input type="hidden" name="rl_action" value="link" /><input type="hidden" name="rl_link_target" value="google" /><input type="hidden" name="rl_citation" value="9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7" />
+             <span class="t_title">
+              Google Suche nach
+             </span>
+                                        <select name="rl_link_name" size="1">
+                                            <option value="atau">Titel und Autor</option>
+                                            <option value="at">Titel</option>
+                                            <option value="au">Autor</option>
+                                            <option value="ti2">Zeitschriftentitel</option>
+                                        </select>
+                                        <button class="t_link" type="submit" name="rl_google_go"><span>&#187;</span></button>
+                                    </p>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <a name="a_info"></a>
+            <div id="tg_info">
+                <div class="tg">
+
+                    <h2>
+                        Kontakt
+                    </h2>
+                    <div class="tg_targets">
+                        <div id="t_info_contact">
+                            <div class="t_last">
+                                <p>
+            <span class="t_longinfo">
+             Für Fragen und Anregungen wenden Sie sich bitte an <a class="textlink" href="mailto:emedien@ub.uni-leipzig.de">emedien@ub.uni-leipzig.de</a>.
+            </span>
+                                </p>          </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div id="services_end">
+        </div>
+    </div>
+
+    <div id="footer">
+        <span class="powered">Powered by: ReDI&#187;Links | <a href="http://ezb.uni-regensburg.de/?bibid=UBL" target="_blank">Elektronische Zeitschriftenbibliothek (EZB)</a> | <a href="http://www.crossref.org/" target="_blank">CrossRef</a></span>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/AdvancedSearchTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/AdvancedSearchTest.php
index 74e6f1bb271223c5141956a036f57ee03f31cf7b..4d5687c92e79b6ef36144215d4a06fa15a828636 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/AdvancedSearchTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/AdvancedSearchTest.php
@@ -65,12 +65,12 @@ class AdvancedSearchTest extends \VuFindTest\Unit\MinkTestCase
         $session->executeScript("addSearch(0)"); // add_search_link_0 click
         $this->assertNotNull($page->findById('search0_3'));
         // No visible x next to lonely search term
-        $this->assertNotNull($page->find('css', '#search1_0 .delete.hidden'));
+        $this->assertNotNull($page->find('css', '#search1_0 .close.hidden'));
         // Add a search term in another group
         $session->executeScript("addSearch(1)"); // add_search_link_1 click
         $this->assertNotNull($page->findById('search1_1'));
         // Visible x next to lonely search term
-        $this->assertNotNull($page->find('css', '#search1_0 .delete:not(.hidden)'));
+        $this->assertNotNull($page->find('css', '#search1_0 .close:not(.hidden)'));
 
         // Enter search for bride of the tomb
         $page->findById('search_lookfor0_0')->setValue('bride');
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
index 63274950cd7b135fb5f34f118f6f2dc5bb6bb1a3..814656bfdc0b2fc3fdf8b7bd14fffe1b91766116 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
@@ -47,7 +47,9 @@ class CartTest extends \VuFindTest\Unit\MinkTestCase
     {
         // Activate the cart:
         $this->changeConfigs(
-            ['config' => ['Site' => ['showBookBag' => true, 'theme' => 'blueprint']]]
+            ['config' =>
+                ['Site' => ['showBookBag' => true, 'theme' => 'bootprint3']]
+            ]
         );
 
         $session = $this->getMinkSession();
@@ -60,7 +62,7 @@ class CartTest extends \VuFindTest\Unit\MinkTestCase
         $updateCart = $page->find('css', '#updateCart');
         $this->assertTrue(is_object($updateCart));
         $updateCart->click();
-        $content = $page->find('css', '#contextHelpContent');
+        $content = $page->find('css', '.popover-content');
         $this->assertTrue(is_object($content));
         $this->assertEquals(
             'No items were selected. '
@@ -72,18 +74,21 @@ class CartTest extends \VuFindTest\Unit\MinkTestCase
         $selectAll = $page->find('css', '#addFormCheckboxSelectAll');
         $selectAll->check();
         $updateCart->click();
-        $this->assertEquals('2', $page->find('css', '#cartSize')->getText());
+        $this->assertEquals('2', $page->find('css', '#cartItems strong')->getText());
 
         // Open the cart and empty it:
-        $viewCart = $page->find('css', '#viewCart');
+        $viewCart = $page->find('css', '#cartItems');
         $this->assertTrue(is_object($viewCart));
         $viewCart->click();
-        $cartSelectAll = $page->find('css', '#cartCheckboxSelectAll');
+        $cartSelectAll = $page->find('css', '.modal-dialog .checkbox-select-all');
         $cartSelectAll->check();
-        $delete = $page->find('css', '.bookbagDelete');
+        $delete = $page->find('css', '#cart-delete-label');
         $delete->click();
-        $close = $page->find('css', '.ui-dialog-titlebar-close');
+        $deleteConfirm = $page->find('css', '#cart-confirm-delete');
+        $this->assertTrue(is_object($deleteConfirm));
+        $deleteConfirm->click();
+        $close = $page->find('css', 'button.close');
         $close->click();
-        $this->assertEquals('0', $page->find('css', '#cartSize')->getText());
+        $this->assertEquals('0', $page->find('css', '#cartItems strong')->getText());
     }
 }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
index 11b8251e2f4ddab2c5533e4d08f1046d4121037e..2f2057bb8b26f68dc484e4550b20181c6d4bc46c 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
@@ -26,7 +26,7 @@
  * @link     http://www.vufind.org  Main Page
  */
 namespace VuFindTest\Auth;
-use VuFind\Auth\Database, Zend\Stdlib\Parameters;
+use VuFind\Auth\Database, Zend\Db\ResultSet\ResultSet, Zend\Stdlib\Parameters;
 
 /**
  * Database authentication test class.
@@ -110,9 +110,7 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
     public function testCreateDuplicateEmail()
     {
         // Fake services:
-        $table = $this->getMock(
-            'VuFind\Db\Table\Tags', ['getByEmail', 'getByUsername']
-        );
+        $table = $this->getMockTable(['getByEmail', 'getByUsername']);
         $table->expects($this->once())->method('getByEmail')
             ->with($this->equalTo('me@mysite.com'))
             ->will($this->returnValue(true));
@@ -136,9 +134,7 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
     public function testCreateDuplicateUsername()
     {
         // Fake services:
-        $table = $this->getMock(
-            'VuFind\Db\Table\Tags', ['getByUsername']
-        );
+        $table = $this->getMockTable(['getByUsername']);
         $table->expects($this->any())->method('getByUsername')
             ->with($this->equalTo('good'))
             ->will($this->returnValue(true));
@@ -156,10 +152,7 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
     public function testSuccessfulCreation()
     {
         // Fake services:
-        $table = $this->getMock(
-            'VuFind\Db\Table\Tags', ['insert', 'getByEmail', 'getByUsername']
-        );
-        $table->expects($this->once())->method('insert');
+        $table = $this->getMockTable(['insert', 'getByEmail', 'getByUsername']);
         $table->expects($this->once())->method('getByEmail')
             ->with($this->equalTo('me@mysite.com'))
             ->will($this->returnValue(false));
@@ -167,9 +160,10 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
             ->with($this->equalTo('good'))
             ->will($this->returnValue(false));
         $db = $this->getDatabase($table);
-        $this->assertEquals(
-            false, $db->create($this->getRequest($this->getCreateParams()))
-        );
+        $prototype = $table->getResultSetPrototype()->getArrayObjectPrototype();
+        $prototype->expects($this->once())->method('save');
+        $user = $db->create($this->getRequest($this->getCreateParams()));
+        $this->assertTrue(is_object($user));
     }
 
     // INTERNAL API
@@ -191,6 +185,43 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
         ];
     }
 
+    /**
+     * Get a mock row object
+     *
+     * @return \VuFind\Db\Row\User
+     */
+    protected function getMockRow()
+    {
+        return $this->getMockBuilder('VuFind\Db\Row\User')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
+    /**
+     * Get a mock table object
+     *
+     * @param array $methods Methods to mock
+     *
+     * @return \VuFind\Db\Table\User
+     */
+    protected function getMockTable($methods = [])
+    {
+        $methods[] = 'getResultSetPrototype';
+        $mock = $this->getMockBuilder('VuFind\Db\Table\User')
+            ->disableOriginalConstructor()
+            ->setMethods($methods)
+            ->getMock();
+        $mock->expects($this->any())->method('getResultSetPrototype')
+            ->will(
+                $this->returnValue(
+                    new ResultSet(
+                        ResultSet::TYPE_ARRAYOBJECT, $this->getMockRow()
+                    )
+                )
+            );
+        return $mock;
+    }
+
     /**
      * Get a fake HTTP request.
      *
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
index e44600480769faa6fac20a68e33f1a1fbd237268..16519f97745b9383d9e955a1057fe6aa4e4bcc61 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
@@ -22,12 +22,18 @@
  * @category VuFind2
  * @package  Tests
  * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Jochen Lienhard <lienhard@ub.uni-freiburg.de>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     http://www.vufind.org  Main Page
  */
 namespace VuFindTest\ILS\Driver;
 use VuFind\ILS\Driver\DAIA;
 
+use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Zend\Http\Response as HttpResponse;
+
+use InvalidArgumentException;
+
 /**
  * ILS driver test
  *
@@ -39,11 +45,236 @@ use VuFind\ILS\Driver\DAIA;
  */
 class DAIATest extends \VuFindTest\Unit\ILSDriverTestCase
 {
+
     /**
      * Constructor
      */
     public function __construct()
     {
-        $this->driver = new DAIA();
+        $this->driver = $this->createConnector();
+    }
+
+    /**
+     * Test
+     *
+     * @return void
+     */
+    public function testJSONgetStatus()
+    {
+        $conn = $this->createConnector('daia.json');
+        $conn->setConfig(
+            [
+                'DAIA' =>
+                    [
+                        'baseUrl'            => 'http://daia.gbv.de/',
+                        'daiaIdPrefix'       => 'http://uri.gbv.de/document/opac-de-000:ppn:',
+                        'daiaResponseFormat' => 'json',
+                    ]
+            ]
+        );
+        $conn->init();
+        $result = $conn->getStatus('027586081');
+
+        // exact result for using the DAIA.php with testfile daia.json
+        $testResult = [
+            0 =>
+                [
+                    'status' =>    null,
+                    'availability' => true,
+                    'duedate' => null,
+                    'id' => "027586081",
+                    'item_id' => "http://uri.gbv.de/document/opac-de-000:epn:711134758",
+                    'ilslink' => "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                    'number' => 1,
+                    'barcode' => "1",
+                    'reserve' => "N",
+                    'callnumber' => "ABC 12",
+                    'location' => "Abteilung III",
+                ],
+            1 =>
+                [
+                    'status' => null,
+                    'availability' => true,
+                    'duedate' => null,
+                    'id' => "027586081",
+                    'item_id' => "http://uri.gbv.de/document/opac-de-000:epn:711134766",
+                    'ilslink' => "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                    'number' => 2,
+                    'barcode' => "1",
+                    'reserve' => "N",
+                    'callnumber' => "DEF 34",
+                    'location' => "Abteilung III",
+                ],
+            2 =>
+                [
+                    'status' => "dummy text",
+                    'availability' => false,
+                    'duedate' => "2115-02-09",
+                    'id' => "027586081",
+                    'item_id' => "http://uri.gbv.de/document/opac-de-000:epn:7111347777",
+                    'ilslink' => "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                    'number' => 3,
+                    'barcode' => "1",
+                    'reserve' => "N",
+                    'callnumber' => "GHI 56",
+                    'location' => "Abteilung III",
+                ],
+        ];
+
+        $this->assertEquals($result, $testResult);
+    }
+
+    /**
+     * Test
+     *
+     * @return void
+     */
+    public function testXMLgetStatus()
+    {
+        $conn = $this->createConnector('daia.xml');
+        $conn->setConfig(
+            [
+                'DAIA' =>
+                    [
+                        'baseUrl'            => 'http://daia.gbv.de/',
+                        'daiaIdPrefix'       => 'http://uri.gbv.de/document/opac-de-000:ppn:',
+                        'daiaResponseFormat' => 'xml',
+                    ]
+            ]
+        );
+        $conn->init();
+        $result = $conn->getStatus('027586081');
+
+        // exact result for using the DAIA.php with testfile daia.xml
+        $testResult = [
+            0 => [
+                'callnumber' => "ABC 12",
+                'availability' => "1",
+                'number' => 1,
+                'reserve' => "No",
+                'duedate' => "",
+                'queue' => "",
+                'delay' => "unknown",
+                'barcode' => 1,
+                'status' => "",
+                'id' => "027586081",
+                'item_id' =>
+                    "http://uri.gbv.de/document/opac-de-000:epn:711134758",
+                'recallhref' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                'location' => "Abteilung III",
+                'location.id' =>
+                    "http://uri.gbv.de/organization/isil/DE-000",
+                'location.href' => "http://www.example-library.edu",
+                'label' => "ABC 12",
+                'notes' => [],
+                'presentation.availability' => "1",
+                'presentation_availability' => "1",
+                'presentation.delay' => "unknown",
+                'loan.availability' => "1",
+                'loan_availability' => "1",
+                'loan.delay' => "unknown",
+                'interloan.availability' => "1",
+                'interloan.delay' => "unknown",
+                'ilslink' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+            ],
+            1 => [
+                'callnumber' => "DEF 34",
+                'availability' => "1",
+                'number' => 2,
+                'reserve' => "No",
+                'duedate' => "",
+                'queue' => "",
+                'delay' => "",
+                'barcode' => 1,
+                'status' => "",
+                'id' => "027586081",
+                'item_id' =>
+                    "http://uri.gbv.de/document/opac-de-000:epn:711134766",
+                'recallhref' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                'location' => "Abteilung III",
+                'location.id' =>
+                    "http://uri.gbv.de/organization/isil/DE-000",
+                'location.href' => "http://www.example-library.edu",
+                'label' => "DEF 34",
+                'notes' => [],
+                'presentation.availability' => "1",
+                'presentation_availability' => "1",
+                'loan.availability' => "1",
+                'loan_availability' => "1",
+                'interloan.availability' => "1",
+                'ilslink' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+            ],
+            2 => [
+                'callnumber' => "GHI 56",
+                'availability' => "0",
+                'number' => 3,
+                'reserve' => "No",
+                'duedate' => "2115-02-09",
+                'queue' => "",
+                'delay' => "",
+                'barcode' => 1,
+                'status' => "",
+                'id' => "027586081",
+                'item_id' =>
+                    "http://uri.gbv.de/document/opac-de-000:epn:7111347777",
+                'recallhref' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+                'location' => "Abteilung III",
+                'location.id' =>
+                    "http://uri.gbv.de/organization/isil/DE-000",
+                'location.href' => "http://www.example-library.edu",
+                'label' => "GHI 56",
+                'notes' => [],
+                'presentation.availability' => "0",
+                'presentation_availability' => "0",
+                'presentation.duedate' => "2115-02-09",
+                'loan.availability' => "0",
+                'loan_availability' => "0",
+                'loan.duedate' => "2115-02-09",
+                'interloan.availability' => "0",
+                'interloan.duedate' => "2115-02-09",
+                'ilslink' =>
+                    "http://opac.example-library.edu/DB=1/PPNSET?PPN=027586081",
+            ],
+        ];
+
+        $this->assertEquals($result, $testResult);
+    }
+
+    /**
+     * Create connector with fixture file.
+     *
+     * @param string $fixture Fixture file
+     *
+     * @return Connector
+     *
+     * @throws InvalidArgumentException Fixture file does not exist
+     */
+    protected function createConnector($fixture = null)
+    {
+        $adapter = new TestAdapter();
+        if ($fixture) {
+            $file = realpath(
+                __DIR__ .
+                '/../../../../../../tests/fixtures/daia/response/' . $fixture
+            );
+            if (!is_string($file) || !file_exists($file) || !is_readable($file)) {
+                throw new InvalidArgumentException(
+                    sprintf('Unable to load fixture file: %s ', $file)
+                );
+            }
+            $response = file_get_contents($file);
+            $responseObj = HttpResponse::fromString($response);
+            $adapter->setResponse($responseObj);
+        }
+        $service = new \VuFindHttp\HttpService();
+        $service->setDefaultAdapter($adapter);
+        $conn = new DAIA();
+        $conn->setHttpService($service);
+        return $conn;
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
index d77535edde45b5deba8a4c95b0e7e33770dad3e6..91d089b40791b81194fc00c16415886fde9bd124 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
@@ -100,7 +100,7 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
         $this->callMethod($driver, 'getLocalId', ['bad']);
         $this->assertEquals(
             'VuFind\ILS\Driver\MultiBackend: '
-            . "Could not find local id in 'bad' using '.'",
+            . "Could not find local id in 'bad'",
             $writer->events[1]['message']
         );
     }
@@ -396,15 +396,13 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
             = $this->callMethod($driver, 'stripIdPrefixes', [$data, $source]);
         $this->assertEquals("record", $result);
 
-        $delimiters = ['login' => "\t"];
-        $this->setproperty($driver, 'delimiters', $delimiters);
         $expected = [
             'id' => 'record1',
             'cat_username' => 'record2'
         ];
         $data = [
             'id' => "$source.record1",
-            'cat_username' => "$source\trecord2"
+            'cat_username' => "$source.record2"
         ];
         $result
             = $this->callMethod($driver, 'stripIdPrefixes', [$data, $source]);
@@ -429,7 +427,7 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
                 'id' => "$source.record2",
                 'cat_username' => [
                     'id' => "$source.record3",
-                    'cat_username' => "$source\trecord4"
+                    'cat_username' => "$source.record4"
                 ],
                 'cat_info' => "$source.record5",
                 'other' => "$source.something"
@@ -716,9 +714,6 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
         $term = "source.local";
         $return = $this->callMethod($driver, 'getLocalId', [$term]);
         $this->assertEquals("local", $return);
-
-        $return = $this->callMethod($driver, 'getLocalId', [$term, '!']);
-        $this->assertEquals($term, $return);
     }
 
     /**
@@ -875,10 +870,6 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
             ->method('patronLogin')
             ->with('username', 'password')
             ->will($this->returnValue($patronReturn));
-        $ILS->expects($this->at(1))
-            ->method('patronLogin')
-            ->with('username', 'password')
-            ->will($this->returnValue($patronReturn));
 
         //Prep MultiBackend with values it will need
         $drivers = [$instance => 'Voyager'];
@@ -897,29 +888,6 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
             $patron['cat_username']
         );
 
-        // Try with another delimiter
-        $driver->setConfig(
-            [
-                'Drivers' => [],
-                'Login' => [
-                    'drivers' => ['d2', 'd1']
-                ],
-                'Delimiters' => [
-                    'login' => "\t"
-                ]
-            ]
-        );
-        $driver->init();
-
-        //Call the method
-        $patron = $driver->patronLogin("$instance\tusername", 'password');
-
-        //Check that it added username info properly.
-        $this->assertSame(
-            $instance . "\t" . $patronReturn['cat_username'],
-            $patron['cat_username']
-        );
-
         $this->setExpectedException('VuFind\Exception\ILS');
         $driver->patronLogin("bad", "info");
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..53e9c42835fba0108af0acf31fe8e2597a100484
--- /dev/null
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Redi resolver driver test
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Leipzig University Library 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Tests
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+namespace VuFindTest\Resolver\Driver;
+use VuFind\Resolver\Driver\Redi;
+
+use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Zend\Http\Response as HttpResponse;
+
+use InvalidArgumentException;
+
+/**
+ * Redi resolver driver test
+ *
+ * @category VuFind2
+ * @package  Tests
+ * @author   André Lahmann <lahmann@ub.uni-leipzig.de>
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://www.vufind.org  Main Page
+ */
+class RediTest extends \VuFindTest\Unit\TestCase
+{
+
+    /**
+     * Test-Config
+     *
+     * @var array
+     */
+    protected $openUrlConfig = [
+        'OpenURL' => [
+            'url' => "http://www.redi-bw.de/links/ubl",
+            'rfr_id' => "www.ub.uni-leipzig.de",
+            'resolver' => "redi",
+            'window_settings' => "toolbar=no,location=no,directories=no,buttons=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=550,height=600",
+            'show_in_results' => false,
+            'show_in_record' => false,
+            'show_in_holdings' => true,
+            'embed' => true,
+            'replace_other_urls' => true,
+        ],
+    ];
+
+    /**
+     * Test
+     *
+     * @return void
+     */
+    public function testParseLinks()
+    {
+        $conn = $this->createConnector('redi.xhtml');
+        $openUrl = "url_ver=Z39.88-2004&ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fwww.ub.uni-leipzig.de%3Agenerator&rft.title=Are+ACOs+on+Uncertain+Ethical+Ground+and+a+Threat+to+the+Autonomy+of+Patients+and+Physicians%3F&rft.date=2014-07-03&genre=article&rft_id=info%3Adoi%2F10.1007%2Fs11606-014-2915-9&issn=1525-1497&volume=29&issue=10&spage=1319&epage=1321&pages=1319-1321&jtitle=J+GEN+INTERN+MED&atitle=Are+ACOs+on+Uncertain+Ethical+Ground+and+a+Threat+to+the+Autonomy+of+Patients+and+Physicians%3F&aulast=Lindsey&aufirst=Gene&rft.language%5B0%5D=eng";
+        $result = $conn->parseLinks($conn->fetchLinks($openUrl));
+
+        $testResult = [
+            0 => [
+                'title' => "DOI:10.1007/s11606-014-2915-9",
+                'href' => "http://www-fr.redi-bw.de/links/?rl_site=ubl&rl_action=link&rl_link_target=citation&rl_link_name=doi&rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7",
+                'service_type' => "getFullTxt",
+             ],
+            1 => [
+                'title' => "Zum Volltext (via SpringerLink)",
+                'href' => "http://www-fr.redi-bw.de/links/?rl_site=ubl&rl_action=link&rl_link_target=ezb&rl_link_name=0.article&rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7",
+                'access'        => 'limited',
+                'coverage' => "",
+                'service_type' => "getFullTxt",
+            ],
+            2 => [
+                'title' => "Zur Zeitschriftenhomepage* (via www.ncbi.nlm.nih.gov)",
+                'href' => "http://www-fr.redi-bw.de/links/?rl_site=ubl&rl_action=link&rl_link_target=ezb&rl_link_name=1.article&rl_citation=9443914d0e261c0c1f6a3fd8151213c1d4cec05f5d3053097da6fa5597bbb9d7",
+                'access'        => 'open',
+                'coverage' => "*Es konnte nicht zuverlässig festgestellt werden, ob der gesuchte Aufsatz in den Zeitraum fällt, für den bei diesem Anbieter der Volltext verfügbar ist.",
+                'service_type' => "getFullTxt",
+            ],
+        ];
+
+        $this->assertEquals($result, $testResult);
+    }
+
+    /**
+     * Create connector with fixture file.
+     *
+     * @param string $fixture Fixture file
+     *
+     * @return Connector
+     *
+     * @throws InvalidArgumentException Fixture file does not exist
+     */
+    protected function createConnector($fixture = null)
+    {
+        $adapter = new TestAdapter();
+        if ($fixture) {
+            $file = realpath(
+                __DIR__ .
+                '/../../../../../../tests/fixtures/resolver/response/' . $fixture
+            );
+            if (!is_string($file) || !file_exists($file) || !is_readable($file)) {
+                throw new InvalidArgumentException(
+                    sprintf('Unable to load fixture file: %s ', $file)
+                );
+            }
+            $response = file_get_contents($file);
+            $responseObj = HttpResponse::fromString($response);
+            $adapter->setResponse($responseObj);
+        }
+        $client = new \Zend\Http\Client();
+        $client->setAdapter($adapter);
+
+        $conn = new Redi($this->openUrlConfig['OpenURL']['url'], $client);
+        return $conn;
+    }
+}
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2ec64ecb978bdb026f0b228670df11479e6887f
--- /dev/null
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php
@@ -0,0 +1,320 @@
+<?php
+
+/**
+ * Unit tests for Conditional Filter listener.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFindTest\Search\Solr;
+
+use VuFindSearch\ParamBag;
+use VuFindSearch\Backend\Solr\Backend;
+use VuFindSearch\Backend\Solr\Connector;
+use VuFindSearch\Backend\Solr\HandlerMap;
+
+use VuFind\Search\Solr\InjectConditionalFilterListener;
+use VuFindTest\Unit\TestCase;
+use Zend\EventManager\Event;
+
+use ZfcRbac\Service\AuthorizationServiceAwareInterface,
+    ZfcRbac\Service\AuthorizationServiceAwareTrait;
+
+/**
+ * Unit tests for Conditional Filter listener.
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class ConditionalFilterListenerTest extends TestCase
+{
+    /**
+     * Sample configuration for ConditionalFilters.
+     *
+     * @var array
+     */
+    protected static $searchConfig = [
+        '0' => '-conditionalFilter.sample|(NOT institution:"MyInst")',
+        '1' => 'conditionalFilter.sample|institution:"MyInst"'
+    ];
+
+    /**
+     * Sample configuration for empty ConditionalFilters config.
+     *
+     * @var array
+     */
+    protected static $emptySearchConfig = [ ];
+
+    /**
+     * Backend.
+     *
+     * @var BackendInterface
+     */
+    protected $backend;
+
+    /**
+     * Setup.
+     *
+     * @return void
+     */
+    protected function setup()
+    {
+        $handlermap     = new HandlerMap(['select' => ['fallback' => true]]);
+        $connector      = new Connector('http://example.org/', $handlermap);
+        $this->backend  = new Backend($connector);
+    }
+
+    /**
+     * Test attaching listener.
+     *
+     * @return void
+     */
+    public function testAttach()
+    {
+        $listener = new InjectConditionalFilterListener(self::$emptySearchConfig);
+        $mock = $this->getMock('Zend\EventManager\SharedEventManagerInterface');
+        $mock->expects($this->once())->method('attach')->with(
+            $this->equalTo('VuFind\Search'),
+            $this->equalTo('pre'),
+            $this->equalTo([$listener, 'onSearchPre'])
+        );
+        $listener->attach($mock);
+    }
+
+    /**
+     * Test the listener without setting an authorization service.
+     * This should return an empty array.
+     *
+     * @return void
+     */
+    public function testConditionalFilterWithoutAuthorizationService()
+    {
+        $params   = new ParamBag([ ]);
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+
+        $event    = new Event('pre', $this->backend, [ 'params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals([ ], $fq);
+    }
+
+    /**
+     * Test the listener without setting an authorization service,
+     * but with fq-parameters.
+     * This should not touch the parameters.
+     *
+     * @return void
+     */
+    public function testConditionalFilterWithoutAuthorizationServiceWithParams()
+    {
+        $params   = new ParamBag(
+            [
+                'fq' => ['fulltext:Vufind', 'field2:novalue'],
+            ]
+        );
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+
+        $event    = new Event('pre', $this->backend, [ 'params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals(
+            [0 => 'fulltext:Vufind',
+            1 => 'field2:novalue'], $fq
+        );
+    }
+
+    /**
+     * Test the listener with an empty conditional filter config.
+     *
+     * @return void
+     */
+    public function testConditionalFilterEmptyConfig()
+    {
+        $params   = new ParamBag([ ]);
+        $listener = new InjectConditionalFilterListener(self::$emptySearchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $listener->setAuthorizationService($mockAuth);
+
+        $event    = new Event('pre', $this->backend, [ 'params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals([ ], $fq);
+    }
+
+    /**
+     * Test the listener with an empty conditional filter config,
+     * but with given fq parameters
+     *
+     * @return void
+     */
+    public function testConditionalFilterEmptyConfigWithFQ()
+    {
+        $params   = new ParamBag(
+            [
+                'fq' => ['fulltext:Vufind', 'field2:novalue'],
+            ]
+        );
+        $listener = new InjectConditionalFilterListener(self::$emptySearchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $listener->setAuthorizationService($mockAuth);
+
+        $event    = new Event('pre', $this->backend, [ 'params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals(
+            [0 => 'fulltext:Vufind',
+            1 => 'field2:novalue'], $fq
+        );
+    }
+
+    /**
+     * Test the listener without preset fq parameters
+     * if the conditional filter is granted
+     *
+     * @return void
+     */
+    public function testConditionalFilter()
+    {
+        $params   = new ParamBag([ ]);
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $mockAuth->expects($this->any())->method('isGranted')
+            ->with($this->equalTo('conditionalFilter.sample'))
+            ->will($this->returnValue(true));
+        $listener->setAuthorizationService($mockAuth);
+
+        $event    = new Event('pre', $this->backend, [ 'params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals(
+            [0 => 'institution:"MyInst"'], $fq
+        );
+    }
+
+    /**
+     * Test the listener without preset fq parameters
+     * if the conditional filter is not granted
+     *
+     * @return void
+     */
+    public function testNegativeConditionalFilter()
+    {
+        $params   = new ParamBag([ ]);
+
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $mockAuth->expects($this->any())->method('isGranted')
+            ->with($this->equalTo('conditionalFilter.sample'))
+            ->will($this->returnValue(false));
+        $listener->setAuthorizationService($mockAuth);
+        $event    = new Event('pre', $this->backend, [ 'params' => $params ]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals([0 => '(NOT institution:"MyInst")'], $fq);
+    }
+
+    /**
+     * Test the listener with preset fq-parameters
+     * if the conditional filter is not granted
+     *
+     * @return void
+     */
+    public function testNegativeConditionalFilterWithFQ()
+    {
+        $params   = new ParamBag(
+            [
+                'fq' => ['fulltext:Vufind', 'field2:novalue'],
+            ]
+        );
+
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $mockAuth->expects($this->any())->method('isGranted')
+            ->with($this->equalTo('conditionalFilter.sample'))
+            ->will($this->returnValue(false));
+        $listener->setAuthorizationService($mockAuth);
+        $event    = new Event('pre', $this->backend, ['params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals(
+            [0 => 'fulltext:Vufind',
+            1 => 'field2:novalue',
+            2 => '(NOT institution:"MyInst")'
+            ], $fq
+        );
+    }
+
+    /**
+     * Test the listener with preset fq-parameters
+     * if the conditional filter is granted
+     *
+     * @return void
+     */
+    public function testConditionalFilterWithFQ()
+    {
+        $params   = new ParamBag(
+            [
+                'fq' => ['fulltext:Vufind', 'field2:novalue'],
+            ]
+        );
+
+        $listener = new InjectConditionalFilterListener(self::$searchConfig);
+        $mockAuth = $this->getMockBuilder('ZfcRbac\Service\AuthorizationService')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $mockAuth->expects($this->any())->method('isGranted')
+            ->with($this->equalTo('conditionalFilter.sample'))
+            ->will($this->returnValue(true));
+        $listener->setAuthorizationService($mockAuth);
+        $event    = new Event('pre', $this->backend, ['params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $this->assertEquals(
+            [0 => 'fulltext:Vufind',
+            1 => 'field2:novalue',
+            2 => 'institution:"MyInst"'
+            ], $fq
+        );
+    }
+}
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d483cd939ef4bd141eafde07d3be60e468da20d
--- /dev/null
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * Unit tests for FilterFieldConversionListener.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2015.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+namespace VuFindTest\Search\Solr;
+
+use VuFindSearch\ParamBag;
+
+use VuFind\Search\Solr\FilterFieldConversionListener;
+use VuFindTest\Unit\TestCase;
+use Zend\EventManager\Event;
+
+/**
+ * Unit tests for FilterFieldConversionListener.
+ *
+ * @category VuFind2
+ * @package  Search
+ * @author   Oliver Goldschmidt <o.goldschmidt@tuhh.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org   Main Site
+ */
+class FilterFieldConversionListenerTest extends TestCase
+{
+    /**
+     * Test attaching listener.
+     *
+     * @return void
+     */
+    public function testAttach()
+    {
+        $listener = new FilterFieldConversionListener(['foo' => 'bar']);
+        $mock = $this->getMock('Zend\EventManager\SharedEventManagerInterface');
+        $mock->expects($this->once())->method('attach')->with(
+            $this->equalTo('VuFind\Search'),
+            $this->equalTo('pre'),
+            $this->equalTo([$listener, 'onSearchPre'])
+        );
+        $listener->attach($mock);
+    }
+
+    /**
+     * Test the listener without setting an authorization service.
+     * This should return an empty array.
+     *
+     * @return void
+     */
+    public function testFilterTranslation()
+    {
+        $params   = new ParamBag(
+            [
+                'fq' => [
+                    'foo:value',
+                    'baz:"foo:value"',
+                    'foofoo:value',
+                    "foo\\:value",
+                    'baz:value OR foo:value',
+                    '(foo:value)',
+                ]
+            ]
+        );
+        $listener = new FilterFieldConversionListener(
+            ['foo' => 'bar', 'baz' => 'boo']
+        );
+
+        $backend = $this->getMockBuilder('VuFindSearch\Backend\Solr\Backend')
+            ->disableOriginalConstructor()->getMock();
+        $event = new Event('pre', $backend, ['params' => $params]);
+        $listener->onSearchPre($event);
+
+        $fq   = $params->get('fq');
+        $expected = [
+            'bar:value',
+            'boo:"foo:value"',
+            'foofoo:value',
+            "foo\\:value",
+            'boo:value OR bar:value',
+            '(bar:value)',
+        ];
+        $this->assertEquals($expected, $fq);
+    }
+}
\ No newline at end of file
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php
index be16a4549862589c2a1c0ed2bf369bbe4c1f6c80..51afacf9480dada6229ee6cc822c066ccdf05c1a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php
@@ -88,7 +88,7 @@ class HierarchicalFacetHelperTest extends TestCase
         ],
         [
             'value' => '1/Audio/Music/',
-            'displayText' => '1/Audio/Music/',
+            'displayText' => 'Music',
             'count' => 50,
             'operator' => 'OR',
             'isApplied' => false
@@ -207,21 +207,35 @@ class HierarchicalFacetHelperTest extends TestCase
     public function testFormatDisplayText()
     {
         $this->assertEquals(
-            $this->helper->formatDisplayText('0/Sound/'),
+            $this->helper->formatDisplayText('0/Sound/')->getDisplayString(),
             'Sound'
         );
         $this->assertEquals(
-            $this->helper->formatDisplayText('1/Sound/Noisy/'),
+            $this->helper->formatDisplayText('1/Sound/Noisy/')->getDisplayString(),
             'Noisy'
         );
         $this->assertEquals(
-            $this->helper->formatDisplayText('1/Sound/Noisy/', true),
+            $this->helper->formatDisplayText('1/Sound/Noisy/', true)
+                ->getDisplayString(),
             'Sound/Noisy'
         );
         $this->assertEquals(
-            $this->helper->formatDisplayText('1/Sound/Noisy/', true, ' - '),
+            $this->helper->formatDisplayText('1/Sound/Noisy/', true, ' - ')
+                ->getDisplayString(),
             'Sound - Noisy'
         );
+        $this->assertEquals(
+            $this->helper->formatDisplayText('0/Sound/'),
+            '0/Sound/'
+        );
+        $this->assertEquals(
+            (string)$this->helper->formatDisplayText('1/Sound/Noisy/', true),
+            '1/Sound/Noisy/'
+        );
+        $this->assertEquals(
+            (string)$this->helper->formatDisplayText('1/Sound/Noisy/', true, ' - '),
+            '1/Sound/Noisy/'
+        );
     }
 
     /**
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
index beaeb3cfeccfca0933305611c7daf8d55375afe2..4106820a9460d383243101d0001a451b0769e78c 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
@@ -50,6 +50,9 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testMissingTemplate()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
+        $record->getView()->resolver()->expects($this->at(0))->method('resolve')
+            ->with($this->equalTo('RecordDriver/SolrMarc/core.phtml'))
+            ->will($this->returnValue(false));
         $record->getView()->expects($this->any())->method('render')
             ->will($this->throwException(new RuntimeException('boom')));
         $record->getCoreMetadata();
@@ -63,12 +66,10 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testTemplateInheritance()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
+        $record->getView()->resolver()->expects($this->at(0))->method('resolve')
             ->with($this->equalTo('RecordDriver/SolrMarc/collection-record.phtml'))
-            ->will($this->throwException(new RuntimeException('boom')));
-        $record->getView()->expects($this->at(1))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrDefault/collection-record.phtml'))
-            ->will($this->returnValue('success'));
+            ->will($this->returnValue(false));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrDefault/collection-record.phtml', 'success', 1);
         $this->assertEquals('success', $record->getCollectionBriefRecord());
     }
 
@@ -80,9 +81,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testGetExport()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/export-foo.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/export-foo.phtml');
         $this->assertEquals('success', $record->getExport('foo'));
     }
 
@@ -102,9 +101,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $record = $this->getRecord(
             $this->loadRecordFixture('testbug1.json'), [], $context
         );
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/format-class.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/format-class.phtml');
         $this->assertEquals('success', $record->getFormatClass('foo'));
     }
 
@@ -116,9 +113,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testGetFormatList()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/format-list.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/format-list.phtml');
         $this->assertEquals('success', $record->getFormatList());
     }
 
@@ -130,9 +125,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testGetToolbar()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/toolbar.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/toolbar.phtml');
         $this->assertEquals('success', $record->getToolbar());
     }
 
@@ -144,9 +137,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testGetCollectionMetadata()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/collection-info.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/collection-info.phtml');
         $this->assertEquals('success', $record->getCollectionMetadata());
     }
 
@@ -158,9 +149,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     public function testGetSearchResult()
     {
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/result-foo.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/result-foo.phtml');
         $this->assertEquals('success', $record->getSearchResult('foo'));
     }
 
@@ -187,11 +176,12 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $context->expects($this->once())->method('restore')
             ->with($this->equalTo(['bar' => 'baz']));
         $record = $this->getRecord($driver, [], $context);
-        $record->getView()->expects($this->at(0))->method('render')
-            ->will($this->throwException(new RuntimeException('boom')));
-        $record->getView()->expects($this->at(1))->method('render')
-            ->with($this->equalTo('RecordDriver/AbstractBase/list-entry.phtml'))
-            ->will($this->returnValue('success'));
+        // Because we are using a mock object, the first round of testing will
+        // include an arbitrary class name in the template path; we need to make
+        // that one fail so we can load the parent class' template instead:
+        $record->getView()->resolver()->expects($this->at(0))->method('resolve')
+            ->will($this->returnValue(false));
+        $this->setSuccessTemplate($record, 'RecordDriver/AbstractBase/list-entry.phtml', 'success', 1, 1);
         $this->assertEquals('success', $record->getListEntry(null, $user));
     }
 
@@ -250,12 +240,22 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $context->expects($this->exactly(2))->method('restore')
             ->with($this->equalTo(['bar' => 'baz']));
         $record = $this->getRecord($driver, $config, $context);
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/previewdata.phtml'))
-            ->will($this->returnValue('success1'));
-        $record->getView()->expects($this->at(1))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/previewlink.phtml'))
-            ->will($this->returnValue('success2'));
+        $record->getView()->resolver()->expects($this->any())->method('resolve')
+            ->will($this->returnValue(true));
+        $tpl1 = 'RecordDriver/SolrMarc/previewdata.phtml';
+        $tpl2 = 'RecordDriver/SolrMarc/previewlink.phtml';
+        $callback = function ($tpl) use ($tpl1, $tpl2) {
+            if ($tpl === $tpl1) {
+                return 'success1';
+            } elseif ($tpl === $tpl2) {
+                return 'success2';
+            } else {
+                return 'fail';
+            }
+        };
+        $record->getView()->expects($this->any())->method('render')
+            ->with($this->logicalOr($this->equalTo($tpl1), $this->equalTo($tpl2)))
+            ->will($this->returnCallback($callback));
         $this->assertEquals('success1success2', $record->getPreviews());
     }
 
@@ -275,9 +275,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $record = $this->getRecord(
             $this->loadRecordFixture('testbug1.json'), [], $context
         );
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/link-bar.phtml'))
-            ->will($this->returnValue('success'));
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/link-bar.phtml');
         $this->assertEquals('success', $record->getLink('bar', 'foo'));
     }
 
@@ -360,10 +358,8 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $context->expects($this->once())->method('restore')
             ->with($this->equalTo(['bar' => 'baz']));
         $config = ['QRCode' => ['showInCore' => true]];
-        $record = $this->getRecord($driver, $config, $context, '2:qrcode-show');
-        $record->getView()->expects($this->at(0))->method('render')
-            ->with($this->equalTo('RecordDriver/SolrMarc/core-qrcode.phtml'))
-            ->will($this->returnValue('success'));
+        $record = $this->getRecord($driver, $config, $context, 'qrcode-show');
+        $this->setSuccessTemplate($record, 'RecordDriver/SolrMarc/core-qrcode.phtml', 'success', '*', '*');
         $this->assertEquals('http://foo/bar?text=success&level=L&size=3&margin=4', $record->getQrCode('core', ['extra' => 'xyzzy']));
     }
 
@@ -405,7 +401,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         // Hard-coded thumbnail:
         $driver = new \VuFindTest\RecordDriver\TestHarness();
         $driver->setRawData(['Thumbnail' => ['bar' => 'baz']]);
-        $record = $this->getRecord($driver, [], null, '1:cover-show');
+        $record = $this->getRecord($driver, [], null, 'cover-show');
         $this->assertEquals('http://foo/bar?bar=baz', $record->getThumbnail());
     }
 
@@ -437,7 +433,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
                 ]
             ]
         );
-        $record = $this->getRecord($driver, [], null, '1:fake-route', 2);
+        $record = $this->getRecord($driver, [], null, 'fake-route', true);
         $this->assertEquals(
             [
                 ['route' => 'fake-route', 'prefix' => 'http://proxy?_=', 'desc' => 'a link', 'url' => 'http://proxy?_=http://server-foo/baz']
@@ -488,7 +484,7 @@ class RecordTest extends \PHPUnit_Framework_TestCase
                 ]
             ]
         );
-        $record = $this->getRecord($driver, [], null, '1:fake-route', 2);
+        $record = $this->getRecord($driver, [], null, 'fake-route', true);
         $this->assertEquals(
             ['http://proxy?_=http://server-foo/baz'], $record->getUrlList()
         );
@@ -500,37 +496,57 @@ class RecordTest extends \PHPUnit_Framework_TestCase
      * @param \VuFind\RecordDriver\AbstractBase $driver    Record driver
      * @param array|Config                      $config    Configuration
      * @param \VuFind\View\Helper\Root\Context  $context   Context helper
-     * @param bool|string                       $url       Should we add a URL helper? False if no, expected timing + : + expected route if yes.
-     * @param bool|int                          $serverurl Should we add a ServerURL helper? False if no, expected timing if yes.
+     * @param bool|string                       $url       Should we add a URL helper? False if no, expected route if yes.
+     * @param bool                              $serverurl Should we add a ServerURL helper?
      *
      * @return Record
      */
-    protected function getRecord($driver, $config = [], $context = null, $url = false, $serverurl = false)
-    {
+    protected function getRecord($driver, $config = [], $context = null,
+        $url = false, $serverurl = false
+    ) {
         if (null === $context) {
             $context = $this->getMockContext();
         }
         $view = $this->getMock('Zend\View\Renderer\PhpRenderer');
-        $view->expects($this->at(0))->method('plugin')
-            ->with($this->equalTo('context'))
-            ->will($this->returnValue($context));
         if ($url) {
-            list($at, $route) = explode(':', $url);
-            $view->expects($this->at($at))->method('plugin')
-                ->with($this->equalTo('url'))
-                ->will($this->returnValue($this->getMockUrl($route)));
+            $url = $this->getMockUrl($url);
         }
         if (false !== $serverurl) {
-            $view->expects($this->at($serverurl))->method('plugin')
-                ->with($this->equalTo('serverurl'))
-                ->will($this->returnValue($this->getMockServerUrl()));
+            $serverurl = $this->getMockServerUrl();
         }
+        $pluginCallback = function ($helper) use ($context, $url, $serverurl) {
+            switch ($helper) {
+            case 'context':
+                return $context;
+            case 'serverurl':
+                return $serverurl;
+            case 'url':
+                return $url;
+            default:
+                return null;
+            }
+        };
+        $view->expects($this->any())->method('plugin')
+            ->will($this->returnCallback($pluginCallback));
+        
+        $view->expects($this->any())->method('resolver')
+            ->will($this->returnValue($this->getMockResolver()));
         $config = is_array($config) ? new \Zend\Config\Config($config) : $config;
         $record = new Record($config);
         $record->setView($view);
         return $record->__invoke($driver);
     }
 
+    /**
+     * Get a mock resolver object
+     *
+     * @return
+     */
+    protected function getMockResolver()
+    {
+        return $this->getMock('Zend\View\Resolver\ResolverInterface');
+    }
+
     /**
      * Get a mock context object
      *
@@ -596,4 +612,27 @@ class RecordTest extends \PHPUnit_Framework_TestCase
         $record->setRawData($json['response']['docs'][0]);
         return $record;
     }
+
+    /**
+     * Set up expectations for a template
+     *
+     * @param Record $record    Record helper
+     * @param string $tpl       Template to expect
+     * @param string $response  Response to send
+     * @param int    $resolveAt Position at which to expect resolve calls
+     * @param int    $rendereAt Position at which to expect render calls
+     *
+     * @return void
+     */
+    protected function setSuccessTemplate($record, $tpl, $response = 'success', $resolveAt = 0, $renderAt = 1)
+    {
+        $expectResolve = $resolveAt === '*' ? $this->any() : $this->at($resolveAt);
+        $record->getView()->resolver()->expects($expectResolve)->method('resolve')
+            ->with($this->equalTo($tpl))
+            ->will($this->returnValue(true));
+        $expectRender = $renderAt === '*' ? $this->any() : $this->at($renderAt);
+        $record->getView()->expects($expectRender)->method('render')
+            ->with($this->equalTo($tpl))
+            ->will($this->returnValue($response));
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php b/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
index 5f31bfb11e3c3814a65a3d3869aa2ca8b995f148..1ff9e9ccced80f74b6e1e53f2cb2912267afe406 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
@@ -235,12 +235,34 @@ class UtilController extends AbstractBase
         return $updates;
     }
 
+    /**
+     * Commit the Solr index.
+     *
+     * @return \Zend\Console\Response
+     */
+    public function commitAction()
+    {
+        return $this->performCommit();
+    }
+
     /**
      * Optimize the Solr index.
      *
      * @return \Zend\Console\Response
      */
     public function optimizeAction()
+    {
+        return $this->performCommit(true);
+    }
+
+    /**
+     * Commit (and possibly optimize) the Solr index.
+     *
+     * @param bool $optimize Should we optimize?
+     *
+     * @return \Zend\Console\Response
+     */
+    protected function performCommit($optimize = false)
     {
         ini_set('memory_limit', '50M');
         ini_set('max_execution_time', '3600');
@@ -253,7 +275,9 @@ class UtilController extends AbstractBase
         // Commit and Optimize the Solr Index
         $solr = $this->getServiceLocator()->get('VuFind\Solr\Writer');
         $solr->commit($core);
-        $solr->optimize($core);
+        if ($optimize) {
+            $solr->optimize($core);
+        }
         return $this->getSuccessResponse();
     }
 
@@ -284,9 +308,15 @@ class UtilController extends AbstractBase
      */
     public function deletesAction()
     {
-        // Parse the command line parameters -- see if we are in "flat file" mode,
-        // find out what file we are reading in,
-        // and determine the index we are affecting!
+        // Parse the command line parameters -- check verbosity, see if we are in
+        // "flat file" mode, find out what file we are reading in, and determine
+        // the index we are affecting!
+        $this->consoleOpts->addRules(
+            [
+                'verbose' => 'Verbose mode',
+            ]
+        );
+        $verbose = $this->consoleOpts->getOption('verbose');
         $argv = $this->consoleOpts->getRemainingArgs();
         $filename = isset($argv[0]) ? $argv[0] : null;
         $mode = isset($argv[1]) ? $argv[1] : 'marc';
@@ -295,19 +325,24 @@ class UtilController extends AbstractBase
         // No filename specified?  Give usage guidelines:
         if (empty($filename)) {
             Console::writeLine("Delete records from VuFind's index.");
-            Console::writeLine("");
-            Console::writeLine("Usage: deletes.php [filename] [format] [index]");
-            Console::writeLine("");
+            Console::writeLine('');
             Console::writeLine(
-                "[filename] is the file containing records to delete."
+                'Usage: deletes.php [--verbose] FILENAME FORMAT INDEX'
             );
+            Console::writeLine('');
             Console::writeLine(
-                "[format] is the format of the file -- "
-                . "it may be one of the following:"
+                'The optional --verbose switch turns on detailed feedback.'
+            );
+            Console::writeLine(
+                'FILENAME is the file containing records to delete.'
+            );
+            Console::writeLine(
+                'FORMAT is the format of the file -- '
+                . 'it may be one of the following:'
             );
             Console::writeLine(
                 "\tflat - flat text format "
-                . "(deletes all IDs in newline-delimited file)"
+                . '(deletes all IDs in newline-delimited file)'
             );
             Console::writeLine(
                 "\tmarc - binary MARC format (delete all record IDs from 001 fields)"
@@ -318,7 +353,7 @@ class UtilController extends AbstractBase
             Console::writeLine(
                 '"marc" is used by default if no format is specified.'
             );
-            Console::writeLine("[index] is the index to use (default = Solr)");
+            Console::writeLine('INDEX is the index to use (default = Solr)');
             return $this->getFailureResponse();
         }
 
@@ -332,6 +367,9 @@ class UtilController extends AbstractBase
         $ids = [];
 
         // Flat file mode:
+        if ($verbose) {
+            Console::writeLine("Loading IDs in {$mode} mode.");
+        }
         if ($mode == 'flat') {
             foreach (explode("\n", file_get_contents($filename)) as $id) {
                 $id = trim($id);
@@ -346,17 +384,39 @@ class UtilController extends AbstractBase
                 ? new File_MARCXML($filename) : new File_MARC($filename);
 
             // Once the records are loaded, the rest of the logic is always the same:
+            $missingIdCount = 0;
             while ($record = $collection->next()) {
                 $idField = $record->getField('001');
-                $ids[] = (string)$idField->getData();
+                if ($idField) {
+                    $ids[] = (string)$idField->getData();
+                } else {
+                    $missingIdCount++;
+                }
+            }
+            if ($verbose && $missingIdCount) {
+                Console::writeLine(
+                    "Encountered $missingIdCount record(s) without IDs."
+                );
             }
         }
 
         // Delete, Commit and Optimize if necessary:
         if (!empty($ids)) {
+            if ($verbose) {
+                Console::writeLine(
+                    'Attempting to delete ' . count($ids) . ' record(s): '
+                    . implode(', ', $ids)
+                );
+            }
             $writer = $this->getServiceLocator()->get('VuFind\Solr\Writer');
             $writer->deleteRecords($index, $ids);
+            if ($verbose) {
+                Console::writeLine('Delete operation completed.');
+            }
+        } elseif ($verbose) {
+            Console::writeLine('Nothing to delete.');
         }
+
         return $this->getSuccessResponse();
     }
 
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
index a3e2cbf55948c13e728ef34d4beac30377e31fce..16cb08a914ae74be8cf532a2a6ec476abfa863ab 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
@@ -150,7 +150,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
      *
      * @return array          An array of query results
      */
-    public function search($query, $start = 1, $limit = null, $sortBy = null,
+    public function sruSearch($query, $start = 1, $limit = null, $sortBy = null,
         $schema = 'marcxml', $process = true
     ) {
         $this->debug('Query: ' . print_r($query, true));
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/LuceneSyntaxHelper.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/LuceneSyntaxHelper.php
index d43cc312ac5121e724e425ce809941a71e241aa2..ce5257bd8932cf6ad16aeb442246353a52aa7578 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/LuceneSyntaxHelper.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/LuceneSyntaxHelper.php
@@ -447,9 +447,10 @@ class LuceneSyntaxHelper
      */
     protected function normalizeColons($input)
     {
+        $lookahead = self::$insideQuotes;
         $input = preg_replace('/:+/', ':', $input);
-        $input = preg_replace('/(\:[:\s]+|[:\s]+:)/', ' ', $input);
-        return $input == ':' ? '' : $input;
+        $input = preg_replace('/(\:[:\s]+|[:\s]+:)' . $lookahead . '/', ' ', $input);
+        return trim($input, ':');
     }
     /**
      * Prepare input to be used in a SOLR query.
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Response/Json/NamedList.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Response/Json/NamedList.php
index 4b7b966a8b7f04391e784fa0449344f90bb31868..2e23154463033ccaff4dc0c313450c655ec32656 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Response/Json/NamedList.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Response/Json/NamedList.php
@@ -149,4 +149,14 @@ class NamedList implements Countable, Iterator
         reset($this->list);
         $this->current = current($this->list);
     }
+
+    /**
+     * Remove element from list.
+     *
+     * @return void
+     */
+    public function remove()
+    {
+        unset($this->list[key($this->list)]);
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
index 538d282568b478bd2b3fbfb0d907c52092d8c128..813cc8dca98d33919f09bc846db6d0e5d82fa404 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
@@ -147,5 +147,4 @@ class Connector extends \VuFindSearch\Backend\SRU\Connector
             'total' => isset($xml->numberOfRecords) ? (int)$xml->numberOfRecords : 0
         ];
     }
-
-}
+}
\ No newline at end of file
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/LuceneSyntaxHelperTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/LuceneSyntaxHelperTest.php
index a68c8ae52840fb8e41b89a086e5a73ad430b3a2a..1d59117e07cdd42e2a6e4a82f2997c67f2f0d0a5 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/LuceneSyntaxHelperTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/LuceneSyntaxHelperTest.php
@@ -317,4 +317,29 @@ class LuceneSyntaxHelperTest extends \VuFindTest\Unit\TestCase
             'a:([b TO c] OR [B TO C])', $lh->normalizeSearchString('a:[b to c]')
         );
     }
+
+    /**
+     * Test colon normalization
+     *
+     * @return void
+     */
+    public function testColonNormalization()
+    {
+        $lh = new LuceneSyntaxHelper(false, false);
+        $tests = [
+            'this : that' => 'this  that',
+            'this: that' => 'this that',
+            'this that:' => 'this that',
+            ':this that' => 'this that',
+            'this :that' => 'this that',
+            'this:that' => 'this:that',
+            'this::::::that' => 'this:that',
+            '"this : that"' => '"this : that"',
+            '::::::::::::::::::::' => '',
+         ];
+        foreach ($tests as $input => $expected)
+        $this->assertEquals(
+            $expected, $lh->normalizeSearchString($input)
+        );
+    }
 }
\ No newline at end of file
diff --git a/themes/blueprint/css/styles.css b/themes/blueprint/css/styles.css
index 88b5cbc4c08f6a2843ca0b82ed6dae957153b233..de669af5d6b25d24616c1122ccd894def0ddc441 100644
--- a/themes/blueprint/css/styles.css
+++ b/themes/blueprint/css/styles.css
@@ -1028,6 +1028,54 @@ div.record img.qrcode {
 .holdsMessage {
     margin-top: 1em;
 }
+.phone-error {
+    color:red;
+    margin-left:80px;
+}
+#tagRecord {
+    display: inline-block;
+    padding-top: 4px;
+}
+.record-tag,
+.record-tag * {
+    display: inline-block;
+    vertical-align: top;
+}
+.record-tag {
+    float: left;
+    margin: 0 4px;
+    padding-top: 4px;
+    padding-right: 1px;
+    padding-bottom: 0;
+    padding-left: 6px;
+}
+.record-tag .badge {
+    background-color: #DDD;
+    border: 0;
+    border-radius: 1em;
+    cursor: pointer;
+    display: inline-block;
+    font-size: 8pt;
+    margin-top: -2px;
+    background-position: 85%;
+    padding-top: 4px;
+    padding-left: .5em;
+    padding-bottom: 4px;
+    padding-right: 20px;
+}
+.record-tag span.badge {
+    padding-top: 2px;
+    padding-left: 4px;
+    padding-bottom: 2px;
+    padding-right: 4px;
+}
+.record-tag.selected {
+    background: #619144;
+    border-radius: 3px;
+}
+.record-tag.selected a {
+    color: #FFF;
+}
 
 /* hack to hide redundant titles introduced by syndetics plus */
 #syn_nyreview .syn_title,
diff --git a/themes/blueprint/js/bulk_actions.js b/themes/blueprint/js/bulk_actions.js
index 9160db249e47de3154fed52c8229c1160e11c255..4afe029e9a71ffc40eedbfbf1a603254541f9a52 100644
--- a/themes/blueprint/js/bulk_actions.js
+++ b/themes/blueprint/js/bulk_actions.js
@@ -59,7 +59,7 @@ function registerBulkActions() {
     // Support delete item from list button:
     $('.delete.tool').unbind('click').click(function(){
         var recordID = this.href.substring(this.href.indexOf('delete=')+'delete='.length);
-        recordID = decodeURIComponent(recordID.split('&')[0]);
+        recordID = decodeURIComponent(recordID.split('&')[0].replace(/\+/g, ' '));
         var listID = this.href.substring(this.href.lastIndexOf('/')+1);
         listID = decodeURIComponent(listID.split('?')[0]);
         if (listID == 'Favorites') {
diff --git a/themes/blueprint/js/common.js b/themes/blueprint/js/common.js
index 4da475c813257cf2ec2862c48abe714e1cc5a49f..974147d4595767b46edbe437b11e7927488affbd 100644
--- a/themes/blueprint/js/common.js
+++ b/themes/blueprint/js/common.js
@@ -1,4 +1,4 @@
-/*global getLightbox, path, vufindString*/
+/*global getLightbox, isPhoneNumberValid, path, vufindString*/
 
 /**
  * Initialize common functions and event handlers.
@@ -11,14 +11,6 @@ $.validator.setDefaults({
     errorClass: 'invalid'
 });
 
-// add a modified version of the original phoneUS rule
-// to accept only 10-digit phone numbers
-$.validator.addMethod("phoneUS", function(phone_number, element) {
-    phone_number = phone_number.replace(/[\-\s().]+/g, "");
-    return this.optional(element) || phone_number.length > 9 &&
-        phone_number.match(/^(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{2}\d{4}$/);
-}, 'Please specify a valid phone number');
-
 function toggleMenu(elemId) {
     var elem = $("#"+elemId);
     if (elem.hasClass("offscreen")) {
@@ -298,6 +290,30 @@ function setupOrFacets() {
   }
 }
 
+// Phone number validation
+var libphoneTranslateCodes = ["libphonenumber_invalid", "libphonenumber_invalidcountry", "libphonenumber_invalidregion", "libphonenumber_notanumber", "libphonenumber_toolong", "libphonenumber_tooshort", "libphonenumber_tooshortidd"];
+var libphoneErrorStrings = ["Phone number invalid", "Invalid country calling code", "Invalid region code", "The string supplied did not seem to be a phone number", "The string supplied is too long to be a phone number", "The string supplied is too short to be a phone number", "Phone number too short after IDD"];
+function phoneNumberFormHandler(numID, regionCode) {
+  var phoneInput = document.getElementById(numID);
+  var number = phoneInput.value;
+  var valid = isPhoneNumberValid(number, regionCode);
+  if(valid !== true) {
+    if(typeof valid === 'string') {
+      for(var i=libphoneErrorStrings.length;i--;) {
+        if(valid.match(libphoneErrorStrings[i])) {
+          valid = vufindString[libphoneTranslateCodes[i]];
+        }
+      }
+    } else {
+      valid = vufindString['libphonenumber_invalid'];
+    }
+    $(phoneInput).siblings('.phone-error').html(valid);
+  } else {
+    $(phoneInput).siblings('.phone-error').html('');
+  }
+  return valid == true;
+}
+
 $(document).ready(function(){
     // initialize autocomplete
     initAutocomplete();
diff --git a/themes/blueprint/js/libphonenumber.js b/themes/blueprint/js/libphonenumber.js
new file mode 100644
index 0000000000000000000000000000000000000000..03a224cf371223c592b4c6d5281e6d7908a6ab80
--- /dev/null
+++ b/themes/blueprint/js/libphonenumber.js
@@ -0,0 +1,486 @@
+(function(){var l,n=this;
+function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==
+b&&"undefined"==typeof a.call)return"object";return b}function p(a,b){function c(){}c.prototype=b.prototype;a.ca=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.ia=function(a,c,e){return b.prototype[c].apply(a,Array.prototype.slice.call(arguments,2))}};var ea=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function q(a,b){return a<b?-1:a>b?1:0};function fa(a,b){a.sort(b||ga)}function ga(a,b){return a>b?1:a<b?-1:0};var s;a:{var ha=n.navigator;if(ha){var ia=ha.userAgent;if(ia){s=ia;break a}}s=""};function ja(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};var ka=-1!=s.indexOf("Opera")||-1!=s.indexOf("OPR"),t=-1!=s.indexOf("Trident")||-1!=s.indexOf("MSIE"),u=-1!=s.indexOf("Gecko")&&-1==s.toLowerCase().indexOf("webkit")&&!(-1!=s.indexOf("Trident")||-1!=s.indexOf("MSIE")),la=-1!=s.toLowerCase().indexOf("webkit");function ma(){var a=n.document;return a?a.documentMode:void 0}
+var na=function(){var a="",b;if(ka&&n.opera)return a=n.opera.version,"function"==da(a)?a():a;u?b=/rv\:([^\);]+)(\)|;)/:t?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:la&&(b=/WebKit\/(\S+)/);b&&(a=(a=b.exec(s))?a[1]:"");return t&&(b=ma(),b>parseFloat(a))?String(b):a}(),oa={};
+function pa(a){if(!oa[a]){for(var b=0,c=ea(String(na)).split("."),d=ea(String(a)).split("."),f=Math.max(c.length,d.length),e=0;0==b&&e<f;e++){var g=c[e]||"",h=d[e]||"",k=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var r=k.exec(g)||["","",""],C=m.exec(h)||["","",""];if(0==r[0].length&&0==C[0].length)break;b=q(0==r[1].length?0:parseInt(r[1],10),0==C[1].length?0:parseInt(C[1],10))||q(0==r[2].length,0==C[2].length)||q(r[2],C[2])}while(0==b)}oa[a]=0<=b}}
+var qa=n.document,ra=qa&&t?ma()||("CSS1Compat"==qa.compatMode?parseInt(na,10):5):void 0;var v;if(!(v=!u&&!t)){var w;if(w=t)w=t&&9<=ra;v=w}v||u&&pa("1.9.1");t&&pa("9");function sa(a,b,c){this.d=b;this.s=c.name;this.o=!!c.p;this.g=c.a;this.t=c.type;this.q=!1;switch(this.g){case ta:case ua:case va:case wa:case xa:case ya:case za:this.q=!0}this.j=c.defaultValue}var za=1,ya=2,ta=3,ua=4,va=6,wa=16,xa=18;sa.prototype.getName=function(){return this.s};function Aa(a,b,c){this.w=a;this.s=b.name||null;this.f={};for(a=0;a<c.length;a++)b=c[a],this.f[b.d]=b}Aa.prototype.getName=function(){return this.s};function Ba(a){a=ja(a.f);fa(a,function(a,c){return a.d-c.d});return a};function x(){this.b={};this.f=this.i().f;this.c=this.r=null}l=x.prototype;l.i=function(){var a=this.constructor,b;if(!(b=a.u)){var c;b=a.aa;var d=[],f=b[0];for(c in b)0!=c&&d.push(new sa(0,c,b[c]));c=new Aa(a,f,d);b=a.u=c}return b};l.has=function(a){return null!=this.b[a.d]};l.get=function(a,b){return y(this,a.d,b)};l.set=function(a,b){z(this,a.d,b)};l.add=function(a,b){Ca(this,a.d,b)};l.clear=function(a){Da(this,a.d)};
+function Ia(a,b){for(var c=Ba(a.i()),d=0;d<c.length;d++){var f=c[d],e=f.d;if(null!=b.b[e]){a.c&&delete a.c[f.d];var g=11==f.g||10==f.g;if(f.o)for(var f=A(b,e)||[],h=0;h<f.length;h++)Ca(a,e,g?f[h].clone():f[h]);else f=A(b,e),g?(g=A(a,e))?Ia(g,f):z(a,e,f.clone()):z(a,e,f)}}}l.clone=function(){var a=new this.constructor;a!=this&&(a.b={},a.c&&(a.c={}),Ia(a,this));return a};
+function A(a,b){var c=a.b[b];if(null==c)return null;if(a.r){if(!(b in a.c)){var d=a.r,f=a.f[b];if(null!=c)if(f.o){for(var e=[],g=0;g<c.length;g++)e[g]=d.n(f,c[g]);c=e}else c=d.n(f,c);return a.c[b]=c}return a.c[b]}return c}function y(a,b,c){var d=A(a,b);return a.f[b].o?d[c||0]:d}function B(a,b){var c;if(null!=a.b[b])c=y(a,b,void 0);else a:{c=a.f[b];if(void 0===c.j){var d=c.t;if(d===Boolean)c.j=!1;else if(d===Number)c.j=0;else if(d===String)c.j=c.q?"0":"";else{c=new d;break a}}c=c.j}return c}
+function z(a,b,c){a.b[b]=c;a.c&&(a.c[b]=c)}function Ca(a,b,c){a.b[b]||(a.b[b]=[]);a.b[b].push(c);a.c&&delete a.c[b]}function Da(a,b){delete a.b[b];a.c&&delete a.c[b]}function D(a,b){a.aa=b;a.i=function(){return a.u||(new a).i()}};function E(){}E.prototype.k=function(a){new a.w;throw Error("Unimplemented");};E.prototype.n=function(a,b){if(11==a.g||10==a.g)return b instanceof x?b:this.k(a.t.i(),b);if(14==a.g||!a.q)return b;var c=a.t;if(c===String){if("number"==typeof b)return String(b)}else if(c===Number&&"string"==typeof b&&("Infinity"===b||"-Infinity"===b||"NaN"===b||/^-?[0-9]+$/.test(b)))return Number(b);return b};function F(a,b){null!=a&&this.append.apply(this,arguments)}l=F.prototype;l.e="";l.set=function(a){this.e=""+a};l.append=function(a,b,c){this.e+=a;if(null!=b)for(var d=1;d<arguments.length;d++)this.e+=arguments[d];return this};l.clear=function(){this.e=""};l.toString=function(){return this.e};/*
+
+ Protocol Buffer 2 Copyright 2008 Google Inc.
+ All other code copyright its respective owners.
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function G(){x.apply(this)}p(G,x);function H(){x.apply(this)}p(H,x);function I(){x.apply(this)}p(I,x);I.prototype.h=function(){return B(this,10)};I.prototype.l=function(a){z(this,10,a)};function J(){x.apply(this)}p(J,x);J.prototype.getMetadata=function(a){return y(this,1,a)};
+D(G,{0:{name:"NumberFormat",m:"i18n.phonenumbers.NumberFormat"},1:{name:"pattern",required:!0,a:9,type:String},2:{name:"format",required:!0,a:9,type:String},3:{name:"leading_digits_pattern",p:!0,a:9,type:String},4:{name:"national_prefix_formatting_rule",a:9,type:String},6:{name:"national_prefix_optional_when_formatting",a:8,type:Boolean},5:{name:"domestic_carrier_code_formatting_rule",a:9,type:String}});
+D(H,{0:{name:"PhoneNumberDesc",m:"i18n.phonenumbers.PhoneNumberDesc"},2:{name:"national_number_pattern",a:9,type:String},3:{name:"possible_number_pattern",a:9,type:String},6:{name:"example_number",a:9,type:String}});
+D(I,{0:{name:"PhoneMetadata",m:"i18n.phonenumbers.PhoneMetadata"},1:{name:"general_desc",required:!0,a:11,type:H},2:{name:"fixed_line",required:!0,a:11,type:H},3:{name:"mobile",required:!0,a:11,type:H},4:{name:"toll_free",required:!0,a:11,type:H},5:{name:"premium_rate",required:!0,a:11,type:H},6:{name:"shared_cost",required:!0,a:11,type:H},7:{name:"personal_number",required:!0,a:11,type:H},8:{name:"voip",required:!0,a:11,type:H},21:{name:"pager",required:!0,a:11,type:H},25:{name:"uan",required:!0,
+a:11,type:H},27:{name:"emergency",required:!0,a:11,type:H},28:{name:"voicemail",required:!0,a:11,type:H},24:{name:"no_international_dialling",required:!0,a:11,type:H},9:{name:"id",required:!0,a:9,type:String},10:{name:"country_code",required:!0,a:5,type:Number},11:{name:"international_prefix",required:!0,a:9,type:String},17:{name:"preferred_international_prefix",a:9,type:String},12:{name:"national_prefix",a:9,type:String},13:{name:"preferred_extn_prefix",a:9,type:String},15:{name:"national_prefix_for_parsing",
+a:9,type:String},16:{name:"national_prefix_transform_rule",a:9,type:String},18:{name:"same_mobile_and_fixed_line_pattern",a:8,defaultValue:!1,type:Boolean},19:{name:"number_format",p:!0,a:11,type:G},20:{name:"intl_number_format",p:!0,a:11,type:G},22:{name:"main_country_for_code",a:8,defaultValue:!1,type:Boolean},23:{name:"leading_digits",a:9,type:String},26:{name:"leading_zero_possible",a:8,defaultValue:!1,type:Boolean}});
+D(J,{0:{name:"PhoneMetadataCollection",m:"i18n.phonenumbers.PhoneMetadataCollection"},1:{name:"metadata",p:!0,a:11,type:I}});/*
+
+ Protocol Buffer 2 Copyright 2008 Google Inc.
+ All other code copyright its respective owners.
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function K(){x.apply(this)}p(K,x);K.prototype.h=function(){return B(this,1)};K.prototype.l=function(a){z(this,1,a)};K.prototype.getExtension=function(){return y(this,3)};
+D(K,{0:{name:"PhoneNumber",m:"i18n.phonenumbers.PhoneNumber"},1:{name:"country_code",required:!0,a:5,type:Number},2:{name:"national_number",required:!0,a:4,type:Number},3:{name:"extension",a:9,type:String},4:{name:"italian_leading_zero",a:8,type:Boolean},8:{name:"number_of_leading_zeros",a:5,defaultValue:1,type:Number},5:{name:"raw_input",a:9,type:String},6:{name:"country_code_source",a:14,defaultValue:1,type:{ha:1,ga:5,fa:10,ea:20}},7:{name:"preferred_domestic_carrier_code",a:9,type:String}});function L(){}p(L,E);L.prototype.k=function(a,b){var c=new a.w;c.r=this;c.b=b;c.c={};return c};function M(){}p(M,L);M.prototype.da=!1;M.prototype.n=function(a,b){return 8==a.g?!!b:E.prototype.n.apply(this,arguments)};M.prototype.k=function(a,b){var c=b;if(this.da){var c=[],d;for(d in b)c[parseInt(d,10)+1]=b[d]}return M.ca.k.call(this,a,c)};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var N={1:"US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI".split(" "),7:["RU","KZ"],20:["EG"],27:["ZA"],30:["GR"],31:["NL"],32:["BE"],33:["FR"],34:["ES"],36:["HU"],39:["IT"],40:["RO"],41:["CH"],43:["AT"],44:["GB","GG","IM","JE"],45:["DK"],46:["SE"],47:["NO","SJ"],48:["PL"],49:["DE"],51:["PE"],52:["MX"],53:["CU"],54:["AR"],55:["BR"],56:["CL"],57:["CO"],58:["VE"],60:["MY"],61:["AU","CC","CX"],62:["ID"],63:["PH"],64:["NZ"],65:["SG"],66:["TH"],81:["JP"],82:["KR"],84:["VN"],
+86:["CN"],90:["TR"],91:["IN"],92:["PK"],93:["AF"],94:["LK"],95:["MM"],98:["IR"],211:["SS"],212:["MA","EH"],213:["DZ"],216:["TN"],218:["LY"],220:["GM"],221:["SN"],222:["MR"],223:["ML"],224:["GN"],225:["CI"],226:["BF"],227:["NE"],228:["TG"],229:["BJ"],230:["MU"],231:["LR"],232:["SL"],233:["GH"],234:["NG"],235:["TD"],236:["CF"],237:["CM"],238:["CV"],239:["ST"],240:["GQ"],241:["GA"],242:["CG"],243:["CD"],244:["AO"],245:["GW"],246:["IO"],247:["AC"],248:["SC"],249:["SD"],250:["RW"],251:["ET"],252:["SO"],
+253:["DJ"],254:["KE"],255:["TZ"],256:["UG"],257:["BI"],258:["MZ"],260:["ZM"],261:["MG"],262:["RE","YT"],263:["ZW"],264:["NA"],265:["MW"],266:["LS"],267:["BW"],268:["SZ"],269:["KM"],290:["SH","TA"],291:["ER"],297:["AW"],298:["FO"],299:["GL"],350:["GI"],351:["PT"],352:["LU"],353:["IE"],354:["IS"],355:["AL"],356:["MT"],357:["CY"],358:["FI","AX"],359:["BG"],370:["LT"],371:["LV"],372:["EE"],373:["MD"],374:["AM"],375:["BY"],376:["AD"],377:["MC"],378:["SM"],379:["VA"],380:["UA"],381:["RS"],382:["ME"],385:["HR"],
+386:["SI"],387:["BA"],389:["MK"],420:["CZ"],421:["SK"],423:["LI"],500:["FK"],501:["BZ"],502:["GT"],503:["SV"],504:["HN"],505:["NI"],506:["CR"],507:["PA"],508:["PM"],509:["HT"],590:["GP","BL","MF"],591:["BO"],592:["GY"],593:["EC"],594:["GF"],595:["PY"],596:["MQ"],597:["SR"],598:["UY"],599:["CW","BQ"],670:["TL"],672:["NF"],673:["BN"],674:["NR"],675:["PG"],676:["TO"],677:["SB"],678:["VU"],679:["FJ"],680:["PW"],681:["WF"],682:["CK"],683:["NU"],685:["WS"],686:["KI"],687:["NC"],688:["TV"],689:["PF"],690:["TK"],
+691:["FM"],692:["MH"],800:["001"],808:["001"],850:["KP"],852:["HK"],853:["MO"],855:["KH"],856:["LA"],870:["001"],878:["001"],880:["BD"],881:["001"],882:["001"],883:["001"],886:["TW"],888:["001"],960:["MV"],961:["LB"],962:["JO"],963:["SY"],964:["IQ"],965:["KW"],966:["SA"],967:["YE"],968:["OM"],970:["PS"],971:["AE"],972:["IL"],973:["BH"],974:["QA"],975:["BT"],976:["MN"],977:["NP"],979:["001"],992:["TJ"],993:["TM"],994:["AZ"],995:["GE"],996:["KG"],998:["UZ"]},O={AC:[,[,,"[2-7]\\d{3,5}","\\d{4,6}"],[,
+,"(?:[267]\\d|3[0-5]|4[4-69])\\d{2}","\\d{4}",,,"6889"],[,,"5\\d{5}","\\d{6}",,,"501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AC",247,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AD:[,[,,"(?:[346-9]|180)\\d{5}","\\d{6,8}"],[,,"[78]\\d{5}","\\d{6}",,,"712345"],[,,"[346]\\d{5}","\\d{6}",,,"312345"],[,,"180[02]\\d{4}","\\d{8}",,,"18001234"],[,,"9\\d{5}","\\d{6}",,,"912345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AD",376,"00",,,,,,,
+,[[,"(\\d{3})(\\d{3})","$1 $2",["[346-9]"],"","",0],[,"(180[02])(\\d{4})","$1 $2",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AE:[,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"],[,,"[2-4679][2-8]\\d{6}","\\d{7,8}",,,"22345678"],[,,"5[0256]\\d{7}","\\d{9}",,,"501234567"],[,,"400\\d{6}|800\\d{2,9}","\\d{5,12}",,,"800123456"],[,,"900[02]\\d{5}","\\d{9}",,,"900234567"],[,,"700[05]\\d{5}","\\d{9}",,,"700012345"],[,,"NA","NA"],[,,"NA","NA"],"AE",971,"00","0",,,"0",,,,[[,
+"([2-4679])(\\d{3})(\\d{4})","$1 $2 $3",["[2-4679][2-8]"],"0$1","",0],[,"(5[0256])(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1","",0],[,"([479]00)(\\d)(\\d{5})","$1 $2 $3",["[479]0"],"$1","",0],[,"([68]00)(\\d{2,9})","$1 $2",["60|8"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"600[25]\\d{5}","\\d{9}",,,"600212345"],,,[,,"NA","NA"]],AF:[,[,,"[2-7]\\d{8}","\\d{7,9}"],[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{7,9}",,,"234567890"],[,,"7(?:[05-9]\\d{7}|29\\d{6})","\\d{9}",,,"701234567"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AF",93,"00","0",,,"0",,,,[[,"([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-6]|7[013-9]"],"0$1","",0],[,"(729)(\\d{3})(\\d{3})","$1 $2 $3",["729"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AG:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"268(?:4(?:6[0-38]|84)|56[0-2])\\d{4}","\\d{7}(?:\\d{3})?",,,"2684601234"],[,,"268(?:464|7(?:2[0-9]|64|7[0-689]|8[02-68]))\\d{4}","\\d{10}",,,"2684641234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"26848[01]\\d{4}","\\d{10}",,,"2684801234"],"AG",1,"011","1",,,"1",,,,,,[,,"26840[69]\\d{4}","\\d{10}",,,"2684061234"],,"268",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AI:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7}(?:\\d{3})?",,,"2644612345"],[,,"264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}","\\d{10}",,,
+"2642351234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"AI",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"264",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AL:[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"],[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}",
+"\\d{5,8}",,,"22345678"],[,,"6[6-9]\\d{7}","\\d{9}",,,"661234567"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"900\\d{3}","\\d{6}",,,"900123"],[,,"808\\d{3}","\\d{6}",,,"808123"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"AL",355,"00","0",,,"0",,,,[[,"(4)(\\d{3})(\\d{4})","$1 $2 $3",["4[0-6]"],"0$1","",0],[,"(6[6-9])(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4[7-9]"],"0$1","",0],[,"(\\d{3})(\\d{3,5})","$1 $2",["[235][16-9]|8[016-9]|[79]"],
+"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AM:[,[,,"[1-9]\\d{7}","\\d{5,8}"],[,,"(?:1[01]\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2|47\\d)\\d{5}","\\d{5,8}",,,"10123456"],[,,"(?:4[139]|55|77|9[1-9])\\d{6}","\\d{8}",,,"77123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[016]\\d{5}","\\d{8}",,,"90012345"],[,,"80[1-4]\\d{5}","\\d{8}",,,"80112345"],[,,"NA","NA"],[,,"60[2-6]\\d{5}","\\d{8}",,,"60271234"],"AM",374,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})",
+"$1 $2",["1|47"],"(0$1)","",0],[,"(\\d{2})(\\d{6})","$1 $2",["4[139]|[5-7]|9[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{5})","$1 $2",["[23]"],"(0$1)","",0],[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8|90"],"0 $1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AO:[,[,,"[29]\\d{8}","\\d{9}"],[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"],[,,"9[1-49]\\d{7}","\\d{9}",,,"923123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AO",244,"00",,,,,,,,
+[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AR:[,[,,"11\\d{8}|[2368]\\d{9}|9\\d{10}","\\d{6,11}"],[,,"11\\d{8}|(?:2(?:2(?:[013]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|4(?:7[3-8]|9\\d)|6(?:[01346]\\d|2[24-6]|5[15-8])|80\\d|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-46]))|3(?:3(?:2[79]|6\\d|8[2578])|4(?:[78]\\d|0[0124-9]|[1-35]\\d|4[24-7]|6[02-9]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|6[24]\\d|7(?:[0469]\\d|1[1568]|2[013-9]|3[145]|5[14-8]|7[2-57]|8[0-24-9])|8(?:[013578]\\d|2[15-7]|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}",
+"\\d{6,10}",,,"1123456789"],[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}",,,"91123456789"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"60[04579]\\d{7}","\\d{10}",,,"6001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AR",54,"00","0",,,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:1[1568]|2[15]|3[145]|4[13]|5[14-8]|[069]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?",
+"9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1","",0],[,"(\\d{2})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(\\d{3})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(\\d{4})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(9)(11)(\\d{4})(\\d{4})","$2 15-$3-$4",["911"],"0$1","",0],[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[234689]|3[3-8])","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[014-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49])))"],
+"0$1","",0],[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9[23]"],"0$1","",0],[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578])","2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[0-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49]))"],"0$1","",1],[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"],"0$1","",1],
+[,"(\\d{3})","$1",["1[012]|911"],"$1","",0]],[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1","",0],[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3-$4",["911"]],[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[234689]|3[3-8])","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[014-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49])))"]],[,
+"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9[23]"]],[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578])","2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[0-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49]))"],"0$1","",1],[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"],"0$1","",1]],[,,"NA","NA"],,,[,,"810\\d{7}",
+"\\d{10}",,,"8101234567"],[,,"810\\d{7}","\\d{10}",,,"8101234567"],,,[,,"NA","NA"]],AS:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7}(?:\\d{3})?",,,"6846221234"],[,,"684(?:25[2468]|7(?:3[13]|70))\\d{4}","\\d{10}",,,"6847331234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"AS",1,"011","1",,,"1",,,,
+,,[,,"NA","NA"],,"684",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AT:[,[,,"[1-9]\\d{3,12}","\\d{3,13}"],[,,"1\\d{3,12}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:12|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}","\\d{3,13}",,,"1234567890"],[,,"6(?:44|5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}","\\d{7,13}",
+,,"644123456"],[,,"80[02]\\d{6,10}","\\d{9,13}",,,"800123456"],[,,"(?:711|9(?:0[01]|3[019]))\\d{6,10}","\\d{9,13}",,,"900123456"],[,,"8(?:10|2[018])\\d{6,10}","\\d{9,13}",,,"810123456"],[,,"NA","NA"],[,,"780\\d{6,10}","\\d{9,13}",,,"780123456"],"AT",43,"00","0",,,"0",,,,[[,"(1)(\\d{3,12})","$1 $2",["1"],"0$1","",0],[,"(5\\d)(\\d{3,5})","$1 $2",["5[079]"],"0$1","",0],[,"(5\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["5[079]"],"0$1","",0],[,"(5\\d)(\\d{4})(\\d{4,7})","$1 $2 $3",["5[079]"],"0$1","",0],[,"(\\d{3})(\\d{3,10})",
+"$1 $2",["316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]"],"0$1","",0],[,"(\\d{4})(\\d{3,9})","$1 $2",["2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[5-79])"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"5(?:(?:0[1-9]|17)\\d{2,10}|[79]\\d{3,11})|720\\d{6,10}","\\d{5,13}",,,"50123"],,,[,,"NA","NA"]],AU:[,[,,"[1-578]\\d{5,9}","\\d{6,10}"],[,,"[237]\\d{8}|8(?:[68]\\d{3}|7[0-69]\\d{2}|9(?:[02-9]\\d{2}|1(?:[0-57-9]\\d|6[0135-9])))\\d{4}","\\d{8,9}",,
+,"212345678"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}","\\d{9}",,,"412345678"],[,,"180(?:0\\d{3}|2)\\d{3}","\\d{7,10}",,,"1800123456"],[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"13(?:00\\d{2})?\\d{4}","\\d{6,10}",,,"1300123456"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"AU",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,[[,"([2378])(\\d{4})(\\d{4})","$1 $2 $3",
+["[2378]"],"(0$1)","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[45]|14"],"0$1","",0],[,"(16)(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1","",0],[,"(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[38]0|90)","1(?:[38]00|90)"],"$1","",0],[,"(180)(2\\d{3})","$1 $2",["180","1802"],"$1","",0],[,"(19\\d)(\\d{3})","$1 $2",["19[13]"],"$1","",0],[,"(19\\d{2})(\\d{4})","$1 $2",["19[67]"],"$1","",0],[,"(13)(\\d{2})(\\d{2})","$1 $2 $3",["13[1-9]"],"$1","",0]],,[,,"16\\d{3,7}","\\d{5,9}",,,"1612345"],1,,[,,
+"1(?:3(?:\\d{4}|00\\d{6})|80(?:0\\d{6}|2\\d{3}))","\\d{6,10}",,,"1300123456"],[,,"NA","NA"],,,[,,"NA","NA"]],AW:[,[,,"[25-9]\\d{6}","\\d{7}"],[,,"5(?:2\\d|8[1-9])\\d{4}","\\d{7}",,,"5212345"],[,,"(?:5(?:6\\d|9[2-478])|6(?:[039]0|22|4[01]|6[0-2])|7[34]\\d|9(?:6[45]|9[4-8]))\\d{4}","\\d{7}",,,"5601234"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"900\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"28\\d{5}|501\\d{4}","\\d{7}",,,"5011234"],"AW",297,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",
+,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AX:[,[,,"[135]\\d{5,9}|[27]\\d{4,9}|4\\d{5,10}|6\\d{7,8}|8\\d{6,9}","\\d{5,12}"],[,,"18[1-8]\\d{3,9}","\\d{6,12}",,,"1812345678"],[,,"4\\d{5,10}|50\\d{4,8}","\\d{6,11}",,,"412345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"[67]00\\d{5,6}","\\d{8,9}",,,"600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AX",358,"00|99[049]","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"[13]00\\d{3,7}|2(?:0(?:0\\d{3,7}|2[023]\\d{1,6}|9[89]\\d{1,6}))|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})",
+"\\d{5,10}",,,"100123"],[,,"[13]0\\d{4,8}|2(?:0(?:[016-8]\\d{3,7}|[2-59]\\d{2,7})|9\\d{4,8})|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"],,,[,,"NA","NA"]],AZ:[,[,,"[1-9]\\d{8}","\\d{7,9}"],[,,"(?:1[28]\\d|2(?:02|1[24]|2[2-4]|33|[45]2|6[23])|365)\\d{6}","\\d{7,9}",,,"123123456"],[,,"(?:4[04]|5[015]|60|7[07])\\d{7}","\\d{9}",,,"401234567"],[,,"88\\d{7}","\\d{9}",,,"881234567"],[,,"900200\\d{3}","\\d{9}",,,"900200123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],"AZ",994,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["(?:1[28]|2(?:[45]2|[0-36])|365)"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[4-8]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BA:[,[,,"[3-9]\\d{7,8}","\\d{6,9}"],[,,"(?:[35]\\d|49)\\d{6}","\\d{6,8}",,,"30123456"],[,,"6(?:03|44|71|[1-356])\\d{6}","\\d{8,9}",,,"61123456"],[,,"8[08]\\d{6}",
+"\\d{8}",,,"80123456"],[,,"9[0246]\\d{6}","\\d{8}",,,"90123456"],[,,"8[12]\\d{6}","\\d{8}",,,"82123456"],[,,"NA","NA"],[,,"NA","NA"],"BA",387,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-356]|[7-9]"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6[047]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70[23]\\d{5}","\\d{8}",,,"70223456"],,,[,,"NA","NA"]],BB:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"246[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2462345678"],[,,"246(?:(?:2[346]|45|82)\\d|25[0-4])\\d{4}","\\d{10}",,,"2462501234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BB",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"246",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BD:[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"],[,,"2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:12?[5-7]\\d{2}|0(?:2(?:[025-79]\\d|[348]\\d{1,2})|3(?:[2-4]\\d|[56]\\d?))|2(?:1\\d{2}|2(?:[12]\\d|[35]\\d{1,2}|4\\d?))|3(?:1\\d{2}|2(?:[2356]\\d|4\\d{1,2}))|4(?:1\\d{2}|2(?:2\\d{1,2}|[47]|5\\d{2}))|5(?:1\\d{2}|29)|[67]1\\d{2}|8(?:1\\d{2}|2(?:2\\d{2}|3|4\\d)))\\d{3}|4(?:0(?:2(?:[09]\\d|7)|33\\d{2})|1\\d{3}|2(?:1\\d{2}|2(?:[25]\\d?|[348]\\d|[67]\\d{1,2}))|3(?:1\\d{2}(?:\\d{2})?|2(?:[045]\\d|[236-9]\\d{1,2})|32\\d{2})|4(?:[18]\\d{2}|2(?:[2-46]\\d{2}|3)|5[25]\\d{2})|5(?:1\\d{2}|2(?:3\\d|5))|6(?:[18]\\d{2}|2(?:3(?:\\d{2})?|[46]\\d{1,2}|5\\d{2}|7\\d)|5(?:3\\d?|4\\d|[57]\\d{1,2}|6\\d{2}|8))|71\\d{2}|8(?:[18]\\d{2}|23\\d{2}|54\\d{2})|9(?:[18]\\d{2}|2[2-5]\\d{2}|53\\d{1,2}))\\d{3}|5(?:02[03489]\\d{2}|1\\d{2}|2(?:1\\d{2}|2(?:2(?:\\d{2})?|[457]\\d{2}))|3(?:1\\d{2}|2(?:[37](?:\\d{2})?|[569]\\d{2}))|4(?:1\\d{2}|2[46]\\d{2})|5(?:1\\d{2}|26\\d{1,2})|6(?:[18]\\d{2}|2|53\\d{2})|7(?:1|24)\\d{2}|8(?:1|26)\\d{2}|91\\d{2})\\d{3}|6(?:0(?:1\\d{2}|2(?:3\\d{2}|4\\d{1,2}))|2(?:2[2-5]\\d{2}|5(?:[3-5]\\d{2}|7)|8\\d{2})|3(?:1|2[3478])\\d{2}|4(?:1|2[34])\\d{2}|5(?:1|2[47])\\d{2}|6(?:[18]\\d{2}|6(?:2(?:2\\d|[34]\\d{2})|5(?:[24]\\d{2}|3\\d|5\\d{1,2})))|72[2-5]\\d{2}|8(?:1\\d{2}|2[2-5]\\d{2})|9(?:1\\d{2}|2[2-6]\\d{2}))\\d{3}|7(?:(?:02|[3-589]1|6[12]|72[24])\\d{2}|21\\d{3}|32)\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}",
+"\\d{6,9}",,,"27111234"],[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}",,,"1812345678"],[,,"80[03]\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"96(?:0[49]|1[0-4]|6[69])\\d{6}","\\d{10}",,,"9604123456"],"BD",880,"00[12]?","0",,,"0",,"00",,[[,"(2)(\\d{7})","$1-$2",["2"],"0$1","",0],[,"(\\d{2})(\\d{4,6})","$1-$2",["[3-79]1"],"0$1","",0],[,"(\\d{4})(\\d{3,6})","$1-$2",["1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])"],
+"0$1","",0],[,"(\\d{3})(\\d{3,7})","$1-$2",["[3-79][2-9]|8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BE:[,[,,"[1-9]\\d{7,8}","\\d{8,9}"],[,,"(?:1[0-69]|[49][23]|5\\d|6[013-57-9]|71|8[0-79])[1-9]\\d{5}|[23][2-8]\\d{6}","\\d{8}",,,"12345678"],[,,"4(?:[679]\\d|8[03-9])\\d{6}","\\d{9}",,,"470123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"(?:70[2-7]|90\\d)\\d{5}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BE",32,"00","0",,,"0",,,,[[,"(4[6-9]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["4[6-9]"],"0$1","",0],[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"],"0$1","",0],[,"([15-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[156]|7[018]|8(?:0[1-9]|[1-79])"],"0$1","",0],[,"([89]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"78\\d{6}","\\d{8}",,,"78123456"],,,[,,"NA","NA"]],BF:[,[,,"[24-7]\\d{7}","\\d{8}"],[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|5[4-6]|7[0179])|50(?:[34]\\d|50))\\d{4}","\\d{8}",
+,,"20491234"],[,,"6(?:[0-689]\\d|7[0-5])\\d{5}|7\\d{7}","\\d{8}",,,"70123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BF",226,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BG:[,[,,"[23567]\\d{5,7}|[489]\\d{6,8}","\\d{5,9}"],[,,"2(?:[0-8]\\d{5,6}|9\\d{4,6})|(?:[36]\\d|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|(?:4(?:[124-7]\\d|3[1-6])|7(?:0[1-9]|[1-9]\\d))\\d{4,5}","\\d{5,8}",,,"2123456"],
+[,,"(?:8[7-9]|98)\\d{7}|4(?:3[0789]|8\\d)\\d{5}","\\d{8,9}",,,"48123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"700\\d{5}","\\d{5,9}",,,"70012345"],[,,"NA","NA"],"BG",359,"00","0",,,"0",,,,[[,"(2)(\\d{5})","$1 $2",["29"],"0$1","",0],[,"(2)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1","",0],[,"(\\d{3})(\\d{4})","$1 $2",["43[124-7]|70[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[124-7]|70[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{3})",
+"$1 $2 $3",["[78]00"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["48|8[7-9]|9[08]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BH:[,[,,"[136-9]\\d{7}","\\d{8}"],[,,"(?:1(?:3[13-6]|6[0156]|7\\d)\\d|6(?:1[16]\\d|500|6(?:0\\d|3[12]|44|88)|9[69][69])|7(?:7\\d{2}|178))\\d{4}","\\d{8}",,,"17001234"],[,,"(?:3(?:[1-4679]\\d|5[0135]|8[0-48])\\d|6(?:3(?:00|33|6[16])|6(?:[69]\\d|3[03-9])))\\d{4}",
+"\\d{8}",,,"36001234"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"(?:87|9[014578])\\d{6}","\\d{8}",,,"90123456"],[,,"84\\d{6}","\\d{8}",,,"84123456"],[,,"NA","NA"],[,,"NA","NA"],"BH",973,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BI:[,[,,"[27]\\d{7}","\\d{8}"],[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}",,,"22201234"],[,,"(?:29|7[14-9])\\d{6}","\\d{8}",,,"79561234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+"BI",257,"00",,,,,,,,[[,"([27]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BJ:[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"],[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}",,,"20211234"],[,,"(?:6[146-8]|9[03-9])\\d{6}","\\d{8}",,,"90011234"],[,,"7[3-5]\\d{2}","\\d{4}",,,"7312"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"857[58]\\d{4}","\\d{8}",,,"85751234"],"BJ",229,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,
+"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"81\\d{6}","\\d{8}",,,"81123456"],,,[,,"NA","NA"]],BL:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}",,,"590271234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BL",590,"00","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BM:[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"441(?:2(?:02|23|61|[3479]\\d)|[46]\\d{2}|5(?:4\\d|60|89)|824)\\d{4}",
+"\\d{7}(?:\\d{3})?",,,"4412345678"],[,,"441(?:[37]\\d|5[0-39])\\d{5}","\\d{10}",,,"4413701234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BM",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"441",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BN:[,[,,"[2-578]\\d{6}","\\d{7}"],[,,"2(?:[013-9]\\d|2[0-7])\\d{4}|[3-5]\\d{6}","\\d{7}",,,"2345678"],[,,"22[89]\\d{4}|[78]\\d{6}",
+"\\d{7}",,,"7123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BN",673,"00",,,,,,,,[[,"([2-578]\\d{2})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BO:[,[,,"[23467]\\d{7}","\\d{7,8}"],[,,"(?:2(?:2\\d{2}|5(?:11|[258]\\d|9[67])|6(?:12|2\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\d{2}|4(?:6\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:2\\d|3[234]|4[248]|5[24]|6[2-6]|7\\d))|4(?:4\\d{2}|6(?:11|[24689]\\d|72)))\\d{4}","\\d{7,8}",,,"22123456"],
+[,,"[67]\\d{7}","\\d{8}",,,"71234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BO",591,"00(1\\d)?","0",,,"0(1\\d)?",,,,[[,"([234])(\\d{7})","$1 $2",["[234]"],"","0$CC $1",0],[,"([67]\\d{7})","$1",["[67]"],"","0$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BQ:[,[,,"[347]\\d{6}","\\d{7}"],[,,"(?:318[023]|416[023]|7(?:1[578]|50)\\d)\\d{3}","\\d{7}",,,"7151234"],[,,"(?:318[14-68]|416[15-9]|7(?:0[01]|7[07]|[89]\\d)\\d)\\d{3}","\\d{7}",,,"3181234"],
+[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BQ",599,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BR:[,[,,"[1-46-9]\\d{7,10}|5\\d{8,9}","\\d{8,11}"],[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,11}",,,"1123456789"],[,,"1[1-9](?:7|9\\d)\\d{7}|(?:2[12478]|9[1-9])9?[6-9]\\d{7}|(?:3[1-578]|[468][1-9]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10,11}",,,"11961234567"],[,,"800\\d{6,7}","\\d{8,11}",,,"800123456"],
+[,,"[359]00\\d{6,7}","\\d{8,11}",,,"300123456"],[,,"[34]00\\d{5}","\\d{8}",,,"40041234"],[,,"NA","NA"],[,,"NA","NA"],"BR",55,"00(?:1[45]|2[135]|31|4[13])","0",,,"0(?:(1[245]|2[135]|31|4[13])(\\d{10,11}))?","$2",,,[[,"(\\d{4})(\\d{4})","$1-$2",["[2-9](?:[1-9]|0[1-9])"],"$1","",0],[,"(\\d{5})(\\d{4})","$1-$2",["9(?:[1-9]|0[1-9])"],"$1","",0],[,"(\\d{3,5})","$1",["1[125689]"],"$1","",0],[,"(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["(?:1[1-9]|2[12478]|9[1-9])9"],"($1)","0 $CC ($1)",0],[,"(\\d{2})(\\d{4})(\\d{4})",
+"$1 $2-$3",["[1-9][1-9]"],"($1)","0 $CC ($1)",0],[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00"],"","",0],[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"],"0$1","",0]],[[,"(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["(?:1[1-9]|2[12478]|9[1-9])9"],"($1)","0 $CC ($1)",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["[1-9][1-9]"],"($1)","0 $CC ($1)",0],[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00"],"","",0],[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"],"0$1","",0]],[,,"NA","NA"],,,[,,"[34]00\\d{5}",
+"\\d{8}",,,"40041234"],[,,"NA","NA"],,,[,,"NA","NA"]],BS:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:0[12]|12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7}(?:\\d{3})?",,,"2423456789"],[,,"242(?:3(?:5[79]|[79]5)|4(?:[2-4][1-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[45]|3[35]|44|5[1-9]|65|77)|6[34]6|727)\\d{4}","\\d{10}",,,"2423591234"],[,,"242300\\d{4}|8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",
+,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BS",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"242",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BT:[,[,,"[1-8]\\d{6,7}","\\d{6,8}"],[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}",,,"2345678"],[,,"[17]7\\d{6}","\\d{8}",,,"17123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BT",975,"00",,,,,,,,[[,"([17]7)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",
+["1|77"],"","",0],[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BW:[,[,,"[2-79]\\d{6,7}","\\d{7,8}"],[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}",,,"2401234"],[,,"7(?:[1-356]\\d|4[0-7]|7[014-7])\\d{5}","\\d{8}",,,"71123456"],[,,"NA","NA"],[,,"90\\d{5}","\\d{7}",,,"9012345"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"79[12][01]\\d{4}","\\d{8}",,,"79101234"],"BW",267,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-6]"],"","",0],[,"(7\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7"],"","",0],[,"(90)(\\d{5})","$1 $2",["9"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BY:[,[,,"[1-4]\\d{8}|[89]\\d{9,10}","\\d{7,11}"],[,,"(?:1(?:5(?:1[1-5]|[24]\\d|6[2-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:[26]\\d|3[02-79]|4[024-7]|5[03-7])))\\d{5}",
+"\\d{7,9}",,,"152450911"],[,,"(?:2(?:5[5679]|9[1-9])|33\\d|44\\d)\\d{6}","\\d{9}",,,"294911911"],[,,"8(?:0[13]|20\\d)\\d{7}","\\d{10,11}",,,"8011234567"],[,,"(?:810|902)\\d{7}","\\d{10}",,,"9021234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BY",375,"810","8",,,"8?0?",,"8~10",,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["17[0-3589]|2[4-9]|[34]","17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]"],"8 0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])",
+"1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])"],"8 0$1","",0],[,"(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8[01]|9"],"8 $1","",0],[,"(8\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["82"],"8 $1","",0]],,[,,"NA","NA"],,,[,,"8(?:[013]|[12]0)\\d{8}|902\\d{7}","\\d{10,11}",,,"82012345678"],
+[,,"NA","NA"],,,[,,"NA","NA"]],BZ:[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"],[,,"[234578][02]\\d{5}","\\d{7}",,,"2221234"],[,,"6[0-367]\\d{5}","\\d{7}",,,"6221234"],[,,"0800\\d{7}","\\d{11}",,,"08001234123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BZ",501,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1-$2",["[2-8]"],"","",0],[,"(0)(800)(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CA:[,[,,"[2-9]\\d{9}|3\\d{6}","\\d{7}(?:\\d{3})?"],
+[,,"(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|79|8[17])|6(?:0[04]|13|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|73)|90[25])[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?",,,"2042345678"],[,,"(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|79|8[17])|6(?:0[04]|13|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|73)|90[25])[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2042345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?",,,"8002123456"],
+[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"CA",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CC:[,[,,"[1458]\\d{5,9}","\\d{6,10}"],[,,"89162\\d{4}","\\d{8,9}",,,"891621234"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}","\\d{9}",,,"412345678"],[,,"1(?:80(?:0\\d{2})?|3(?:00\\d{2})?)\\d{4}","\\d{6,10}",,,"1800123456"],
+[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"CC",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CD:[,[,,"[2-6]\\d{6}|[18]\\d{6,8}|9\\d{8}","\\d{7,9}"],[,,"1(?:2\\d{7}|\\d{6})|[2-6]\\d{6}","\\d{7,9}",,,"1234567"],[,,"8(?:[0-2459]\\d{2}|8)\\d{5}|9[7-9]\\d{7}","\\d{7,9}",,,"991234567"],[,,"NA","NA"],[,,"NA","NA"],[,
+,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CD",243,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["12"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[0-2459]|9"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1","",0],[,"(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CF:[,[,,"[278]\\d{7}","\\d{8}"],[,,"2[12]\\d{6}","\\d{8}",,,"21612345"],[,,"7[0257]\\d{6}","\\d{8}",,,"70012345"],[,,"NA","NA"],[,
+,"8776\\d{4}","\\d{8}",,,"87761234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CF",236,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CG:[,[,,"[028]\\d{8}","\\d{9}"],[,,"222[1-589]\\d{5}","\\d{9}",,,"222123456"],[,,"0[14-6]\\d{7}","\\d{9}",,,"061234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CG",242,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",
+["[02]"],"","",0],[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CH:[,[,,"[2-9]\\d{8}|860\\d{9}","\\d{9}(?:\\d{3})?"],[,,"(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\d{7}","\\d{9}",,,"212345678"],[,,"7[5-9]\\d{7}","\\d{9}",,,"781234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"90[016]\\d{6}","\\d{9}",,,"900123456"],[,,"84[0248]\\d{6}","\\d{9}",,,"840123456"],[,,"878\\d{6}","\\d{9}",,,"878123456"],[,,"NA","NA"],"CH",41,"00",
+"0",,,"0",,,,[[,"([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]|[89]1"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["860"],"0$1","",0]],,[,,"74[0248]\\d{6}","\\d{9}",,,"740123456"],,,[,,"NA","NA"],[,,"5[18]\\d{7}","\\d{9}",,,"581234567"],,,[,,"860\\d{9}","\\d{12}",,,"860123456789"]],CI:[,[,,"[02-7]\\d{7}","\\d{8}"],[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}",
+"\\d{8}",,,"21234567"],[,,"(?:0[1-9]|4[0-24-9]|5[4-9]|6[015-79]|7[57])\\d{6}","\\d{8}",,,"01234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CI",225,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CK:[,[,,"[2-57]\\d{4}","\\d{5}"],[,,"(?:2\\d|3[13-7]|4[1-5])\\d{3}","\\d{5}",,,"21234"],[,,"(?:5[0-68]|7\\d)\\d{3}","\\d{5}",,,"71234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"CK",682,"00",,,,,,,,[[,"(\\d{2})(\\d{3})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CL:[,[,,"(?:[2-9]|600|123)\\d{7,8}","\\d{7,11}"],[,,"2(?:2\\d{7}|1962\\d{4})|(?:3[2-5]|[47][1-35]|5[1-3578]|6[13-57])\\d{7}","\\d{7,9}",,,"221234567"],[,,"9[4-9]\\d{7}","\\d{8,9}",,,"961234567"],[,,"800\\d{6}|1230\\d{7}","\\d{9,11}",,,"800123456"],[,,"NA","NA"],[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"],[,,"NA","NA"],[,,"44\\d{7}","\\d{9}",,,"441234567"],
+"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["22"],"($1)","$CC ($1)",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"],"($1)","$CC ($1)",0],[,"(9)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"],"0$1","",0],[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"],"$1","",0],[,"(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"],
+"$1","",0],[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"$1","",0],[,"(\\d{5})(\\d{4})","$1 $2",["219"],"($1)","$CC ($1)",0],[,"(\\d{4,5})","$1",["[1-9]"],"$1","",0]],[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["22"],"($1)","$CC ($1)",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"],"($1)","$CC ($1)",0],[,"(9)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"],"0$1","",0],[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"],"$1","",0],[,"(600)(\\d{3})(\\d{2})(\\d{3})",
+"$1 $2 $3 $4",["60"],"$1","",0],[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"$1","",0],[,"(\\d{5})(\\d{4})","$1 $2",["219"],"($1)","$CC ($1)",0]],[,,"NA","NA"],,,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"],[,,"NA","NA"],,,[,,"NA","NA"]],CM:[,[,,"[2357-9]\\d{7}","\\d{8}"],[,,"(?:22|33)\\d{6}","\\d{8}",,,"22123456"],[,,"[579]\\d{7}","\\d{8}",,,"71234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"88\\d{6}","\\d{8}",,,"88012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CM",237,"00",,,,,,,,[[,"([2357-9]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["[23579]|88"],"","",0],[,"(800)(\\d{2})(\\d{3})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CN:[,[,,"[1-7]\\d{6,11}|8[0-357-9]\\d{6,9}|9\\d{7,9}","\\d{4,12}"],[,,"21(?:100\\d{2}|95\\d{3,4}|\\d{8,10})|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98))(?:100\\d{2}|95\\d{3,4}|\\d{8})|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\d|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100\\d{2}|95\\d{3,4}|\\d{7})|80(?:29|6[03578]|7[018]|81)\\d{4}",
+"\\d{4,12}",,,"1012345678"],[,,"1(?:[38]\\d|4[57]|5[0-35-9]|7[06-8])\\d{8}","\\d{11}",,,"13123456789"],[,,"(?:10)?800\\d{7}","\\d{10,12}",,,"8001234567"],[,,"16[08]\\d{5}","\\d{8}",,,"16812345"],[,,"400\\d{7}|(?:10|2[0-57-9]|3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[4789]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))96\\d{3,4}",
+"\\d{7,10}",,,"4001234567"],[,,"NA","NA"],[,,"NA","NA"],"CN",86,"(1[1279]\\d{3})?00","0",,,"(1[1279]\\d{3})|0",,"00",,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"],"0$1","$CC $1",1],[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"],"","",0],[,"(\\d{5,6})","$1",["100|95"],"","",0],[,"(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2\\d)[19]","(?:10|2\\d)(?:10|9[56])","(?:10|2\\d)(?:100|9[56])"],"0$1","$CC $1",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["[3-9]","[3-9]\\d{2}[19]","[3-9]\\d{2}(?:10|9[56])"],"0$1","$CC $1",
+0],[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"],"","",0],[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"],"0$1","$CC $1",1],[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98)"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"],
+"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-578]"],"","$CC $1",0],[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"],"","",0]],[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"],"0$1","$CC $1",1],[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"],"","",0],[,"(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2\\d)[19]","(?:10|2\\d)(?:10|9[56])","(?:10|2\\d)(?:100|9[56])"],"0$1","$CC $1",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["[3-9]","[3-9]\\d{2}[19]","[3-9]\\d{2}(?:10|9[56])"],"0$1","$CC $1",
+0],[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"],"0$1","$CC $1",1],[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98)"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"],
+"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-578]"],"","$CC $1",0],[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"],"","",0]],[,,"NA","NA"],,,[,,"(?:4|(?:10)?8)00\\d{7}","\\d{10,12}",,,"4001234567"],[,,"NA","NA"],,,[,,"NA","NA"]],CO:[,[,,"(?:[13]\\d{0,3}|[24-8])\\d{7}","\\d{7,11}"],[,,"[124-8][2-9]\\d{6}","\\d{8}",,,"12345678"],[,,"3(?:0[0-5]|1\\d|2[0-2]|5[01])\\d{7}","\\d{10}",,,"3211234567"],[,,"1800\\d{7}","\\d{11}",,,"18001234567"],[,,"19(?:0[01]|4[78])\\d{7}",
+"\\d{11}",,,"19001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CO",57,"00(?:4(?:[14]4|56)|[579])","0",,,"0([3579]|4(?:44|56))?",,,,[[,"(\\d)(\\d{7})","$1 $2",["1(?:8[2-9]|9[0-3]|[2-7])|[24-8]","1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]"],"($1)","0$CC $1",0],[,"(\\d{3})(\\d{7})","$1 $2",["3"],"","0$CC $1",0],[,"(1)(\\d{3})(\\d{7})","$1-$2-$3",["1(?:80|9[04])","1(?:800|9(?:0[01]|4[78]))"],"0$1","",0]],[[,"(\\d)(\\d{7})","$1 $2",["1(?:8[2-9]|9[0-3]|[2-7])|[24-8]","1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]"],
+"($1)","0$CC $1",0],[,"(\\d{3})(\\d{7})","$1 $2",["3"],"","0$CC $1",0],[,"(1)(\\d{3})(\\d{7})","$1 $2 $3",["1(?:80|9[04])","1(?:800|9(?:0[01]|4[78]))"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CR:[,[,,"[24-9]\\d{7,9}","\\d{8,10}"],[,,"2[24-7]\\d{6}","\\d{8}",,,"22123456"],[,,"5(?:0[01]|7[0-3])\\d{5}|6(?:[0-2]\\d|30)\\d{5}|7[0-3]\\d{6}|8[3-9]\\d{6}","\\d{8}",,,"83123456"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"90[059]\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"210[0-6]\\d{4}|4(?:0(?:0[01]\\d{4}|10[0-3]\\d{3}|2(?:00\\d{3}|900\\d{2})|3[01]\\d{4}|40\\d{4}|5\\d{5}|60\\d{4}|70[01]\\d{3}|8[0-2]\\d{4})|1[01]\\d{5}|20[0-3]\\d{4}|400\\d{4}|70[0-2]\\d{4})|5100\\d{4}","\\d{8}",,,"40001234"],"CR",506,"00",,,,"(19(?:0[012468]|1[09]|20|66|77|99))",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[24-7]|8[3-9]"],"","$CC $1",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]0"],"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CU:[,[,,"[2-57]\\d{5,7}",
+"\\d{4,8}"],[,,"2[1-4]\\d{5,6}|3(?:1\\d{6}|[23]\\d{4,6})|4(?:[125]\\d{5,6}|[36]\\d{6}|[78]\\d{4,6})|7\\d{6,7}","\\d{4,8}",,,"71234567"],[,,"5\\d{7}","\\d{8}",,,"51234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CU",53,"119","0",,,"0",,,,[[,"(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)","",0],[,"(\\d{2})(\\d{4,6})","$1 $2",["[2-4]"],"(0$1)","",0],[,"(\\d)(\\d{7})","$1 $2",["5"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CV:[,[,,"[259]\\d{6}",
+"\\d{7}"],[,,"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}","\\d{7}",,,"2211234"],[,,"(?:9\\d|59)\\d{5}","\\d{7}",,,"9911234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CV",238,"0",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CW:[,[,,"[169]\\d{6,7}","\\d{7,8}"],[,,"9(?:[48]\\d{2}|50\\d|7(?:2[0-24]|[34]\\d|6[35-7]|77|8[7-9]))\\d{4}","\\d{7,8}",,,"94151234"],[,,"9(?:5(?:[1246]\\d|3[01])|6(?:[16-9]\\d|3[01]))\\d{4}",
+"\\d{7,8}",,,"95181234"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:10|69)\\d{5}","\\d{7}",,,"1011234"],[,,"NA","NA"],[,,"NA","NA"],"CW",599,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-7]"],"","",0],[,"(9)(\\d{3})(\\d{4})","$1 $2 $3",["9"],"","",0]],,[,,"955\\d{5}","\\d{7,8}",,,"95581234"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CX:[,[,,"[1458]\\d{5,9}","\\d{6,10}"],[,,"89164\\d{4}","\\d{8,9}",,,"891641234"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}",
+"\\d{9}",,,"412345678"],[,,"1(?:80(?:0\\d{2})?|3(?:00\\d{2})?)\\d{4}","\\d{6,10}",,,"1800123456"],[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"CX",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CY:[,[,,"[257-9]\\d{7}","\\d{8}"],[,,"2[2-6]\\d{6}","\\d{8}",,,"22345678"],[,,"9[5-79]\\d{6}","\\d{8}",,,"96123456"],[,,
+"800\\d{5}","\\d{8}",,,"80001234"],[,,"90[09]\\d{5}","\\d{8}",,,"90012345"],[,,"80[1-9]\\d{5}","\\d{8}",,,"80112345"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"CY",357,"00",,,,,,,,[[,"(\\d{2})(\\d{6})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"(?:50|77)\\d{6}","\\d{8}",,,"77123456"],,,[,,"NA","NA"]],CZ:[,[,,"[2-8]\\d{8}|9\\d{8,11}","\\d{9,12}"],[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9,12}",,,"212345678"],[,,"(?:60[1-8]|7(?:0[2-5]|[2379]\\d))\\d{6}","\\d{9,12}",
+,,"601123456"],[,,"800\\d{6}","\\d{9,12}",,,"800123456"],[,,"9(?:0[05689]|76)\\d{6}","\\d{9,12}",,,"900123456"],[,,"8[134]\\d{7}","\\d{9,12}",,,"811234567"],[,,"70[01]\\d{6}","\\d{9,12}",,,"700123456"],[,,"9[17]0\\d{6}","\\d{9,12}",,,"910123456"],"CZ",420,"00",,,,,,,,[[,"([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"],"","",0],[,"(96\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["96"],"","",0],[,"(9\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9[36]"],"","",0]],,[,,"NA","NA"],,,[,,"NA",
+"NA"],[,,"9(?:5\\d|7[234])\\d{6}","\\d{9,12}",,,"972123456"],,,[,,"9(?:3\\d{9}|6\\d{7,10})","\\d{9,12}",,,"93123456789"]],DE:[,[,,"[1-35-9]\\d{3,14}|4(?:[0-8]\\d{4,12}|9(?:[0-37]\\d|4(?:[1-35-8]|4\\d?)|5\\d{1,2}|6[1-8]\\d?)\\d{2,8})","\\d{2,15}"],[,,"[246]\\d{5,13}|3(?:0\\d{3,13}|2\\d{9}|[3-9]\\d{4,13})|5(?:0[2-8]|[1256]\\d|[38][0-8]|4\\d{0,2}|[79][0-7])\\d{3,11}|7(?:0[2-8]|[1-9]\\d)\\d{3,10}|8(?:0[2-9]|[1-9]\\d)\\d{3,10}|9(?:0[6-9]\\d{3,10}|1\\d{4,12}|[2-9]\\d{4,11})","\\d{2,15}",,,"30123456"],[,
+,"1(?:5[0-2579]\\d{8}|6[023]\\d{7,8}|7(?:[0-57-9]\\d?|6\\d)\\d{7})","\\d{10,11}",,,"15123456789"],[,,"800\\d{7,12}","\\d{10,15}",,,"8001234567890"],[,,"137[7-9]\\d{6}|900(?:[135]\\d{6}|9\\d{7})","\\d{10,11}",,,"9001234567"],[,,"1(?:3(?:7[1-6]\\d{6}|8\\d{4})|80\\d{5,11})","\\d{7,14}",,,"18012345"],[,,"700\\d{8}","\\d{11}",,,"70012345678"],[,,"NA","NA"],"DE",49,"00","0",,,"0",,,,[[,"(1\\d{2})(\\d{7,8})","$1 $2",["1[67]"],"0$1","",0],[,"(1\\d{3})(\\d{7})","$1 $2",["15"],"0$1","",0],[,"(\\d{2})(\\d{3,11})",
+"$1 $2",["3[02]|40|[68]9"],"0$1","",0],[,"(\\d{3})(\\d{3,11})","$1 $2",["2(?:\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)"],"0$1","",0],[,"(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))"],
+"0$1","",0],[,"(3\\d{4})(\\d{1,10})","$1 $2",["3"],"0$1","",0],[,"(800)(\\d{7,12})","$1 $2",["800"],"0$1","",0],[,"(177)(99)(\\d{7,8})","$1 $2 $3",["177","1779","17799"],"0$1","",0],[,"(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["(?:18|90)0|137","1(?:37|80)|900[1359]"],"0$1","",0],[,"(1\\d{2})(\\d{5,11})","$1 $2",["181"],"0$1","",0],[,"(18\\d{3})(\\d{6})","$1 $2",["185","1850","18500"],"0$1","",0],[,"(18\\d{2})(\\d{7})","$1 $2",["18[68]"],"0$1","",0],[,"(18\\d)(\\d{8})","$1 $2",["18[2-579]"],"0$1","",0],
+[,"(700)(\\d{4})(\\d{4})","$1 $2 $3",["700"],"0$1","",0],[,"(138)(\\d{4})","$1 $2",["138"],"0$1","",0]],,[,,"16(?:4\\d{1,10}|[89]\\d{1,11})","\\d{4,14}",,,"16412345"],,,[,,"NA","NA"],[,,"18(?:1\\d{5,11}|[2-9]\\d{8})","\\d{8,14}",,,"18500123456"],,,[,,"17799\\d{7,8}","\\d{12,13}",,,"177991234567"]],DJ:[,[,,"[27]\\d{7}","\\d{8}"],[,,"2(?:1[2-5]|7[45])\\d{5}","\\d{8}",,,"21360003"],[,,"77[6-8]\\d{5}","\\d{8}",,,"77831001"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"DJ",253,
+"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DK:[,[,,"[2-9]\\d{7}","\\d{8}"],[,,"(?:[2-7]\\d|8[126-9]|9[1-36-9])\\d{6}","\\d{8}",,,"32123456"],[,,"(?:[2-7]\\d|8[126-9]|9[1-36-9])\\d{6}","\\d{8}",,,"20123456"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"DK",45,"00",,,,,,,1,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DM:[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4]|70[1-3])\\d{4}","\\d{7}(?:\\d{3})?",,,"7674201234"],[,,"767(?:2(?:[234689]5|7[5-7])|31[5-7]|61[2-7])\\d{4}","\\d{10}",,,"7672251234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"DM",1,"011",
+"1",,,"1",,,,,,[,,"NA","NA"],,"767",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DO:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"8(?:[04]9[2-9]\\d{6}|29(?:2(?:[0-59]\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\d|4[7-9])|[45]\\d{2}|6(?:[0-27-9]\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9]))\\d{4})","\\d{7}(?:\\d{3})?",
+,,"8092345678"],[,,"8[024]9[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"8092345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"DO",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"8[024]9",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DZ:[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"],[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}",,,"12345678"],
+[,,"(?:5[4-6]|7[7-9])\\d{7}|6(?:[569]\\d|7[0-4])\\d{6}","\\d{9}",,,"551234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"80[3-689]1\\d{5}","\\d{9}",,,"808123456"],[,,"80[12]1\\d{5}","\\d{9}",,,"801123456"],[,,"NA","NA"],[,,"98[23]\\d{6}","\\d{9}",,,"983123456"],"DZ",213,"00","0",,,"0",,,,[[,"([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1","",0],[,"([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1","",0],[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1",
+"",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EC:[,[,,"1\\d{9,10}|[2-8]\\d{7}|9\\d{8}","\\d{7,11}"],[,,"[2-7][2-7]\\d{6}","\\d{7,8}",,,"22123456"],[,,"9(?:39|[45][89]|[67][7-9]|[89]\\d)\\d{6}","\\d{9}",,,"991234567"],[,,"1800\\d{6,7}","\\d{10,11}",,,"18001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"[2-7]890\\d{4}","\\d{8}",,,"28901234"],"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[247]|[356][2-8]"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{4})",
+"$1 $2 $3",["9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"],"$1","",0]],[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[247]|[356][2-8]"]],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"],"$1","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EE:[,[,,"1\\d{3,4}|[3-9]\\d{6,7}|800\\d{6,7}","\\d{4,10}"],[,,"(?:3[23589]|4[3-8]|6\\d|7[1-9]|88)\\d{5}","\\d{7}",,,"3212345"],[,,"(?:5\\d|8[1-5])\\d{6}|5(?:[02]\\d{2}|1(?:[0-8]\\d|95)|5[0-478]\\d|64[0-4]|65[1-589])\\d{3}",
+"\\d{7,8}",,,"51234567"],[,,"800(?:0\\d{3}|1\\d|[2-9])\\d{3}","\\d{7,10}",,,"80012345"],[,,"(?:40\\d{2}|900)\\d{4}","\\d{7,8}",,,"9001234"],[,,"NA","NA"],[,,"70[0-2]\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"EE",372,"00",,,,,,,,[[,"([3-79]\\d{2})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]"],"","",0],[,"(70)(\\d{2})(\\d{4})","$1 $2 $3",["70"],"","",0],[,"(8000)(\\d{3})(\\d{3})","$1 $2 $3",["800","8000"],
+"","",0],[,"([458]\\d{3})(\\d{3,4})","$1 $2",["40|5|8(?:00|[1-5])","40|5|8(?:00[1-9]|[1-5])"],"","",0]],,[,,"NA","NA"],,,[,,"1\\d{3,4}|800[2-9]\\d{3}","\\d{4,7}",,,"8002123"],[,,"1(?:2[01245]|3[0-6]|4[1-489]|5[0-59]|6[1-46-9]|7[0-27-9]|8[189]|9[012])\\d{1,2}","\\d{4,5}",,,"12123"],,,[,,"NA","NA"]],EG:[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"],[,,"(?:1(?:3[23]\\d|5(?:[23]|9\\d))|2[2-4]\\d{2}|3\\d{2}|4(?:0[2-5]|[578][23]|64)\\d|5(?:0[2-7]|[57][23])\\d|6[24-689]3\\d|8(?:2[2-57]|4[26]|6[237]|8[2-4])\\d|9(?:2[27]|3[24]|52|6[2356]|7[2-4])\\d)\\d{5}|1[69]\\d{3}",
+"\\d{5,9}",,,"234567890"],[,,"1(?:0[0-269]|1[0-245]|2[0-278])\\d{7}","\\d{10}",,,"1001234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1[012]|[89]00"],"0$1","",0],[,"(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|[89][2-9]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EH:[,
+[,,"[5689]\\d{8}","\\d{9}"],[,,"528[89]\\d{5}","\\d{9}",,,"528812345"],[,,"6(?:0[0-8]|[12-7]\\d|8[01]|9[2457-9])\\d{6}","\\d{9}",,,"650123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89\\d{7}","\\d{9}",,,"891234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"EH",212,"00","0",,,"0",,,,,,[,,"NA","NA"],,"528[89]",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ER:[,[,,"[178]\\d{6}","\\d{6,7}"],[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}",,,"8370362"],[,,"17[1-3]\\d{4}|7\\d{6}","\\d{7}",
+,,"7123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ER",291,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ES:[,[,,"[5-9]\\d{8}","\\d{9}"],[,,"8(?:[13]0|[28][0-8]|[47][1-9]|5[01346-9]|6[0457-9])\\d{6}|9(?:[1238][0-8]\\d{6}|4[1-9]\\d{6}|5\\d{7}|6(?:[0-8]\\d{6}|9(?:0(?:[0-57-9]\\d{4}|6(?:0[0-8]|1[1-9]|[2-9]\\d)\\d{2})|[1-9]\\d{5}))|7(?:[124-9]\\d{2}|3(?:[0-8]\\d|9[1-9]))\\d{4})","\\d{9}",
+,,"810123456"],[,,"(?:6\\d{6}|7[1-4]\\d{5}|9(?:6906(?:09|10)|7390\\d{2}))\\d{2}","\\d{9}",,,"612345678"],[,,"[89]00\\d{6}","\\d{9}",,,"800123456"],[,,"80[367]\\d{6}","\\d{9}",,,"803123456"],[,,"90[12]\\d{6}","\\d{9}",,,"901123456"],[,,"70\\d{7}","\\d{9}",,,"701234567"],[,,"NA","NA"],"ES",34,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[568]|[79][0-8]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"51\\d{7}","\\d{9}",,,"511234567"],,,[,,"NA","NA"]],ET:[,[,,"[1-59]\\d{8}","\\d{7,9}"],
+[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-3]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}",
+"\\d{7,9}",,,"111112345"],[,,"9(?:[1-3]\\d|5[89])\\d{6}","\\d{9}",,,"911234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ET",251,"00","0",,,"0",,,,[[,"([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FI:[,[,,"1\\d{4,11}|[2-9]\\d{4,10}","\\d{5,12}"],[,,"1(?:[3569][1-8]\\d{3,9}|[47]\\d{5,10})|2[1-8]\\d{3,9}|3(?:[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}","\\d{5,12}",,,"1312345678"],[,,"4\\d{5,10}|50\\d{4,8}",
+"\\d{6,11}",,,"412345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"[67]00\\d{5,6}","\\d{8,9}",,,"600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FI",358,"00|99[049]","0",,,"0",,,,[[,"(\\d{3})(\\d{3,7})","$1 $2",["(?:[1-3]00|[6-8]0)"],"0$1","",0],[,"(\\d{2})(\\d{4,10})","$1 $2",["[14]|2[09]|50|7[135]"],"0$1","",0],[,"(\\d)(\\d{4,11})","$1 $2",["[25689][1-8]|3"],"0$1","",0]],,[,,"NA","NA"],1,,[,,"[13]00\\d{3,7}|2(?:0(?:0\\d{3,7}|2[023]\\d{1,6}|9[89]\\d{1,6}))|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})",
+"\\d{5,10}",,,"100123"],[,,"[13]0\\d{4,8}|2(?:0(?:[016-8]\\d{3,7}|[2-59]\\d{2,7})|9\\d{4,8})|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"],,,[,,"NA","NA"]],FJ:[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"],[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}",,,"3212345"],[,,"(?:7[0-8]|8[034679]|9\\d)\\d{5}","\\d{7}",,,"7012345"],[,,"0800\\d{7}","\\d{11}",,,"08001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FJ",679,"0(?:0|52)",,,,,,"00",
+,[[,"(\\d{3})(\\d{4})","$1 $2",["[36-9]"],"","",0],[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],FK:[,[,,"[2-7]\\d{4}","\\d{5}"],[,,"[2-47]\\d{4}","\\d{5}",,,"31234"],[,,"[56]\\d{4}","\\d{5}",,,"51234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FK",500,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FM:[,[,,"[39]\\d{6}","\\d{7}"],[,,"3[2357]0[1-9]\\d{3}|9[2-6]\\d{5}","\\d{7}",
+,,"3201234"],[,,"3[2357]0[1-9]\\d{3}|9[2-7]\\d{5}","\\d{7}",,,"3501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FM",691,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FO:[,[,,"[2-9]\\d{5}","\\d{6}"],[,,"(?:20|[3-4]\\d|8[19])\\d{4}","\\d{6}",,,"201234"],[,,"(?:2[1-9]|5\\d|7[1-79])\\d{4}","\\d{6}",,,"211234"],[,,"80[257-9]\\d{3}","\\d{6}",,,"802123"],[,,"90(?:[1345][15-7]|2[125-7]|99)\\d{2}","\\d{6}",
+,,"901123"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:6[0-36]|88)\\d{4}","\\d{6}",,,"601234"],"FO",298,"00",,,,"(10(?:01|[12]0|88))",,,,[[,"(\\d{6})","$1",,"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FR:[,[,,"[1-9]\\d{8}","\\d{9}"],[,,"[1-5]\\d{8}","\\d{9}",,,"123456789"],[,,"6\\d{8}|7[5-9]\\d{7}","\\d{9}",,,"612345678"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"],[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"],[,,"NA",
+"NA"],[,,"9\\d{8}","\\d{9}",,,"912345678"],"FR",33,"00","0",,,"0",,,,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1","",0],[,"(1\\d{2})(\\d{3})","$1 $2",["11"],"$1","",0],[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1","",0]],[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1","",0],[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GA:[,[,
+,"0?\\d{7}","\\d{7,8}"],[,,"01\\d{6}","\\d{8}",,,"01441234"],[,,"0?[2-7]\\d{6}","\\d{7,8}",,,"06031234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GA",241,"00",,,,,,,,[[,"(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],GB:[,[,,"\\d{7,10}","\\d{4,10}"],[,,"2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-49]|8[01349])|21[0-7]|31[0-8]|[459]1\\d|61[0-46-9]))\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\\d)|3(?:0\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|[28][02-5789]|[37]\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\\d|9[2-57]))\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\d)|276\\d|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[567]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}|176888[234678]\\d{2}|16977[23]\\d{3}",
+"\\d{4,10}",,,"1212345678"],[,,"7(?:[1-4]\\d\\d|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[04-9]\\d|1[02-9]|2[0-35-9]|3[0-689]))\\d{6}","\\d{10}",,,"7400123456"],[,,"80(?:0(?:1111|\\d{6,7})|8\\d{7})|500\\d{6}","\\d{7}(?:\\d{2,3})?",,,"8001234567"],[,,"(?:87[123]|9(?:[01]\\d|8[2349]))\\d{7}","\\d{10}",,,"9012345678"],[,,"8(?:4(?:5464\\d|[2-5]\\d{7})|70\\d{7})","\\d{7}(?:\\d{3})?",,,"8431234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}",
+"\\d{10}",,,"5612345678"],"GB",44,"00","0"," x",,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2|5[56]|7(?:0|6[013-9])","2|5[56]|7(?:0|6(?:[013-9]|2[0-35-9]))"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:1|\\d1)|3|9[018]"],"0$1","",0],[,"(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:387|5(?:24|39)|697|768|946)","1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)"],"0$1","",0],[,"(1\\d{3})(\\d{5,6})","$1 $2",["1"],"0$1","",0],[,"(7\\d{3})(\\d{6})","$1 $2",["7(?:[1-5789]|62)",
+"7(?:[1-5789]|624)"],"0$1","",0],[,"(800)(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1","",0],[,"(845)(46)(4\\d)","$1 $2 $3",["845","8454","84546","845464"],"0$1","",0],[,"(8\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:4[2-5]|7[0-3])"],"0$1","",0],[,"(80\\d)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1","",0],[,"([58]00)(\\d{6})","$1 $2",["[58]00"],"0$1","",0]],,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],1,,[,,"NA","NA"],[,,"(?:3[0347]|55)\\d{8}",
+"\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],GD:[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|800|938)\\d{4}","\\d{7}(?:\\d{3})?",,,"4732691234"],[,,"473(?:4(?:0[2-79]|1[04-9]|20|58)|5(?:2[01]|3[3-8])|901)\\d{4}","\\d{10}",,,"4734031234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",
+,,"5002345678"],[,,"NA","NA"],"GD",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"473",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GE:[,[,,"[34578]\\d{8}","\\d{6,9}"],[,,"(?:3(?:[256]\\d|4[124-9]|7[0-4])|4(?:1\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\d{6}","\\d{6,9}",,,"322123456"],[,,"5(?:14|5[01578]|68|7[0147-9]|9[0-35-9])\\d{6}","\\d{9}",,,"555123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"706\\d{6}","\\d{9}",,,"706123456"],"GE",995,"00","0",,,"0",,,,[[,
+"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5"],"$1","",0]],,[,,"NA","NA"],,,[,,"706\\d{6}","\\d{9}",,,"706123456"],[,,"NA","NA"],,,[,,"NA","NA"]],GF:[,[,,"[56]\\d{8}","\\d{9}"],[,,"594(?:10|2[012457-9]|3[0-57-9]|4[3-9]|5[7-9]|6[0-3]|9[014])\\d{4}","\\d{9}",,,"594101234"],[,,"694(?:[04][0-7]|1[0-5]|3[018]|[29]\\d)\\d{4}","\\d{9}",,,"694201234"],[,,"NA","NA"],[,
+,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GF",594,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GG:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1481\\d{6}","\\d{6,10}",,,"1481456789"],[,,"7(?:781|839|911)\\d{6}","\\d{10}",,,"7781123456"],[,,"80(?:0(?:1111|\\d{6,7})|8\\d{7})|500\\d{6}","\\d{7}(?:\\d{2,3})?",,,"8001234567"],[,,"(?:87[123]|9(?:[01]\\d|8[0-3]))\\d{7}","\\d{10}",,,"9012345678"],
+[,,"8(?:4(?:5464\\d|[2-5]\\d{7})|70\\d{7})","\\d{7}(?:\\d{3})?",,,"8431234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"GG",44,"00","0"," x",,"0",,,,,,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],,,[,,"NA","NA"],[,,"(?:3[0347]|55)\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],GH:[,[,,"[235]\\d{8}|8\\d{7}","\\d{7,9}"],[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-3]|7\\d)|4(?:2[013-9]|3[01]|7\\d)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}",
+"\\d{7,9}",,,"302345678"],[,,"(?:2[034678]\\d|5(?:[047]\\d|54))\\d{6}","\\d{9}",,,"231234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GH",233,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1","",0],[,"(\\d{3})(\\d{5})","$1 $2",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],,,[,,"NA","NA"]],GI:[,[,,"[2568]\\d{7}","\\d{8}"],[,,"2(?:00\\d|1(?:6[24-7]|9\\d)|2(?:00|2[2457]))\\d{4}",
+"\\d{8}",,,"20012345"],[,,"(?:5[46-8]|62)\\d{6}","\\d{8}",,,"57123456"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"8[1-689]\\d{6}","\\d{8}",,,"88123456"],[,,"87\\d{6}","\\d{8}",,,"87123456"],[,,"NA","NA"],[,,"NA","NA"],"GI",350,"00",,,,,,,,[[,"(\\d{3})(\\d{5})","$1 $2",["2"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GL:[,[,,"[1-689]\\d{5}","\\d{6}"],[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}",,,"321000"],[,,"[245][2-9]\\d{4}","\\d{6}",,,"221234"],[,,"80\\d{4}",
+"\\d{6}",,,"801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"3[89]\\d{4}","\\d{6}",,,"381234"],"GL",299,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GM:[,[,,"[2-9]\\d{6}","\\d{7}"],[,,"(?:4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}",,,"5661234"],[,,"(?:2[0-6]|[3679]\\d)\\d{5}","\\d{7}",,,"3012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],[,,"NA","NA"],"GM",220,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GN:[,[,,"[367]\\d{7,8}","\\d{8,9}"],[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}",,,"30241234"],[,,"6[02356]\\d{7}","\\d{9}",,,"601123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"722\\d{6}","\\d{9}",,,"722123456"],"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"],"","",0],
+[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GP:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:0[13468]|1[012]|2[0-68]|3[28]|4[0-8]|5[579]|6[0189]|70|8[0-689]|9\\d)\\d{4}","\\d{9}",,,"590201234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GP",590,"00","0",,,"0",,,,[[,"([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,"0$1","",0]],,[,,"NA","NA"],1,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GQ:[,[,,"[23589]\\d{8}","\\d{9}"],[,,"3(?:3(?:3\\d[7-9]|[0-24-9]\\d[46])|5\\d{2}[7-9])\\d{4}","\\d{9}",,,"333091234"],[,,"(?:222|551)\\d{6}","\\d{9}",,,"222123456"],[,,"80\\d[1-9]\\d{5}","\\d{9}",,,"800123456"],[,,"90\\d[1-9]\\d{5}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GQ",240,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"],"","",0],[,"(\\d{3})(\\d{6})","$1 $2",["[89]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],
+[,,"NA","NA"],,,[,,"NA","NA"]],GR:[,[,,"[26-9]\\d{9}","\\d{10}"],[,,"2(?:1\\d{2}|2(?:2[1-46-9]|3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[89][1-9])|3(?:1\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\d|3[1245]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-57]))\\d{6}","\\d{10}",,,"2123456789"],[,,"69\\d{8}","\\d{10}",,,"6912345678"],
+[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"90[19]\\d{7}","\\d{10}",,,"9091234567"],[,,"8(?:0[16]|12|25)\\d{7}","\\d{10}",,,"8011234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"NA","NA"],"GR",30,"00",,,,,,,,[[,"([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["21|7"],"","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2[2-9]1|[689]"],"","",0],[,"(2\\d{3})(\\d{6})","$1 $2",["2[2-9][02-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GT:[,[,,"[2-7]\\d{7}|1[89]\\d{9}","\\d{8}(?:\\d{3})?"],
+[,,"[267][2-9]\\d{6}","\\d{8}",,,"22456789"],[,,"[345]\\d{7}","\\d{8}",,,"51234567"],[,,"18[01]\\d{8}","\\d{11}",,,"18001112222"],[,,"19\\d{9}","\\d{11}",,,"19001112222"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GT",502,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[2-7]"],"","",0],[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GU:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}",
+"\\d{7}(?:\\d{3})?",,,"6713001234"],[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}","\\d{7}(?:\\d{3})?",,,"6713001234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"GU",1,"011",
+"1",,,"1",,,1,,,[,,"NA","NA"],,"671",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GW:[,[,,"[3-79]\\d{6}","\\d{7}"],[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}",,,"3201234"],[,,"(?:[5-7]\\d|9[012])\\d{5}","\\d{7}",,,"5012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"40\\d{5}","\\d{7}",,,"4012345"],"GW",245,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GY:[,[,,"[2-4679]\\d{6}","\\d{7}"],[,,
+"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-24-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|77[1-57])\\d{4}","\\d{7}",,,"2201234"],[,,"6\\d{6}","\\d{7}",,,"6091234"],[,,"(?:289|862)\\d{4}","\\d{7}",,,"2891234"],[,,"9008\\d{3}","\\d{7}",,,"9008123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GY",592,"001",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HK:[,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{4,10}","\\d{5,11}"],[,,"(?:[23]\\d|5[78])\\d{6}",
+"\\d{8}",,,"21234567"],[,,"(?:5[1-69]\\d|6\\d{2}|9(?:0[1-9]|[1-8]\\d))\\d{5}","\\d{8}",,,"51234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900(?:[0-24-9]\\d{7}|3\\d{1,4})","\\d{5,11}",,,"90012345678"],[,,"NA","NA"],[,,"8[1-3]\\d{6}","\\d{8}",,,"81123456"],[,,"NA","NA"],"HK",852,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[235-7]|[89](?:0[1-9]|[1-9])"],"","",0],[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["800"],"","",0],[,"(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["900"],"","",0],[,"(900)(\\d{2,5})",
+"$1 $2",["900"],"","",0]],,[,,"7\\d{7}","\\d{8}",,,"71234567"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HN:[,[,,"[237-9]\\d{7}","\\d{8}"],[,,"2(?:2(?:0[019]|1[1-36]|[23]\\d|4[056]|5[57]|7[01389]|8[0146-9]|9[012])|4(?:2[3-59]|3[13-689]|4[0-68]|5[1-35])|5(?:4[3-5]|5\\d|6[56]|74)|6(?:[056]\\d|4[0-378]|[78][0-8]|9[01])|7(?:6[46-9]|7[02-9]|8[34])|8(?:79|8[0-35789]|9[1-57-9]))\\d{4}","\\d{8}",,,"22123456"],[,,"[37-9]\\d{7}","\\d{8}",,,"91234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"HN",504,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1-$2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HR:[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"],[,,"1\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,8}",,,"12345678"],[,,"9[1257-9]\\d{6,10}","\\d{8,12}",,,"912345678"],[,,"80[01]\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"6(?:[09]\\d{7}|[145]\\d{4,7})","\\d{6,9}",,,"611234"],[,,"NA","NA"],[,,"7[45]\\d{4,7}","\\d{6,9}",,,"741234567"],[,,"NA","NA"],
+"HR",385,"00","0",,,"0",,,,[[,"(1)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1","",0],[,"(6[09])(\\d{4})(\\d{3})","$1 $2 $3",["6[09]"],"0$1","",0],[,"(62)(\\d{3})(\\d{3,4})","$1 $2 $3",["62"],"0$1","",0],[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"],"0$1","",0],[,"(9\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1","",0],[,"(9\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(9\\d)(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"],
+"0$1","",0],[,"(\\d{2})(\\d{3,4})(\\d{3})","$1 $2 $3",["6[145]|7"],"0$1","",0],[,"(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1","",0],[,"(80[01])(\\d{3,4})(\\d{3})","$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"62\\d{6,7}","\\d{8,9}",,,"62123456"],,,[,,"NA","NA"]],HT:[,[,,"[2-489]\\d{7}","\\d{8}"],[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}",,,"22453300"],[,,"(?:3[1-9]|4\\d)\\d{6}","\\d{8}",,,"34101234"],[,,"8\\d{7}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"98[89]\\d{5}","\\d{8}",,,"98901234"],"HT",509,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HU:[,[,,"[1-9]\\d{7,8}","\\d{6,9}"],[,,"(?:1\\d|2(?:1\\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\\d|[2-9])|8[2-57-9]|9[2-69])\\d{6}","\\d{6,9}",,,"12345678"],[,,"(?:[27]0|3[01])\\d{7}","\\d{9}",,,"201234567"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"9[01]\\d{6}","\\d{8}",,,"90123456"],[,,"40\\d{6}","\\d{8}",,,"40123456"],
+[,,"NA","NA"],[,,"NA","NA"],"HU",36,"00","06",,,"06",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"($1)","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"($1)","",0]],,[,,"NA","NA"],,,[,,"[48]0\\d{6}","\\d{8}",,,"80123456"],[,,"NA","NA"],,,[,,"NA","NA"]],ID:[,[,,"[1-9]\\d{6,10}","\\d{5,11}"],[,,"2(?:1(?:14\\d{3}|[0-8]\\d{6,7}|500\\d{3}|9\\d{6})|[24]\\d{7,8})|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}",
+"\\d{5,10}",,,"612345678"],[,,"(?:2(?:1(?:3[145]|4[01]|5[1-469]|60|8[0359]|9\\d)|2(?:88|9[1256])|3[1-4]9|4(?:36|91)|5(?:1[349]|[2-4]9)|6[0-7]9|7(?:[1-36]9|4[39])|8[1-5]9|9[1-48]9)|3(?:19[1-3]|2[12]9|3[13]9|4(?:1[69]|39)|5[14]9|6(?:1[69]|2[89])|709)|4[13]19|5(?:1(?:19|8[39])|4[129]9|6[12]9)|6(?:19[12]|2(?:[23]9|77))|7(?:1[13]9|2[15]9|419|5(?:1[89]|29)|6[15]9|7[178]9))\\d{5,6}|8[1-35-9]\\d{7,9}","\\d{9,11}",,,"812345678"],[,,"177\\d{6,8}|800\\d{5,7}","\\d{8,11}",,,"8001234567"],[,,"809\\d{7}","\\d{10}",
+,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ID",62,"0(?:0[1789]|10(?:00|1[67]))","0",,,"0",,,,[[,"(\\d{2})(\\d{5,8})","$1 $2",["2[124]|[36]1"],"(0$1)","",0],[,"(\\d{3})(\\d{5,7})","$1 $2",["[4579]|2[035-9]|[36][02-9]"],"(0$1)","",0],[,"(8\\d{2})(\\d{3,4})(\\d{3,4})","$1-$2-$3",["8[1-35-9]"],"0$1","",0],[,"(177)(\\d{6,8})","$1 $2",["1"],"0$1","",0],[,"(800)(\\d{5,7})","$1 $2",["800"],"0$1","",0],[,"(80\\d)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80[79]"],"0$1","",0]],,[,,"NA","NA"],,,
+[,,"8071\\d{6}","\\d{10}",,,"8071123456"],[,,"8071\\d{6}","\\d{10}",,,"8071123456"],,,[,,"NA","NA"]],IE:[,[,,"[124-9]\\d{6,9}","\\d{5,10}"],[,,"1\\d{7,8}|2(?:1\\d{6,7}|3\\d{7}|[24-9]\\d{5})|4(?:0[24]\\d{5}|[1-469]\\d{7}|5\\d{6}|7\\d{5}|8[0-46-9]\\d{7})|5(?:0[45]\\d{5}|1\\d{6}|[23679]\\d{7}|8\\d{5})|6(?:1\\d{6}|[237-9]\\d{5}|[4-6]\\d{7})|7[14]\\d{7}|9(?:1\\d{6}|[04]\\d{7}|[35-9]\\d{5})","\\d{5,10}",,,"2212345"],[,,"8(?:22\\d{6}|[35-9]\\d{7})","\\d{9}",,,"850123456"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],
+[,,"15(?:1[2-8]|[2-8]0|9[089])\\d{6}","\\d{10}",,,"1520123456"],[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"],[,,"700\\d{6}","\\d{9}",,,"700123456"],[,,"76\\d{7}","\\d{9}",,,"761234567"],"IE",353,"00","0",,,"0",,,,[[,"(1)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)","",0],[,"(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)","",0],[,"(\\d{3})(\\d{5})","$1 $2",["40[24]|50[45]"],"(0$1)","",0],[,"(48)(\\d{4})(\\d{4})","$1 $2 $3",["48"],"(0$1)","",0],[,"(818)(\\d{3})(\\d{3})","$1 $2 $3",
+["81"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[24-69]|7[14]"],"(0$1)","",0],[,"([78]\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["76|8[35-9]"],"0$1","",0],[,"(700)(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1","",0],[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:8[059]|5)","1(?:8[059]0|5)"],"$1","",0]],,[,,"NA","NA"],,,[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"],[,,"818\\d{6}","\\d{9}",,,"818123456"],,,[,,"8[35-9]\\d{8}","\\d{10}",,,"8501234567"]],IL:[,[,,"[17]\\d{6,9}|[2-589]\\d{3}(?:\\d{3,6})?|6\\d{3}",
+"\\d{4,10}"],[,,"[2-489]\\d{7}","\\d{7,8}",,,"21234567"],[,,"5(?:[02347-9]\\d{2}|5(?:01|2[23]|3[34]|4[45]|5[5689]|6[67]|7[78]|8[89]|9[7-9])|6[2-9]\\d)\\d{5}","\\d{9}",,,"501234567"],[,,"1(?:80[019]\\d{3}|255)\\d{3}","\\d{7,10}",,,"1800123456"],[,,"1(?:212|(?:9(?:0[01]|19)|200)\\d{2})\\d{4}","\\d{8,10}",,,"1919123456"],[,,"1700\\d{6}","\\d{10}",,,"1700123456"],[,,"NA","NA"],[,,"7(?:2[23]\\d|3[237]\\d|47\\d|6(?:5\\d|8[068])|7\\d{2}|8(?:33|55|77|81))\\d{5}","\\d{9}",,,"771234567"],"IL",972,"0(?:0|1[2-9])",
+"0",,,"0",,,,[[,"([2-489])(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1","",0],[,"([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1","",0],[,"(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"],"$1","",0],[,"(1255)(\\d{3})","$1-$2",["125"],"$1","",0],[,"(1200)(\\d{3})(\\d{3})","$1-$2-$3",["120"],"$1","",0],[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"],"$1","",0],[,"(1599)(\\d{6})","$1-$2",["15"],"$1","",0],[,"(\\d{4})","*$1",["[2-689]"],"$1","",0]],,[,,"NA","NA"],,,[,,"1700\\d{6}|[2-689]\\d{3}",
+"\\d{4,10}",,,"1700123456"],[,,"[2-689]\\d{3}|1599\\d{6}","\\d{4}(?:\\d{6})?",,,"1599123456"],,,[,,"NA","NA"]],IM:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1624\\d{6}","\\d{6,10}",,,"1624456789"],[,,"7[569]24\\d{6}","\\d{10}",,,"7924123456"],[,,"808162\\d{4}","\\d{10}",,,"8081624567"],[,,"(?:872299|90[0167]624)\\d{4}","\\d{10}",,,"9016247890"],[,,"8(?:4(?:40[49]06|5624\\d)|70624\\d)\\d{3}","\\d{10}",,,"8456247890"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"IM",
+44,"00","0"," x",,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"3(?:08162\\d|3\\d{5}|4(?:40[49]06|5624\\d)|7(?:0624\\d|2299\\d))\\d{3}|55\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],IN:[,[,,"1\\d{7,12}|[2-9]\\d{9,10}","\\d{6,13}"],[,,"(?:11|2[02]|33|4[04]|79)[2-7]\\d{7}|80[2-467]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|[57][2-689]|6[24-578]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-7]\\d{5}",
+"\\d{6,10}",,,"1123456789"],[,,"(?:7(?:0(?:2[2-9]|[3-8]\\d|9[0-4])|2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[1-9]|[58]\\d|7[3679]|9[689])|4(?:0[1-9]|1[15-9]|[29][89]|39|8[389])|5(?:[034678]\\d|2[03-9]|5[017-9]|9[7-9])|6(?:0[0127]|1[0-257-9]|2[0-4]|3[19]|5[4589]|[6-9]\\d)|7(?:0[2-9]|[1-79]\\d|8[1-9])|8(?:[0-7]\\d|9[013-9]))|8(?:0(?:[01589]\\d|6[67])|1(?:[02-589]\\d|1[0135-9]|7[0-79])|2(?:[236-9]\\d|5[1-9])|3(?:[0357-9]\\d|4[1-9])|[45]\\d{2}|6[02457-9]\\d|7[1-69]\\d|8(?:[0-26-9]\\d|44|5[2-9])|9(?:[035-9]\\d|2[2-9]|4[0-8]))|9\\d{3})\\d{6}",
+"\\d{10}",,,"9123456789"],[,,"1(?:600\\d{6}|80(?:0\\d{4,8}|3\\d{9}))","\\d{8,13}",,,"1800123456"],[,,"186[12]\\d{9}","\\d{13}",,,"1861123456789"],[,,"1860\\d{7}","\\d{11}",,,"18603451234"],[,,"NA","NA"],[,,"NA","NA"],"IN",91,"00","0",,,"0",,,,[[,"(\\d{5})(\\d{5})","$1 $2",["7(?:0[2-9]|2[0579]|3[057-9]|4[0-389]|6[0-35-9]|[57]|8[0-79])|8(?:0[015689]|1[0-57-9]|2[2356-9]|3[0-57-9]|[45]|6[02457-9]|7[1-69]|8[0124-9]|9[02-9])|9","7(?:0(?:2[2-9]|[3-8]|9[0-4])|2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[1-9]|[58]|7[3679]|9[689])|4(?:0[1-9]|1[15-9]|[29][89]|39|8[389])|5(?:[034678]|2[03-9]|5[017-9]|9[7-9])|6(?:0[0-27]|1[0-257-9]|2[0-4]|3[19]|5[4589]|[6-9])|7(?:0[2-9]|[1-79]|8[1-9])|8(?:[0-7]|9[013-9]))|8(?:0(?:[01589]|6[67])|1(?:[02-589]|1[0135-9]|7[0-79])|2(?:[236-9]|5[1-9])|3(?:[0357-9]|4[1-9])|[45]|6[02457-9]|7[1-69]|8(?:[0-26-9]|44|5[2-9])|9(?:[035-9]|2[2-9]|4[0-8]))|9"],
+"0$1","",1],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-46]"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[569][14]|7[1257]|8[1346]|[68][1-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",
+["7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)","7(?:12|2[14]|3[134]|4[47]|5(?:1|5[2-6])|[67]1|88)"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)"],"0$1","",1],[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[23579]|[468][1-9])|[2-8]"],"0$1","",1],[,"(1600)(\\d{2})(\\d{4})","$1 $2 $3",["160","1600"],"$1","",1],[,"(1800)(\\d{4,5})","$1 $2",["180","1800"],"$1","",1],[,"(18[06]0)(\\d{2,4})(\\d{4})","$1 $2 $3",["18[06]","18[06]0"],"$1","",1],[,"(140)(\\d{3})(\\d{4})",
+"$1 $2 $3",["140"],"$1","",1],[,"(\\d{4})(\\d{3})(\\d{4})(\\d{2})","$1 $2 $3 $4",["18[06]","18(?:03|6[12])"],"$1","",1]],,[,,"NA","NA"],,,[,,"1(?:600\\d{6}|8(?:0(?:0\\d{4,8}|3\\d{9})|6(?:0\\d{7}|[12]\\d{9})))","\\d{8,13}",,,"1800123456"],[,,"140\\d{7}","\\d{10}",,,"1409305260"],,,[,,"NA","NA"]],IO:[,[,,"3\\d{6}","\\d{7}"],[,,"37\\d{5}","\\d{7}",,,"3709100"],[,,"38\\d{5}","\\d{7}",,,"3801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"IO",246,"00",,,,,,,,[[,"(\\d{3})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],IQ:[,[,,"[1-7]\\d{7,9}","\\d{6,10}"],[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}",,,"12345678"],[,,"7[3-9]\\d{8}","\\d{10}",,,"7912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"IQ",964,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1","",0],[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1","",0],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",
+["7"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],IR:[,[,,"[14-8]\\d{6,9}|[23]\\d{4,9}|9(?:[0-4]\\d{8}|9\\d{2,8})","\\d{4,10}"],[,,"1(?:[13-589][12]|[27][1-4])\\d{7}|2(?:1\\d{3,8}|3[12]\\d{7}|4(?:1\\d{4,7}|2\\d{7})|53\\d{7}|6\\d{8}|7[34]\\d{7}|[89][12]\\d{7})|3(?:1[2-5]\\d{7}|2[1-4]\\d{7}|3(?:[125]\\d{7}|4\\d{6,7})|4(?:1\\d{6,7}[24-9]\\d{7})|5(?:1\\d{4,7}|[23]\\d{7})|[6-9][12]\\d{7})|4(?:[135-9][12]\\d{7}|2[1-467]\\d{7}|4(?:1\\d{4,7}|[2-4]\\d{7}))|5(?:1[2-5]\\d{7}|2[89]\\d{7}|3[1-5]\\d{7}|4(?:1\\d{4,7}|[2-8]\\d{7})|[5-7][12]\\d{7}|8[1245]\\d{7})|6(?:1(?:1\\d{6,7}|2\\d{7})|[347-9][12]\\d{7}|5(?:1\\d{7}|2\\d{6,7})|6[1-6]\\d{7})|7(?:1[2-5]|2[1289]|[3589][12]|4[1-4]|6[1-6]|7[1-3])\\d{7}|8(?:[145][12]|3[124578]|6[2-6]|7[1245])\\d{7}",
+"\\d{5,10}",,,"2123456789"],[,,"9(?:0[12]|[1-3]\\d)\\d{7}","\\d{10}",,,"9123456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:[2-6]0\\d|993)\\d{7}","\\d{10}",,,"9932123456"],"IR",98,"00","0",,,"0",,,,[[,"(21)(\\d{3,5})","$1 $2",["21"],"0$1","",0],[,"(2[15])(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1|5[0-47-9])"],"0$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[156]|31|51|71|86"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]|2[02-47-9]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2,3})",
+"$1 $2 $3",["[13-9]|2[02-47-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})","$1 $2",["[13-9]|2[02-47-9]"],"0$1","",0]],,[,,"943\\d{7}","\\d{10}",,,"9432123456"],,,[,,"NA","NA"],[,,"9990\\d{0,6}","\\d{4,10}",,,"9990123456"],,,[,,"NA","NA"]],IS:[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"],[,,"(?:4(?:1[0-24-6]|2[0-7]|[37][0-8]|4[0-245]|5[0-3568]|6\\d|8[0-36-8])|5(?:05|[156]\\d|2[02578]|3[013-7]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|87[23])\\d{4}","\\d{7}",,,"4101234"],[,,"38[589]\\d{6}|(?:6(?:1[1-8]|3[089]|4[0167]|5[019]|[67][0-69]|9\\d)|7(?:5[057]|7\\d|8[0-36-8])|8(?:2[0-5]|3[0-4]|[469]\\d|5[1-9]))\\d{4}",
+"\\d{7,9}",,,"6111234"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"90\\d{5}","\\d{7}",,,"9011234"],[,,"NA","NA"],[,,"NA","NA"],[,,"49\\d{5}","\\d{7}",,,"4921234"],"IS",354,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[4-9]"],"","",0],[,"(3\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"(?:6(?:2[0-8]|49|8\\d)|87[0189]|95[48])\\d{4}","\\d{7}",,,"6201234"]],IT:[,[,,"[01589]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9})","\\d{6,11}"],[,,"0(?:[26]\\d{4,9}|(?:1(?:[0159]\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\d{2,7})",
+"\\d{6,11}",,,"0212345678"],[,,"3(?:[12457-9]\\d{8}|6\\d{7,8}|3\\d{7,9})","\\d{9,11}",,,"3123456789"],[,,"80(?:0\\d{6}|3\\d{3})","\\d{6,9}",,,"800123456"],[,,"0878\\d{5}|1(?:44|6[346])\\d{6}|89(?:2\\d{3}|4(?:[0-4]\\d{2}|[5-9]\\d{4})|5(?:[0-4]\\d{2}|[5-9]\\d{6})|9\\d{6})","\\d{6,10}",,,"899123456"],[,,"84(?:[08]\\d{6}|[17]\\d{3})","\\d{6,9}",,,"848123456"],[,,"1(?:78\\d|99)\\d{6}","\\d{9,10}",,,"1781234567"],[,,"55\\d{8}","\\d{10}",,,"5512345678"],"IT",39,"00",,,,,,,,[[,"(\\d{2})(\\d{3,4})(\\d{4})",
+"$1 $2 $3",["0[26]|55"],"","",0],[,"(0[26])(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"],"","",0],[,"(0[26])(\\d{4,6})","$1 $2",["0[26]"],"","",0],[,"(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]"],"","",0],[,"(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[245])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))"],"","",0],[,"(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["0[13-57-9][2-46-8]"],"","",0],[,"(0\\d{3})(\\d{2,6})","$1 $2",["0[13-57-9][2-46-8]"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["[13]|8(?:00|4[08]|9[59])","[13]|8(?:00|4[08]|9(?:5[5-9]|9))"],"","",0],[,"(\\d{4})(\\d{4})","$1 $2",["894","894[5-9]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3"],"","",0]],,[,,"NA","NA"],,,[,,"848\\d{6}","\\d{9}",,,"848123456"],[,,"NA","NA"],1,,[,,"NA","NA"]],JE:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1534\\d{6}","\\d{6,10}",,,"1534456789"],[,,"7(?:509|7(?:00|97)|829|937)\\d{6}","\\d{10}",,,"7797123456"],[,,"80(?:07(?:35|81)|8901)\\d{4}","\\d{10}",,,"8007354567"],[,,"(?:871206|90(?:066[59]|1810|71(?:07|55)))\\d{4}",
+"\\d{10}",,,"9018105678"],[,,"8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\d{4}","\\d{10}",,,"8447034567"],[,,"701511\\d{4}","\\d{10}",,,"7015115678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"JE",44,"00","0"," x",,"0",,,,,,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],,,[,,"NA","NA"],[,,"3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\d{4}|55\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],JM:[,[,,
+"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027-9]|[23]\\d|40|5[06]|6[2-589]|7[05]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?",,,"8765123456"],[,,"876(?:2[1789]\\d|[348]\\d{2}|5(?:08|27|6[0-24-9]|[3-578]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}",,,"8762101234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}",
+"\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"JM",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"876",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],JO:[,[,,"[235-9]\\d{7,8}","\\d{7,9}"],[,,"(?:2(?:6(?:2[0-35-9]|3[0-57-8]|4[24-7]|5[0-24-8]|[6-8][02]|9[0-2])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\d|4[0-2]|[57][02]|60)|53(?:0[0-2]|[13][02]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2[50]0|300|4(?:0[0125]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[17-8]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[02-39]))|87(?:[02]0|7[08]|9[09]))\\d{4}",
+"\\d{7,8}",,,"62001234"],[,,"7(?:55|7[25-9]|8[05-9]|9[015-9])\\d{6}","\\d{9}",,,"790123456"],[,,"80\\d{6}","\\d{8}",,,"80012345"],[,,"900\\d{5}","\\d{8}",,,"90012345"],[,,"85\\d{6}","\\d{8}",,,"85012345"],[,,"70\\d{7}","\\d{9}",,,"700123456"],[,,"NA","NA"],"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)","",0],[,"(7)(\\d{4})(\\d{4})","$1 $2 $3",["7[457-9]"],"0$1","",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["70|8[0158]|9"],"0$1","",0]],,[,,"74(?:66|77)\\d{5}","\\d{9}",
+,,"746612345"],,,[,,"NA","NA"],[,,"8(?:10|8\\d)\\d{5}","\\d{8}",,,"88101234"],,,[,,"NA","NA"]],JP:[,[,,"[1-9]\\d{8,9}|00(?:[36]\\d{7,14}|7\\d{5,7}|8\\d{7})","\\d{8,17}"],[,,"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|2[2-9]\\d|[36][1-9]\\d|4(?:6[02-8]|[2-578]\\d|9[2-59])|5(?:6[1-9]|7[2-8]|[2-589]\\d)|7(?:3[4-9]|4[02-9]|[25-9]\\d)|8(?:3[2-9]|4[5-9]|5[1-9]|8[03-9]|[2679]\\d)|9(?:[679][1-9]|[2-58]\\d))\\d{6}","\\d{9}",,,"312345678"],[,,"[7-9]0[1-9]\\d{7}","\\d{10}",,,"7012345678"],
+[,,"120\\d{6}|800\\d{7}|00(?:37\\d{6,13}|66\\d{6,13}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{8,17}",,,"120123456"],[,,"990\\d{6}","\\d{9}",,,"990123456"],[,,"NA","NA"],[,,"60\\d{7}","\\d{9}",,,"601234567"],[,,"50[1-9]\\d{7}","\\d{10}",,,"5012345678"],"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1","",0],[,"(\\d{4})(\\d{4})","$1-$2",["0077"],"$1","",0],[,"(\\d{4})(\\d{2})(\\d{3,4})",
+"$1-$2-$3",["0077"],"$1","",0],[,"(\\d{4})(\\d{2})(\\d{4})","$1-$2-$3",["0088"],"$1","",0],[,"(\\d{4})(\\d{3})(\\d{3,4})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{4})(\\d{4,5})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{5})(\\d{5,6})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{6})(\\d{6,7})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"],"0$1","",0],[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])",
+"1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"],
+"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"],"0$1","",0],[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[2479][1-9]"],"0$1","",0]],[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"],"0$1","",0],[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])",
+"1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"],
+"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"],"0$1","",0],[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[2479][1-9]"],"0$1","",0]],[,,"20\\d{8}","\\d{10}",,,"2012345678"],,,[,,"00(?:37\\d{6,13}|66\\d{6,13}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{8,17}",,,"00777012"],[,,"570\\d{6}","\\d{9}",,,"570123456"],1,,[,,"NA","NA"]],KE:[,[,,"20\\d{6,7}|[4-9]\\d{6,9}","\\d{7,10}"],
+[,,"20\\d{6,7}|4(?:[0136]\\d{7}|[245]\\d{5,7})|5(?:[08]\\d{7}|[1-79]\\d{5,7})|6(?:[01457-9]\\d{5,7}|[26]\\d{7})","\\d{7,9}",,,"202012345"],[,,"7(?:[0-36]\\d|5[0-6]|7[0-5]|8[0-25-9])\\d{6}","\\d{9}",,,"712123456"],[,,"800[24-8]\\d{5,6}","\\d{9,10}",,,"800223456"],[,,"900[02-9]\\d{5}","\\d{9}",,,"900223456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1","",0],[,"(\\d{3})(\\d{6,7})","$1 $2",["7"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KG:[,[,,"[235-8]\\d{8,9}","\\d{5,10}"],[,,"(?:3(?:1(?:[256]\\d|3[1-9]|47)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\d)|5(?:22|3[4-7]|59|6\\d)|6(?:22|5[35-7]|6\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\d)|9(?:22|4[1-8]|6\\d))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}",,,"312123456"],[,,"(?:20[0-35]|5[124-7]\\d|7[07]\\d)\\d{6}","\\d{9}",,,"700123456"],[,,"800\\d{6,7}","\\d{9,10}",,,"800123456"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],"KG",996,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[25-7]|31[25]"],"0$1","",0],[,"(\\d{4})(\\d{5})","$1 $2",["3(?:1[36]|[2-9])"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d)(\\d{3})","$1 $2 $3 $4",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KH:[,[,,"[1-9]\\d{7,9}","\\d{6,10}"],[,,"(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:[237-9]|4[56]|5\\d|6\\d?)\\d{5}|23(?:4[234]|8\\d{2})\\d{4}","\\d{6,9}",,,"23756789"],[,,"(?:1(?:[013-9]|2\\d?)|3[18]\\d|6[016-9]|7(?:[07-9]|6\\d)|8(?:[013-79]|8\\d)|9(?:6\\d|7\\d?|[0-589]))\\d{6}",
+"\\d{8,9}",,,"91234567"],[,,"1800(?:1\\d|2[019])\\d{4}","\\d{10}",,,"1800123456"],[,,"1900(?:1\\d|2[09])\\d{4}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KH",855,"00[14-9]","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["1\\d[1-9]|[2-9]"],"0$1","",0],[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[89]0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KI:[,[,,"[2458]\\d{4}|3\\d{4,7}|7\\d{7}","\\d{5,8}"],[,,"(?:[24]\\d|3[1-9]|50|8[0-5])\\d{3}",
+"\\d{5}",,,"31234"],[,,"7(?:[24]\\d|3[1-9]|8[0-5])\\d{5}","\\d{8}",,,"72012345"],[,,"NA","NA"],[,,"3001\\d{4}","\\d{5,8}",,,"30010000"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KI",686,"00",,,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KM:[,[,,"[379]\\d{6}","\\d{7}"],[,,"7(?:6[0-37-9]|7[0-57-9])\\d{4}","\\d{7}",,,"7712345"],[,,"3[234]\\d{5}","\\d{7}",,,"3212345"],[,,"NA","NA"],[,,"(?:39[01]|9[01]0)\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+"KM",269,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KN:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"869(?:2(?:29|36)|302|4(?:6[015-9]|70))\\d{4}","\\d{7}(?:\\d{3})?",,,"8692361234"],[,,"869(?:5(?:5[6-8]|6[5-7])|66\\d|76[02-6])\\d{4}","\\d{10}",,,"8697652917"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}",
+"\\d{10}",,,"5002345678"],[,,"NA","NA"],"KN",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"869",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KP:[,[,,"1\\d{9}|[28]\\d{7}","\\d{6,8}|\\d{10}"],[,,"2\\d{7}|85\\d{6}","\\d{6,8}",,,"21234567"],[,,"19[123]\\d{7}","\\d{10}",,,"1921234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KP",850,"00|99","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1","",0],[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}",,,"23821234"],[,,"NA","NA"],,,[,,"NA","NA"]],KR:[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"],[,,"(?:2|3[1-3]|[46][1-4]|5[1-5])(?:1\\d{2,3}|[1-9]\\d{6,7})","\\d{4,10}",,,"22123456"],[,,"1[0-26-9]\\d{7,8}","\\d{9,10}",,,"1023456789"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"60[2-9]\\d{6}","\\d{9}",,,"602345678"],[,,"NA","NA"],[,,"50\\d{8}","\\d{10}",,,"5012345678"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],
+"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-6][1-9][1-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-6][1-9][1-9]"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["131",
+"131[13-9]"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["13[2-9]"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4",["30"],"0$1","0$CC-$1",0],[,"(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2[1-9]"],"0$1","0$CC-$1",0],[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1(?:[0-46-9])"],"0$1","0$CC-$1",0],[,"(\\d{4})(\\d{4})","$1-$2",["1(?:5[46-9]|6[04678])","1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))"],
+"$1","0$CC-$1",0]],,[,,"15\\d{7,8}","\\d{9,10}",,,"1523456789"],,,[,,"NA","NA"],[,,"1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))\\d{4}","\\d{8}",,,"15441234"],,,[,,"NA","NA"]],KW:[,[,,"[12569]\\d{6,7}","\\d{7,8}"],[,,"(?:18\\d|2(?:[23]\\d{2}|4(?:[1-35-9]\\d|44)|5(?:0[034]|[2-46]\\d|5[1-3]|7[1-7])))\\d{4}","\\d{7,8}",,,"22345678"],[,,"(?:5(?:[05]\\d|1[0-6])|6(?:0[034679]|5[015-9]|6\\d|7[067]|9[0369])|9(?:0[09]|4[049]|55|6[069]|[79]\\d|8[089]))\\d{5}","\\d{8}",,,"50012345"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KW",965,"00",,,,,,,,[[,"(\\d{4})(\\d{3,4})","$1 $2",["[1269]"],"","",0],[,"(5[015]\\d)(\\d{5})","$1 $2",["5"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KY:[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:4[35-79]|6[6-9]|77)|8(?:00|1[45]|25|[48]8)|9(?:14|4[035-9]))\\d{4}","\\d{7}(?:\\d{3})?",,,"3452221234"],[,,"345(?:32[1-9]|5(?:1[67]|2[5-7]|4[6-8]|76)|9(?:1[67]|2[3-9]|3[689]))\\d{4}",
+"\\d{10}",,,"3453231234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}|345976\\d{4}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"KY",1,"011","1",,,"1",,,,,,[,,"345849\\d{4}","\\d{10}",,,"3458491234"],,"345",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KZ:[,[,,"(?:33\\d|7\\d{2}|80[09])\\d{7}","\\d{10}"],[,,"33622\\d{5}|7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:[234]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[234]\\d|5[139])|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[237]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59)))\\d{5}",
+"\\d{10}",,,"7123456789"],[,,"7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\d{7}","\\d{10}",,,"7710009998"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"809\\d{7}","\\d{10}",,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"751\\d{7}","\\d{10}",,,"7511234567"],"KZ",7,"810","8",,,"8",,"8~10",,,,[,,"NA","NA"],,,[,,"751\\d{7}","\\d{10}",,,"7511234567"],[,,"NA","NA"],,,[,,"NA","NA"]],LA:[,[,,"[2-8]\\d{7,9}","\\d{6,10}"],[,,"(?:2[13]|3(?:0\\d|[14])|[5-7][14]|41|8[1468])\\d{6}","\\d{6,9}",,,"21212862"],[,,"20(?:2[2389]|5[4-689]|7[6-8]|9[57-9])\\d{6}",
+"\\d{10}",,,"2023123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LA",856,"00","0",,,"0",,,,[[,"(20)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["20"],"0$1","",0],[,"([2-8]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1","",0],[,"(30)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["30"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LB:[,[,,"[13-9]\\d{6,7}","\\d{7,8}"],[,,"(?:[14-6]\\d{2}|7(?:[2-579]\\d|62|8[0-7])|[89][2-9]\\d)\\d{4}","\\d{7}",
+,,"1123456"],[,,"(?:3\\d|7(?:[019]\\d|6[013-9]|8[89]))\\d{5}","\\d{7,8}",,,"71123456"],[,,"NA","NA"],[,,"9[01]\\d{6}","\\d{8}",,,"90123456"],[,,"8[01]\\d{6}","\\d{8}",,,"80123456"],[,,"NA","NA"],[,,"NA","NA"],"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-579]|62|8[0-7])|[89][2-9]"],"0$1","",0],[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[019]|6[013-9]|8[89])"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LC:[,[,,"[5789]\\d{9}",
+"\\d{7}(?:\\d{3})?"],[,,"758(?:4(?:30|5[0-9]|6[2-9]|8[0-2])|57[0-2]|638)\\d{4}","\\d{7}(?:\\d{3})?",,,"7584305678"],[,,"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2[0-8]))\\d{4}","\\d{10}",,,"7582845678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"LC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"758",[,,"NA","NA"],[,,"NA","NA"],
+,,[,,"NA","NA"]],LI:[,[,,"6\\d{8}|[23789]\\d{6}","\\d{7,9}"],[,,"(?:2(?:01|1[27]|3\\d|6[02-578]|96)|3(?:7[0135-7]|8[048]|9[0269]))\\d{4}","\\d{7}",,,"2345678"],[,,"6(?:51[01]|6(?:[01][0-4]|2[016-9]|88)|710)\\d{5}|7(?:36|4[25]|56|[7-9]\\d)\\d{4}","\\d{7,9}",,,"661234567"],[,,"80(?:0(?:2[238]|79)|9\\d{2})\\d{2}","\\d{7}",,,"8002222"],[,,"90(?:0(?:2[278]|79)|1(?:23|3[012])|6(?:4\\d|6[0126]))\\d{2}","\\d{7}",,,"9002222"],[,,"NA","NA"],[,,"701\\d{4}","\\d{7}",,,"7011234"],[,,"NA","NA"],"LI",423,"00","0",
+,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[23]|7[3-57-9]|87"],"","",0],[,"(6\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6"],"","",0],[,"(6[567]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6[567]"],"","",0],[,"(69)(7\\d{2})(\\d{4})","$1 $2 $3",["697"],"","",0],[,"([7-9]0\\d)(\\d{2})(\\d{2})","$1 $2 $3",["[7-9]0"],"","",0],[,"([89]0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"87(?:0[128]|7[0-4])\\d{3}","\\d{7}",,,"8770123"],,,[,,"697(?:[35]6|4[25]|[7-9]\\d)\\d{4}",
+"\\d{9}",,,"697361234"]],LK:[,[,,"[1-9]\\d{8}","\\d{7,9}"],[,,"(?:[189]1|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\d{6}","\\d{7,9}",,,"112345678"],[,,"7[125-8]\\d{7}","\\d{9}",,,"712345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LK",94,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{1})(\\d{6})","$1 $2 $3",["[1-689]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LR:[,[,,"2\\d{7}|[37-9]\\d{8}|[45]\\d{6}",
+"\\d{7,9}"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"(?:330\\d|4[67]|5\\d|77\\d{2}|88\\d{2}|994\\d)\\d{5}","\\d{7,9}",,,"770123456"],[,,"NA","NA"],[,,"90[03]\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"332(?:0[02]|5\\d)\\d{4}","\\d{9}",,,"332001234"],"LR",231,"00","0",,,"0",,,,[[,"(2\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1","",0],[,"([79]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[79]"],"0$1","",0],[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})",
+"$1 $2 $3",["[38]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LS:[,[,,"[2568]\\d{7}","\\d{8}"],[,,"2\\d{7}","\\d{8}",,,"22123456"],[,,"[56]\\d{7}","\\d{8}",,,"50123456"],[,,"800[256]\\d{4}","\\d{8}",,,"80021234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LS",266,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LT:[,[,,"[3-9]\\d{7}","\\d{8}"],[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}",
+,,"31234567"],[,,"6\\d{7}","\\d{8}",,,"61234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"9(?:0[0239]|10)\\d{5}","\\d{8}",,,"90012345"],[,,"808\\d{5}","\\d{8}",,,"80812345"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"LT",370,"00","8",,,"[08]",,,,[[,"([34]\\d)(\\d{6})","$1 $2",["37|4(?:1|5[45]|6[2-4])"],"(8-$1)","",1],[,"([3-6]\\d{2})(\\d{5})","$1 $2",["3[148]|4(?:[24]|6[09])|528|6"],"(8-$1)","",1],[,"([7-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"8 $1","",1],[,"(5)(2\\d{2})(\\d{4})",
+"$1 $2 $3",["52[0-79]"],"(8-$1)","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70[67]\\d{5}","\\d{8}",,,"70712345"],,,[,,"NA","NA"]],LU:[,[,,"[24-9]\\d{3,10}|3(?:[0-46-9]\\d{2,9}|5[013-9]\\d{1,8})","\\d{4,11}"],[,,"(?:2(?:2\\d{1,2}|3[2-9]|[67]\\d|4[1-8]\\d?|5[1-5]\\d?|9[0-24-9]\\d?)|3(?:[059][05-9]|[13]\\d|[26][015-9]|4[0-26-9]|7[0-389]|8[08])\\d?|4\\d{2,3}|5(?:[01458]\\d|[27][0-69]|3[0-3]|[69][0-7])\\d?|7(?:1[019]|2[05-9]|3[05]|[45][07-9]|[679][089]|8[06-9])\\d?|8(?:0[2-9]|1[0-36-9]|3[3-9]|[469]9|[58][7-9]|7[89])\\d?|9(?:0[89]|2[0-49]|37|49|5[0-27-9]|7[7-9]|9[0-478])\\d?)\\d{1,7}",
+"\\d{4,11}",,,"27123456"],[,,"6(?:[269][18]|71)\\d{6}","\\d{9}",,,"628123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[01]\\d{5}","\\d{8}",,,"90012345"],[,,"801\\d{5}","\\d{8}",,,"80112345"],[,,"70\\d{6}","\\d{8}",,,"70123456"],[,,"20(?:1\\d{5}|[2-689]\\d{1,7})","\\d{4,10}",,,"20201234"],"LU",352,"00",,,,"(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\d)",,,,[[,"(\\d{2})(\\d{3})","$1 $2",["[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],
+"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{1,4})","$1 $2 $3 $4",["2(?:[12589]|4[12])|[3-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],"","$CC $1",0],[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",
+["[89]0[01]|70"],"","$CC $1",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"],"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LV:[,[,,"[2689]\\d{7}","\\d{8}"],[,,"6[3-8]\\d{6}","\\d{8}",,,"63123456"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"81\\d{6}","\\d{8}",,,"81123456"],[,,"NA","NA"],[,,"NA","NA"],"LV",371,"00",,,,,,,,[[,"([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,
+"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LY:[,[,,"[25679]\\d{8}","\\d{7,9}"],[,,"(?:2[1345]|5[1347]|6[123479]|71)\\d{7}","\\d{7,9}",,,"212345678"],[,,"9[1-6]\\d{7}","\\d{9}",,,"912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LY",218,"00","0",,,"0",,,,[[,"([25679]\\d)(\\d{7})","$1-$2",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MA:[,[,,"[5689]\\d{8}","\\d{9}"],[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-7])\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}",
+"\\d{9}",,,"520123456"],[,,"6(?:0[0-8]|[12-7]\\d|8[01]|9[2457-9])\\d{6}","\\d{9}",,,"650123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89\\d{7}","\\d{9}",,,"891234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MA",212,"00","0",,,"0",,,,[[,"([56]\\d{2})(\\d{6})","$1-$2",["5(?:2[015-7]|3[0-4])|6"],"0$1","",0],[,"([58]\\d{3})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9])|892","5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892"],"0$1","",0],[,"(5\\d{4})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29|38)[89]"],"0$1","",
+0],[,"(8[09])(\\d{7})","$1-$2",["8(?:0|9[013-9])"],"0$1","",0]],,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MC:[,[,,"[4689]\\d{7,8}","\\d{8,9}"],[,,"870\\d{5}|9[2-47-9]\\d{6}","\\d{8}",,,"99123456"],[,,"6\\d{8}|4(?:4\\d|5[2-9])\\d{5}","\\d{8,9}",,,"612345678"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MC",377,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+["4"],"0$1","",0],[,"(6)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["8"],"$1","",0]],,[,,"NA","NA"],,,[,,"8\\d{7}","\\d{8}"],[,,"NA","NA"],,,[,,"NA","NA"]],MD:[,[,,"[235-9]\\d{7}","\\d{8}"],[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{8}",,,"22212345"],[,,"(?:562\\d|6(?:[089]\\d{2}|1[01]\\d|21\\d|50\\d|7(?:[1-6]\\d|7[0-4]))|7(?:6[07]|7[457-9]|[89]\\d)\\d)\\d{4}","\\d{8}",
+,,"65012345"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[056]\\d{5}","\\d{8}",,,"90012345"],[,,"808\\d{5}","\\d{8}",,,"80812345"],[,,"NA","NA"],[,,"3[08]\\d{6}","\\d{8}",,,"30123456"],"MD",373,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1","",0],[,"([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["2[13-79]|[5-7]"],"0$1","",0],[,"([89]\\d{2})(\\d{5})","$1 $2",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"8(?:03|14)\\d{5}","\\d{8}",,,"80312345"],,,[,,"NA","NA"]],ME:[,
+[,,"[2-9]\\d{7,8}","\\d{6,9}"],[,,"(?:20[2-8]|3(?:0[2-7]|1[35-7]|2[3567]|3[4-7])|4(?:0[237]|1[27])|5(?:0[47]|1[27]|2[378]))\\d{5}","\\d{6,8}",,,"30234567"],[,,"6(?:32\\d|[89]\\d{2}|7(?:[0-8]\\d|9(?:[3-9]|[0-2]\\d)))\\d{4}","\\d{8,9}",,,"67622901"],[,,"800[28]\\d{4}","\\d{8}",,,"80080002"],[,,"(?:88\\d|9(?:4[13-8]|5[16-8]))\\d{5}","\\d{8}",,,"94515151"],[,,"NA","NA"],[,,"NA","NA"],[,,"78[1-9]\\d{5}","\\d{8}",,,"78108780"],"ME",382,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]|6[3789]",
+"[2-57-9]|6(?:[389]|7(?:[0-8]|9[3-9]))"],"0$1","",0],[,"(67)(9)(\\d{3})(\\d{3})","$1 $2 $3 $4",["679","679[0-2]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"77\\d{6}","\\d{8}",,,"77273012"],,,[,,"NA","NA"]],MF:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:[02][79]|13|5[0-268]|[78]7)\\d{4}","\\d{9}",,,"590271234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MF",590,"00","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,
+,"NA","NA"],,,[,,"NA","NA"]],MG:[,[,,"[23]\\d{8}","\\d{7,9}"],[,,"20(?:2\\d{2}|4[47]\\d|5[3467]\\d|6[279]\\d|7(?:2[29]|[35]\\d)|8[268]\\d|9[245]\\d)\\d{4}","\\d{7,9}",,,"202123456"],[,,"3[2-49]\\d{7}","\\d{9}",,,"321234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"22\\d{7}","\\d{9}",,,"221234567"],"MG",261,"00","0",,,"0",,,,[[,"([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MH:[,[,,"[2-6]\\d{6}","\\d{7}"],
+[,,"(?:247|528|625)\\d{4}","\\d{7}",,,"2471234"],[,,"(?:235|329|45[56]|545)\\d{4}","\\d{7}",,,"2351234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"635\\d{4}","\\d{7}",,,"6351234"],"MH",692,"011","1",,,"1",,,,[[,"(\\d{3})(\\d{4})","$1-$2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MK:[,[,,"[2-578]\\d{7}","\\d{8}"],[,,"(?:2(?:[23]\\d|5[124578]|6[01])|3(?:1[3-6]|[23][2-6]|4[2356])|4(?:[23][2-6]|4[3-6]|5[256]|6[25-8]|7[24-6]|8[4-6]))\\d{5}","\\d{6,8}",,
+,"22212345"],[,,"7(?:[0-25-8]\\d{2}|32\\d|421)\\d{4}","\\d{8}",,,"72345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"5[02-9]\\d{6}","\\d{8}",,,"50012345"],[,,"8(?:0[1-9]|[1-9]\\d)\\d{5}","\\d{8}",,,"80123456"],[,,"NA","NA"],[,,"NA","NA"],"MK",389,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1","",0],[,"([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],
+,,[,,"NA","NA"]],ML:[,[,,"[246-9]\\d{7}","\\d{8}"],[,,"(?:2(?:0(?:2[0-589]|7\\d)|1(?:2[5-7]|[3-689]\\d|7[2-4689]))|44[239]\\d)\\d{4}","\\d{8}",,,"20212345"],[,,"[67]\\d{7}|9[0-25-9]\\d{6}","\\d{8}",,,"65012345"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ML",223,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[246-9]"],"","",0],[,"(\\d{4})","$1",["67|74"],"","",0]],[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[246-9]"],
+"","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MM:[,[,,"[14578]\\d{5,7}|[26]\\d{5,8}|9(?:2\\d{0,2}|[58]|3\\d|4\\d{1,2}|6\\d?|[79]\\d{0,2})\\d{6}","\\d{5,10}"],[,,"1(?:2\\d{1,2}|[3-5]\\d|6\\d?|[89][0-6]\\d)\\d{4}|2(?:[236-9]\\d{4}|4(?:0\\d{5}|\\d{4})|5(?:1\\d{3,6}|[02-9]\\d{3,5}))|4(?:2[245-8]|[346][2-6]|5[3-5])\\d{4}|5(?:2(?:20?|[3-8])|3[2-68]|4(?:21?|[4-8])|5[23]|6[2-4]|7[2-8]|8[24-7]|9[2-7])\\d{4}|6(?:0[23]|1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7(?:[2367]|4\\d|5\\d?|8[145]\\d)|8[245]|9[24])\\d{4}|7(?:[04][24-8]|[15][2-7]|22|3[2-4])\\d{4}|8(?:1(?:2\\d?|[3-689])|2[2-8]|3[24]|4[24-7]|5[245]|6[23])\\d{4}",
+"\\d{5,9}",,,"1234567"],[,,"17[01]\\d{4}|9(?:2(?:[0-4]|5\\d{2})|3[136]\\d|4(?:0[0-4]\\d|[1379]\\d|[24][0-589]\\d|5\\d{2}|88)|5[0-6]|61?\\d|7(?:3\\d|9\\d{2})|8\\d|9(?:1\\d|7\\d{2}|[089]))\\d{5}","\\d{7,10}",,,"92123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"1333\\d{4}","\\d{8}",,,"13331234"],"MM",95,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["1|2[45]"],"0$1","",0],[,"(2)(\\d{4})(\\d{4})","$1 $2 $3",["251"],"0$1","",0],[,"(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["67|81"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{3,4})","$1 $2 $3",["[4-8]"],"0$1","",0],[,"(9)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[13789])"],"0$1","",0],[,"(9)(4\\d{4})(\\d{4})","$1 $2 $3",["94[0245]"],"0$1","",0],[,"(9)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["925"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MN:[,[,,"[12]\\d{7,9}|[57-9]\\d{7}","\\d{6,10}"],[,,"[12](?:1\\d|2(?:[1-3]\\d?|7\\d)|3[2-8]\\d{1,2}|4[2-68]\\d{1,2}|5[1-4689]\\d{1,2})\\d{5}|5[0568]\\d{6}",
+"\\d{6,10}",,,"50123456"],[,,"(?:8[689]|9[013-9])\\d{6}","\\d{8}",,,"88123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"7[05-8]\\d{6}","\\d{8}",,,"75123456"],"MN",976,"001","0",,,"0",,,,[[,"([12]\\d)(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1","",0],[,"([12]2\\d)(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1","",0],[,"([12]\\d{3})(\\d{5})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)2"],"0$1","",0],[,"(\\d{4})(\\d{4})","$1 $2",["[57-9]"],"$1","",0],[,"([12]\\d{4})(\\d{4,5})","$1 $2",
+["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)[4-9]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MO:[,[,,"[268]\\d{7}","\\d{8}"],[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}",,,"28212345"],[,,"6[236]\\d{6}","\\d{8}",,,"66123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MO",853,"00",,,,,,,,[[,"([268]\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MP:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?",,,"6702345678"],[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?",,,"6702345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"MP",
+1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"670",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MQ:[,[,,"[56]\\d{8}","\\d{9}"],[,,"596(?:0[2-5]|[12]0|3[05-9]|4[024-8]|[5-7]\\d|89|9[4-8])\\d{4}","\\d{9}",,,"596301234"],[,,"696(?:[0-479]\\d|5[01]|8[0-689])\\d{4}","\\d{9}",,,"696201234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MQ",596,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],
+MR:[,[,,"[2-48]\\d{7}","\\d{8}"],[,,"25[08]\\d{5}|35\\d{6}|45[1-7]\\d{5}","\\d{8}",,,"35123456"],[,,"(?:2(?:2\\d|70)|3(?:3\\d|6[1-36]|7[1-3])|4(?:[49]\\d|6[0457-9]|7[4-9]|8[01346-8]))\\d{5}","\\d{8}",,,"22123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MR",222,"00",,,,,,,,[[,"([2-48]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MS:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"664491\\d{4}","\\d{7}(?:\\d{3})?",,,"6644912345"],[,,"66449[2-6]\\d{4}","\\d{10}",,,"6644923456"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"MS",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"664",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MT:[,[,,"[2357-9]\\d{7}","\\d{8}"],[,,"2(?:0(?:1[0-6]|3[1-4]|[69]\\d)|[1-357]\\d{2})\\d{4}","\\d{8}",,,"21001234"],
+[,,"(?:7(?:210|[79]\\d{2})|9(?:2(?:1[01]|31)|696|8(?:1[1-3]|89|97)|9\\d{2}))\\d{4}","\\d{8}",,,"96961234"],[,,"800[3467]\\d{4}","\\d{8}",,,"80071234"],[,,"5(?:0(?:0(?:37|43)|6\\d{2}|70\\d|9[0168])|[12]\\d0[1-5])\\d{3}","\\d{8}",,,"50037123"],[,,"NA","NA"],[,,"NA","NA"],[,,"3550\\d{4}","\\d{8}",,,"35501234"],"MT",356,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"7117\\d{4}","\\d{8}",,,"71171234"],,,[,,"NA","NA"],[,,"501\\d{5}","\\d{8}",,,"50112345"],,,[,,"NA","NA"]],MU:[,[,,"[2-9]\\d{6,7}",
+"\\d{7,8}"],[,,"(?:2(?:[03478]\\d|1[0-7]|6[1-69])|4(?:[013568]\\d|2[4-7])|5(?:44\\d|471)|6\\d{2}|8(?:14|3[129]))\\d{4}","\\d{7,8}",,,"2012345"],[,,"5(?:2[59]\\d|4(?:2[1-389]|4\\d|7[1-9]|9\\d)|7\\d{2}|8(?:[256]\\d|7[15-8])|9[0-8]\\d)\\d{4}","\\d{8}",,,"52512345"],[,,"80[012]\\d{4}","\\d{7}",,,"8001234"],[,,"30\\d{5}","\\d{7}",,,"3012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"3(?:20|9\\d)\\d{4}","\\d{7}",,,"3201234"],"MU",230,"0(?:0|[2-7]0|33)",,,,,,"020",,[[,"([2-46-9]\\d{2})(\\d{4})","$1 $2",["[2-46-9]"],
+"","",0],[,"(5\\d{3})(\\d{4})","$1 $2",["5"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MV:[,[,,"[3467]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"],[,,"(?:3(?:0[01]|3[0-59])|6(?:[567][02468]|8[024689]|90))\\d{4}","\\d{7}",,,"6701234"],[,,"(?:46[46]|7[3-9]\\d|9[16-9]\\d)\\d{4}","\\d{7}",,,"7712345"],[,,"NA","NA"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[3467]|9(?:[1-9]|0[1-9])"],
+"","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["900"],"","",0]],,[,,"781\\d{4}","\\d{7}",,,"7812345"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MW:[,[,,"(?:1(?:\\d{2})?|[2789]\\d{2})\\d{6}","\\d{7,9}"],[,,"(?:1[2-9]|21\\d{2})\\d{5}","\\d{7,9}",,,"1234567"],[,,"(?:111|77\\d|88\\d|99\\d)\\d{6}","\\d{9}",,,"991234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MW",265,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1"],"0$1","",0],[,"(2\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["2"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1789]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MX:[,[,,"[1-9]\\d{9,10}","\\d{7,11}"],[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}",
+"\\d{7,10}",,,"2221234567"],[,,"1(?:(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7})","\\d{11}",,,"12221234567"],[,,"800\\d{7}",
+"\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MX",52,"0[09]","01",,,"0[12]|04[45](\\d{10})","1$1",,,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"],"01 $1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"],"01 $1","",1],[,"(1)([358]\\d)(\\d{4})(\\d{4})","044 $2 $3 $4",["1(?:33|55|81)"],"$1","",1],[,"(1)(\\d{3})(\\d{3})(\\d{4})","044 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"],
+"$1","",1]],[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"],"01 $1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"],"01 $1","",1],[,"(1)([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3 $4",["1(?:33|55|81)"]],[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],MY:[,[,,"[13-9]\\d{7,9}","\\d{6,10}"],[,,"(?:3[2-9]\\d|[4-9][2-9])\\d{6}","\\d{6,9}",,,"323456789"],
+[,,"1(?:1[1-3]\\d{2}|[02-4679][2-9]\\d|59\\d{2}|8(?:1[23]|[2-9]\\d))\\d{5}","\\d{9,10}",,,"123456789"],[,,"1[378]00\\d{6}","\\d{10}",,,"1300123456"],[,,"1600\\d{6}","\\d{10}",,,"1600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"154\\d{7}","\\d{10}",,,"1541234567"],"MY",60,"00","0",,,"0",,,,[[,"([4-79])(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1","",0],[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1","",0],[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[02-46-9][1-9]|8"],"0$1","",0],[,"(1)([36-8]00)(\\d{2})(\\d{4})",
+"$1-$2-$3-$4",["1[36-8]0"],"","",0],[,"(11)(\\d{4})(\\d{4})","$1-$2 $3",["11"],"0$1","",0],[,"(15[49])(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MZ:[,[,,"[28]\\d{7,8}","\\d{8,9}"],[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}",,,"21123456"],[,,"8[23467]\\d{7}","\\d{9}",,,"821234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["2|8[2-7]"],"","",0],[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NA:[,[,,"[68]\\d{7,8}","\\d{8,9}"],[,,"6(?:1(?:17|2(?:[0189]\\d|[2-6]|7\\d?)|3(?:[01378]|2\\d)|4[01]|69|7[014])|2(?:17|5(?:[0-36-8]|4\\d?)|69|70)|3(?:17|2(?:[0237]\\d?|[14-689])|34|6[29]|7[01]|81)|4(?:17|2(?:[012]|7?)|4(?:[06]|1\\d)|5(?:[01357]|[25]\\d?)|69|7[01])|5(?:17|2(?:[0459]|[23678]\\d?)|69|7[01])|6(?:17|2(?:5|6\\d?)|38|42|69|7[01])|7(?:17|2(?:[569]|[234]\\d?)|3(?:0\\d?|[13])|69|7[01]))\\d{4}",
+"\\d{8,9}",,,"61221234"],[,,"(?:60|8[125])\\d{7}","\\d{9}",,,"811234567"],[,,"NA","NA"],[,,"8701\\d{5}","\\d{9}",,,"870123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"8(?:3\\d{2}|86)\\d{5}","\\d{8,9}",,,"88612345"],"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[1235]"],"0$1","",0],[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6"],"0$1","",0],[,"(88)(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1","",0],[,"(870)(\\d{3})(\\d{3})","$1 $2 $3",["870"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,
+,"NA","NA"],,,[,,"NA","NA"]],NC:[,[,,"[2-57-9]\\d{5}","\\d{6}"],[,,"(?:2[03-9]|3[0-5]|4[1-7]|88)\\d{4}","\\d{6}",,,"201234"],[,,"(?:5[0-4]|[79]\\d|8[0-79])\\d{4}","\\d{6}",,,"751234"],[,,"NA","NA"],[,,"36\\d{4}","\\d{6}",,,"366711"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NC",687,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[2-46-9]|5[0-4]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NE:[,[,,"[0289]\\d{7}","\\d{8}"],[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}",
+"\\d{8}",,,"20201234"],[,,"(?:89|9\\d)\\d{6}","\\d{8}",,,"93123456"],[,,"08\\d{6}","\\d{8}",,,"08123456"],[,,"09\\d{6}","\\d{8}",,,"09123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NE",227,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[289]|09"],"","",0],[,"(08)(\\d{3})(\\d{3})","$1 $2 $3",["08"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],NF:[,[,,"[13]\\d{5}","\\d{5,6}"],[,,"(?:1(?:06|17|28|39)|3[012]\\d)\\d{3}","\\d{5,6}",,,"106609"],[,,"38\\d{4}",
+"\\d{5,6}",,,"381234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NF",672,"00",,,,,,,,[[,"(\\d{2})(\\d{4})","$1 $2",["1"],"","",0],[,"(\\d)(\\d{5})","$1 $2",["3"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NG:[,[,,"[1-6]\\d{5,8}|9\\d{5,9}|[78]\\d{5,13}","\\d{5,14}"],[,,"[12]\\d{6,7}|9(?:0[3-9]|[1-9]\\d)\\d{5}|(?:3\\d|4[023568]|5[02368]|6[02-469]|7[4-69]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}",,,
+"12345678"],[,,"(?:1(?:7[34]\\d|8(?:04|[124579]\\d|8[0-3])|95\\d)|287[0-7]|3(?:18[1-8]|88[0-7]|9(?:8[5-9]|6[1-5]))|4(?:28[0-2]|6(?:7[1-9]|8[02-47])|88[0-2])|5(?:2(?:7[7-9]|8\\d)|38[1-79]|48[0-7]|68[4-7])|6(?:2(?:7[7-9]|8\\d)|4(?:3[7-9]|[68][129]|7[04-69]|9[1-8])|58[0-2]|98[7-9])|7(?:38[0-7]|69[1-8]|78[2-4])|8(?:28[3-9]|38[0-2]|4(?:2[12]|3[147-9]|5[346]|7[4-9]|8[014-689]|90)|58[1-8]|78[2-9]|88[5-7])|98[07]\\d)\\d{4}|(?:70(?:[13-9]\\d|2[1-9])|8(?:0[2-9]|1\\d)\\d|90[239]\\d)\\d{6}","\\d{8,10}",,,"8021234567"],
+[,,"800\\d{7,11}","\\d{10,14}",,,"80017591759"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-6]|7(?:[1-79]|0[1-9])|8[2-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["70|8[01]|90[239]"],"0$1","",0],[,"([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]00"],"0$1","",0],[,"([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]00"],"0$1","",0],[,"(78)(\\d{2})(\\d{3})",
+"$1 $2 $3",["78"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"700\\d{7,11}","\\d{10,14}",,,"7001234567"],,,[,,"NA","NA"]],NI:[,[,,"[12578]\\d{7}","\\d{8}"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"5(?:5[0-7]\\d{5}|[78]\\d{6})|7[5-8]\\d{6}|8\\d{7}","\\d{8}",,,"81234567"],[,,"1800\\d{4}","\\d{8}",,,"18001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NI",505,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NL:[,[,,
+"1\\d{4,8}|[2-7]\\d{8}|[89]\\d{6,9}","\\d{5,10}"],[,,"(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\\d|8[478])\\d{7}","\\d{9}",,,"101234567"],[,,"6[1-58]\\d{7}","\\d{9}",,,"612345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234"],[,,"90[069]\\d{4,7}","\\d{7,10}",,,"9061234"],[,,"NA","NA"],[,,"NA","NA"],[,,"85\\d{7}","\\d{9}",,,"851234567"],"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]"],"0$1","",0],[,"([1-5]\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1","",0],[,"(6)(\\d{8})","$1 $2",["6[0-57-9]"],"0$1","",0],[,"(66)(\\d{7})","$1 $2",["66"],"0$1","",0],[,"(14)(\\d{3,4})","$1 $2",["14"],"$1","",0],[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"],"0$1","",0]],,[,,"66\\d{7}","\\d{9}",,,"662345678"],,,[,,"14\\d{3,4}","\\d{5,6}"],[,,"140(?:1(?:[035]|[16-8]\\d)|2(?:[0346]|[259]\\d)|3(?:[03568]|[124]\\d)|4(?:[0356]|[17-9]\\d)|5(?:[0358]|[124679]\\d)|7\\d|8[458])","\\d{5,6}",,,"14020"],,,[,,"NA","NA"]],
+NO:[,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"],[,,"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\d{6}","\\d{8}",,,"21234567"],[,,"(?:4[015-8]|5[89]|9\\d)\\d{6}","\\d{8}",,,"40612345"],[,,"80[01]\\d{5}","\\d{8}",,,"80012345"],[,,"82[09]\\d{5}","\\d{8}",,,"82012345"],[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}",,,"81021234"],[,,"880\\d{5}","\\d{8}",,,"88012345"],[,,"85[0-5]\\d{5}","\\d{8}",,,"85012345"],"NO",47,"00",,,,,,,,[[,"([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[489]"],"","",0],[,"([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["[235-7]"],"","",0]],,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"],1,,[,,"81[23]\\d{5}","\\d{8}",,,"81212345"]],NP:[,[,,"[1-8]\\d{7}|9(?:[1-69]\\d{6}|7[2-6]\\d{5,7}|8\\d{8})","\\d{6,10}"],[,,"(?:1[0124-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-79])\\d{6}","\\d{6,8}",,,"14567890"],[,,"9(?:7[45]|8[01456])\\d{7}","\\d{10}",,,"9841234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],"NP",977,"00","0",,,"0",,,,[[,"(1)(\\d{7})","$1-$2",["1[2-6]"],"0$1","",0],[,"(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-69]|7[15-9])"],"0$1","",0],[,"(9\\d{2})(\\d{7})","$1-$2",["9(?:7[45]|8)"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NR:[,[,,"[458]\\d{6}","\\d{7}"],[,,"(?:444|888)\\d{4}","\\d{7}",,,"4441234"],[,,"55[5-9]\\d{4}","\\d{7}",,,"5551234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NR",674,"00",,,,,,,,[[,"(\\d{3})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NU:[,[,,"[1-5]\\d{3}","\\d{4}"],[,,"[34]\\d{3}","\\d{4}",,,"4002"],[,,"[125]\\d{3}","\\d{4}",,,"1234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NU",683,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NZ:[,[,,"6[235-9]\\d{6}|[2-57-9]\\d{7,10}","\\d{7,11}"],[,,"(?:3[2-79]|[49][2-689]|6[235-9]|7[2-5789])\\d{6}|24099\\d{3}","\\d{7,8}",,,"32345678"],[,,"2(?:[028]\\d{7,8}|1(?:[03]\\d{5,7}|[12457]\\d{5,6}|[689]\\d{5})|[79]\\d{7})",
+"\\d{8,10}",,,"211234567"],[,,"508\\d{6,7}|80\\d{6,8}","\\d{8,10}",,,"800123456"],[,,"90\\d{7,9}","\\d{9,11}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NZ",64,"0(?:0|161)","0",,,"0",,"00",,[[,"([34679])(\\d{3})(\\d{4})","$1-$2 $3",["[3467]|9[1-9]"],"0$1","",0],[,"(24099)(\\d{3})","$1 $2",["240","2409","24099"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["21"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:1[1-9]|[69]|7[0-35-9])|86"],"0$1","",0],[,"(2\\d)(\\d{3,4})(\\d{4})",
+"$1 $2 $3",["2[028]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|5|[89]0"],"0$1","",0]],,[,,"[28]6\\d{6,7}","\\d{8,9}",,,"26123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],OM:[,[,,"(?:2[2-6]|5|9[1-9])\\d{6}|800\\d{5,6}","\\d{7,9}"],[,,"2[2-6]\\d{6}","\\d{8}",,,"23123456"],[,,"9[1-9]\\d{6}","\\d{8}",,,"92123456"],[,,"8007\\d{4,5}|500\\d{4}","\\d{7,9}",,,"80071234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"OM",968,"00",,,,,,,,[[,"(2\\d)(\\d{6})","$1 $2",
+["2"],"","",0],[,"(9\\d{3})(\\d{4})","$1 $2",["9"],"","",0],[,"([58]00)(\\d{4,6})","$1 $2",["[58]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PA:[,[,,"[1-9]\\d{6,7}","\\d{7,8}"],[,,"(?:1(?:0[02-579]|19|2[37]|3[03]|4[479]|57|65|7[016-8]|8[58]|9[1349])|2(?:[0235679]\\d|1[0-7]|4[04-9]|8[028])|3(?:[09]\\d|1[14-7]|2[0-3]|3[03]|4[0457]|5[56]|6[068]|7[06-8]|8[089])|4(?:3[013-69]|4\\d|7[0-689])|5(?:[01]\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-267]|3[06]|[49]0|5[06-9]|7[0-24-7]|8[89])|8(?:[34]\\d|5[0-4]|8[02])|9(?:0[6-8]|1[016-8]|2[036-8]|3[3679]|40|5[0489]|6[06-9]|7[046-9]|8[36-8]|9[1-9]))\\d{4}",
+"\\d{7}",,,"2001234"],[,,"(?:1[16]1|21[89]|8(?:1[01]|7[23]))\\d{4}|6(?:[024-9]\\d|1[0-5]|3[0-24-9])\\d{5}","\\d{7,8}",,,"60012345"],[,,"80[09]\\d{4}","\\d{7}",,,"8001234"],[,,"(?:779|8(?:2[235]|55|60|7[578]|86|95)|9(?:0[0-2]|81))\\d{4}","\\d{7}",,,"8601234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PA",507,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"],"","",0],[,"(\\d{4})(\\d{4})","$1-$2",["6"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PE:[,[,,"[14-9]\\d{7,8}",
+"\\d{6,9}"],[,,"(?:1\\d|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\\d{6}","\\d{6,8}",,,"11234567"],[,,"9\\d{8}","\\d{9}",,,"912345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"805\\d{5}","\\d{8}",,,"80512345"],[,,"801\\d{5}","\\d{8}",,,"80112345"],[,,"80[24]\\d{5}","\\d{8}",,,"80212345"],[,,"NA","NA"],"PE",51,"19(?:1[124]|77|90)00","0"," Anexo ",,"0",,,,[[,"(1)(\\d{7})","$1 $2",["1"],"(0$1)","",0],[,"([4-8]\\d)(\\d{6})","$1 $2",["[4-7]|8[2-4]"],"(0$1)","",0],[,"(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)",
+"",0],[,"(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PF:[,[,,"4\\d{5,7}|8\\d{7}","\\d{6}(?:\\d{2})?"],[,,"4(?:[09][45689]\\d|4)\\d{4}","\\d{6}(?:\\d{2})?",,,"40412345"],[,,"8[79]\\d{6}","\\d{8}",,,"87123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PF",689,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[09]|8[79]"],"","",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"],"",
+"",0]],,[,,"NA","NA"],,,[,,"44\\d{4}","\\d{6}",,,"441234"],[,,"NA","NA"],,,[,,"NA","NA"]],PG:[,[,,"[1-9]\\d{6,7}","\\d{7,8}"],[,,"(?:3[0-2]\\d|4[25]\\d|5[34]\\d|64[1-9]|77(?:[0-24]\\d|30)|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}",,,"3123456"],[,,"(?:20150|68\\d{2}|7(?:[0-369]\\d|75)\\d{2})\\d{3}","\\d{7,8}",,,"6812345"],[,,"180\\d{4}","\\d{7}",,,"1801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"275\\d{4}","\\d{7}",,,"2751234"],"PG",675,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-689]|27"],
+"","",0],[,"(\\d{4})(\\d{4})","$1 $2",["20|7"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PH:[,[,,"2\\d{5,7}|[3-9]\\d{7,9}|1800\\d{7,9}","\\d{5,13}"],[,,"2\\d{5}(?:\\d{2})?|(?:3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}|88(?:22\\d{6}|42\\d{4})","\\d{5,10}",,,"21234567"],[,,"(?:81[37]|9(?:0[5-9]|1[024-9]|2[0-35-9]|3[02-9]|4[236-9]|7[34-79]|89|9[4-9]))\\d{7}","\\d{10}",,,"9051234567"],[,,"1800\\d{7,9}","\\d{11,13}",,,"180012345678"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],[,,"NA","NA"],"PH",63,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"(0$1)","",0],[,"(2)(\\d{5})","$1 $2",["2"],"(0$1)","",0],[,"(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)","",0],[,"(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)","",0],[,"([3-8]\\d)(\\d{3})(\\d{4})",
+"$1 $2 $3",["[3-8]"],"(0$1)","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["81|9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"","",0],[,"(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PK:[,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"],[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}",
+"\\d{6,10}",,,"2123456789"],[,,"3(?:0\\d|[12][0-5]|3[1-7]|4[0-7]|55|64)\\d{7}","\\d{10}",,,"3012345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"900\\d{5}","\\d{8}",,,"90012345"],[,,"NA","NA"],[,,"122\\d{6}","\\d{9}",,,"122044444"],[,,"NA","NA"],"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"],"(0$1)",
+"",0],[,"(\\d{3})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d1","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d11","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d111"],"(0$1)","",0],[,"(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)","",0],[,"(\\d{3})(\\d{6,7})","$1 $2",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d[2-9]"],"(0$1)","",0],[,"(3\\d{2})(\\d{7})","$1 $2",
+["3"],"0$1","",0],[,"([15]\\d{3})(\\d{5,6})","$1 $2",["58[12]|1"],"(0$1)","",0],[,"(586\\d{2})(\\d{5})","$1 $2",["586"],"(0$1)","",0],[,"([89]00)(\\d{3})(\\d{2})","$1 $2 $3",["[89]00"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"],,,[,,"NA","NA"]],PL:[,[,,"[12]\\d{6,8}|[3-57-9]\\d{8}|6\\d{5,8}",
+"\\d{6,9}"],[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}|[12]2\\d{5}","\\d{6,9}",,,"123456789"],[,,"(?:5[0137]|6[069]|7[2389]|88)\\d{7}","\\d{9}",,,"512345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"70\\d{7}","\\d{9}",,,"701234567"],[,,"801\\d{6}","\\d{9}",,,"801234567"],[,,"NA","NA"],[,,"39\\d{7}","\\d{9}",,,"391234567"],"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"],
+"","",0],[,"(\\d{2})(\\d{1})(\\d{4})","$1 $2 $3",["[12]2"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[0137]|6[0469]|7[02389]|8[08]"],"","",0],[,"(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"],"","",0],[,"(\\d{3})(\\d{3})","$1 $2",["64"],"","",0]],,[,,"64\\d{4,7}","\\d{6,9}",,,"641234567"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PM:[,[,,"[45]\\d{5}","\\d{6}"],[,,"41\\d{4}","\\d{6}",,,"411234"],[,,"55\\d{4}","\\d{6}",,,"551234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],"PM",508,"00","0",,,"0",,,,[[,"([45]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PR:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"7872345678"],[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"7872345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",
+,,"5002345678"],[,,"NA","NA"],"PR",1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"787|939",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PS:[,[,,"[24589]\\d{7,8}|1(?:[78]\\d{8}|[49]\\d{2,3})","\\d{4,10}"],[,,"(?:22[234789]|42[45]|82[01458]|92[369])\\d{5}","\\d{7,8}",,,"22234567"],[,,"5[69]\\d{7}","\\d{9}",,,"599123456"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],[,,"1(?:4|9\\d)\\d{2}","\\d{4,5}",,,"19123"],[,,"1700\\d{6}","\\d{10}",,,"1700123456"],[,,"NA","NA"],[,,"NA","NA"],"PS",970,"00","0",,,"0",,,,[[,
+"([2489])(2\\d{2})(\\d{4})","$1 $2 $3",["[2489]"],"0$1","",0],[,"(5[69]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1","",0],[,"(1[78]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[78]"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PT:[,[,,"[2-46-9]\\d{8}","\\d{9}"],[,,"2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}","\\d{9}",,,"212345678"],[,,"9(?:[136]\\d{2}|2[0-79]\\d|480)\\d{5}","\\d{9}",,,"912345678"],[,,"80[02]\\d{6}","\\d{9}",,,"800123456"],[,,"76(?:0[1-57]|1[2-47]|2[237])\\d{5}",
+"\\d{9}",,,"760123456"],[,,"80(?:8\\d|9[1579])\\d{5}","\\d{9}",,,"808123456"],[,,"884[128]\\d{5}","\\d{9}",,,"884123456"],[,,"30\\d{7}","\\d{9}",,,"301234567"],"PT",351,"00",,,,,,,,[[,"(2\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"],"","",0],[,"([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[3-9]|[346-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70(?:7\\d|8[17])\\d{5}","\\d{9}",,,"707123456"],,,[,,"NA","NA"]],PW:[,[,,"[2-8]\\d{6}","\\d{7}"],[,,"2552255|(?:277|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76))\\d{4}",
+"\\d{7}",,,"2771234"],[,,"(?:6[234689]0|77[45789])\\d{4}","\\d{7}",,,"6201234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PW",680,"01[12]",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PY:[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"],[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}",
+"\\d{5,9}",,,"212345678"],[,,"9(?:6[12]|[78][1-6]|9[1-5])\\d{6}","\\d{9}",,,"961456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"8700[0-4]\\d{4}","\\d{9}",,,"870012345"],"PY",595,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{5,7})","$1 $2",["(?:[26]1|3[289]|4[124678]|7[123]|8[1236])"],"($1)","",0],[,"(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1","",0],[,"(\\d{3})(\\d{6})","$1 $2",["9[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8700"],"","",0],[,"(\\d{3})(\\d{4,6})","$1 $2",
+["[2-8][1-9]"],"($1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"[2-9]0\\d{4,7}","\\d{6,9}",,,"201234567"],,,[,,"NA","NA"]],QA:[,[,,"[2-8]\\d{6,7}","\\d{7,8}"],[,,"4[04]\\d{6}","\\d{7,8}",,,"44123456"],[,,"[3567]\\d{7}","\\d{7,8}",,,"33123456"],[,,"800\\d{4}","\\d{7,8}",,,"8001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"QA",974,"00",,,,,,,,[[,"([28]\\d{2})(\\d{4})","$1 $2",["[28]"],"","",0],[,"([3-7]\\d{3})(\\d{4})","$1 $2",["[3-7]"],"","",0]],,[,,"2(?:[12]\\d|61)\\d{4}","\\d{7}",
+,,"2123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],RE:[,[,,"[268]\\d{8}","\\d{9}"],[,,"262\\d{6}","\\d{9}",,,"262161234"],[,,"6(?:9[23]|47)\\d{6}","\\d{9}",,,"692123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"],[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"],[,,"NA","NA"],[,,"NA","NA"],"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],1,"262|6[49]|8",[,,"NA","NA"],[,,"NA",
+"NA"],,,[,,"NA","NA"]],RO:[,[,,"2\\d{5,8}|[37-9]\\d{8}","\\d{6,9}"],[,,"2(?:1(?:\\d{7}|9\\d{3})|[3-6](?:\\d{7}|\\d9\\d{2}))|3[13-6]\\d{7}","\\d{6,9}",,,"211234567"],[,,"7(?:000|[1-8]\\d{2}|99\\d)\\d{5}","\\d{9}",,,"712345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"90[036]\\d{6}","\\d{9}",,,"900123456"],[,,"801\\d{6}","\\d{9}",,,"801123456"],[,,"802\\d{6}","\\d{9}",,,"802123456"],[,,"NA","NA"],"RO",40,"00","0"," int ",,"0",,,,[[,"([237]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1","",0],[,
+"(21)(\\d{4})","$1 $2",["21"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23][3-7]|[7-9]"],"0$1","",0],[,"(2\\d{2})(\\d{3})","$1 $2",["2[3-6]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"37\\d{7}","\\d{9}",,,"372123456"],,,[,,"NA","NA"]],RS:[,[,,"[126-9]\\d{4,11}|3(?:[0-79]\\d{3,10}|8[2-9]\\d{2,9})","\\d{5,12}"],[,,"(?:1(?:[02-9][2-9]|1[1-9])\\d|2(?:[0-24-7][2-9]\\d|[389](?:0[2-9]|[2-9]\\d))|3(?:[0-8][2-9]\\d|9(?:[2-9]\\d|0[2-9])))\\d{3,8}","\\d{5,12}",,,"10234567"],[,,"6(?:[0-689]|7\\d)\\d{6,7}",
+"\\d{8,10}",,,"601234567"],[,,"800\\d{3,9}","\\d{6,12}",,,"80012345"],[,,"(?:90[0169]|78\\d)\\d{3,7}","\\d{6,12}",,,"90012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RS",381,"00","0",,,"0",,,,[[,"([23]\\d{2})(\\d{4,9})","$1 $2",["(?:2[389]|39)0"],"0$1","",0],[,"([1-3]\\d)(\\d{5,10})","$1 $2",["1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])"],"0$1","",0],[,"(6\\d)(\\d{6,8})","$1 $2",["6"],"0$1","",0],[,"([89]\\d{2})(\\d{3,9})","$1 $2",["[89]"],"0$1","",0],[,"(7[26])(\\d{4,9})","$1 $2",["7[26]"],
+"0$1","",0],[,"(7[08]\\d)(\\d{4,9})","$1 $2",["7[08]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"7[06]\\d{4,10}","\\d{6,12}",,,"700123456"],,,[,,"NA","NA"]],RU:[,[,,"[3489]\\d{9}","\\d{10}"],[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}",,,"3011234567"],[,,"9\\d{9}","\\d{10}",,,"9123456789"],[,,"80[04]\\d{7}","\\d{10}",,,"8001234567"],[,,"80[39]\\d{7}","\\d{10}",
+,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RU",7,"810","8",,,"8",,"8~10",,[[,"(\\d{3})(\\d{2})(\\d{2})","$1-$2-$3",["[1-79]"],"$1","",1],[,"([3489]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"],"8 ($1)","",1],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)","",1]],[[,"([3489]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"],"8 ($1)","",1],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)","",1]],[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA",
+"NA"]],RW:[,[,,"[027-9]\\d{7,8}","\\d{8,9}"],[,,"2[258]\\d{7}|06\\d{6}","\\d{8,9}",,,"250123456"],[,,"7[238]\\d{7}","\\d{9}",,,"720123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RW",250,"00","0",,,"0",,,,[[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"$1","",0],[,"([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1","",0],[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA",
+"NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],SA:[,[,,"1\\d{7,8}|(?:[2-467]|92)\\d{7}|5\\d{8}|8\\d{9}","\\d{7,10}"],[,,"11\\d{7}|1?(?:2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,9}",,,"112345678"],[,,"(?:5(?:[013-689]\\d|7[0-26-8])|811\\d)\\d{6}","\\d{9,10}",,,"512345678"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"92[05]\\d{6}","\\d{9}",,,"920012345"],[,,"NA","NA"],[,,"NA","NA"],"SA",966,"00","0",,,"0",,,,[[,"([1-467])(\\d{3})(\\d{4})","$1 $2 $3",["[1-467]"],"0$1","",0],[,"(1\\d)(\\d{3})(\\d{4})",
+"$1 $2 $3",["1[1-467]"],"0$1","",0],[,"(5\\d)(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1","",0],[,"(92\\d{2})(\\d{5})","$1 $2",["92"],"$1","",0],[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"$1","",0],[,"(811)(\\d{3})(\\d{3,4})","$1 $2 $3",["81"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SB:[,[,,"[1-9]\\d{4,6}","\\d{5,7}"],[,,"(?:1[4-79]|[23]\\d|4[01]|5[03]|6[0-37])\\d{3}","\\d{5}",,,"40123"],[,,"48\\d{3}|7(?:[0146-8]\\d|5[025-9]|9[0124])\\d{4}|8[4-8]\\d{5}|9(?:[46]\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8])\\d{4}",
+"\\d{5,7}",,,"7421234"],[,,"1[38]\\d{3}","\\d{5}",,,"18123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"5[12]\\d{3}","\\d{5}",,,"51123"],"SB",677,"0[01]",,,,,,,,[[,"(\\d{2})(\\d{5})","$1 $2",["[7-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SC:[,[,,"[24689]\\d{5,6}","\\d{6,7}"],[,,"4[2-46]\\d{5}","\\d{7}",,,"4217123"],[,,"2[5-8]\\d{5}","\\d{7}",,,"2510123"],[,,"8000\\d{2}","\\d{6}",,,"800000"],[,,"98\\d{4}","\\d{6}",,,"981234"],[,,"NA","NA"],[,,"NA","NA"],[,,"64\\d{5}",
+"\\d{7}",,,"6412345"],"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[89]"],"","",0],[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SD:[,[,,"[19]\\d{8}","\\d{9}"],[,,"1(?:[125]\\d|8[3567])\\d{6}","\\d{9}",,,"121231234"],[,,"9[012569]\\d{7}","\\d{9}",,,"911231234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SD",249,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SE:[,[,,"[1-9]\\d{5,9}","\\d{5,10}"],[,,"1(?:0[1-8]\\d{6}|[136]\\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)\\d{5,6})|2(?:[136]\\d{5,7}|(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])\\d{5,6})|3(?:[356]\\d{5,7}|(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\\d{5,6})|4(?:0[1-9]\\d{4,6}|[246]\\d{5,7}|(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\\d{5,6})|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\d|6[03-5]|7[013]|8[0-79]|9[01])\\d{5,6}|6(?:0[1-9]\\d{4,6}|3\\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\\d{5,6})|8[1-9]\\d{5,7}|9(?:0[1-9]\\d{4,6}|(?:1[0-68]|2\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8])\\d{5,6})",
+"\\d{5,9}",,,"8123456"],[,,"7[0236]\\d{7}","\\d{9}",,,"701234567"],[,,"20(?:0(?:0\\d{2}|[1-9](?:0\\d{1,4}|[1-9]\\d{4}))|1(?:0\\d{4}|[1-9]\\d{4,5})|[2-9]\\d{5})","\\d{6,9}",,,"20123456"],[,,"9(?:00|39|44)(?:1(?:[0-26]\\d{5}|[3-57-9]\\d{2})|2(?:[0-2]\\d{5}|[3-9]\\d{2})|3(?:[0139]\\d{5}|[24-8]\\d{2})|4(?:[045]\\d{5}|[1-36-9]\\d{2})|5(?:5\\d{5}|[0-46-9]\\d{2})|6(?:[679]\\d{5}|[0-58]\\d{2})|7(?:[078]\\d{5}|[1-69]\\d{2})|8(?:[578]\\d{5}|[0-469]\\d{2}))","\\d{7}(?:\\d{3})?",,,"9001234567"],[,,"77(?:0(?:0\\d{2}|[1-9](?:0\\d|[1-9]\\d{4}))|[1-6][1-9]\\d{5})",
+"\\d{6}(?:\\d{3})?",,,"771234567"],[,,"75[1-8]\\d{6}","\\d{9}",,,"751234567"],[,,"NA","NA"],"SE",46,"00","0",,,"0",,,,[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1","",0],[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"],"0$1","",0],[,"([1-69]\\d)(\\d{3})(\\d{2})","$1-$2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"],
+"0$1","",0],[,"(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"],"0$1","",0],[,"(7\\d)(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["7"],"0$1","",0],[,"(77)(\\d{2})(\\d{2})","$1-$2$3",["7"],"0$1","",0],[,"(20)(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1","",0],[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9[034]"],"0$1","",0],[,"(9[034]\\d)(\\d{4})","$1-$2",["9[034]"],"0$1","",0]],[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})",
+"$1 $2 $3 $4",["8"]],[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"]],[,"([1-69]\\d)(\\d{3})(\\d{2})","$1 $2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"]],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]],[,"(\\d{3})(\\d{2,3})(\\d{2})","$1 $2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]],[,"(7\\d)(\\d{3})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["7"]],[,"(77)(\\d{2})(\\d{2})","$1 $2 $3",["7"]],[,"(20)(\\d{2,3})(\\d{2})","$1 $2 $3",["20"]],[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["9[034]"]],[,"(9[034]\\d)(\\d{4})","$1 $2",["9[034]"]]],[,,"74[02-9]\\d{6}","\\d{9}",,,"740123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SG:[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"],[,,"6[1-9]\\d{6}","\\d{8}",,,"61234567"],[,,"(?:8[1-7]|9[0-8])\\d{6}","\\d{8}",,,"81234567"],[,,"1?800\\d{7}","\\d{10,11}",,,"18001234567"],
+[,,"1900\\d{7}","\\d{11}",,,"19001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"3[12]\\d{6}","\\d{8}",,,"31234567"],"SG",65,"0[0-3]\\d",,,,,,,,[[,"([3689]\\d{3})(\\d{4})","$1 $2",["[369]|8[1-9]"],"","",0],[,"(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"],"","",0],[,"(7000)(\\d{4})(\\d{3})","$1 $2 $3",["70"],"","",0],[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"7000\\d{7}","\\d{11}",,,"70001234567"],,,[,,"NA","NA"]],SH:[,[,,"[2-79]\\d{3,4}","\\d{4,5}"],[,,"2(?:[0-57-9]\\d|6[4-9])\\d{2}|(?:[2-46]\\d|7[01])\\d{2}",
+"\\d{4,5}",,,"2158"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:[59]\\d|7[2-9])\\d{2}","\\d{4,5}",,,"5012"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SH",290,"00",,,,,,,,,,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SI:[,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"],[,,"(?:1\\d|[25][2-8]|3[4-8]|4[24-8]|7[3-8])\\d{6}","\\d{7,8}",,,"11234567"],[,,"(?:[37][01]|4[0139]|51|6[48])\\d{6}","\\d{8}",,,"31234567"],[,,"80\\d{4,6}","\\d{6,8}",,,"80123456"],[,,"90\\d{4,6}|89[1-3]\\d{2,5}","\\d{5,8}",
+,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:59|8[1-3])\\d{6}","\\d{8}",,,"59012345"],"SI",386,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]|3[4-8]|4[24-8]|5[2-8]|7[3-8]"],"(0$1)","",0],[,"([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1","",0],[,"([89][09])(\\d{3,6})","$1 $2",["[89][09]"],"0$1","",0],[,"([58]\\d{2})(\\d{5})","$1 $2",["59|8[1-3]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SJ:[,[,,"0\\d{4}|[4789]\\d{7}",
+"\\d{5}(?:\\d{3})?"],[,,"79\\d{6}","\\d{8}",,,"79123456"],[,,"(?:4[015-8]|5[89]|9\\d)\\d{6}","\\d{8}",,,"41234567"],[,,"80[01]\\d{5}","\\d{8}",,,"80012345"],[,,"82[09]\\d{5}","\\d{8}",,,"82012345"],[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}",,,"81021234"],[,,"880\\d{5}","\\d{8}",,,"88012345"],[,,"85[0-5]\\d{5}","\\d{8}",,,"85012345"],"SJ",47,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"],1,,[,,"81[23]\\d{5}","\\d{8}",,,"81212345"]],
+SK:[,[,,"[2-689]\\d{8}","\\d{9}"],[,,"[2-5]\\d{8}","\\d{9}",,,"212345678"],[,,"9(?:0[1-8]|1[0-24-9]|4[0489])\\d{6}","\\d{9}",,,"912123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"9(?:[78]\\d{7}|00\\d{6})","\\d{9}",,,"900123456"],[,,"8[5-9]\\d{7}","\\d{9}",,,"850123456"],[,,"NA","NA"],[,,"6(?:5[0-4]|9[0-6])\\d{6}","\\d{9}",,,"690123456"],"SK",421,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1","",0],[,"([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1",
+"",0],[,"([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"(?:8(?:00|[5-9]\\d)|9(?:00|[78]\\d))\\d{6}","\\d{9}",,,"800123456"],[,,"96\\d{7}","\\d{9}",,,"961234567"],,,[,,"NA","NA"]],SL:[,[,,"[2-578]\\d{7}","\\d{6,8}"],[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}",,,"22221234"],[,,"(?:2[15]|3[034]|4[04]|5[05]|7[6-9]|88)\\d{6}","\\d{6,8}",,,"25123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SL",232,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})",
+"$1 $2",,"(0$1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SM:[,[,,"[05-7]\\d{7,9}","\\d{6,10}"],[,,"0549(?:8[0157-9]|9\\d)\\d{4}","\\d{6,10}",,,"0549886377"],[,,"6[16]\\d{6}","\\d{8}",,,"66661212"],[,,"NA","NA"],[,,"7[178]\\d{6}","\\d{8}",,,"71123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"5[158]\\d{6}","\\d{8}",,,"58001110"],"SM",378,"00",,,,"(?:0549)?([89]\\d{5})","0549$1",,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"],"","",0],[,"(0549)(\\d{6})","$1 $2",["0"],
+"","",0],[,"(\\d{6})","0549 $1",["[89]"],"","",0]],[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"],"","",0],[,"(0549)(\\d{6})","($1) $2",["0"]],[,"(\\d{6})","(0549) $1",["[89]"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],SN:[,[,,"[3789]\\d{8}","\\d{9}"],[,,"3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611|90[1-5])\\d{5}","\\d{9}",,,"301012345"],[,,"7(?:[067]\\d|21|8[0-26]|90)\\d{6}","\\d{9}",,,"701234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"88[4689]\\d{6}",
+"\\d{9}",,,"884123456"],[,,"81[02468]\\d{6}","\\d{9}",,,"810123456"],[,,"NA","NA"],[,,"3392\\d{5}|93330\\d{4}","\\d{9}",,,"933301234"],"SN",221,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"],"","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SO:[,[,,"[1-79]\\d{6,8}","\\d{7,9}"],[,,"(?:1\\d|2[0-79]|3[0-46-8]|4[0-7]|59)\\d{5}","\\d{7}",,,"4012345"],[,,"(?:15\\d|2(?:4\\d|8)|6[137-9]?\\d{2}|7[1-9]\\d|907\\d)\\d{5}",
+"\\d{7,9}",,,"71123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SO",252,"00","0",,,"0",,,,[[,"(\\d)(\\d{6})","$1 $2",["2[0-79]|[13-5]"],"","",0],[,"(\\d)(\\d{7})","$1 $2",["24|[67]"],"","",0],[,"(\\d{2})(\\d{5,7})","$1 $2",["15|28|6[1378]"],"","",0],[,"(69\\d)(\\d{6})","$1 $2",["69"],"","",0],[,"(90\\d)(\\d{3})(\\d{3})","$1 $2 $3",["90"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SR:[,[,,"[2-8]\\d{5,6}","\\d{6,7}"],[,,"(?:2[1-3]|3[0-7]|4\\d|5[2-58]|68\\d)\\d{4}",
+"\\d{6,7}",,,"211234"],[,,"(?:7[124-7]|8[1-9])\\d{5}","\\d{7}",,,"7412345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"5(?:6\\d{4}|90[0-4]\\d{3})","\\d{6,7}",,,"561234"],"SR",597,"00",,,,,,,,[[,"(\\d{3})(\\d{3})","$1-$2",["[2-4]|5[2-58]"],"","",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"],"","",0],[,"(\\d{3})(\\d{4})","$1-$2",["59|[6-8]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SS:[,[,,"[19]\\d{8}","\\d{9}"],[,,"18\\d{7}","\\d{9}",,,"181234567"],
+[,,"(?:12|9[1257])\\d{7}","\\d{9}",,,"977123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SS",211,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ST:[,[,,"[29]\\d{6}","\\d{7}"],[,,"22\\d{5}","\\d{7}",,,"2221234"],[,,"9[89]\\d{5}","\\d{7}",,,"9812345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ST",239,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SV:[,[,,"[267]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"],[,,"2[1-6]\\d{6}","\\d{8}",,,"21234567"],[,,"[67]\\d{7}","\\d{8}",,,"70123456"],[,,"800\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"8001234"],[,,"900\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[267]"],"","",0],[,"(\\d{3})(\\d{4})","$1 $2",["[89]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})",
+"$1 $2 $3",["[89]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SX:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"7215(?:4[2-8]|8[239]|9[056])\\d{4}","\\d{7}(?:\\d{3})?",,,"7215425678"],[,,"7215(?:1[02]|2\\d|5[034679]|8[014-8])\\d{4}","\\d{10}",,,"7215205678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"SX",1,"011",
+"1",,,"1",,,,,,[,,"NA","NA"],,"721",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SY:[,[,,"[1-59]\\d{7,8}","\\d{6,9}"],[,,"(?:1(?:1\\d?|4\\d|[2356])|2(?:1\\d?|[235])|3(?:[13]\\d|4)|4[13]|5[1-3])\\d{6}","\\d{6,9}",,,"112345678"],[,,"9(?:22|[35][0-8]|4\\d|6[024-9]|88|9[0-489])\\d{6}","\\d{9}",,,"944567890"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SY",963,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"],"0$1","",1],[,"(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+["9"],"0$1","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SZ:[,[,,"[027]\\d{7}","\\d{8}"],[,,"2(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{8}",,,"22171234"],[,,"7[6-8]\\d{6}","\\d{8}",,,"76123456"],[,,"0800\\d{4}","\\d{8}",,,"08001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SZ",268,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[027]"],"","",0]],,[,,"NA","NA"],,,[,,"0800\\d{4}",
+"\\d{8}",,,"08001234"],[,,"NA","NA"],1,,[,,"NA","NA"]],TA:[,[,,"8\\d{3}","\\d{4}"],[,,"8\\d{3}","\\d{4}",,,"8999"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TA",290,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TC:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7}(?:\\d{3})?",,,"6497121234"],[,,"649(?:2(?:3[129]|4[1-7])|3(?:3[1-389]|4[1-7])|4[34][1-3])\\d{4}","\\d{10}",,,"6492311234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"64971[01]\\d{4}","\\d{10}",,,"6497101234"],"TC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"649",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TD:[,[,,"[2679]\\d{7}","\\d{8}"],[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}",,,"22501234"],[,,"(?:6[02368]\\d|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}",,,"63012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,
+"NA","NA"],[,,"NA","NA"],"TD",235,"00|16",,,,,,"00",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TG:[,[,,"[29]\\d{7}","\\d{8}"],[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}",,,"22212345"],[,,"9[0-289]\\d{6}","\\d{8}",,,"90112345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TG",228,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],
+[,,"NA","NA"],,,[,,"NA","NA"]],TH:[,[,,"[2-9]\\d{7,8}|1\\d{3}(?:\\d{6})?","\\d{4}|\\d{8,10}"],[,,"(?:2\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"],[,,"(?:61|[89]\\d)\\d{7}","\\d{9}",,,"812345678"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],[,,"1900\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"6[08]\\d{7}","\\d{9}",,,"601234567"],"TH",66,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"([3-9]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-9]"],
+"0$1","",0],[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"],"$1","",0]],,[,,"NA","NA"],,,[,,"1\\d{3}","\\d{4}",,,"1100"],[,,"1\\d{3}","\\d{4}",,,"1100"],,,[,,"NA","NA"]],TJ:[,[,,"[3-59]\\d{8}","\\d{3,9}"],[,,"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}",,,"372123456"],[,,"(?:50[125]|9[0-35-9]\\d)\\d{6}","\\d{9}",,,"917123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TJ",992,"810","8",,,"8",,"8~10",,[[,"([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",
+["[34]7|91[78]"],"(8) $1","",1],[,"([459]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[48]|5|9(?:1[59]|[0235-9])"],"(8) $1","",1],[,"(331700)(\\d)(\\d{2})","$1 $2 $3",["331","3317","33170","331700"],"(8) $1","",1],[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]","3(?:[1245]|3(?:[02-9]|1[0-589]))"],"(8) $1","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TK:[,[,,"[2-9]\\d{3}","\\d{4}"],[,,"[2-4]\\d{3}","\\d{4}",,,"3010"],[,,"[5-9]\\d{3}","\\d{4}",,,"5190"],[,,"NA","NA"],[,,"NA","NA"],[,,
+"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TK",690,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TL:[,[,,"[2-489]\\d{6}|7\\d{6,7}","\\d{7,8}"],[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}",,,"2112345"],[,,"7[3-8]\\d{6}","\\d{8}",,,"77212345"],[,,"80\\d{5}","\\d{7}",,,"8012345"],[,,"90\\d{5}","\\d{7}",,,"9012345"],[,,"NA","NA"],[,,"70\\d{5}","\\d{7}",,,"7012345"],[,,"NA","NA"],"TL",670,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-489]"],"","",0],[,"(\\d{4})(\\d{4})","$1 $2",
+["7"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TM:[,[,,"[1-6]\\d{7}","\\d{8}"],[,,"(?:1(?:2\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\d{5}","\\d{8}",,,"12345678"],[,,"6[2-8]\\d{6}","\\d{8}",,,"66123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TM",993,"810","8",,,"8",,"8~10",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)","",0],[,"(\\d{2})(\\d{6})","$1 $2",["6"],
+"8 $1","",0],[,"(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["13|[2-5]"],"(8 $1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TN:[,[,,"[2-57-9]\\d{7}","\\d{8}"],[,,"3[012]\\d{6}|7\\d{7}|81200\\d{3}","\\d{8}",,,"71234567"],[,,"(?:[259]\\d|4[0-24])\\d{6}","\\d{8}",,,"20123456"],[,,"8010\\d{4}","\\d{8}",,,"80101234"],[,,"88\\d{6}","\\d{8}",,,"88123456"],[,,"8[12]10\\d{4}","\\d{8}",,,"81101234"],[,,"NA","NA"],[,,"NA","NA"],"TN",216,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TO:[,[,,"[02-8]\\d{4,6}","\\d{5,7}"],[,,"(?:2\\d|3[1-8]|4[1-4]|[56]0|7[0149]|8[05])\\d{3}","\\d{5}",,,"20123"],[,,"(?:7[578]|8[7-9])\\d{5}","\\d{7}",,,"7715123"],[,,"0800\\d{3}","\\d{7}",,,"0800222"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TO",676,"00",,,,,,,,[[,"(\\d{2})(\\d{3})","$1-$2",["[1-6]|7[0-4]|8[05]"],"","",0],[,"(\\d{3})(\\d{4})","$1 $2",["7[5-9]|8[7-9]"],"","",0],[,"(\\d{4})(\\d{3})","$1 $2",["0"],
+"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],TR:[,[,,"[2-589]\\d{9}|444\\d{4}","\\d{7,10}"],[,,"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\d{7}","\\d{10}",,,"2123456789"],[,,"5(?:0[1-7]|22|[34]\\d|5[1-59]|9[246])\\d{7}","\\d{10}",,,"5012345678"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TR",90,"00","0",,,
+"0",,,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[23]|4(?:[0-35-9]|4[0-35-9])"],"(0$1)","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[589]"],"0$1","",1],[,"(444)(\\d{1})(\\d{3})","$1 $2 $3",["444"],"","",0]],,[,,"512\\d{7}","\\d{10}",,,"5123456789"],,,[,,"444\\d{4}","\\d{7}",,,"4441444"],[,,"444\\d{4}|850\\d{7}","\\d{7,10}",,,"4441444"],,,[,,"NA","NA"]],TT:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"868(?:2(?:01|2[1-5])|6(?:0[79]|1[02-9]|2[1-9]|[3-69]\\d|7[0-79])|82[124])\\d{4}","\\d{7}(?:\\d{3})?",
+,,"8682211234"],[,,"868(?:2(?:[89]\\d)|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4[6-9]\\d|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}","\\d{10}",,,"8682911234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"TT",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"868",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TV:[,[,,"[29]\\d{4,5}","\\d{5,6}"],[,,"2[02-9]\\d{3}",
+"\\d{5}",,,"20123"],[,,"90\\d{4}","\\d{6}",,,"901234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TV",688,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TW:[,[,,"[2-689]\\d{7,8}|7\\d{7,9}","\\d{8,10}"],[,,"[2-8]\\d{7,8}","\\d{8,9}",,,"21234567"],[,,"9\\d{8}","\\d{9}",,,"912345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],"TW",886,"0(?:0[25679]|19)",
+"0","#",,"0",,,,[[,"([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3",["[2-6]|[78][1-9]"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["80|9"],"0$1","",0],[,"(70)(\\d{4})(\\d{4})","$1 $2 $3",["70"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TZ:[,[,,"\\d{9}","\\d{7,9}"],[,,"2[2-8]\\d{7}","\\d{7,9}",,,"222345678"],[,,"(?:6[158]|7[1-9])\\d{7}","\\d{9}",,,"612345678"],[,,"80[08]\\d{6}","\\d{9}",,,"800123456"],[,,"90\\d{7}","\\d{9}",,,"900123456"],[,,"8(?:40|6[01])\\d{6}",
+"\\d{9}",,,"840123456"],[,,"NA","NA"],[,,"41\\d{7}","\\d{9}",,,"412345678"],"TZ",255,"00[056]","0",,,"0",,,,[[,"([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1","",0],[,"([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1","",0],[,"([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UA:[,[,,"[3-689]\\d{8}","\\d{5,9}"],[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}",,,"311234567"],[,,"(?:39|50|6[36-8]|9[1-9])\\d{7}",
+"\\d{9}",,,"391234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"89\\d{7}","\\d{9}",,,"891234567"],"UA",380,"00","0",,,"0",,"0~0",,[[,"([3-689]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[38]9|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9]","[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9]"],"0$1","",0],[,"([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3[1-8]2|4[13678]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90",
+"3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90"],"0$1","",0],[,"([3-6]\\d{3})(\\d{5})","$1 $2",["3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])","3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6(?:[013-9]|22)|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])"],"0$1","",0]],,[,,"NA","NA"],,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UG:[,[,,"\\d{9}","\\d{5,9}"],[,,"20(?:[0147]\\d{2}|2(?:40|[5-9]\\d)|3[23]\\d|5[0-4]\\d|6[03]\\d|8[0-2]\\d)\\d{4}|[34]\\d{8}","\\d{5,9}",,,"312345678"],[,,"2030\\d{5}|7(?:0[0-7]|[15789]\\d|2[03]|30|[46][0-4])\\d{6}","\\d{9}",,,"712345678"],[,,"800[123]\\d{5}","\\d{9}",,,"800123456"],[,,"90[123]\\d{6}","\\d{9}",,,"901123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])"],
+"0$1","",0],[,"(\\d{2})(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"],"0$1","",0],[,"(2024)(\\d{5})","$1 $2",["2024"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],US:[,[,,"[2-9]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[56])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[01678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\d{6}",
+"\\d{7}(?:\\d{3})?",,,"2015555555"],[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[56])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[01678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\d{6}",
+"\\d{7}(?:\\d{3})?",,,"2015555555"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"US",1,"011","1",,,"1",,,1,[[,"(\\d{3})(\\d{4})","$1-$2",,"","",1],[,"(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,"","",1]],[[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3"]],[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UY:[,[,,"[2489]\\d{6,7}","\\d{7,8}"],[,
+,"2\\d{7}|4[2-7]\\d{6}","\\d{7,8}",,,"21231234"],[,,"9[1-9]\\d{6}","\\d{8}",,,"94231234"],[,,"80[05]\\d{4}","\\d{7}",,,"8001234"],[,,"90[0-8]\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UY",598,"0(?:1[3-9]\\d|0)","0"," int. ",,"0",,"00",,[[,"(\\d{4})(\\d{4})","$1 $2",["[24]"],"","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{4})","$1 $2",["[89]0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UZ:[,[,,"[679]\\d{8}",
+"\\d{7,9}"],[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69])|9(?:22|4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|1[12]\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}",,,"662345678"],[,,"6(?:1(?:2(?:98|2[01])|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:11\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4])|7\\d{2})|5(?:19[01]|2(?:27|9[26])|30\\d|59\\d|7\\d{2})|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|3[79]\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79])|9[0-3]\\d)|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|5\\d|3[01]|7[0-4])|5[67]\\d|6(?:2[0-26]|8\\d)|7\\d{2}))\\d{4}|7(?:0\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|33\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078])|9[4-6]\\d)|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0127]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[05629]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07])))\\d{4}|9[0-57-9]\\d{7}",
+"\\d{7,9}",,,"912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UZ",998,"810","8",,,"8",,"8~10",,[[,"([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VA:[,[,,"06\\d{8}","\\d{10}"],[,,"06698\\d{5}","\\d{10}",,,"0669812345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VA",379,"00",,,,,,,,[[,"(06)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],
+,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],VC:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\d{4}","\\d{7}(?:\\d{3})?",,,"7842661234"],[,,"784(?:4(?:3[0-4]|5[45]|89|9[0-5])|5(?:2[6-9]|3[0-4]))\\d{4}","\\d{10}",,,"7844301234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],
+[,,"NA","NA"],"VC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"784",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VE:[,[,,"[24589]\\d{9}","\\d{7,10}"],[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}",,,"2121234567"],[,,"4(?:1[24-8]|2[46])\\d{7}","\\d{10}",,,"4121234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VE",58,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{7})","$1-$2",,"0$1","$CC $1",0]],,[,,"NA",
+"NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VG:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"284(?:(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7}(?:\\d{3})?",,,"2842291234"],[,,"284(?:(?:3(?:0[0-3]|4[0-367])|4(?:4[0-6]|68|99)|54[0-57])\\d{4}|496[6-9]\\d{3})","\\d{10}",,,"2843001234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],
+[,,"NA","NA"],"VG",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"284",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VI:[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"340(?:2(?:01|2[0678]|44|77)|3(?:32|44)|4(?:22|7[34])|5(?:1[34]|55)|6(?:26|4[23]|77|9[023])|7(?:1[2-589]|27|7\\d)|884|998)\\d{4}","\\d{7}(?:\\d{3})?",,,"3406421234"],[,,"340(?:2(?:01|2[0678]|44|77)|3(?:32|44)|4(?:22|7[34])|5(?:1[34]|55)|6(?:26|4[23]|77|9[023])|7(?:1[2-589]|27|7\\d)|884|998)\\d{4}","\\d{7}(?:\\d{3})?",,,"3406421234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"VI",1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"340",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VN:[,[,,"[17]\\d{6,9}|[2-69]\\d{7,9}|8\\d{6,8}","\\d{7,10}"],[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|4\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01])|8[1-9])\\d{7}","\\d{9,10}",,,"2101234567"],[,,"(?:9\\d|1(?:2\\d|6[2-9]|8[68]|99))\\d{7}",
+"\\d{9,10}",,,"912345678"],[,,"1800\\d{4,6}","\\d{8,10}",,,"1800123456"],[,,"1900\\d{4,6}","\\d{8,10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VN",84,"00","0",,,"0",,,,[[,"([17]99)(\\d{4})","$1 $2",["[17]99"],"0$1","",1],[,"([48])(\\d{4})(\\d{4})","$1 $2 $3",["[48]"],"0$1","",1],[,"([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3",["2[025-79]|3[0136-9]|5[2-9]|6[0-46-8]|7[02-79]"],"0$1","",1],[,"(80)(\\d{5})","$1 $2",["80"],"0$1","",1],[,"(69\\d)(\\d{4,5})","$1 $2",["69"],"0$1","",1],[,"([235-7]\\d{2})(\\d{4})(\\d{3})",
+"$1 $2 $3",["2[1348]|3[25]|5[01]|65|7[18]"],"0$1","",1],[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1","",1],[,"(1[2689]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[26]|8[68]|99)"],"0$1","",1],[,"(1[89]00)(\\d{4,6})","$1 $2",["1[89]0"],"$1","",1]],,[,,"NA","NA"],,,[,,"[17]99\\d{4}|69\\d{5,6}","\\d{7,8}",,,"1992000"],[,,"[17]99\\d{4}|69\\d{5,6}|80\\d{5}","\\d{7,8}",,,"1992000"],,,[,,"NA","NA"]],VU:[,[,,"[2-57-9]\\d{4,6}","\\d{5,7}"],[,,"(?:2[02-9]\\d|3(?:[5-7]\\d|8[0-8])|48[4-9]|88\\d)\\d{2}",
+"\\d{5}",,,"22123"],[,,"(?:5(?:7[2-5]|[3-69]\\d)|7[013-7]\\d)\\d{4}","\\d{7}",,,"5912345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VU",678,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[579]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"3[03]\\d{3}|900\\d{4}","\\d{5,7}",,,"30123"],,,[,,"NA","NA"]],WF:[,[,,"[5-7]\\d{5}","\\d{6}"],[,,"(?:50|68|72)\\d{4}","\\d{6}",,,"501234"],[,,"(?:50|68|72)\\d{4}","\\d{6}",,,"501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"WF",681,"00",,,,,,,1,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],WS:[,[,,"[2-8]\\d{4,6}","\\d{5,7}"],[,,"(?:[2-5]\\d|6[1-9]|84\\d{2})\\d{3}","\\d{5,7}",,,"22123"],[,,"(?:60|7[25-7]\\d)\\d{4}","\\d{6,7}",,,"601234"],[,,"800\\d{3}","\\d{6}",,,"800123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"WS",685,"0",,,,,,,,[[,"(8\\d{2})(\\d{3,4})","$1 $2",["8"],"","",0],[,"(7\\d)(\\d{5})","$1 $2",["7"],"",
+"",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],YE:[,[,,"[1-7]\\d{6,8}","\\d{6,9}"],[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}",,,"1234567"],[,,"7[0137]\\d{7}","\\d{9}",,,"712345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"],"0$1","",0],[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7[0137]"],"0$1","",0]],,[,,"NA","NA"],
+,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],YT:[,[,,"[268]\\d{8}","\\d{9}"],[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"],[,,"639\\d{6}","\\d{9}",,,"639123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"YT",262,"00","0",,,"0",,,,,,[,,"NA","NA"],,"269|63",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ZA:[,[,,"[1-79]\\d{8}|8(?:[067]\\d{7}|[1-4]\\d{3,7})","\\d{5,9}"],[,,"(?:1[0-8]|2[0-378]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{9}",,,"101234567"],[,
+,"(?:6[0-5]|7[0-46-9])\\d{7}|8[1-4]\\d{3,7}","\\d{5,9}",,,"711234567"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"86[2-9]\\d{6}|90\\d{7}","\\d{9}",,,"862345678"],[,,"860\\d{6}","\\d{9}",,,"860123456"],[,,"NA","NA"],[,,"87\\d{7}","\\d{9}",,,"871234567"],"ZA",27,"00","0",,,"0",,,,[[,"(860)(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-79]|8(?:[0-47]|6[1-9])"],"0$1","",0],[,"(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})",
+"$1 $2 $3",["8[1-4]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"861\\d{6}","\\d{9}",,,"861123456"],,,[,,"NA","NA"]],ZM:[,[,,"[289]\\d{8}","\\d{9}"],[,,"21[1-8]\\d{6}","\\d{9}",,,"211234567"],[,,"9(?:5[05]|6\\d|7[1-9])\\d{6}","\\d{9}",,,"955123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ZM",260,"00","0",,,"0",,,,[[,"([29]\\d)(\\d{7})","$1 $2",["[29]"],"0$1","",0],[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ZW:[,[,,"2(?:[012457-9]\\d{3,8}|6\\d{3,6})|[13-79]\\d{4,8}|8[06]\\d{8}","\\d{3,10}"],[,,"(?:1[3-9]|2(?:0[45]|[16]|2[28]|[49]8?|58[23]|7[246]|8[1346-9])|3(?:08?|17?|3[78]|[2456]|7[1569]|8[379])|5(?:[07-9]|1[78]|483|5(?:7?|8))|6(?:0|28|37?|[45][68][78]|98?)|848)\\d{3,6}|(?:2(?:27|5|7[135789]|8[25])|3[39]|5[1-46]|6[126-8])\\d{4,6}|2(?:(?:0|70)\\d{5,6}|2[05]\\d{7})|(?:4\\d|9[2-8])\\d{4,7}","\\d{3,10}",,,"1312345"],[,,"7[1378]\\d{7}|86(?:22|44)\\d{6}","\\d{9,10}",
+,,"711234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"86(?:1[12]|30|55|77|8[367]|99)\\d{6}","\\d{10}",,,"8686123456"],"ZW",263,"00","0",,,"0",,,,[[,"([49])(\\d{3})(\\d{2,5})","$1 $2 $3",["4|9[2-9]"],"0$1","",0],[,"([179]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[19]1|7"],"0$1","",0],[,"(86\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["86[24]"],"0$1","",0],[,"([2356]\\d{2})(\\d{3,5})","$1 $2",["2(?:[278]|0[45]|[49]8)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"],
+"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])|80"],"0$1","",0],[,"([1-356]\\d)(\\d{3,5})","$1 $2",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"],"0$1","",0],[,"([1-356]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"],
+"0$1","",0],[,"([25]\\d{3})(\\d{3,5})","$1 $2",["(?:25|54)8","258[23]|5483"],"0$1","",0],[,"([25]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:25|54)8","258[23]|5483"],"0$1","",0],[,"(8\\d{3})(\\d{6})","$1 $2",["86"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],800:[,[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",800,"",,,,,,,1,[[,"(\\d{4})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],808:[,[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],"001",808,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],870:[,[,,"[35-7]\\d{8}","\\d{9}",,,"301234567"],[,,"NA","NA",,,"301234567"],[,,"(?:[356]\\d|7[6-8])\\d{7}","\\d{9}",
+,,"301234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",870,"",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],878:[,[,,"1\\d{11}","\\d{12}",,,"101234567890"],[,,"NA","NA",,,"101234567890"],[,,"NA","NA",,,"101234567890"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"10\\d{10}","\\d{12}",,,"101234567890"],"001",878,"",,,,,,,1,[[,"(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],881:[,[,,"[67]\\d{8}","\\d{9}",,,"612345678"],[,,"NA","NA",,,"612345678"],[,,"[67]\\d{8}","\\d{9}",,,"612345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",881,"",,,,,,,,[[,"(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[67]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],882:[,[,,"[13]\\d{6,11}","\\d{7,12}",,,"3451234567"],[,,"NA","NA",,,"3451234567"],[,,"3(?:2\\d{3}|37\\d{2}|4(?:2|7\\d{3}))\\d{4}",
+"\\d{7,10}",,,"3451234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15678]|9[0689])\\d{4}|6\\d{5,10})|345\\d{7}","\\d{7,12}",,,"3451234567"],"001",882,"",,,,,,,,[[,"(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"],"","",0],[,"(\\d{2})(\\d{5})","$1 $2",["16|342"],"","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["34[57]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["348"],"","",0],[,"(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",
+["1"],"","",0],[,"(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"],"","",0],[,"(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["16"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"348[57]\\d{7}","\\d{11}",,,"3451234567"]],883:[,[,,"51\\d{7}(?:\\d{3})?","\\d{9}(?:\\d{3})?",,,"510012345"],[,,"NA","NA",,,"510012345"],[,,"NA","NA",,,"510012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"51(?:00\\d{5}(?:\\d{3})?|[13]0\\d{8})","\\d{9}(?:\\d{3})?",,,"510012345"],"001",883,"",,,,,,,1,
+[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["510"],"","",0],[,"(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],888:[,[,,"\\d{11}","\\d{11}",,,"12345678901"],[,,"NA","NA",,,"12345678901"],[,,"NA","NA",,,"12345678901"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",888,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",,"","",0]],,[,
+,"NA","NA"],,,[,,"NA","NA"],[,,"\\d{11}","\\d{11}",,,"12345678901"],1,,[,,"NA","NA"]],979:[,[,,"\\d{9}","\\d{9}",,,"123456789"],[,,"NA","NA",,,"123456789"],[,,"NA","NA",,,"123456789"],[,,"NA","NA"],[,,"\\d{9}","\\d{9}",,,"123456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",979,"",,,,,,,1,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]]};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function P(){this.$={}}P.ba=function(){return P.v?P.v:P.v=new P};
+var Ja={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","\uff10":"0","\uff11":"1","\uff12":"2","\uff13":"3","\uff14":"4","\uff15":"5","\uff16":"6","\uff17":"7","\uff18":"8","\uff19":"9","\u0660":"0","\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u06f0":"0","\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9"},Ka={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",
+7:"7",8:"8",9:"9","\uff10":"0","\uff11":"1","\uff12":"2","\uff13":"3","\uff14":"4","\uff15":"5","\uff16":"6","\uff17":"7","\uff18":"8","\uff19":"9","\u0660":"0","\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u06f0":"0","\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9",A:"2",B:"2",C:"2",D:"3",E:"3",F:"3",G:"4",H:"4",I:"4",J:"5",K:"5",L:"5",M:"6",N:"6",O:"6",P:"7",
+Q:"7",R:"7",S:"7",T:"8",U:"8",V:"8",W:"9",X:"9",Y:"9",Z:"9"},Q=RegExp("^[+\uff0b]+"),La=RegExp("([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9])"),Ma=RegExp("[+\uff0b0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]"),Na=/[\\\/] *x/,Oa=RegExp("[^0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9A-Za-z#]+$"),Pa=/(?:.*?[A-Za-z]){3}.*/,Qa=RegExp("(?:;ext=([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})|[ \u00a0\\t,]*(?:e?xt(?:ensi(?:o\u0301?|\u00f3))?n?|\uff45?\uff58\uff54\uff4e?|[,x\uff58#\uff03~\uff5e]|int|anexo|\uff49\uff4e\uff54)[:\\.\uff0e]?[ \u00a0\\t,-]*([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})#?|[- ]+([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,5})#)$",
+"i"),Ra=RegExp("^[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{2}$|^[+\uff0b]*(?:[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*]*[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]){3,}[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*A-Za-z0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]*(?:;ext=([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})|[ \u00a0\\t,]*(?:e?xt(?:ensi(?:o\u0301?|\u00f3))?n?|\uff45?\uff58\uff54\uff4e?|[,x\uff58#\uff03~\uff5e]|int|anexo|\uff49\uff4e\uff54)[:\\.\uff0e]?[ \u00a0\\t,-]*([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})#?|[- ]+([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,5})#)?$",
+"i"),Sa=/(\$\d)/;function Ta(a){var b=a.search(Ma);0<=b?(a=a.substring(b),a=a.replace(Oa,""),b=a.search(Na),0<=b&&(a=a.substring(0,b))):a="";return a}function Ua(a){return 2>a.length?!1:R(Ra,a)}function Va(a){return R(Pa,a)?S(a,Ka):S(a,Ja)}function Wa(a){var b=Va(a.toString());a.clear();a.append(b)}function S(a,b){for(var c=new F,d,f=a.length,e=0;e<f;++e)d=a.charAt(e),d=b[d.toUpperCase()],null!=d&&c.append(d);return c.toString()}
+P.prototype.format=function(a,b){if(0==y(a,2)&&null!=a.b[5]){var c=B(a,5);if(0<c.length)return c}var c=a.h(),d=T(a);if(0==b)return Xa(c,0,d,"");if(!(c in N))return d;var f=U(this,c,Ya(c)),e;e=null!=a.b[3]&&0!=a.getExtension().length?3==b?";ext="+a.getExtension():null!=f.b[13]?y(f,13)+B(a,3):" ext. "+B(a,3):"";a:{for(var f=0==(A(f,20)||[]).length||2==b?A(f,19)||[]:A(f,20)||[],g,h=f.length,k=0;k<h;++k){g=f[k];var m=g.f[3].o?null!=g.b[3]?g.b[3].length:0:null!=g.b[3]?1:0;if(0==m||0==d.search(y(g,3,m-
+1)))if(m=new RegExp(y(g,1)),R(m,d)){f=g;break a}}f=null}null!=f&&(h=f,f=B(h,2),g=new RegExp(y(h,1)),B(h,5),k="",h=B(h,4),k=2==b&&null!=h&&0<h.length?d.replace(g,f.replace(Sa,h)):d.replace(g,f),3==b&&(k=k.replace(RegExp("^[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+"),""),k=k.replace(RegExp("[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+",
+"g"),"-")),d=k);return Xa(c,b,d,e)};function U(a,b,c){return"001"==c?V(a,""+b):V(a,c)}function T(a){var b=""+y(a,2);return null!=a.b[4]&&y(a,4)?Array(B(a,8)+1).join("0")+b:b}function Xa(a,b,c,d){switch(b){case 0:return"+"+a+c+d;case 1:return"+"+a+" "+c+d;case 3:return"tel:+"+a+"-"+c+d;default:return c+d}}
+function Za(a,b){return W(a,y(b,1))?W(a,y(b,5))?4:W(a,y(b,4))?3:W(a,y(b,6))?5:W(a,y(b,8))?6:W(a,y(b,7))?7:W(a,y(b,21))?8:W(a,y(b,25))?9:W(a,y(b,28))?10:W(a,y(b,2))?y(b,18)||W(a,y(b,3))?2:0:!y(b,18)&&W(a,y(b,3))?1:-1:-1}function V(a,b){if(null==b)return null;b=b.toUpperCase();var c=a.$[b];if(null==c){c=O[b];if(null==c)return null;c=(new M).k(I.i(),c);a.$[b]=c}return c}function W(a,b){return R(B(b,3),a)&&R(B(b,2),a)}function Ya(a){a=N[a];return null==a?"ZZ":a[0]}
+function $a(a,b){return R(a,b)?0:0==b.search(a)?3:2}
+function ab(a,b,c,d,f){if(0==a.length)return 0;a=new F(a);var e;null!=b&&(e=y(b,11));null==e&&(e="NonMatch");var g=a.toString();if(0==g.length)e=20;else if(Q.test(g))g=g.replace(Q,""),a.clear(),a.append(Va(g)),e=1;else{g=new RegExp(e);Wa(a);e=a.toString();if(0==e.search(g)){var g=e.match(g)[0].length,h=e.substring(g).match(La);h&&null!=h[1]&&0<h[1].length&&"0"==S(h[1],Ja)?e=!1:(a.clear(),a.append(e.substring(g)),e=!0)}else e=!1;e=e?5:20}d&&z(f,6,e);if(20!=e){if(2>=a.e.length)throw"Phone number too short after IDD";
+a:{d=a.toString();if(0!=d.length&&"0"!=d.charAt(0))for(b=d.length,e=1;3>=e&&e<=b;++e)if(a=parseInt(d.substring(0,e),10),a in N){c.append(d.substring(e));c=a;break a}c=0}if(0!=c)return f.l(c),c;throw"Invalid country calling code";}if(null!=b&&(e=b.h(),g=""+e,h=a.toString(),0==h.lastIndexOf(g,0))){var k=new F(h.substring(g.length)),h=y(b,1),g=new RegExp(B(h,2));bb(k,b,null);b=k.toString();h=B(h,3);if(!R(g,a.toString())&&R(g,b)||3==$a(h,a.toString()))return c.append(b),d&&z(f,6,10),f.l(e),e}f.l(0);return 0}
+function bb(a,b,c){var d=a.toString(),f=d.length,e=y(b,15);if(0!=f&&null!=e&&0!=e.length&&(e=new RegExp("^(?:"+e+")"),f=e.exec(d))){var g=RegExp,h;h=y(b,1);h=B(h,2);g=new g(h);h=R(g,d);var k=f.length-1;b=y(b,16);if(null==b||0==b.length||null==f[k]||0==f[k].length){if(!h||R(g,d.substring(f[0].length)))null!=c&&0<k&&null!=f[k]&&c.append(f[1]),a.set(d.substring(f[0].length))}else if(d=d.replace(e,b),!h||R(g,d))null!=c&&0<k&&c.append(f[1]),a.set(d)}}
+P.prototype.parse=function(a,b){return cb(this,a,b,!1)};
+function cb(a,b,c,d){if(null==b)throw"The string supplied did not seem to be a phone number";if(250<b.length)throw"The string supplied is too long to be a phone number";var f=new F,e=b.indexOf(";phone-context=");if(0<e){var g=e+15;if("+"==b.charAt(g)){var h=b.indexOf(";",g);0<h?f.append(b.substring(g,h)):f.append(b.substring(g))}g=b.indexOf("tel:");f.append(b.substring(0<=g?g+4:0,e))}else f.append(Ta(b));e=f.toString();g=e.indexOf(";isub=");0<g&&(f.clear(),f.append(e.substring(0,g)));if(!Ua(f.toString()))throw"The string supplied did not seem to be a phone number";
+e=f.toString();if(!(null!=c&&isNaN(c)&&c.toUpperCase()in O||null!=e&&0<e.length&&Q.test(e)))throw"Invalid country calling code";e=new K;d&&z(e,5,b);a:{b=f.toString();g=b.search(Qa);if(0<=g&&Ua(b.substring(0,g)))for(var h=b.match(Qa),k=h.length,m=1;m<k;++m)if(null!=h[m]&&0<h[m].length){f.clear();f.append(b.substring(0,g));b=h[m];break a}b=""}0<b.length&&z(e,3,b);g=V(a,c);b=new F;h=0;k=f.toString();try{h=ab(k,g,b,d,e)}catch(r){if("Invalid country calling code"==r&&Q.test(k)){if(k=k.replace(Q,""),h=
+ab(k,g,b,d,e),0==h)throw r;}else throw r;}0!=h?(f=Ya(h),f!=c&&(g=U(a,h,f))):(Wa(f),b.append(f.toString()),null!=c?(h=g.h(),e.l(h)):d&&Da(e,6));if(2>b.e.length)throw"The string supplied is too short to be a phone number";null!=g&&(a=new F,c=new F(b.toString()),bb(c,g,a),f=c.toString(),g=y(g,1),g=B(g,3),2!=$a(g,f)&&(b=c,d&&z(e,7,a.toString())));d=b.toString();a=d.length;if(2>a)throw"The string supplied is too short to be a phone number";if(17<a)throw"The string supplied is too long to be a phone number";
+if(1<d.length&&"0"==d.charAt(0)){z(e,4,!0);for(a=1;a<d.length-1&&"0"==d.charAt(a);)a++;1!=a&&z(e,8,a)}z(e,2,parseInt(d,10));return e}function R(a,b){var c="string"==typeof a?b.match("^(?:"+a+")$"):b.match(a);return c&&c[0].length==b.length?!0:!1};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var db=new I;z(db,11,"NA");/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function eb(a,b){try{var c=P.ba();if(!(null!=b&&isNaN(b)&&b.toUpperCase()in O)&&0<a.length&&"+"!=a.charAt(0))throw"Invalid country calling code";var d=cb(c,a,b,!0),f;if(null==d)f=null;else{var e=d.h(),g=N[e],h;if(null==g)h=null;else{var k;if(1==g.length)k=g[0];else b:{for(var m=T(d),r,C=g.length,e=0;e<C;e++){r=g[e];var $=V(c,r);if(null!=$.b[23]){if(0==m.search(y($,23))){k=r;break b}}else if(-1!=Za(m,$)){k=r;break b}}k=null}h=k}f=h}var aa;var Ea=d.h(),Fa=U(c,Ea,f),ba;if(!(ba=null==Fa)){var ca;if(ca=
+"001"!=f){var Ga,Ha=V(c,f);if(null==Ha)throw"Invalid region code: "+f;Ga=Ha.h();ca=Ea!=Ga}ba=ca}if(ba)aa=!1;else{var gb=T(d);aa=-1!=Za(gb,Fa)}return aa}catch(hb){return hb}}var X=["isPhoneNumberValid"],Y=n;X[0]in Y||!Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());){var fb;if(fb=!X.length)fb=void 0!==eb;fb?Y[Z]=eb:Y=Y[Z]?Y[Z]:Y[Z]={}};})();
\ No newline at end of file
diff --git a/themes/blueprint/js/lightbox.js b/themes/blueprint/js/lightbox.js
index 740a7615be76b062c2aaea252825cb49941b03ad..4ba745d8c9debbdca4123e88c6b7aa01c4a98b18 100644
--- a/themes/blueprint/js/lightbox.js
+++ b/themes/blueprint/js/lightbox.js
@@ -1,4 +1,4 @@
-/*global btoa, checkSaveStatuses, confirm, extractController, extractSource, getItemsFromCartCookie, hexEncode, htmlEncode, path, printIDs, rc4Encrypt, Recaptcha, redrawCartStatus, refreshCommentList, removeRecordState, saveCartCookie, unescape, vufindString*/
+/*global btoa, checkSaveStatuses, confirm, extractController, extractSource, getItemsFromCartCookie, hexEncode, htmlEncode, path, printIDs, rc4Encrypt, Recaptcha, redrawCartStatus, refreshCommentList, removeRecordState, saveCartCookie, unescape, userIsLoggedIn, vufindString*/
 
 // keep a handle to the current opened dialog so we can access it later
 var __dialogHandle = {dialog: null, processFollowup:false, followupModule: null, followupAction: null, recordId: null, postParams: null};
@@ -273,27 +273,29 @@ function registerAjaxCart() {
     });
 }
 
-function refreshTagList(id, recordSource) {
-    var tagList = $('#tagList');
-    if (tagList.length > 0) {
-        tagList.empty();
-        var url = path + '/AJAX/JSON?' + $.param({method:'getRecordTags',id:id,'source':recordSource});
-        $.ajax({
-            dataType: 'json',
-            url: url,
-            success: function(response) {
-                if (response.status == 'OK') {
-                    $.each(response.data, function(i, tag) {
-                        var href = path + '/Tag?' + $.param({lookfor:tag.tag});
-                        var html = (i>0 ? ', ' : ' ') + '<a href="' + htmlEncode(href) + '">' + htmlEncode(tag.tag) +'</a> (' + htmlEncode(tag.cnt) + ')';
-                        tagList.append(html);
-                    });
-                } else if (response.data && response.data.length > 0) {
-                    tagList.append(response.data);
-                }
-            }
-        });
-    }
+function refreshTagList(loggedin) {
+  loggedin = !!loggedin || userIsLoggedIn;
+  var recordId = $('#record_id').val();
+  var recordSource = $('.hiddenSource').val();
+  var tagList = $('#tagList');
+  if (tagList.length > 0) {
+    tagList.empty();
+    var url = path + '/AJAX/JSON?' + $.param({method:'getRecordTags',id:recordId,'source':recordSource});
+    $.ajax({
+      dataType: 'json',
+      url: url,
+      complete: function(response) {
+        if(response.status == 200) {
+          tagList.html(response.responseText);
+          if(loggedin) {
+            $('#tagList').addClass('loggedin');
+          } else {
+            $('#tagList').removeClass('loggedin');
+          }
+        }
+      }
+    });
+  }
 }
 
 function registerAjaxSaveRecord() {
@@ -327,7 +329,7 @@ function registerAjaxSaveRecord() {
 
         $('a.listEdit').unbind('click').click(function(){
             var id = this.href.substring(this.href.indexOf('?')+'recordId='.length+1);
-            id = decodeURIComponent(id.split('&')[0]);
+            id = decodeURIComponent(id.split('&')[0].replace(/\+/g, ' '));
             var controller = extractController(this);
             hideLightbox();
             getLightbox('MyResearch', 'EditList', 'NEW', null, this.title, controller, 'Save', id);
@@ -553,7 +555,7 @@ function registerAjaxBulkSave() {
         $('a.listEdit').unbind('click').click(function(){
             var $form = $('#modalDialog form[name="bulkSave"]');
             var id = this.href.substring(this.href.indexOf('?')+'recordId='.length+1);
-            id = decodeURIComponent(id.split('&')[0]);
+            id = decodeURIComponent(id.split('&')[0].replace(/\+/g, ' '));
             var ids = $("input[name='ids[]']", $form);
             var postParams = [];
             $.each(ids, function(i) {
diff --git a/themes/blueprint/js/record.js b/themes/blueprint/js/record.js
index f4a971ecfe631be1f51baa9d6a7b6fa40ec1194e..4bf332884d8fea8105978e2ed934785dbba938df 100644
--- a/themes/blueprint/js/record.js
+++ b/themes/blueprint/js/record.js
@@ -1,4 +1,4 @@
-/*global __dialogHandle, displayFormError, extractController, extractSource, getLightbox, path, toggleMenu*/
+/*global __dialogHandle, displayFormError, extractController, extractSource, getLightbox, path, refreshTagList, toggleMenu*/
 
 /**
  * Functions and event handlers specific to record pages.
@@ -41,7 +41,7 @@ function setUpCheckRequest() {
     $('.checkRequest').each(function(i) {
         if($(this).hasClass('checkRequest')) {
             $(this).addClass('ajax_hold_availability');
-            var isValid = checkRequestIsValid(this, this.href, 'Hold', 
+            var isValid = checkRequestIsValid(this, this.href, 'Hold',
                 'checkRequest ajax_hold_availability', 'holdBlocked');
         }
     });
@@ -49,7 +49,7 @@ function setUpCheckRequest() {
         if($(this).hasClass('checkStorageRetrievalRequest')) {
             $(this).addClass('ajax_storage_retrieval_request_availability');
             var isValid = checkRequestIsValid(this, this.href, 'StorageRetrievalRequest',
-                'checkStorageRetrievalRequest ajax_storage_retrieval_request_availability', 
+                'checkStorageRetrievalRequest ajax_storage_retrieval_request_availability',
                 'storageRetrievalRequestBlocked');
         }
     });
@@ -57,7 +57,7 @@ function setUpCheckRequest() {
         if($(this).hasClass('checkILLRequest')) {
             $(this).addClass('ajax_ill_request_availability');
             var isValid = checkRequestIsValid(this, this.href, 'ILLRequest',
-                'checkILLRequest ajax_ill_request_availability', 
+                'checkILLRequest ajax_ill_request_availability',
                 'ILLRequestBlocked');
         }
     });
@@ -129,6 +129,25 @@ function registerAjaxCommentRecord() {
     });
 }
 
+function ajaxTagUpdate(tag, remove) {
+  if(typeof remove === "undefined") {
+    remove = false;
+  }
+  var recordId = $('#record_id').val();
+  var recordSource = $('.hiddenSource').val();
+  $.ajax({
+    url:path+'/AJAX/JSON?method=tagRecord',
+    type:'POST',
+    data:{
+      tag:'"'+tag.replace(/\+/g, ' ')+'"',
+      id:recordId,
+      source:recordSource,
+      remove:remove
+    },
+    complete:refreshTagList
+  });
+}
+
 $(document).ready(function(){
     // register the record comment form to be submitted via AJAX
     registerAjaxCommentRecord();
diff --git a/themes/blueprint/templates/admin/tags/pagination.phtml b/themes/blueprint/templates/Helpers/pagination.phtml
similarity index 100%
rename from themes/blueprint/templates/admin/tags/pagination.phtml
rename to themes/blueprint/templates/Helpers/pagination.phtml
diff --git a/themes/blueprint/templates/Recommend/AlphaBrowseLink.phtml b/themes/blueprint/templates/Recommend/AlphaBrowseLink.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..ff7aa235d05c00aded224a3ca119ba7c73bafeda
--- /dev/null
+++ b/themes/blueprint/templates/Recommend/AlphaBrowseLink.phtml
@@ -0,0 +1,14 @@
+<?
+  $index = $this->recommend->getIndex();
+  $from = $this->recommend->getQuery();
+  $link = $this->translate(
+    'alphabrowselink_html',
+    [
+      '%%index%%' => $this->transEsc('browse_' . $index),
+      '%%from%%' => $this->escapeHtml($from),
+      '%%url%%' => $this->url('alphabrowse-home')
+        . '?from=' . urlencode($from) . '&amp;source=' . urlencode($index) 
+    ]
+  );
+?>
+<div class="info"><?=$link?></div>
\ No newline at end of file
diff --git a/themes/blueprint/templates/Recommend/CatalogResults.phtml b/themes/blueprint/templates/Recommend/CatalogResults.phtml
index fbd0863666b97003fe0bbccc759ad005fc3345fe..38f433d42fac6b2ee38f46d4ab38d22907035f17 100644
--- a/themes/blueprint/templates/Recommend/CatalogResults.phtml
+++ b/themes/blueprint/templates/Recommend/CatalogResults.phtml
@@ -7,17 +7,9 @@
     <li>
       <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
       <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+        <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+          <?=$this->record($driver)->getTitleHtml()?>
+        </a>
       </span>
       <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <br />
diff --git a/themes/blueprint/templates/Recommend/RandomRecommend.phtml b/themes/blueprint/templates/Recommend/RandomRecommend.phtml
index 2cfc3e9854a02f5f1417b67aa03f0d7f384d7eaf..0cb2e44ccd847467f42f54fb3e85f020feb6e84a 100644
--- a/themes/blueprint/templates/Recommend/RandomRecommend.phtml
+++ b/themes/blueprint/templates/Recommend/RandomRecommend.phtml
@@ -27,14 +27,9 @@
        <?if($this->recommend->getDisplayMode() === "standard" || $this->recommend->getDisplayMode() === "mixed"):?>
             <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
             <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-            <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-              $summTitle = $driver->getTitle();
-              if (!empty($summTitle)) {
-                  echo $this->escapeHtml($this->truncate($summTitle, 180));
-              } else {
-                  echo $this->transEsc('Title not available');
-              }
-            ?></a>
+            <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+              <?=$this->record($driver)->getTitleHtml()?>
+            </a>
             </span>
             <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
             <br />
diff --git a/themes/blueprint/templates/Recommend/SummonResults.phtml b/themes/blueprint/templates/Recommend/SummonResults.phtml
index 585bb2327269562bc8f4a585582d64a35ef630d2..1e5f7ef5fa8cc01acada09c123e396d2034b4fc2 100644
--- a/themes/blueprint/templates/Recommend/SummonResults.phtml
+++ b/themes/blueprint/templates/Recommend/SummonResults.phtml
@@ -7,17 +7,9 @@
     <li>
       <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
       <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       </span>
       <span style="font-size: .8em">
       <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
diff --git a/themes/blueprint/templates/Recommend/TopFacets.phtml b/themes/blueprint/templates/Recommend/TopFacets.phtml
index dea8390f0bed7f1b29521c93fd6cc22db1ed17e9..702e0222ff09020d5a4572d743a4fcad579af590 100644
--- a/themes/blueprint/templates/Recommend/TopFacets.phtml
+++ b/themes/blueprint/templates/Recommend/TopFacets.phtml
@@ -1,6 +1,7 @@
 <?
   $topFacetSet = $this->recommend->getTopFacetSet();
   $topFacetSettings = $this->recommend->getTopFacetSettings();
+  $results = $this->recommend->getResults();
 ?>
 <? if (isset($topFacetSet)): ?>
   <? foreach($topFacetSet as $title => $cluster): ?>
@@ -28,7 +29,7 @@
               <?=$this->escapeHtml($thisFacet['displayText'])?> <img src="<?=$this->imageLink('silk/tick.png')?>" alt="<?=$this->transEsc('Selected') ?>"/>
             </a>
           <? else: ?>
-            <a href="<?=$this->currentPath().$this->recommend->getResults()->getUrlQuery()->addFacet($title, $thisFacet['value'], $thisFacet['operator'])?>"><?=$this->escapeHtml($thisFacet['displayText'])?></a> (<?=$this->localizedNumber($thisFacet['count']) ?>)
+            <a href="<?=$this->currentPath().$results->getUrlQuery()->addFacet($title, $thisFacet['value'], $thisFacet['operator'])?>"><?=$this->escapeHtml($thisFacet['displayText'])?></a> (<?=$this->localizedNumber($thisFacet['count']) ?>)
             <? if ($allowExclude): ?>
               <a href="<?=$this->currentPath().$results->getUrlQuery()->addFacet($title, $thisFacet['value'], 'NOT')?>"><?=$this->transEsc('exclude_facet')?></a>
             <? endif; ?>
diff --git a/themes/blueprint/templates/Recommend/WebResults.phtml b/themes/blueprint/templates/Recommend/WebResults.phtml
index 701bd836951a71d9f0f87217c2e18072dab493bb..055b21a3617be2295913a250402992ca1e3b4a87 100644
--- a/themes/blueprint/templates/Recommend/WebResults.phtml
+++ b/themes/blueprint/templates/Recommend/WebResults.phtml
@@ -5,17 +5,9 @@
   <ul class="similar">
     <? foreach ($results as $driver): ?>
     <li>
-      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       <? $snippet = $driver->getHighlightedSnippet(); ?>
       <? $summary = $driver->getSummary(); ?>
       <? if (!empty($snippet)): ?>
diff --git a/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml b/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
index f956d8d46df1a09ef6c9c6e30c2de5acec5f68a8..531097ffc943f2077034d449eccdbd3307225e5f 100644
--- a/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,14 +3,9 @@
 ?>
 <div class="listentry span-15">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 </div>
 <div class="clearer"></div>
\ No newline at end of file
diff --git a/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
index 20c98d30a591c9dfdc9bd68f4578cfc626390909..dc4e1f3170b86d3d8bbdaa2dbd48d2fee68afddb 100644
--- a/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -9,17 +9,9 @@
   </div>
   <div class="span-9">
     <div class="resultItemLine1">
-      <b class="title"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></b>
+      <b class="title">
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </b>
     </div>
 
     <div class="resultItemLine2">
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/core.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/core.phtml
index 950d451954c9fd65f2a554f9d60313031ce37f04..84279ea2f51a8d99cf82ae83c91ba53b8f086f68 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/core.phtml
@@ -1,3 +1,11 @@
+<?
+  if($loggedin = $this->auth()->isLoggedIn()) {
+    $user_id = $loggedin->id;
+    $loggedin = true;
+  } else {
+    $user_id = false;
+  }
+?>
 <div class="span-13" vocab="http://schema.org/" resource="#record" typeof="<?=$this->driver->getSchemaOrgFormats()?> Product">
   <h1 property="name"><?=$this->escapeHtml($this->driver->getShortTitle() . ' ' . $this->driver->getSubtitle() . ' ' . $this->driver->getTitleSection())?></h1>
 
@@ -208,20 +216,14 @@
     <? endif; ?>
 
     <? if ($this->usertags()->getMode() !== 'disabled'): ?>
-      <? $tagList = $this->driver->getTags(); ?>
+      <? $tagList = $this->driver->getTags(null, null, 'count', $user_id); ?>
       <tr valign="top">
         <th><?=$this->transEsc('Tags')?>: </th>
         <td>
           <span style="float:right;">
             <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'AddTag')?>" class="tool add tagRecord controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Add Tag')?>" id="tagRecord"><?=$this->transEsc('Add Tag')?></a>
           </span>
-          <div id="tagList">
-            <? if (count($tagList) > 0): ?>
-              <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a> (<?=$this->escapeHtml($tag->cnt)?>)<? endforeach; ?>
-            <? else: ?>
-              <?=$this->transEsc('No Tags')?>, <?=$this->transEsc('Be the first to tag this record')?>!
-            <? endif; ?>
-          </div>
+          <?=$this->context($this)->renderInContext('record/taglist', array('tagList'=>$tagList, 'loggedin'=>$loggedin)) ?>
         </td>
       </tr>
     <? endif; ?>
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
index 1a59329e6c9678c37bcf8677ec72c6da7e550234..3faf6ac5961206190c0814c755d4d60b63443148 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -20,20 +20,15 @@
     <? endif; ?>
   </div>
   <div class="span-10">
-    <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title"><?
-      $listTitle = $this->driver->getTitle();
-      if (!empty($listTitle)) {
-          echo $this->escapeHtml($this->truncate($listTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a><br/>
+    <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a><br/>
     <? $listAuthor = $this->driver->getPrimaryAuthor(); if (!empty($listAuthor)): ?>
       <?=$this->transEsc('by')?>:
       <a href="<?=$this->record($this->driver)->getLink('author', $listAuthor)?>"><?=$this->escapeHtml($listAuthor)?></a><br/>
     <? endif; ?>
     <? $listTags = ($this->usertags()->getMode() !== 'disabled') ? $this->driver->getTags(
-        $list_id, // get tags for all lists if no single list is selected
+        null === $list_id ? true : $list_id, // get tags for all lists if no single list is selected
         $user_id, 'tag'
        ) : array();
     ?>
@@ -50,7 +45,7 @@
         <?=$this->escapeHtml($note)?><br/>
       <? endforeach; ?>
     <? endif; ?>
-    
+
     <? if (count($this->lists) > 0): ?>
         <strong><?=$this->transEsc('Saved in')?>:</strong>
         <? $i=0;foreach($this->lists as $current): ?>
@@ -108,7 +103,7 @@
      if ((isset($list) && $list->editAllowed($this->user)) || (!isset($list) && $this->user)): ?>
     <div class="floatright">
       <a href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&amp;list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a>
-      <? /* Use a different delete URL if we're removing from a specific list or the overall favorites: */ 
+      <? /* Use a different delete URL if we're removing from a specific list or the overall favorites: */
         $deleteUrl = is_null($list_id)
             ? $this->url('myresearch-favorites')
             : $this->url('userList', array('id' => $list_id));
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
index 5031504dbf7d265a36e14ce0926d2547cae47d9f..40fcfd8082d496ec00978d08b1b60acdf005aaf0 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
@@ -12,17 +12,9 @@
       </a>
     </span>
     <div class="gridTitleBox" >
-      <a class="gridTitle" href="<?=$this->recordLink()->getUrl($this->driver)?>"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 80));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a class="gridTitle" href="<?=$this->recordLink()->getUrl($this->driver)?>">
+        <?=$this->record($this->driver)->getTitleHtml(80)?>
+      </a>
       <? /* We need to find out if we're supposed to display an OpenURL link ($openUrlActive),
             but even if we don't plan to display the link, we still want to get the $openUrl
             value for use in generating a COinS (Z3988) tag -- see bottom of file.
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
index b76affe451da168a39c0209a7cc40fcae4928fcc..816b068ea4f628e1651038a92ab17caee705daaf 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -11,17 +11,9 @@
   </div>
   <div class="span-9">
     <div class="resultItemLine1">
-      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </a>
     </div>
 
     <div class="resultItemLine2">
diff --git a/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
index f9e9fc43193b3124261e067571e813e188286d0b..b0a979dd74db655989ed447b95eef74f571cd9dd 100644
--- a/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,9 @@
 ?>
 <div class="listentry span-15">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 
   <div class="resultItemLine2">
diff --git a/themes/blueprint/templates/RecordTab/holdingsils.phtml b/themes/blueprint/templates/RecordTab/holdingsils.phtml
index 76ddf5c6171cd416ee345184b9fc2a09149482b1..62a20a9acc609c16625406bf2c67269f9a66e791 100644
--- a/themes/blueprint/templates/RecordTab/holdingsils.phtml
+++ b/themes/blueprint/templates/RecordTab/holdingsils.phtml
@@ -11,6 +11,9 @@
     // Set page title.
     $this->headTitle($this->translate('Holdings') . ': ' . $this->driver->getBreadcrumb());
 ?>
+
+<?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
 <? if ($offlineMode == "ils-offline"): ?>
   <div class="sysInfo">
     <h2><?=$this->transEsc('ils_offline_title')?></h2>
diff --git a/themes/blueprint/templates/admin/tags/list.phtml b/themes/blueprint/templates/admin/tags/list.phtml
index 39dd3b8b1e8b08d72e31388ccfb181b98edb68af..4224ce4f09797be50a787cbff116f96e327051a8 100644
--- a/themes/blueprint/templates/admin/tags/list.phtml
+++ b/themes/blueprint/templates/admin/tags/list.phtml
@@ -103,7 +103,7 @@
 
       </form>
     </div>
-    <?=$this->paginationControl($this->results, 'Sliding', 'admin/tags/pagination.phtml', array('params' => $this->params))?>
+    <?=$this->paginationControl($this->results, 'Sliding', 'Helpers/pagination.phtml', array('params' => $this->params))?>
   <? else:?>
     <p><?=$this->translate('tag_filter_empty')?></p>
   <? endif;?>
diff --git a/themes/blueprint/templates/ajax/resolverLinks.phtml b/themes/blueprint/templates/ajax/resolverLinks.phtml
index 45e4b8176aea91a331201d513cbebfda8040f92d..2964ecf6d8d785ffe26a3ae0d1c7154fbe30786e 100644
--- a/themes/blueprint/templates/ajax/resolverLinks.phtml
+++ b/themes/blueprint/templates/ajax/resolverLinks.phtml
@@ -5,8 +5,8 @@
       <ul>
         <? foreach ($this->electronic as $link): ?>
           <li>
-            <? if (isset($link['href']) && !empty($link['href'])): ?>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
+            <? if (!empty($link['href'])): ?>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? else: ?>
               <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? endif; ?>
@@ -21,8 +21,8 @@
       <ul>
         <? foreach ($this->print as $link): ?>
           <li>
-            <? if (isset($link['href']) && !empty($link['href'])): ?>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
+            <? if (!empty($link['href'])): ?>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? else: ?>
               <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? endif; ?>
@@ -36,9 +36,9 @@
     <? if (!empty($this->services)): ?>
       <ul>
         <? foreach ($this->services as $link): ?>
-          <? if (isset($link['href']) && !empty($link['href'])): ?>
+          <? if (!empty($link['href'])): ?>
             <li>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a>
             </li>
           <? endif; ?>
         <? endforeach; ?>
diff --git a/themes/blueprint/templates/browse/home.phtml b/themes/blueprint/templates/browse/home.phtml
index 73f7bca099b5a40f629df01e2b352d52bbcba02d..ac43ab25f73ef651276d96103880cc4c8cb998d7 100644
--- a/themes/blueprint/templates/browse/home.phtml
+++ b/themes/blueprint/templates/browse/home.phtml
@@ -38,7 +38,7 @@
   <? foreach($this->secondaryList as $secondary): ?>
     <li<? if ($this->query == $secondary['value'].'' || $this->query == $secondary['value'].'*'): ?> class="active"<? endif; ?>>
             <? if (!empty($this->categoryList) && $this->currentAction != 'Tag' && $this->findby != 'alphabetical'):?>
-                <a href="<?=$SEARCH_BASE ?>?lookfor=<? if ($this->filter): ?>&filter[]=<?=urlencode($this->filter) ?>%3A<?=str_replace('+AND+','&filter[]=', urlencode($secondary['value'])) ?><? endif; ?>&filter[]=<?=$this->browse()->getSolrField($this->currentAction) ?>%3A[* TO *]" class="viewRecords"><?=$this->transEsc('View Records') ?></a>
+                <a href="<?=$SEARCH_BASE ?>?lookfor=<? if ($this->filter): ?>&filter[]=<?=urlencode($this->filter) ?>%3A<?=str_replace('+AND+','&filter[]=', urlencode($secondary['value'])) ?><? endif; ?>&filter[]=<?=$this->browse()->getSolrField($this->currentAction) ?>%3A[* TO *]<? if($this->dewey_flag):?>&sort=dewey-sort<?endif;?>" class="viewRecords"><?=$this->transEsc('View Records') ?></a>
             <? endif; ?>
       <a href="<?=$BROWSE_BASE ?>?findby=<?=urlencode($this->findby) ?>&category=<?=urlencode($this->category) ?>&query=<?=urlencode($secondary['value']) ?><? if ($this->facetPrefix): ?>&facet_prefix=<?=urlencode($secondary['displayText']) ?><? endif; ?><? if ($this->secondaryParams): foreach($this->secondaryParams as $var=>$val): ?>&<?=$var ?>=<?=urlencode($val) ?><? endforeach;endif; ?>"><?=$this->escapeHtml($secondary['displayText']) ?><? if ($this->findby != 'alphabetical'): ?> (<?=$this->localizedNumber($secondary['count']) ?>)<? endif; ?></a>    </li>
   <? endforeach; ?>
diff --git a/themes/blueprint/templates/combined/results-list.phtml b/themes/blueprint/templates/combined/results-list.phtml
index f2e3a9409e0aee79ce2030a3509f1bb3eead64e3..1dff16015e19b962a16d1cf51aa5a5c6feaada7a 100644
--- a/themes/blueprint/templates/combined/results-list.phtml
+++ b/themes/blueprint/templates/combined/results-list.phtml
@@ -25,6 +25,9 @@
 <div class="resulthead">
   <div class="floatleft">
     <? if ($recordTotal > 0): ?>
+      <? foreach (($top = $results->getRecommendations('top')) as $current): ?>
+        <?=$this->recommend($current)?>
+      <? endforeach; ?>
       <?=$this->transEsc("Showing")?>
       <strong><?=$this->localizedNumber($results->getStartRecord())?></strong> - <strong><?=$this->localizedNumber($results->getEndRecord())?></strong>
       <? if (!isset($view->skipTotalCount)): ?>
diff --git a/themes/blueprint/templates/layout/layout.phtml b/themes/blueprint/templates/layout/layout.phtml
index 5d0f99455f3b49f21d4e0c080b860b7c25fa05f2..2a6a170528a1f59904aaaaeb6456359cdab2a7a2 100644
--- a/themes/blueprint/templates/layout/layout.phtml
+++ b/themes/blueprint/templates/layout/layout.phtml
@@ -29,7 +29,14 @@
 
         $this->jsTranslations()->addStrings(
           array(
-            'loading'=>'Loading'
+            'loading' => 'Loading',
+            'libphonenumber_invalid' => 'libphonenumber_invalid',
+            'libphonenumber_invalidcountry' => 'libphonenumber_invalidcountry',
+            'libphonenumber_invalidregion' => 'libphonenumber_invalidregion',
+            'libphonenumber_notanumber' => 'libphonenumber_notanumber',
+            'libphonenumber_toolong' => 'libphonenumber_toolong',
+            'libphonenumber_tooshort' => 'libphonenumber_tooshort',
+            'libphonenumber_tooshortidd' => 'libphonenumber_tooshortidd',
           )
         );
         // Deal with cart stuff:
@@ -58,6 +65,9 @@
                 );
             }
             $this->headScript()->appendScript($this->jsTranslations()->getScript());
+            $this->headScript()->appendScript(
+                'var userIsLoggedIn = ' . ($this->auth()->isLoggedIn() ? 'true' : 'false') . ';'
+            );
         }
         if ($feedback) {
             $this->headScript()->appendFile("jquery.tabSlideOut.v2.0.js");
diff --git a/themes/blueprint/templates/librarycards/editcard.phtml b/themes/blueprint/templates/librarycards/editcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..2c0112db6bf4e954300417722ab556d02356f1e7
--- /dev/null
+++ b/themes/blueprint/templates/librarycards/editcard.phtml
@@ -0,0 +1,39 @@
+<?
+    // Set up page title:
+    $pageTitle = empty($this->card->id) ? 'Add a Library Card' : "Edit Library Card";
+    $this->headTitle($this->translate($pageTitle));
+
+    // Set up breadcrumbs:
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc($pageTitle) . '</em>';
+?>
+<h1><?=$this->transEsc($pageTitle); ?></h1>
+
+<?=$this->flashmessages()?>
+
+<form method="post" name="<?=empty($this->card->id) ? 'newCardForm' : 'editCardForm'?>" action="">
+  <label class="displayBlock" for="card_name"><?=$this->transEsc('Library Card Name'); ?>:</label>
+  <input id="card_name" type="text" name="card_name" value="<?=$this->escapeHtmlAttr($this->cardName)?>" size="50"
+    class="mainFocus <?=$this->jqueryValidation(array('required'=>'This field is required')) ?>"/>
+  <br class="clear"/>
+
+  <? if ($this->targets !== null): ?>
+  <label class="displayBlock" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+  <select id="login_target" name="target">
+  <? foreach ($this->targets as $target): ?>
+    <option value="<?=$this->escapeHtmlAttr($target)?>"<?=($target == $this->target ? ' selected="selected"' : '')?>><?=$this->transEsc("source_$target", null, $target)?></option>
+  <? endforeach; ?>
+  </select>
+  <br class="clear"/>
+  <? endif; ?>
+
+  <label class="displayBlock" for="login_username"><?=$this->transEsc('Username')?>:</label>
+  <input id="login_username" type="text" name="username" value="<?=$this->escapeHtmlAttr($this->username)?>" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+  <br class="clear"/>
+  <label class="displayBlock" for="login_password"><?=$this->transEsc('Password')?>:</label>
+  <input id="login_password" type="password" name="password" value="<?=$this->escapeHtmlAttr($this->password)?>" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+  <br class="clear"/>
+
+  <input class="button" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+</form>
diff --git a/themes/blueprint/templates/librarycards/home.phtml b/themes/blueprint/templates/librarycards/home.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..1fa5b4f33cf18bba5874e17b432f8445d766de25
--- /dev/null
+++ b/themes/blueprint/templates/librarycards/home.phtml
@@ -0,0 +1,55 @@
+<?
+    // Set up page title:
+    $this->headTitle($this->translate('Library Cards'));
+
+    // Set up breadcrumbs:
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Library Cards') . '</em>';
+?>
+<div class="<?=$this->layoutClass('mainbody')?>">
+  <?=$this->flashmessages()?>
+  <? if ($this->libraryCards->count() == 0): ?>
+    <?=$this->transEsc('You do not have any library cards')?>
+  <? else: ?>
+    <h3><?=$this->transEsc('Library Cards')?></h3>
+    <table class="datagrid fines" summary="<?=$this->transEsc('Library Cards')?>">
+      <tr>
+        <th><?=$this->transEsc('Library Card Name')?></th>
+        <? if ($this->multipleTargets): ?>
+        <th><?=$this->transEsc('login_target')?></th>
+        <? endif; ?>
+        <th><?=$this->transEsc('Username')?></th>
+        <th>&nbsp;</th>
+      </tr>
+      <? foreach ($this->libraryCards as $record): ?>
+        <tr>
+          <td><?=$this->escapeHtml($record['card_name'])?></td>
+          <? $username = $record['cat_username']; if ($this->multipleTargets): ?>
+            <? $target = ''; ?>
+            <? if (strstr($username, '.')): ?>
+              <? list($target, $username) = explode('.', $username, 2); ?>
+            <? endif; ?>
+            <td><?=$target ? $this->transEsc("source_$target", null, $target) : '&nbsp;' ?></td>
+          <? endif; ?>
+          <td><?=$this->escapeHtml($username)?></td>
+          <td>
+            <div class="libraryCardButtons">
+              <a class="edit smallButton" href="<?=$this->url('editLibraryCard') . $this->escapeHtmlAttr($record['id']) ?>" title="<?=$this->transEsc('Edit Library Card')?>"><i class="fa fa-edit"></i> <?=$this->transEsc('Edit')?></a>
+              <a class="delete smallButton" href="<?=$this->url('librarycards-deletecard') ?>?cardID=<?=urlencode($record['id'])?>"><?=$this->transEsc('Delete')?></a>
+            </div>
+          </td>
+        </tr>
+      <? endforeach; ?>
+    </table>
+
+    <div>
+      <a href="<?=$this->url('editLibraryCard') ?>NEW" class="add smallButton" title="<?=$this->transEsc('Add a Library Card')?>"><?=$this->transEsc('Add a Library Card')?></a>
+    </div>
+
+  <? endif; ?>
+</div>
+<div class="<?=$this->layoutClass('sidebar')?>">
+  <?=$this->context($this)->renderInContext("myresearch/menu.phtml", array('active' => 'fines'))?>
+</div>
+<div class="clear"></div>
diff --git a/themes/blueprint/templates/librarycards/selectcard.phtml b/themes/blueprint/templates/librarycards/selectcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..8ebe45b2ac14c21209d6437641374433bed501ae
--- /dev/null
+++ b/themes/blueprint/templates/librarycards/selectcard.phtml
@@ -0,0 +1,24 @@
+<? if ($this->user): ?>
+  <?$cards = $this->user->getLibraryCards(); if ($cards->count() > 1): ?>
+    <form action="<?=$this->url('librarycards-selectcard')?>" method="get">
+      <label for="library_card"><?=$this->transEsc('Library Card')?></label>
+      <select id="library_card" name="cardID" class="jumpMenu">
+        <? foreach ($cards as $card): ?>
+          <?
+            $target = '';
+            $username = $card->cat_username;
+            if (strstr($username, '.')) {
+              list($target, $username) = explode('.', $username, 2);
+            }
+            $display = $this->transEsc($card->card_name ? $card->card_name : $card->cat_username);
+            if ($target) {
+              $display .= ' (' . $this->transEsc("source_$target", null, $target) . ')';
+            }
+          ?>
+          <option value="<?=$this->escapeHtmlAttr($card->id)?>"<?=$card->cat_username == $this->user->cat_username ? ' selected="selected"' : ''?>><?=$display ?></option>
+        <? endforeach; ?>
+      </select>
+      <noscript><input type="submit" class="btn btn-default" value="<?=$this->transEsc("Set")?>" /></noscript>
+    </form>
+  <? endif; ?>
+<? endif; ?>
diff --git a/themes/blueprint/templates/myresearch/cataloglogin.phtml b/themes/blueprint/templates/myresearch/cataloglogin.phtml
index ddd308f2320f84e6fa260cd7831812b6393609c8..f23a1bb1f37615e9fdcb822623a2918b97366c7b 100644
--- a/themes/blueprint/templates/myresearch/cataloglogin.phtml
+++ b/themes/blueprint/templates/myresearch/cataloglogin.phtml
@@ -23,10 +23,18 @@
   <?=$this->flashmessages()?>
   <p><?=$this->transEsc('cat_establish_account')?></p>
   <form method="post" action="">
+    <? if ($this->targets !== null): ?>
+    <label class="displayBlock" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+    <select id="login_target" name="target">
+    <? foreach ($this->targets as $target): ?>
+      <option value="<?=$this->escapeHtmlAttr($target)?>"><?=$this->transEsc("source_$target", null, $target)?></option>
+    <? endforeach; ?>
+    </select>
+    <? endif; ?>
     <label class="displayBlock" for="profile_cat_username"><?=$this->transEsc('Library Catalog Username')?>:</label>
     <input id="profile_cat_username" type="text" name="cat_username" value="" size="25"/>
     <label class="displayBlock" for="profile_cat_password"><?=$this->transEsc('Library Catalog Password')?>:</label>
-    <input id="profile_cat_password" type="text" name="cat_password" value="" size="25"/>
+    <input id="profile_cat_password" type="password" name="cat_password" value="" size="25"/>
     <br/>
     <input type="submit" name="submit" value="<?=$this->transEsc('Save')?>"/>
   </form>
diff --git a/themes/blueprint/templates/myresearch/checkedout.phtml b/themes/blueprint/templates/myresearch/checkedout.phtml
index 2728c44edb4d6d83a64d56919dbcc5ea53657b53..c4396ce151a4437a41005d94d72a216509b34612 100644
--- a/themes/blueprint/templates/myresearch/checkedout.phtml
+++ b/themes/blueprint/templates/myresearch/checkedout.phtml
@@ -11,6 +11,8 @@
   <h3><?=$this->transEsc('Your Checked Out Items')?></h3>
   <?=$this->flashmessages()?>
 
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if (!empty($this->transactions)): ?>
     <? if ($this->renewForm): ?>
     <form name="renewals" action="" method="post" id="renewals">
@@ -23,6 +25,32 @@
       <br />
     <? endif; ?>
 
+    <? if ($paginator): ?>
+      <?=$this->transEsc("Showing")?>
+      <? $start = $paginator->getAbsoluteItemNumber(1);
+         $end = $paginator->getAbsoluteItemNumber($paginator->getItemCountPerPage());
+         $total = $paginator->getTotalItemCount();
+      ?>
+      <strong><?=$this->localizedNumber($start)?></strong> - <strong><?=$this->localizedNumber($end > $total ? $total : $end)?></strong>
+      <?=$this->transEsc('of')?> <strong><?=$this->localizedNumber($total)?></strong>
+    <? endif; ?>
+
+    <? foreach ($hiddenTransactions as $ilsDetails): ?>
+      <? if (isset($this->renewResult[$ilsDetails['item_id']])): ?>
+        <? $renewDetails = $this->renewResult[$ilsDetails['item_id']]; ?>
+        <? $prefix = isset($ilsDetails['title']) ? $ilsDetails['title'] : $ilsDetails['item_id']; ?>
+        <? if (isset($renewDetails['success']) && $renewDetails['success']): ?>
+          <div class="success"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_success')?></div>
+        <? else: ?>
+          <div class="error"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_fail')?><? if (isset($renewDetails['sysMessage'])): ?>: <?=$this->escapeHtml($renewDetails['sysMessage'])?><? endif; ?></div>
+        <? endif; ?>
+      <? endif; ?>
+      <? if (isset($ilsDetails['renewable']) && $ilsDetails['renewable'] && isset($ilsDetails['renew_details'])): ?>
+        <? $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $ilsDetails['renew_details']); ?>
+        <input type="hidden" name="renewAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
+      <? endif; ?>
+    <? endforeach; ?>
+
     <ul class="recordSet">
     <? $i = 0; foreach ($this->transactions as $resource): ?>
       <? $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
@@ -131,6 +159,7 @@
     <? endforeach; ?>
     </ul>
     <? if ($this->renewForm): ?></form><? endif; ?>
+    <?=$paginator ? $this->paginationControl($paginator, 'Sliding', 'Helpers/pagination.phtml') : ''?>
   <? else: ?>
     <?=$this->transEsc('You do not have any items checked out')?>.
   <? endif; ?>
diff --git a/themes/blueprint/templates/myresearch/fines.phtml b/themes/blueprint/templates/myresearch/fines.phtml
index 42d50c89c10776774dd3f719bed4623c51ae6a0b..eaa48a3627187eaed072b894a74dca203d7940d2 100644
--- a/themes/blueprint/templates/myresearch/fines.phtml
+++ b/themes/blueprint/templates/myresearch/fines.phtml
@@ -9,9 +9,14 @@
 ?>
 <div class="<?=$this->layoutClass('mainbody')?>">
   <? if (empty($this->fines)): ?>
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <?=$this->transEsc('You do not have any fines')?>
   <? else: ?>
     <h3><?=$this->transEsc('Your Fines')?></h3>
+
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <table class="datagrid fines" summary="<?=$this->transEsc('Your Fines')?>">
     <tr>
       <th><?=$this->transEsc('Title')?></th>
diff --git a/themes/blueprint/templates/myresearch/holds.phtml b/themes/blueprint/templates/myresearch/holds.phtml
index 315252f88d98869ddede0484d301044fadbc9655..d4f262129f757c835dbe54a0f46832e6a89ee3ab 100644
--- a/themes/blueprint/templates/myresearch/holds.phtml
+++ b/themes/blueprint/templates/myresearch/holds.phtml
@@ -12,6 +12,9 @@
 
   <?=$this->flashmessages()?>
 
+
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if (!empty($this->recordList)): ?>
     <? if ($this->cancelForm): ?>
       <form name="cancelForm" action="" method="post" id="cancelHold">
diff --git a/themes/blueprint/templates/myresearch/illrequests.phtml b/themes/blueprint/templates/myresearch/illrequests.phtml
index 54bca16280f385ced66964365de5db34539fa82c..cea81d9ff78952a19235e2d8f2b8550d445edcdc 100644
--- a/themes/blueprint/templates/myresearch/illrequests.phtml
+++ b/themes/blueprint/templates/myresearch/illrequests.phtml
@@ -12,6 +12,8 @@
 
   <?=$this->flashmessages()?>
 
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if (!empty($this->recordList)): ?>
     <? if ($this->cancelForm): ?>
       <form name="cancelForm" action="" method="post" id="cancelILLRequest">
@@ -83,8 +85,8 @@
             <? if (isset($ilsDetails['institution_name']) && !empty($ilsDetails['institution_name'])): ?>
               <strong><?=$this->transEsc('institution_' . $ilsDetails['institution_name'], array(), $ilsDetails['institution_name']) ?></strong>
               <br />
-            <? endif; ?> 
-                
+            <? endif; ?>
+
             <? /* Depending on the ILS driver, the "location" value may be a string or an ID; figure out the best
                value to display... */ ?>
             <? $pickupDisplay = ''; ?>
diff --git a/themes/blueprint/templates/myresearch/menu.phtml b/themes/blueprint/templates/myresearch/menu.phtml
index abe0d6d472ce545e292765cfb75185254593d784..779aa36fc9d1ab24a328feed6cd1c37dda4e18d8 100644
--- a/themes/blueprint/templates/myresearch/menu.phtml
+++ b/themes/blueprint/templates/myresearch/menu.phtml
@@ -23,6 +23,9 @@
       <? if ($this->ils()->checkCapability('getMyProfile')): ?>
         <li<?=$this->active == 'profile' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-profile')?>"><?=$this->transEsc('Profile')?></a></li>
       <? endif; ?>
+      <? $user = $this->auth()->isLoggedIn(); if ($user && $user->libraryCardsEnabled()): ?>
+        <li<?=$this->active == 'librarycards' ? ' class="active"' : ''?>><a href="<?=$this->url('librarycards-home')?>"><?=$this->transEsc('Library Cards')?></a></li>
+      <? endif; ?>
     <? endif; ?>
     <li<?=$this->active == 'history' ? ' class="active"' : ''?>><a href="<?=$this->url('search-history')?>?require_login"><?=$this->transEsc('history_saved_searches')?></a></li>
   </ul>
@@ -47,7 +50,7 @@
       <? endforeach; ?>
       <li>
         <a href="<?=$this->url('editList', array('id'=>'NEW'))?>" title="<?=$this->transEsc('Create a List') ?>">
-          <?=$this->transEsc('Create a List') ?> 
+          <?=$this->transEsc('Create a List') ?>
         </a>
         <img src="<?=$this->imagelink('silk/add.png')?>" style="margin-left:2px;vertical-align:text-bottom"/>
       </li>
diff --git a/themes/blueprint/templates/myresearch/newpassword.phtml b/themes/blueprint/templates/myresearch/newpassword.phtml
index 0a2c1f639046f9930ffde5d1d4b81ee79a80eb2a..6271e39126e8152fc52f02968830534f0cbce06c 100644
--- a/themes/blueprint/templates/myresearch/newpassword.phtml
+++ b/themes/blueprint/templates/myresearch/newpassword.phtml
@@ -9,6 +9,7 @@
 <div class="<?=$this->layoutClass('mainbody')?>">
   <h2><?=$this->transEsc('Create New Password') ?></h2>
   <?=$this->flashmessages() ?>
+
   <? if (!$this->auth()->getManager()->supportsPasswordChange($this->auth_method)): ?>
     <div class="error"><?=$this->transEsc('recovery_new_disabled') ?></div>
   <? elseif (!isset($this->hash)): ?>
diff --git a/themes/blueprint/templates/myresearch/profile.phtml b/themes/blueprint/templates/myresearch/profile.phtml
index 63a413dcc3350b08f211aa261e7d7b630fdf1c4d..aaeba9f455bfa98226e7ce799c67153be9f1146f 100644
--- a/themes/blueprint/templates/myresearch/profile.phtml
+++ b/themes/blueprint/templates/myresearch/profile.phtml
@@ -16,6 +16,9 @@
 <div class="<?=$this->layoutClass('mainbody')?>">
   <h3><?=$this->transEsc('Your Profile')?></h3>
   <?=$this->flashmessages();?>
+
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if ($showHomeLibForm): ?><form method="post" action="" id="profile_form"><? endif; ?>
   <?
       echo $this->renderArray(
diff --git a/themes/blueprint/templates/myresearch/storageretrievalrequests.phtml b/themes/blueprint/templates/myresearch/storageretrievalrequests.phtml
index dc092f7373ed3177cf1922c38175b65fbfeb28b8..5b67e7e35739eaaa11b789160eb84305f21be9d9 100644
--- a/themes/blueprint/templates/myresearch/storageretrievalrequests.phtml
+++ b/themes/blueprint/templates/myresearch/storageretrievalrequests.phtml
@@ -12,6 +12,8 @@
 
   <?=$this->flashmessages()?>
 
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if (!empty($this->recordList)): ?>
     <? if ($this->cancelForm): ?>
       <form name="cancelForm" action="" method="post" id="cancelStorageRetrievalRequest">
diff --git a/themes/blueprint/templates/record/illrequest.phtml b/themes/blueprint/templates/record/illrequest.phtml
index fe0b89bd33ab47b7acf0feeff1f8987f1cc77471..877b2e28d032f5013f241f3eb2844c1b1cb19162 100644
--- a/themes/blueprint/templates/record/illrequest.phtml
+++ b/themes/blueprint/templates/record/illrequest.phtml
@@ -29,26 +29,30 @@
         </select>
       </div>
     <? endif; ?>
-    
-    <? if (in_array("pickUpLibrary", $this->extraFields)): ?>
+
+    <? if (in_array("pickUpLibrary", $this->extraFields) && !empty($this->pickupLibraries)): ?>
       <div>
-      <? if (count($this->pickupLibraries) > 1): ?>
-        <?
-          if (isset($this->gatheredDetails['pickUpLibrary']) && $this->gatheredDetails['pickUpLibrary'] !== "") {
-              $selected = $this->gatheredDetails['pickUpLibrary'];
-          } else {
-              $selected = false;
-          }
-        ?>
         <strong><?=$this->transEsc("ill_request_pick_up_library")?>:</strong><br/>
-        <select id="pickupLibrary" name="gatheredDetails[pickUpLibrary]">
-        <? foreach ($this->pickupLibraries as $lib): ?>
-          <option value="<?=$this->escapeHtmlAttr($lib['id'])?>"<?=(($selected === false && isset($lib['isDefault']) && $lib['isDefault']) || $selected === $lib['id']) ? ' selected="selected"' : ''?>>
-            <?=$this->transEsc('library_' . $lib['name'], null, $lib['name'])?>
-          </option>
-        <? endforeach; ?>
-        </select>
-      <? endif; ?>
+        <? if (count($this->pickupLibraries) > 1): ?>
+          <?
+            if (isset($this->gatheredDetails['pickUpLibrary']) && $this->gatheredDetails['pickUpLibrary'] !== "") {
+                $selected = $this->gatheredDetails['pickUpLibrary'];
+            } else {
+                $selected = false;
+            }
+          ?>
+          <select id="pickupLibrary" name="gatheredDetails[pickUpLibrary]">
+          <? foreach ($this->pickupLibraries as $lib): ?>
+            <option value="<?=$this->escapeHtmlAttr($lib['id'])?>"<?=(($selected === false && isset($lib['isDefault']) && $lib['isDefault']) || $selected === $lib['id']) ? ' selected="selected"' : ''?>>
+              <?=$this->transEsc('library_' . $lib['name'], null, $lib['name'])?>
+            </option>
+          <? endforeach; ?>
+          </select>
+        <? else: ?>
+          <? $lib = $this->pickupLibraries[0]; ?>
+          <input type="text" size="40" readonly="readonly" value="<?=$this->escapeHtmlAttr($this->translate('library_' . $lib['name'], null, $lib['name']))?>" />
+          <input type="hidden" id="pickupLibrary" name="gatheredDetails[pickUpLibrary]" value="<?=$this->escapeHtmlAttr($lib['id'])?>" />
+        <? endif; ?>
       </div>
     <? endif; ?>
 
@@ -64,7 +68,7 @@
         </select>
       </div>
     <? endif; ?>
-    
+
     <? if (in_array("pickUpLocation", $this->extraFields)): ?>
       <div>
       <? if (count($this->pickupLocations) > 1): ?>
@@ -88,7 +92,7 @@
       <? endif; ?>
       </div>
     <? endif; ?>
-    
+
     <? if (in_array("requiredByDate", $this->extraFields)): ?>
       <div>
       <strong><?=$this->transEsc("hold_required_by")?>: </strong>
diff --git a/themes/blueprint/templates/record/sms.phtml b/themes/blueprint/templates/record/sms.phtml
index e40b9b95951011845ee8d3a4251fdf32efa4f8a0..5a5aeb5ce5c00c4da3c2cef11186d9946a62bafc 100644
--- a/themes/blueprint/templates/record/sms.phtml
+++ b/themes/blueprint/templates/record/sms.phtml
@@ -1,26 +1,22 @@
 <?
-    // Set page title.
-    $this->headTitle($this->translate('Text this'));
+  // Set page title.
+  $this->headTitle($this->translate('Text this'));
+  echo $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'libphonenumber.js', 'SET');
 
-    // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = $this->getLastSearchLink($this->transEsc('Search'), '', '<span>&gt;</span>') .
-        $this->recordLink()->getBreadcrumb($this->driver) . '<span>&gt;</span><em>' . $this->transEsc('Text this') . '</em>';
+  // Set up breadcrumbs:
+  $this->layout()->breadcrumbs = $this->getLastSearchLink($this->transEsc('Search'), '', '<span>&gt;</span>') .
+    $this->recordLink()->getBreadcrumb($this->driver) . '<span>&gt;</span><em>' . $this->transEsc('Text this') . '</em>';
 ?>
 <?=$this->flashmessages()?>
 <form method="post" action="" name="smsRecord">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
   <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
   <label class="span-2" for="sms_to"><?=$this->transEsc('Number')?>:</label>
-  <input id="sms_to" type="text" name="to" value="<?=isset($this->to) ? $this->to : $this->transEsc('sms_phone_number')?>"
+  <input id="sms_to" type="tel" name="to" value="<?=isset($this->to) ? $this->to : $this->transEsc('sms_phone_number')?>"
         onfocus="if (this.value=='<?=$this->transEsc('sms_phone_number')?>') this.value=''"
         onblur="if (this.value=='') this.value='<?=$this->transEsc('sms_phone_number')?>'"
-        class="<?
-            $options = array('required'=>'This field is required');
-            if ($this->validation == 'US') {
-                $options['phoneUS'] = 'Invalid phone number.';
-            }
-            echo $this->jqueryValidation($options);
-        ?>"/>
+        class="<?=$this->jqueryValidation(['required'=>'This field is required'])?>"/>
+  <div class="phone-error"></div>
   <br/>
   <? if (is_array($this->carriers) && count($this->carriers) > 1): ?>
     <label class="span-2" for="sms_provider"><?=$this->transEsc('Provider')?>:</label>
@@ -36,5 +32,5 @@
     <input type="hidden" name="provider" value="<?=isset($keys[0]) ? $keys[0] : ''?>" />
   <? endif; ?>
   <?=$this->recaptcha()->html($this->useRecaptcha) ?>
-  <input class="button" type="submit" name="submit" value="<?=$this->transEsc('Send')?>"/>
+  <input class="button" type="submit" name="submit" value="<?=$this->transEsc('Send')?>"<? if(isset($this->validation) && !empty($this->validation)):?> onClick="return phoneNumberFormHandler('sms_to', '<?=$this->validation ?>')"<? endif; ?>/>
 </form>
diff --git a/themes/blueprint/templates/record/taglist.phtml b/themes/blueprint/templates/record/taglist.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..20c017a35e479134bbf58c7963403c9d3c151956
--- /dev/null
+++ b/themes/blueprint/templates/record/taglist.phtml
@@ -0,0 +1,21 @@
+<div id="tagList"<?=$loggedin ? ' class="loggedin"' : ''?>>
+  <? if (count($tagList) > 0): ?>
+    <? foreach ($tagList as $tag): ?>
+      <? $is_me = isset($tag['is_me']) && !is_null($tag['is_me']) ? $tag['is_me'] : false; ?>
+      <div class="record-tag<?=$is_me ? ' selected' : ''?>">
+        <a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag['tag'])?>"><?=$this->escapeHtml($tag['tag'])?></a>
+        <? if($loggedin): ?>
+          <form method="POST" action="<?=$this->recordLink()->getActionUrl($this->driver, $is_me ? 'DeleteTag' : 'AddTag') ?>" class="tag-form">
+            <input type="hidden" name="tag" value="<?=$this->escapeHtmlAttr($tag['tag'])?>"/>
+            <button type="submit" class="badge <?=$is_me ? 'delete' : 'add' ?> right" onClick="ajaxTagUpdate('<?=$this->escapeHtmlAttr($tag['tag'])?>', <?=$is_me ? 'true' : 'false' ?>);return false;"><?=$this->escapeHtml($tag['cnt']) ?>
+            </button>
+          </form>
+        <? else: ?>
+          <span class="badge"><?=$this->escapeHtml($tag['cnt'])?></span>
+        <? endif; ?>
+      </div>
+    <? endforeach; ?>
+  <? else: ?>
+    <?=$this->transEsc('No Tags')?>, <?=$this->transEsc('Be the first to tag this record')?>!
+  <? endif; ?>
+</div>
\ No newline at end of file
diff --git a/themes/blueprint/templates/record/view.phtml b/themes/blueprint/templates/record/view.phtml
index fdb2529382a24c2b01dfd28186ceae806f749d10..94e76fa86768ac7bc9b7afac0e211096b6e1b13b 100644
--- a/themes/blueprint/templates/record/view.phtml
+++ b/themes/blueprint/templates/record/view.phtml
@@ -17,6 +17,7 @@
 
   <div class="record recordId source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" id="record">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" class="hiddenId" id="record_id" />
+    <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" class="hiddenSource" />
     <?=$this->flashmessages()?>
     <? if (isset($this->scrollData) && ($this->scrollData['previousRecord'] || $this->scrollData['nextRecord'])): ?>
       <div class="resultscroller">
diff --git a/themes/blueprint/templates/search/results.phtml b/themes/blueprint/templates/search/results.phtml
index 47c41a4482726c04cd0cfeaff2628ecde3b27463..ba2699d2a709473ed496611acb0d3d97126d48a0 100644
--- a/themes/blueprint/templates/search/results.phtml
+++ b/themes/blueprint/templates/search/results.phtml
@@ -110,11 +110,13 @@
       <strong><?=$this->transEsc('Search Tools')?>:</strong>
       <a href="<?=$this->results->getUrlQuery()->setViewParam('rss')?>" class="feed"><?=$this->transEsc('Get RSS Feed')?></a>
       <a href="<?=$this->url('search-email')?>" class="mailSearch mail" id="mailSearch<?=$this->escapeHtmlAttr($this->results->getSearchId())?>" title="<?=$this->transEsc('Email this Search')?>"><?=$this->transEsc('Email this Search')?></a>
-      <? if (is_numeric($this->results->getSearchId())): ?>
-        <? if ($this->results->isSavedSearch()): ?>
-          <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>" class="delete"><?=$this->transEsc('save_search_remove')?></a>
-        <? else: ?>
-          <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>" class="add"><?=$this->transEsc('save_search')?></a>
+      <? if (($account = $this->auth()->getManager()) && $account->loginEnabled()): // hide save option if login disabled ?>
+        <? if (is_numeric($this->results->getSearchId())): ?>
+          <? if ($this->results->isSavedSearch()): ?>
+            <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>" class="delete"><?=$this->transEsc('save_search_remove')?></a>
+          <? else: ?>
+            <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>" class="add"><?=$this->transEsc('save_search')?></a>
+          <? endif; ?>
         <? endif; ?>
       <? endif; ?>
     </div>
diff --git a/themes/bootprint3/css/compiled.css b/themes/bootprint3/css/compiled.css
index 2ecedcd630bd6996fbd6593d06a6c917037cd3e1..c0eb1fbe6a6907bfa5ba2ae2ba549793b945d2db 100644
--- a/themes/bootprint3/css/compiled.css
+++ b/themes/bootprint3/css/compiled.css
@@ -1 +1 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display: block}audio,canvas,progress,video{display: inline-block;vertical-align: baseline}audio:not([controls]){display: none;height: 0}[hidden],template{display: none}a{background-color: transparent}a:active,a:hover{outline: 0}abbr[title]{border-bottom: 1px dotted}b,strong{font-weight: bold}dfn{font-style: italic}h1{font-size: 2em;margin: .67em 0}mark{background: #ff0;color: #000}small{font-size: 80%}sub,sup{font-size: 75%;line-height: 0;position: relative;vertical-align: baseline}sup{top: -0.5em}sub{bottom: -0.25em}img{border: 0}svg:not(:root){overflow: hidden}figure{margin: 1em 40px}hr{-moz-box-sizing: content-box;box-sizing: content-box;height: 0}pre{overflow: auto}code,kbd,pre,samp{font-family: monospace, monospace;font-size: 1em}button,input,optgroup,select,textarea{color: inherit;font: inherit;margin: 0}button{overflow: visible}button,select{text-transform: none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance: button;cursor: pointer}button[disabled],html input[disabled]{cursor: default}button::-moz-focus-inner,input::-moz-focus-inner{border: 0;padding: 0}input{line-height: normal}input[type="checkbox"],input[type="radio"]{box-sizing: border-box;padding: 0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height: auto}input[type="search"]{-webkit-appearance: textfield;-moz-box-sizing: content-box;-webkit-box-sizing: content-box;box-sizing: content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance: none}fieldset{border: 1px solid #c0c0c0;margin: 0 2px;padding: .35em .625em .75em}legend{border: 0;padding: 0}textarea{overflow: auto}optgroup{font-weight: bold}table{border-collapse: collapse;border-spacing: 0}td,th{padding: 0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background: transparent !important;color: #000 !important;box-shadow: none !important;text-shadow: none !important}a,a:visited{text-decoration: underline}a[href]:after{content: " (" attr(href) ")"}abbr[title]:after{content: " (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content: ""}pre,blockquote{border: 1px solid #999;page-break-inside: avoid}thead{display: table-header-group}tr,img{page-break-inside: avoid}img{max-width: 100% !important}p,h2,h3{orphans: 3;widows: 3}h2,h3{page-break-after: avoid}select{background: #fff !important}.navbar{display: none}.btn > .caret,.dropup > .btn > .caret{border-top-color: #000 !important}.label{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 #ddd !important}}@font-face{font-family: 'Glyphicons Halflings';src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot');src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position: relative;top: 1px;display: inline-block;font-family: 'Glyphicons Halflings';font-style: normal;font-weight: normal;line-height: 1;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale}.glyphicon-asterisk:before{content: "\2a"}.glyphicon-plus:before{content: "\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content: "\20ac"}.glyphicon-minus:before{content: "\2212"}.glyphicon-cloud:before{content: "\2601"}.glyphicon-envelope:before{content: "\2709"}.glyphicon-pencil:before{content: "\270f"}.glyphicon-glass:before{content: "\e001"}.glyphicon-music:before{content: "\e002"}.glyphicon-search:before{content: "\e003"}.glyphicon-heart:before{content: "\e005"}.glyphicon-star:before{content: "\e006"}.glyphicon-star-empty:before{content: "\e007"}.glyphicon-user:before{content: "\e008"}.glyphicon-film:before{content: "\e009"}.glyphicon-th-large:before{content: "\e010"}.glyphicon-th:before{content: "\e011"}.glyphicon-th-list:before{content: "\e012"}.glyphicon-ok:before{content: "\e013"}.glyphicon-remove:before{content: "\e014"}.glyphicon-zoom-in:before{content: "\e015"}.glyphicon-zoom-out:before{content: "\e016"}.glyphicon-off:before{content: "\e017"}.glyphicon-signal:before{content: "\e018"}.glyphicon-cog:before{content: "\e019"}.glyphicon-trash:before{content: "\e020"}.glyphicon-home:before{content: "\e021"}.glyphicon-file:before{content: "\e022"}.glyphicon-time:before{content: "\e023"}.glyphicon-road:before{content: "\e024"}.glyphicon-download-alt:before{content: "\e025"}.glyphicon-download:before{content: "\e026"}.glyphicon-upload:before{content: "\e027"}.glyphicon-inbox:before{content: "\e028"}.glyphicon-play-circle:before{content: "\e029"}.glyphicon-repeat:before{content: "\e030"}.glyphicon-refresh:before{content: "\e031"}.glyphicon-list-alt:before{content: "\e032"}.glyphicon-lock:before{content: "\e033"}.glyphicon-flag:before{content: "\e034"}.glyphicon-headphones:before{content: "\e035"}.glyphicon-volume-off:before{content: "\e036"}.glyphicon-volume-down:before{content: "\e037"}.glyphicon-volume-up:before{content: "\e038"}.glyphicon-qrcode:before{content: "\e039"}.glyphicon-barcode:before{content: "\e040"}.glyphicon-tag:before{content: "\e041"}.glyphicon-tags:before{content: "\e042"}.glyphicon-book:before{content: "\e043"}.glyphicon-bookmark:before{content: "\e044"}.glyphicon-print:before{content: "\e045"}.glyphicon-camera:before{content: "\e046"}.glyphicon-font:before{content: "\e047"}.glyphicon-bold:before{content: "\e048"}.glyphicon-italic:before{content: "\e049"}.glyphicon-text-height:before{content: "\e050"}.glyphicon-text-width:before{content: "\e051"}.glyphicon-align-left:before{content: "\e052"}.glyphicon-align-center:before{content: "\e053"}.glyphicon-align-right:before{content: "\e054"}.glyphicon-align-justify:before{content: "\e055"}.glyphicon-list:before{content: "\e056"}.glyphicon-indent-left:before{content: "\e057"}.glyphicon-indent-right:before{content: "\e058"}.glyphicon-facetime-video:before{content: "\e059"}.glyphicon-picture:before{content: "\e060"}.glyphicon-map-marker:before{content: "\e062"}.glyphicon-adjust:before{content: "\e063"}.glyphicon-tint:before{content: "\e064"}.glyphicon-edit:before{content: "\e065"}.glyphicon-share:before{content: "\e066"}.glyphicon-check:before{content: "\e067"}.glyphicon-move:before{content: "\e068"}.glyphicon-step-backward:before{content: "\e069"}.glyphicon-fast-backward:before{content: "\e070"}.glyphicon-backward:before{content: "\e071"}.glyphicon-play:before{content: "\e072"}.glyphicon-pause:before{content: "\e073"}.glyphicon-stop:before{content: "\e074"}.glyphicon-forward:before{content: "\e075"}.glyphicon-fast-forward:before{content: "\e076"}.glyphicon-step-forward:before{content: "\e077"}.glyphicon-eject:before{content: "\e078"}.glyphicon-chevron-left:before{content: "\e079"}.glyphicon-chevron-right:before{content: "\e080"}.glyphicon-plus-sign:before{content: "\e081"}.glyphicon-minus-sign:before{content: "\e082"}.glyphicon-remove-sign:before{content: "\e083"}.glyphicon-ok-sign:before{content: "\e084"}.glyphicon-question-sign:before{content: "\e085"}.glyphicon-info-sign:before{content: "\e086"}.glyphicon-screenshot:before{content: "\e087"}.glyphicon-remove-circle:before{content: "\e088"}.glyphicon-ok-circle:before{content: "\e089"}.glyphicon-ban-circle:before{content: "\e090"}.glyphicon-arrow-left:before{content: "\e091"}.glyphicon-arrow-right:before{content: "\e092"}.glyphicon-arrow-up:before{content: "\e093"}.glyphicon-arrow-down:before{content: "\e094"}.glyphicon-share-alt:before{content: "\e095"}.glyphicon-resize-full:before{content: "\e096"}.glyphicon-resize-small:before{content: "\e097"}.glyphicon-exclamation-sign:before{content: "\e101"}.glyphicon-gift:before{content: "\e102"}.glyphicon-leaf:before{content: "\e103"}.glyphicon-fire:before{content: "\e104"}.glyphicon-eye-open:before{content: "\e105"}.glyphicon-eye-close:before{content: "\e106"}.glyphicon-warning-sign:before{content: "\e107"}.glyphicon-plane:before{content: "\e108"}.glyphicon-calendar:before{content: "\e109"}.glyphicon-random:before{content: "\e110"}.glyphicon-comment:before{content: "\e111"}.glyphicon-magnet:before{content: "\e112"}.glyphicon-chevron-up:before{content: "\e113"}.glyphicon-chevron-down:before{content: "\e114"}.glyphicon-retweet:before{content: "\e115"}.glyphicon-shopping-cart:before{content: "\e116"}.glyphicon-folder-close:before{content: "\e117"}.glyphicon-folder-open:before{content: "\e118"}.glyphicon-resize-vertical:before{content: "\e119"}.glyphicon-resize-horizontal:before{content: "\e120"}.glyphicon-hdd:before{content: "\e121"}.glyphicon-bullhorn:before{content: "\e122"}.glyphicon-bell:before{content: "\e123"}.glyphicon-certificate:before{content: "\e124"}.glyphicon-thumbs-up:before{content: "\e125"}.glyphicon-thumbs-down:before{content: "\e126"}.glyphicon-hand-right:before{content: "\e127"}.glyphicon-hand-left:before{content: "\e128"}.glyphicon-hand-up:before{content: "\e129"}.glyphicon-hand-down:before{content: "\e130"}.glyphicon-circle-arrow-right:before{content: "\e131"}.glyphicon-circle-arrow-left:before{content: "\e132"}.glyphicon-circle-arrow-up:before{content: "\e133"}.glyphicon-circle-arrow-down:before{content: "\e134"}.glyphicon-globe:before{content: "\e135"}.glyphicon-wrench:before{content: "\e136"}.glyphicon-tasks:before{content: "\e137"}.glyphicon-filter:before{content: "\e138"}.glyphicon-briefcase:before{content: "\e139"}.glyphicon-fullscreen:before{content: "\e140"}.glyphicon-dashboard:before{content: "\e141"}.glyphicon-paperclip:before{content: "\e142"}.glyphicon-heart-empty:before{content: "\e143"}.glyphicon-link:before{content: "\e144"}.glyphicon-phone:before{content: "\e145"}.glyphicon-pushpin:before{content: "\e146"}.glyphicon-usd:before{content: "\e148"}.glyphicon-gbp:before{content: "\e149"}.glyphicon-sort:before{content: "\e150"}.glyphicon-sort-by-alphabet:before{content: "\e151"}.glyphicon-sort-by-alphabet-alt:before{content: "\e152"}.glyphicon-sort-by-order:before{content: "\e153"}.glyphicon-sort-by-order-alt:before{content: "\e154"}.glyphicon-sort-by-attributes:before{content: "\e155"}.glyphicon-sort-by-attributes-alt:before{content: "\e156"}.glyphicon-unchecked:before{content: "\e157"}.glyphicon-expand:before{content: "\e158"}.glyphicon-collapse-down:before{content: "\e159"}.glyphicon-collapse-up:before{content: "\e160"}.glyphicon-log-in:before{content: "\e161"}.glyphicon-flash:before{content: "\e162"}.glyphicon-log-out:before{content: "\e163"}.glyphicon-new-window:before{content: "\e164"}.glyphicon-record:before{content: "\e165"}.glyphicon-save:before{content: "\e166"}.glyphicon-open:before{content: "\e167"}.glyphicon-saved:before{content: "\e168"}.glyphicon-import:before{content: "\e169"}.glyphicon-export:before{content: "\e170"}.glyphicon-send:before{content: "\e171"}.glyphicon-floppy-disk:before{content: "\e172"}.glyphicon-floppy-saved:before{content: "\e173"}.glyphicon-floppy-remove:before{content: "\e174"}.glyphicon-floppy-save:before{content: "\e175"}.glyphicon-floppy-open:before{content: "\e176"}.glyphicon-credit-card:before{content: "\e177"}.glyphicon-transfer:before{content: "\e178"}.glyphicon-cutlery:before{content: "\e179"}.glyphicon-header:before{content: "\e180"}.glyphicon-compressed:before{content: "\e181"}.glyphicon-earphone:before{content: "\e182"}.glyphicon-phone-alt:before{content: "\e183"}.glyphicon-tower:before{content: "\e184"}.glyphicon-stats:before{content: "\e185"}.glyphicon-sd-video:before{content: "\e186"}.glyphicon-hd-video:before{content: "\e187"}.glyphicon-subtitles:before{content: "\e188"}.glyphicon-sound-stereo:before{content: "\e189"}.glyphicon-sound-dolby:before{content: "\e190"}.glyphicon-sound-5-1:before{content: "\e191"}.glyphicon-sound-6-1:before{content: "\e192"}.glyphicon-sound-7-1:before{content: "\e193"}.glyphicon-copyright-mark:before{content: "\e194"}.glyphicon-registration-mark:before{content: "\e195"}.glyphicon-cloud-download:before{content: "\e197"}.glyphicon-cloud-upload:before{content: "\e198"}.glyphicon-tree-conifer:before{content: "\e199"}.glyphicon-tree-deciduous:before{content: "\e200"}*{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}*:before,*:after{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}html{font-size: 10px;-webkit-tap-highlight-color: rgba(0,0,0,0)}body{font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 13px;line-height: 1.42857143;color: #333;background-color: #fff}input,button,select,textarea{font-family: inherit;font-size: inherit;line-height: inherit}a{color: #12538b;text-decoration: none}a:hover,a:focus{color: #092b47;text-decoration: underline}a:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}figure{margin: 0}img{vertical-align: middle}.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img{display: block;max-width: 100%;height: auto}.img-rounded{border-radius: 5px}.img-thumbnail{padding: 4px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 3px;-webkit-transition: all .2s ease-in-out;-o-transition: all .2s ease-in-out;transition: all .2s ease-in-out;display: inline-block;max-width: 100%;height: auto}.img-circle{border-radius: 50%}hr{margin-top: 18px;margin-bottom: 18px;border: 0;border-top: 1px solid #eee}.sr-only{position: absolute;width: 1px;height: 1px;margin: -1px;padding: 0;overflow: hidden;clip: rect(0, 0, 0, 0);border: 0}.sr-only-focusable:active,.sr-only-focusable:focus{position: static;width: auto;height: auto;margin: 0;overflow: visible;clip: auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family: inherit;font-weight: 500;line-height: 1.1;color: inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight: normal;line-height: 1;color: #777}h1,.h1,h2,.h2,h3,.h3{margin-top: 18px;margin-bottom: 9px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size: 65%}h4,.h4,h5,.h5,h6,.h6{margin-top: 9px;margin-bottom: 9px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size: 75%}h1,.h1{font-size: 33px}h2,.h2{font-size: 27px}h3,.h3{font-size: 23px}h4,.h4{font-size: 17px}h5,.h5{font-size: 13px}h6,.h6{font-size: 12px}p{margin: 0 0 9px}.lead{margin-bottom: 18px;font-size: 14px;font-weight: 300;line-height: 1.4}@media (min-width: 768px){.lead{font-size: 19.5px}}small,.small{font-size: 92%}mark,.mark{background-color: #fcf8e3;padding: .2em}.text-left{text-align: left}.text-right{text-align: right}.text-center{text-align: center}.text-justify{text-align: justify}.text-nowrap{white-space: nowrap}.text-lowercase{text-transform: lowercase}.text-uppercase{text-transform: uppercase}.text-capitalize{text-transform: capitalize}.text-muted{color: #777}.text-primary{color: #619144}a.text-primary:hover{color: #4a6e34}.text-success{color: #3c763d}a.text-success:hover{color: #2b542c}.text-info{color: #31708f}a.text-info:hover{color: #245269}.text-warning{color: #8a6d3b}a.text-warning:hover{color: #66512c}.text-danger{color: #a94442}a.text-danger:hover{color: #843534}.bg-primary{color: #fff;background-color: #619144}a.bg-primary:hover{background-color: #4a6e34}.bg-success{background-color: #dff0d8}a.bg-success:hover{background-color: #c1e2b3}.bg-info{background-color: #d9edf7}a.bg-info:hover{background-color: #afd9ee}.bg-warning{background-color: #fcf8e3}a.bg-warning:hover{background-color: #f7ecb5}.bg-danger{background-color: #f2dede}a.bg-danger:hover{background-color: #e4b9b9}.page-header{padding-bottom: 8px;margin: 36px 0 18px;border-bottom: 1px solid #eee}ul,ol{margin-top: 0;margin-bottom: 9px}ul ul,ol ul,ul ol,ol ol{margin-bottom: 0}.list-unstyled{padding-left: 0;list-style: none}.list-inline{padding-left: 0;list-style: none;margin-left: -5px}.list-inline > li{display: inline-block;padding-left: 5px;padding-right: 5px}dl{margin-top: 0;margin-bottom: 18px}dt,dd{line-height: 1.42857143}dt{font-weight: bold}dd{margin-left: 0}@media (min-width: 768px){.dl-horizontal dt{float: left;width: 160px;clear: left;text-align: right;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.dl-horizontal dd{margin-left: 180px}}abbr[title],abbr[data-original-title]{cursor: help;border-bottom: 1px dotted #777}.initialism{font-size: 90%;text-transform: uppercase}blockquote{padding: 9px 18px;margin: 0 0 18px;font-size: 16.25px;border-left: 5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom: 0}blockquote footer,blockquote small,blockquote .small{display: block;font-size: 80%;line-height: 1.42857143;color: #777}blockquote footer:before,blockquote small:before,blockquote .small:before{content: '\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right: 15px;padding-left: 0;border-right: 5px solid #eee;border-left: 0;text-align: right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content: ''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content: '\00A0 \2014'}address{margin-bottom: 18px;font-style: normal;line-height: 1.42857143}code,kbd,pre,samp{font-family: Menlo, Monaco, Consolas, "Courier New", monospace}code{padding: 2px 4px;font-size: 90%;color: #c7254e;background-color: #f9f2f4;border-radius: 3px}kbd{padding: 2px 4px;font-size: 90%;color: #fff;background-color: #333;border-radius: 2px;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding: 0;font-size: 100%;font-weight: bold;box-shadow: none}pre{display: block;padding: 8.5px;margin: 0 0 9px;font-size: 12px;line-height: 1.42857143;word-break: break-all;word-wrap: break-word;color: #333;background-color: #f5f5f5;border: 1px solid #ccc;border-radius: 3px}pre code{padding: 0;font-size: inherit;color: inherit;white-space: pre-wrap;background-color: transparent;border-radius: 0}.pre-scrollable{max-height: 340px;overflow-y: scroll}.container{margin-right: auto;margin-left: auto;padding-left: 7px;padding-right: 7px}@media (min-width: 768px){.container{width: 734px}}@media (min-width: 992px){.container{width: 952px}}@media (min-width: 1200px){.container{width: 952px}}.container-fluid{margin-right: auto;margin-left: auto;padding-left: 7px;padding-right: 7px}.row{margin-left: -7px;margin-right: -7px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position: relative;min-height: 1px;padding-left: 7px;padding-right: 7px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float: left}.col-xs-12{width: 100%}.col-xs-11{width: 91.66666667%}.col-xs-10{width: 83.33333333%}.col-xs-9{width: 75%}.col-xs-8{width: 66.66666667%}.col-xs-7{width: 58.33333333%}.col-xs-6{width: 50%}.col-xs-5{width: 41.66666667%}.col-xs-4{width: 33.33333333%}.col-xs-3{width: 25%}.col-xs-2{width: 16.66666667%}.col-xs-1{width: 8.33333333%}.col-xs-pull-12{right: 100%}.col-xs-pull-11{right: 91.66666667%}.col-xs-pull-10{right: 83.33333333%}.col-xs-pull-9{right: 75%}.col-xs-pull-8{right: 66.66666667%}.col-xs-pull-7{right: 58.33333333%}.col-xs-pull-6{right: 50%}.col-xs-pull-5{right: 41.66666667%}.col-xs-pull-4{right: 33.33333333%}.col-xs-pull-3{right: 25%}.col-xs-pull-2{right: 16.66666667%}.col-xs-pull-1{right: 8.33333333%}.col-xs-pull-0{right: auto}.col-xs-push-12{left: 100%}.col-xs-push-11{left: 91.66666667%}.col-xs-push-10{left: 83.33333333%}.col-xs-push-9{left: 75%}.col-xs-push-8{left: 66.66666667%}.col-xs-push-7{left: 58.33333333%}.col-xs-push-6{left: 50%}.col-xs-push-5{left: 41.66666667%}.col-xs-push-4{left: 33.33333333%}.col-xs-push-3{left: 25%}.col-xs-push-2{left: 16.66666667%}.col-xs-push-1{left: 8.33333333%}.col-xs-push-0{left: auto}.col-xs-offset-12{margin-left: 100%}.col-xs-offset-11{margin-left: 91.66666667%}.col-xs-offset-10{margin-left: 83.33333333%}.col-xs-offset-9{margin-left: 75%}.col-xs-offset-8{margin-left: 66.66666667%}.col-xs-offset-7{margin-left: 58.33333333%}.col-xs-offset-6{margin-left: 50%}.col-xs-offset-5{margin-left: 41.66666667%}.col-xs-offset-4{margin-left: 33.33333333%}.col-xs-offset-3{margin-left: 25%}.col-xs-offset-2{margin-left: 16.66666667%}.col-xs-offset-1{margin-left: 8.33333333%}.col-xs-offset-0{margin-left: 0%}@media (min-width: 768px){.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{float: left}.col-sm-12{width: 100%}.col-sm-11{width: 91.66666667%}.col-sm-10{width: 83.33333333%}.col-sm-9{width: 75%}.col-sm-8{width: 66.66666667%}.col-sm-7{width: 58.33333333%}.col-sm-6{width: 50%}.col-sm-5{width: 41.66666667%}.col-sm-4{width: 33.33333333%}.col-sm-3{width: 25%}.col-sm-2{width: 16.66666667%}.col-sm-1{width: 8.33333333%}.col-sm-pull-12{right: 100%}.col-sm-pull-11{right: 91.66666667%}.col-sm-pull-10{right: 83.33333333%}.col-sm-pull-9{right: 75%}.col-sm-pull-8{right: 66.66666667%}.col-sm-pull-7{right: 58.33333333%}.col-sm-pull-6{right: 50%}.col-sm-pull-5{right: 41.66666667%}.col-sm-pull-4{right: 33.33333333%}.col-sm-pull-3{right: 25%}.col-sm-pull-2{right: 16.66666667%}.col-sm-pull-1{right: 8.33333333%}.col-sm-pull-0{right: auto}.col-sm-push-12{left: 100%}.col-sm-push-11{left: 91.66666667%}.col-sm-push-10{left: 83.33333333%}.col-sm-push-9{left: 75%}.col-sm-push-8{left: 66.66666667%}.col-sm-push-7{left: 58.33333333%}.col-sm-push-6{left: 50%}.col-sm-push-5{left: 41.66666667%}.col-sm-push-4{left: 33.33333333%}.col-sm-push-3{left: 25%}.col-sm-push-2{left: 16.66666667%}.col-sm-push-1{left: 8.33333333%}.col-sm-push-0{left: auto}.col-sm-offset-12{margin-left: 100%}.col-sm-offset-11{margin-left: 91.66666667%}.col-sm-offset-10{margin-left: 83.33333333%}.col-sm-offset-9{margin-left: 75%}.col-sm-offset-8{margin-left: 66.66666667%}.col-sm-offset-7{margin-left: 58.33333333%}.col-sm-offset-6{margin-left: 50%}.col-sm-offset-5{margin-left: 41.66666667%}.col-sm-offset-4{margin-left: 33.33333333%}.col-sm-offset-3{margin-left: 25%}.col-sm-offset-2{margin-left: 16.66666667%}.col-sm-offset-1{margin-left: 8.33333333%}.col-sm-offset-0{margin-left: 0%}}@media (min-width: 992px){.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{float: left}.col-md-12{width: 100%}.col-md-11{width: 91.66666667%}.col-md-10{width: 83.33333333%}.col-md-9{width: 75%}.col-md-8{width: 66.66666667%}.col-md-7{width: 58.33333333%}.col-md-6{width: 50%}.col-md-5{width: 41.66666667%}.col-md-4{width: 33.33333333%}.col-md-3{width: 25%}.col-md-2{width: 16.66666667%}.col-md-1{width: 8.33333333%}.col-md-pull-12{right: 100%}.col-md-pull-11{right: 91.66666667%}.col-md-pull-10{right: 83.33333333%}.col-md-pull-9{right: 75%}.col-md-pull-8{right: 66.66666667%}.col-md-pull-7{right: 58.33333333%}.col-md-pull-6{right: 50%}.col-md-pull-5{right: 41.66666667%}.col-md-pull-4{right: 33.33333333%}.col-md-pull-3{right: 25%}.col-md-pull-2{right: 16.66666667%}.col-md-pull-1{right: 8.33333333%}.col-md-pull-0{right: auto}.col-md-push-12{left: 100%}.col-md-push-11{left: 91.66666667%}.col-md-push-10{left: 83.33333333%}.col-md-push-9{left: 75%}.col-md-push-8{left: 66.66666667%}.col-md-push-7{left: 58.33333333%}.col-md-push-6{left: 50%}.col-md-push-5{left: 41.66666667%}.col-md-push-4{left: 33.33333333%}.col-md-push-3{left: 25%}.col-md-push-2{left: 16.66666667%}.col-md-push-1{left: 8.33333333%}.col-md-push-0{left: auto}.col-md-offset-12{margin-left: 100%}.col-md-offset-11{margin-left: 91.66666667%}.col-md-offset-10{margin-left: 83.33333333%}.col-md-offset-9{margin-left: 75%}.col-md-offset-8{margin-left: 66.66666667%}.col-md-offset-7{margin-left: 58.33333333%}.col-md-offset-6{margin-left: 50%}.col-md-offset-5{margin-left: 41.66666667%}.col-md-offset-4{margin-left: 33.33333333%}.col-md-offset-3{margin-left: 25%}.col-md-offset-2{margin-left: 16.66666667%}.col-md-offset-1{margin-left: 8.33333333%}.col-md-offset-0{margin-left: 0%}}@media (min-width: 1200px){.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{float: left}.col-lg-12{width: 100%}.col-lg-11{width: 91.66666667%}.col-lg-10{width: 83.33333333%}.col-lg-9{width: 75%}.col-lg-8{width: 66.66666667%}.col-lg-7{width: 58.33333333%}.col-lg-6{width: 50%}.col-lg-5{width: 41.66666667%}.col-lg-4{width: 33.33333333%}.col-lg-3{width: 25%}.col-lg-2{width: 16.66666667%}.col-lg-1{width: 8.33333333%}.col-lg-pull-12{right: 100%}.col-lg-pull-11{right: 91.66666667%}.col-lg-pull-10{right: 83.33333333%}.col-lg-pull-9{right: 75%}.col-lg-pull-8{right: 66.66666667%}.col-lg-pull-7{right: 58.33333333%}.col-lg-pull-6{right: 50%}.col-lg-pull-5{right: 41.66666667%}.col-lg-pull-4{right: 33.33333333%}.col-lg-pull-3{right: 25%}.col-lg-pull-2{right: 16.66666667%}.col-lg-pull-1{right: 8.33333333%}.col-lg-pull-0{right: auto}.col-lg-push-12{left: 100%}.col-lg-push-11{left: 91.66666667%}.col-lg-push-10{left: 83.33333333%}.col-lg-push-9{left: 75%}.col-lg-push-8{left: 66.66666667%}.col-lg-push-7{left: 58.33333333%}.col-lg-push-6{left: 50%}.col-lg-push-5{left: 41.66666667%}.col-lg-push-4{left: 33.33333333%}.col-lg-push-3{left: 25%}.col-lg-push-2{left: 16.66666667%}.col-lg-push-1{left: 8.33333333%}.col-lg-push-0{left: auto}.col-lg-offset-12{margin-left: 100%}.col-lg-offset-11{margin-left: 91.66666667%}.col-lg-offset-10{margin-left: 83.33333333%}.col-lg-offset-9{margin-left: 75%}.col-lg-offset-8{margin-left: 66.66666667%}.col-lg-offset-7{margin-left: 58.33333333%}.col-lg-offset-6{margin-left: 50%}.col-lg-offset-5{margin-left: 41.66666667%}.col-lg-offset-4{margin-left: 33.33333333%}.col-lg-offset-3{margin-left: 25%}.col-lg-offset-2{margin-left: 16.66666667%}.col-lg-offset-1{margin-left: 8.33333333%}.col-lg-offset-0{margin-left: 0%}}table{background-color: transparent}caption{padding-top: 8px;padding-bottom: 8px;color: #777;text-align: left}th{text-align: left}.table{width: 100%;max-width: 100%;margin-bottom: 18px}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding: 8px;line-height: 1.42857143;vertical-align: top;border-top: 1px solid #ddd}.table > thead > tr > th{vertical-align: bottom;border-bottom: 2px solid #ddd}.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top: 0}.table > tbody + tbody{border-top: 2px solid #ddd}.table .table{background-color: #fff}.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding: 5px}.table-bordered{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width: 2px}.table-striped > tbody > tr:nth-child(odd){background-color: #f9f9f9}.table-hover > tbody > tr:hover{background-color: #f5f5f5}table col[class*="col-"]{position: static;float: none;display: table-column}table td[class*="col-"],table th[class*="col-"]{position: static;float: none;display: table-cell}.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color: #f5f5f5}.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th{background-color: #e8e8e8}.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color: #dff0d8}.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th{background-color: #d0e9c6}.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color: #d9edf7}.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th{background-color: #c4e3f3}.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color: #fcf8e3}.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th{background-color: #faf2cc}.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color: #f2dede}.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th{background-color: #ebcccc}.table-responsive{overflow-x: auto;min-height: 0.01%}@media screen and (max-width: 767px){.table-responsive{width: 100%;margin-bottom: 13.5px;overflow-y: hidden;-ms-overflow-style: -ms-autohiding-scrollbar;border: 1px solid #ddd}.table-responsive > .table{margin-bottom: 0}.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space: nowrap}.table-responsive > .table-bordered{border: 0}.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom: 0}}fieldset{padding: 0;margin: 0;border: 0;min-width: 0}legend{display: block;width: 100%;padding: 0;margin-bottom: 18px;font-size: 19.5px;line-height: inherit;color: #333;border: 0;border-bottom: 1px solid #777}label{display: inline-block;max-width: 100%;margin-bottom: 5px;font-weight: bold}input[type="search"]{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}input[type="radio"],input[type="checkbox"]{margin: 4px 0 0;margin-top: 1px \9;line-height: normal}input[type="file"]{display: block}input[type="range"]{display: block;width: 100%}select[multiple],select[size]{height: auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}output{display: block;padding-top: 4px;font-size: 13px;line-height: 1.42857143;color: #555}.form-control{display: block;width: 100%;height: 26px;padding: 3px 5px;font-size: 13px;line-height: 1.42857143;color: #555;background-color: #fff;background-image: none;border: 1px solid #ccc;border-radius: 3px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color: #619144;outline: 0;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(97,145,68,0.6);box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(97,145,68,0.6)}.form-control::-moz-placeholder{color: #999;opacity: 1}.form-control:-ms-input-placeholder{color: #999}.form-control::-webkit-input-placeholder{color: #999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor: not-allowed;background-color: #eee;opacity: 1}textarea.form-control{height: auto}input[type="search"]{-webkit-appearance: none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height: 26px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height: 22px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height: 41px}}.form-group{margin-bottom: 15px}.radio,.checkbox{position: relative;display: block;margin-top: 10px;margin-bottom: 10px}.radio label,.checkbox label{min-height: 18px;padding-left: 20px;margin-bottom: 0;font-weight: normal;cursor: pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position: absolute;margin-left: -20px;margin-top: 4px \9}.radio + .radio,.checkbox + .checkbox{margin-top: -5px}.radio-inline,.checkbox-inline{display: inline-block;padding-left: 20px;margin-bottom: 0;vertical-align: middle;font-weight: normal;cursor: pointer}.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top: 0;margin-left: 10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor: not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor: not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor: not-allowed}.form-control-static{padding-top: 4px;padding-bottom: 4px;margin-bottom: 0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left: 0;padding-right: 0}.input-sm,.form-group-sm .form-control{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}select.input-sm,select.form-group-sm .form-control{height: 22px;line-height: 22px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height: auto}.input-lg,.form-group-lg .form-control{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.33;border-radius: 5px}select.input-lg,select.form-group-lg .form-control{height: 41px;line-height: 41px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height: auto}.has-feedback{position: relative}.has-feedback .form-control{padding-right: 32.5px}.form-control-feedback{position: absolute;top: 0;right: 0;z-index: 2;display: block;width: 26px;height: 26px;line-height: 26px;text-align: center;pointer-events: none}.input-lg + .form-control-feedback{width: 41px;height: 41px;line-height: 41px}.input-sm + .form-control-feedback{width: 22px;height: 22px;line-height: 22px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color: #3c763d}.has-success .form-control{border-color: #3c763d;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color: #2b542c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168}.has-success .input-group-addon{color: #3c763d;border-color: #3c763d;background-color: #dff0d8}.has-success .form-control-feedback{color: #3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color: #8a6d3b}.has-warning .form-control{border-color: #8a6d3b;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color: #66512c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b}.has-warning .input-group-addon{color: #8a6d3b;border-color: #8a6d3b;background-color: #fcf8e3}.has-warning .form-control-feedback{color: #8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color: #a94442}.has-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.has-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.has-error .form-control-feedback{color: #a94442}.has-feedback label ~ .form-control-feedback{top: 23px}.has-feedback label.sr-only ~ .form-control-feedback{top: 0}.help-block{display: block;margin-top: 5px;margin-bottom: 10px;color: #737373}@media (min-width: 768px){.form-inline .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle}.form-inline .form-control-static{display: inline-block}.form-inline .input-group{display: inline-table;vertical-align: middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width: auto}.form-inline .input-group > .form-control{width: 100%}.form-inline .control-label{margin-bottom: 0;vertical-align: middle}.form-inline .radio,.form-inline .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.form-inline .radio label,.form-inline .checkbox label{padding-left: 0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.form-inline .has-feedback .form-control-feedback{top: 0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top: 0;margin-bottom: 0;padding-top: 4px}.form-horizontal .radio,.form-horizontal .checkbox{min-height: 22px}.form-horizontal .form-group{margin-left: -7px;margin-right: -7px}@media (min-width: 768px){.form-horizontal .control-label{text-align: right;margin-bottom: 0;padding-top: 4px}}.form-horizontal .has-feedback .form-control-feedback{right: 7px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top: 11.64px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top: 2px}}.btn{display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 3px 5px;font-size: 13px;line-height: 1.42857143;border-radius: 3px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}.btn:hover,.btn:focus,.btn.focus{color: #333;text-decoration: none}.btn:active,.btn.active{outline: 0;background-image: none;-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor: not-allowed;pointer-events: none;opacity: .65;filter: alpha(opacity=65);-webkit-box-shadow: none;box-shadow: none}.btn-default{color: #333;background-color: #fff;border-color: #ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{color: #333;background-color: #e6e6e6;border-color: #adadad}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{background-image: none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color: #fff;border-color: #ccc}.btn-default .badge{color: #fff;background-color: #333}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color: #fff;background-color: #333;border-color: #adadad}.btn-primary{color: #fff;background-color: #619144;border-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{color: #fff;background-color: #4a6e34;border-color: #e0e0e0}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{background-image: none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color: #619144;border-color: #fff}.btn-primary .badge{color: #619144;background-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color: #619144;background-color: #fff;border-color: #e0e0e0}.btn-success{color: #fff;background-color: #028302;border-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{color: #fff;background-color: #015101;border-color: #e0e0e0}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{background-image: none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color: #028302;border-color: #fff}.btn-success .badge{color: #028302;background-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color: #028302;background-color: #fff;border-color: #e0e0e0}.btn-info{color: #fff;background-color: #1c5f74;border-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{color: #fff;background-color: #123d4b;border-color: #e0e0e0}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{background-image: none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color: #1c5f74;border-color: #fff}.btn-info .badge{color: #1c5f74;background-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color: #1c5f74;background-color: #fff;border-color: #e0e0e0}.btn-warning{color: #fff;background-color: #a56100;border-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{color: #fff;background-color: #724300;border-color: #e0e0e0}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{background-image: none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color: #a56100;border-color: #fff}.btn-warning .badge{color: #a56100;background-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color: #a56100;background-color: #fff;border-color: #e0e0e0}.btn-danger{color: #fff;background-color: #a41915;border-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{color: #fff;background-color: #77120f;border-color: #e0e0e0}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{background-image: none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color: #a41915;border-color: #fff}.btn-danger .badge{color: #a41915;background-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color: #a41915;background-color: #fff;border-color: #e0e0e0}.btn-link{color: #12538b;font-weight: normal;border-radius: 0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color: transparent;-webkit-box-shadow: none;box-shadow: none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color: transparent}.btn-link:hover,.btn-link:focus{color: #092b47;text-decoration: underline;background-color: transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color: #777;text-decoration: none}.btn-lg,.btn-group-lg > .btn{padding: 8px 5px;font-size: 17px;line-height: 1.33;border-radius: 5px}.btn-sm,.btn-group-sm > .btn{padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}.btn-xs,.btn-group-xs > .btn{padding: 1px 1px;font-size: 12px;line-height: 1.5;border-radius: 2px}.btn-block{display: block;width: 100%}.btn-block + .btn-block{margin-top: 5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width: 100%}.fade{opacity: 0;-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear}.fade.in{opacity: 1}.collapse{display: none;visibility: hidden}.collapse.in{display: block;visibility: visible}tr.collapse.in{display: table-row}tbody.collapse.in{display: table-row-group}.collapsing{position: relative;height: 0;overflow: hidden;-webkit-transition-property: height, visibility;transition-property: height, visibility;-webkit-transition-duration: .35s;transition-duration: .35s;-webkit-transition-timing-function: ease;transition-timing-function: ease}.caret{display: inline-block;width: 0;height: 0;margin-left: 2px;vertical-align: middle;border-top: 4px solid;border-right: 4px solid transparent;border-left: 4px solid transparent}.dropdown{position: relative}.dropdown-toggle:focus{outline: 0}.dropdown-menu{position: absolute;top: 100%;left: 0;z-index: 1000;display: none;float: left;min-width: 160px;padding: 5px 0;margin: 2px 0 0;list-style: none;font-size: 13px;text-align: left;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.15);border-radius: 3px;-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);box-shadow: 0 6px 12px rgba(0,0,0,0.175);background-clip: padding-box}.dropdown-menu.pull-right{right: 0;left: auto}.dropdown-menu .divider{height: 1px;margin: 8px 0;overflow: hidden;background-color: #e5e5e5}.dropdown-menu > li > a{display: block;padding: 3px 20px;clear: both;font-weight: normal;line-height: 1.42857143;color: #333;white-space: nowrap}.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration: none;color: #262626;background-color: #f5f5f5}.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color: #fff;text-decoration: none;outline: 0;background-color: #619144}.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color: #777}.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration: none;background-color: transparent;background-image: none;filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor: not-allowed}.open > .dropdown-menu{display: block}.open > a{outline: 0}.dropdown-menu-right{left: auto;right: 0}.dropdown-menu-left{left: 0;right: auto}.dropdown-header{display: block;padding: 3px 20px;font-size: 12px;line-height: 1.42857143;color: #777;white-space: nowrap}.dropdown-backdrop{position: fixed;left: 0;right: 0;bottom: 0;top: 0;z-index: 990}.pull-right > .dropdown-menu{right: 0;left: auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top: 0;border-bottom: 4px solid;content: ""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top: auto;bottom: 100%;margin-bottom: 1px}@media (min-width: 768px){.navbar-right .dropdown-menu{left: auto;right: 0}.navbar-right .dropdown-menu-left{left: 0;right: auto}}.btn-group,.btn-group-vertical{position: relative;display: inline-block;vertical-align: middle}.btn-group > .btn,.btn-group-vertical > .btn{position: relative;float: left}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index: 2}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left: -1px}.btn-toolbar{margin-left: -5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float: left}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left: 5px}.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius: 0}.btn-group > .btn:first-child{margin-left: 0}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group > .btn-group{float: left}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group > .btn-group:first-child > .btn:last-child,.btn-group > .btn-group:first-child > .dropdown-toggle{border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn-group:last-child > .btn:first-child{border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline: 0}.btn-group > .btn + .dropdown-toggle{padding-left: 8px;padding-right: 8px}.btn-group > .btn-lg + .dropdown-toggle{padding-left: 12px;padding-right: 12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow: none;box-shadow: none}.btn .caret{margin-left: 0}.btn-lg .caret{border-width: 5px 5px 0;border-bottom-width: 0}.dropup .btn-lg .caret{border-width: 0 5px 5px}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display: block;float: none;width: 100%;max-width: 100%}.btn-group-vertical > .btn-group > .btn{float: none}.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(:first-child):not(:last-child){border-radius: 0}.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius: 3px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn:last-child:not(:first-child){border-bottom-left-radius: 3px;border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-justified{display: table;width: 100%;table-layout: fixed;border-collapse: separate}.btn-group-justified > .btn,.btn-group-justified > .btn-group{float: none;display: table-cell;width: 1%}.btn-group-justified > .btn-group .btn{width: 100%}.btn-group-justified > .btn-group .dropdown-menu{left: auto}[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"]{position: absolute;clip: rect(0, 0, 0, 0);pointer-events: none}.input-group{position: relative;display: table;border-collapse: separate}.input-group[class*="col-"]{float: none;padding-left: 0;padding-right: 0}.input-group .form-control{position: relative;z-index: 2;float: left;width: 100%;margin-bottom: 0}.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.33;border-radius: 5px}select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height: 41px;line-height: 41px}textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height: auto}.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height: 22px;line-height: 22px}textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height: auto}.input-group-addon,.input-group-btn,.input-group .form-control{display: table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius: 0}.input-group-addon,.input-group-btn{width: 1%;white-space: nowrap;vertical-align: middle}.input-group-addon{padding: 3px 5px;font-size: 13px;font-weight: normal;line-height: 1;color: #555;text-align: center;background-color: #eee;border: 1px solid #ccc;border-radius: 3px}.input-group-addon.input-sm{padding: 1px 2px;font-size: 12px;border-radius: 2px}.input-group-addon.input-lg{padding: 8px 5px;font-size: 17px;border-radius: 5px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top: 0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius: 0;border-top-right-radius: 0}.input-group-addon:first-child{border-right: 0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius: 0;border-top-left-radius: 0}.input-group-addon:last-child{border-left: 0}.input-group-btn{position: relative;font-size: 0;white-space: nowrap}.input-group-btn > .btn{position: relative}.input-group-btn > .btn + .btn{margin-left: -1px}.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index: 2}.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right: -1px}.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{margin-left: -1px}.nav{margin-bottom: 0;padding-left: 0;list-style: none}.nav > li{position: relative;display: block}.nav > li > a{position: relative;display: block;padding: 5px}.nav > li > a:hover,.nav > li > a:focus{text-decoration: none;background-color: #eee}.nav > li.disabled > a{color: #777}.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color: #777;text-decoration: none;background-color: transparent;cursor: not-allowed}.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color: #eee;border-color: #12538b}.nav .nav-divider{height: 1px;margin: 8px 0;overflow: hidden;background-color: #e5e5e5}.nav > li > a > img{max-width: none}.nav-tabs{border-bottom: 1px solid #ddd}.nav-tabs > li{float: left;margin-bottom: -1px}.nav-tabs > li > a{margin-right: 2px;line-height: 1.42857143;border: 1px solid transparent;border-radius: 3px 3px 0 0}.nav-tabs > li > a:hover{border-color: #eee #eee #ddd}.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color: #555;background-color: #fff;border: 1px solid #ddd;border-bottom-color: transparent;cursor: default}.nav-tabs.nav-justified{width: 100%;border-bottom: 0}.nav-tabs.nav-justified > li{float: none}.nav-tabs.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-tabs.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-tabs.nav-justified > li{display: table-cell;width: 1%}.nav-tabs.nav-justified > li > a{margin-bottom: 0}}.nav-tabs.nav-justified > li > a{margin-right: 0;border-radius: 3px}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs.nav-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 3px 3px 0 0}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color: #fff}}.nav-pills > li{float: left}.nav-pills > li > a{border-radius: 3px}.nav-pills > li + li{margin-left: 2px}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color: #fff;background-color: #619144}.nav-stacked > li{float: none}.nav-stacked > li + li{margin-top: 2px;margin-left: 0}.nav-justified{width: 100%}.nav-justified > li{float: none}.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-justified > li{display: table-cell;width: 1%}.nav-justified > li > a{margin-bottom: 0}}.nav-tabs-justified{border-bottom: 0}.nav-tabs-justified > li > a{margin-right: 0;border-radius: 3px}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 3px 3px 0 0}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color: #fff}}.tab-content > .tab-pane{display: none;visibility: hidden}.tab-content > .active{display: block;visibility: visible}.nav-tabs .dropdown-menu{margin-top: -1px;border-top-right-radius: 0;border-top-left-radius: 0}.navbar{position: relative;min-height: 65px;margin-bottom: 0px;border: 1px solid transparent}@media (min-width: 768px){.navbar{border-radius: 3px}}@media (min-width: 768px){.navbar-header{float: left}}.navbar-collapse{overflow-x: visible;padding-right: 7px;padding-left: 7px;border-top: 1px solid transparent;box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling: touch}.navbar-collapse.in{overflow-y: auto}@media (min-width: 768px){.navbar-collapse{width: auto;border-top: 0;box-shadow: none}.navbar-collapse.collapse{display: block !important;visibility: visible !important;height: auto !important;padding-bottom: 0;overflow: visible !important}.navbar-collapse.in{overflow-y: visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left: 0;padding-right: 0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 200px}}.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: -7px;margin-left: -7px}@media (min-width: 768px){.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: 0;margin-left: 0}}.navbar-static-top{z-index: 1000;border-width: 0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius: 0}}.navbar-fixed-top,.navbar-fixed-bottom{position: fixed;right: 0;left: 0;z-index: 1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius: 0}}.navbar-fixed-top{top: 0;border-width: 0 0 1px}.navbar-fixed-bottom{bottom: 0;margin-bottom: 0;border-width: 1px 0 0}.navbar-brand{float: left;padding: 23.5px 7px;font-size: 17px;line-height: 18px;height: 65px}.navbar-brand:hover,.navbar-brand:focus{text-decoration: none}.navbar-brand > img{display: block}@media (min-width: 768px){.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand{margin-left: -7px}}.navbar-toggle{position: relative;float: right;margin-right: 7px;padding: 9px 10px;margin-top: 15.5px;margin-bottom: 15.5px;background-color: transparent;background-image: none;border: 1px solid transparent;border-radius: 3px}.navbar-toggle:focus{outline: 0}.navbar-toggle .icon-bar{display: block;width: 22px;height: 2px;border-radius: 1px}.navbar-toggle .icon-bar + .icon-bar{margin-top: 4px}@media (min-width: 768px){.navbar-toggle{display: none}}.navbar-nav{margin: 11.75px -7px}.navbar-nav > li > a{padding-top: 10px;padding-bottom: 10px;line-height: 18px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position: static;float: none;width: auto;margin-top: 0;background-color: transparent;border: 0;box-shadow: none}.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header{padding: 5px 15px 5px 25px}.navbar-nav .open .dropdown-menu > li > a{line-height: 18px}.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus{background-image: none}}@media (min-width: 768px){.navbar-nav{float: left;margin: 0}.navbar-nav > li{float: left}.navbar-nav > li > a{padding-top: 23.5px;padding-bottom: 23.5px}}.navbar-form{margin-left: -7px;margin-right: -7px;padding: 10px 7px;border-top: 1px solid transparent;border-bottom: 1px solid transparent;-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);margin-top: 19.5px;margin-bottom: 19.5px}@media (min-width: 768px){.navbar-form .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.navbar-form .form-control{display: inline-block;width: auto;vertical-align: middle}.navbar-form .form-control-static{display: inline-block}.navbar-form .input-group{display: inline-table;vertical-align: middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width: auto}.navbar-form .input-group > .form-control{width: 100%}.navbar-form .control-label{margin-bottom: 0;vertical-align: middle}.navbar-form .radio,.navbar-form .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left: 0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.navbar-form .has-feedback .form-control-feedback{top: 0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom: 5px}.navbar-form .form-group:last-child{margin-bottom: 0}}@media (min-width: 768px){.navbar-form{width: auto;border: 0;margin-left: 0;margin-right: 0;padding-top: 0;padding-bottom: 0;-webkit-box-shadow: none;box-shadow: none}}.navbar-nav > li > .dropdown-menu{margin-top: 0;border-top-right-radius: 0;border-top-left-radius: 0}.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu{border-top-right-radius: 3px;border-top-left-radius: 3px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.navbar-btn{margin-top: 19.5px;margin-bottom: 19.5px}.navbar-btn.btn-sm{margin-top: 21.5px;margin-bottom: 21.5px}.navbar-btn.btn-xs{margin-top: 21.5px;margin-bottom: 21.5px}.navbar-text{margin-top: 23.5px;margin-bottom: 23.5px}@media (min-width: 768px){.navbar-text{float: left;margin-left: 7px;margin-right: 7px}}@media (min-width: 768px){.navbar-left{float: left !important}.navbar-right{float: right !important;margin-right: -7px}.navbar-right ~ .navbar-right{margin-right: 0}}.navbar-default{background-color: #132531;border-color: #0a1319}.navbar-default .navbar-brand{color: #fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color: #068139;background-color: transparent}.navbar-default .navbar-text{color: #fff}.navbar-default .navbar-nav > li > a{color: #fff}.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus{color: #fff;background-color: #068139}.navbar-default .navbar-toggle{border-color: #ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color: #ddd}.navbar-default .navbar-toggle .icon-bar{background-color: #888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color: #0a1319}.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus{background-color: #fff;color: #132531}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu > li > a{color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #fff;background-color: #068139}}.navbar-default .navbar-link{color: #fff}.navbar-default .navbar-link:hover{color: #132531}.navbar-default .btn-link{color: #fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color: #132531}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color: #fff}.navbar-inverse{background-color: #222;border-color: #080808}.navbar-inverse .navbar-brand{color: #9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-text{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus{color: #444;background-color: transparent}.navbar-inverse .navbar-toggle{border-color: #333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color: #333}.navbar-inverse .navbar-toggle .icon-bar{background-color: #fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color: #101010}.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus{background-color: #080808;color: #fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header{border-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #444;background-color: transparent}}.navbar-inverse .navbar-link{color: #9d9d9d}.navbar-inverse .navbar-link:hover{color: #fff}.navbar-inverse .btn-link{color: #9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color: #fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color: #444}.breadcrumb{padding: 6px 20px;margin-bottom: 18px;list-style: none;background-color: #fff;border-radius: 3px}.breadcrumb > li{display: inline-block}.breadcrumb > li + li:before{content: "/\00a0";padding: 0 5px;color: #777}.breadcrumb > .active{color: #333}.pagination{display: inline-block;padding-left: 0;margin: 18px 0;border-radius: 3px}.pagination > li{display: inline}.pagination > li > a,.pagination > li > span{position: relative;float: left;padding: 3px 5px;line-height: 1.42857143;text-decoration: none;color: #12538b;background-color: #fff;border: 1px solid #ddd;margin-left: -1px}.pagination > li:first-child > a,.pagination > li:first-child > span{margin-left: 0;border-bottom-left-radius: 3px;border-top-left-radius: 3px}.pagination > li:last-child > a,.pagination > li:last-child > span{border-bottom-right-radius: 3px;border-top-right-radius: 3px}.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus{color: #092b47;background-color: #eee;border-color: #ddd}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{z-index: 2;color: #fff;background-color: #1c5f74;border-color: #1c5f74;cursor: default}.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus{color: #777;background-color: #fff;border-color: #ddd;cursor: not-allowed}.pagination-lg > li > a,.pagination-lg > li > span{padding: 8px 5px;font-size: 17px}.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span{border-bottom-left-radius: 5px;border-top-left-radius: 5px}.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span{border-bottom-right-radius: 5px;border-top-right-radius: 5px}.pagination-sm > li > a,.pagination-sm > li > span{padding: 1px 2px;font-size: 12px}.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span{border-bottom-left-radius: 2px;border-top-left-radius: 2px}.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span{border-bottom-right-radius: 2px;border-top-right-radius: 2px}.pager{padding-left: 0;margin: 18px 0;list-style: none;text-align: center}.pager li{display: inline}.pager li > a,.pager li > span{display: inline-block;padding: 5px 14px;background-color: #fff;border: 1px solid #ddd;border-radius: 15px}.pager li > a:hover,.pager li > a:focus{text-decoration: none;background-color: #eee}.pager .next > a,.pager .next > span{float: right}.pager .previous > a,.pager .previous > span{float: left}.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span{color: #777;background-color: #fff;cursor: not-allowed}.label{display: inline;padding: .2em .6em .3em;font-size: 75%;font-weight: bold;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: .25em}a.label:hover,a.label:focus{color: #fff;text-decoration: none;cursor: pointer}.label:empty{display: none}.btn .label{position: relative;top: -1px}.label-default{background-color: #777}.label-default[href]:hover,.label-default[href]:focus{background-color: #5e5e5e}.label-primary{background-color: #619144}.label-primary[href]:hover,.label-primary[href]:focus{background-color: #4a6e34}.label-success{background-color: #028302}.label-success[href]:hover,.label-success[href]:focus{background-color: #015101}.label-info{background-color: #1c5f74}.label-info[href]:hover,.label-info[href]:focus{background-color: #123d4b}.label-warning{background-color: #a56100}.label-warning[href]:hover,.label-warning[href]:focus{background-color: #724300}.label-danger{background-color: #a41915}.label-danger[href]:hover,.label-danger[href]:focus{background-color: #77120f}.badge{display: inline-block;min-width: 10px;padding: 3px 7px;font-size: 12px;font-weight: bold;color: #fff;line-height: 1;vertical-align: baseline;white-space: nowrap;text-align: center;background-color: #777;border-radius: 10px}.badge:empty{display: none}.btn .badge{position: relative;top: -1px}.btn-xs .badge{top: 0;padding: 1px 5px}a.badge:hover,a.badge:focus{color: #fff;text-decoration: none;cursor: pointer}.list-group-item.active > .badge,.nav-pills > .active > a > .badge{color: #12538b;background-color: #fff}.list-group-item > .badge{float: right}.list-group-item > .badge + .badge{margin-right: 5px}.nav-pills > li > a > .badge{margin-left: 3px}.jumbotron{padding: 30px 15px;margin-bottom: 30px;color: inherit;background-color: #eee}.jumbotron h1,.jumbotron .h1{color: inherit}.jumbotron p{margin-bottom: 15px;font-size: 20px;font-weight: 200}.jumbotron > hr{border-top-color: #d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius: 5px}.jumbotron .container{max-width: 100%}@media screen and (min-width: 768px){.jumbotron{padding: 48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left: 60px;padding-right: 60px}.jumbotron h1,.jumbotron .h1{font-size: 58.5px}}.thumbnail{display: block;padding: 4px;margin-bottom: 18px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 3px;-webkit-transition: border .2s ease-in-out;-o-transition: border .2s ease-in-out;transition: border .2s ease-in-out}.thumbnail > img,.thumbnail a > img{margin-left: auto;margin-right: auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color: #12538b}.thumbnail .caption{padding: 9px;color: #333}.alert{padding: 15px;margin-bottom: 18px;border: 1px solid transparent;border-radius: 3px}.alert h4{margin-top: 0;color: inherit}.alert .alert-link{font-weight: bold}.alert > p,.alert > ul{margin-bottom: 0}.alert > p + p{margin-top: 5px}.alert-dismissable,.alert-dismissible{padding-right: 35px}.alert-dismissable .close,.alert-dismissible .close{position: relative;top: -2px;right: -21px;color: inherit}.alert-success{background-color: #dff0d8;border-color: #d6e9c6;color: #3c763d}.alert-success hr{border-top-color: #c9e2b3}.alert-success .alert-link{color: #2b542c}.alert-info{background-color: #d9edf7;border-color: #bce8f1;color: #31708f}.alert-info hr{border-top-color: #a6e1ec}.alert-info .alert-link{color: #245269}.alert-warning{background-color: #fcf8e3;border-color: #faebcc;color: #8a6d3b}.alert-warning hr{border-top-color: #f7e1b5}.alert-warning .alert-link{color: #66512c}.alert-danger{background-color: #f2dede;border-color: #ebccd1;color: #a94442}.alert-danger hr{border-top-color: #e4b9c0}.alert-danger .alert-link{color: #843534}@-webkit-keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}@keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}.progress{overflow: hidden;height: 18px;margin-bottom: 18px;background-color: #f5f5f5;border-radius: 3px;-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);box-shadow: inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float: left;width: 0%;height: 100%;font-size: 12px;line-height: 18px;color: #fff;text-align: center;background-color: #619144;-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition: width .6s ease;-o-transition: width .6s ease;transition: width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image: -webkit-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-image: -o-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-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: 40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation: progress-bar-stripes 2s linear infinite;-o-animation: progress-bar-stripes 2s linear infinite;animation: progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color: #028302}.progress-striped .progress-bar-success{background-image: -webkit-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-image: -o-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-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)}.progress-bar-info{background-color: #1c5f74}.progress-striped .progress-bar-info{background-image: -webkit-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-image: -o-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-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)}.progress-bar-warning{background-color: #a56100}.progress-striped .progress-bar-warning{background-image: -webkit-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-image: -o-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-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)}.progress-bar-danger{background-color: #a41915}.progress-striped .progress-bar-danger{background-image: -webkit-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-image: -o-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-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)}.media{margin-top: 15px}.media:first-child{margin-top: 0}.media-right,.media > .pull-right{padding-left: 10px}.media-left,.media > .pull-left{padding-right: 10px}.media-left,.media-right,.media-body{display: table-cell;vertical-align: top}.media-middle{vertical-align: middle}.media-bottom{vertical-align: bottom}.media-heading{margin-top: 0;margin-bottom: 5px}.media-list{padding-left: 0;list-style: none}.list-group{margin-bottom: 20px;padding-left: 0}.list-group-item{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd}.list-group-item:first-child{border-top-right-radius: 3px;border-top-left-radius: 3px}.list-group-item:last-child{margin-bottom: 0;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}a.list-group-item{color: #555}a.list-group-item .list-group-item-heading{color: #333}a.list-group-item:hover,a.list-group-item:focus{text-decoration: none;color: #555;background-color: #f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color: inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color: #777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index: 2;color: #fff;background-color: #619144;border-color: #619144}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small{color: inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color: #cce1c0}.list-group-item-success{color: #3c763d;background-color: #dff0d8}a.list-group-item-success{color: #3c763d}a.list-group-item-success .list-group-item-heading{color: inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color: #3c763d;background-color: #d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color: #fff;background-color: #3c763d;border-color: #3c763d}.list-group-item-info{color: #31708f;background-color: #d9edf7}a.list-group-item-info{color: #31708f}a.list-group-item-info .list-group-item-heading{color: inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color: #31708f;background-color: #c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color: #fff;background-color: #31708f;border-color: #31708f}.list-group-item-warning{color: #8a6d3b;background-color: #fcf8e3}a.list-group-item-warning{color: #8a6d3b}a.list-group-item-warning .list-group-item-heading{color: inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color: #8a6d3b;background-color: #faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color: #fff;background-color: #8a6d3b;border-color: #8a6d3b}.list-group-item-danger{color: #a94442;background-color: #f2dede}a.list-group-item-danger{color: #a94442}a.list-group-item-danger .list-group-item-heading{color: inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color: #a94442;background-color: #ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color: #fff;background-color: #a94442;border-color: #a94442}.list-group-item-heading{margin-top: 0;margin-bottom: 5px}.list-group-item-text{margin-bottom: 0;line-height: 1.3}.panel{margin-bottom: 18px;background-color: #fff;border: 1px solid transparent;border-radius: 3px;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);box-shadow: 0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding: 5px}.panel-heading{padding: 10px 15px;border-bottom: 1px solid transparent;border-top-right-radius: 2px;border-top-left-radius: 2px}.panel-heading > .dropdown .dropdown-toggle{color: inherit}.panel-title{margin-top: 0;margin-bottom: 0;font-size: 15px;color: inherit}.panel-title > a{color: inherit}.panel-footer{padding: 10px 15px;background-color: #f5f5f5;border-top: 1px solid #ddd;border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel > .list-group,.panel > .panel-collapse > .list-group{margin-bottom: 0}.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item{border-width: 1px 0;border-radius: 0}.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child{border-top: 0;border-top-right-radius: 2px;border-top-left-radius: 2px}.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child{border-bottom: 0;border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel-heading + .list-group .list-group-item:first-child{border-top-width: 0}.list-group + .panel-footer{border-top-width: 0}.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table{margin-bottom: 0}.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption{padding-left: 5px;padding-right: 5px}.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child{border-top-right-radius: 2px;border-top-left-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child{border-top-left-radius: 2px;border-top-right-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child{border-top-left-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child{border-top-right-radius: 2px}.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child{border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child{border-bottom-left-radius: 2px;border-bottom-right-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child{border-bottom-left-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child{border-bottom-right-radius: 2px}.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body{border-top: 1px solid #ddd}.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td{border-top: 0}.panel > .table-bordered,.panel > .table-responsive > .table-bordered{border: 0}.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th{border-bottom: 0}.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th{border-bottom: 0}.panel > .table-responsive{border: 0;margin-bottom: 0}.panel-group{margin-bottom: 18px}.panel-group .panel{margin-bottom: 0;border-radius: 3px}.panel-group .panel + .panel{margin-top: 5px}.panel-group .panel-heading{border-bottom: 0}.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group{border-top: 1px solid #ddd}.panel-group .panel-footer{border-top: 0}.panel-group .panel-footer + .panel-collapse .panel-body{border-bottom: 1px solid #ddd}.panel-default{border-color: #ddd}.panel-default > .panel-heading{color: #333;background-color: #f5f5f5;border-color: #ddd}.panel-default > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ddd}.panel-default > .panel-heading .badge{color: #f5f5f5;background-color: #333}.panel-default > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ddd}.panel-primary{border-color: #619144}.panel-primary > .panel-heading{color: #fff;background-color: #619144;border-color: #619144}.panel-primary > .panel-heading + .panel-collapse > .panel-body{border-top-color: #619144}.panel-primary > .panel-heading .badge{color: #619144;background-color: #fff}.panel-primary > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #619144}.panel-success{border-color: #d6e9c6}.panel-success > .panel-heading{color: #3c763d;background-color: #dff0d8;border-color: #d6e9c6}.panel-success > .panel-heading + .panel-collapse > .panel-body{border-top-color: #d6e9c6}.panel-success > .panel-heading .badge{color: #dff0d8;background-color: #3c763d}.panel-success > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #d6e9c6}.panel-info{border-color: #bce8f1}.panel-info > .panel-heading{color: #31708f;background-color: #d9edf7;border-color: #bce8f1}.panel-info > .panel-heading + .panel-collapse > .panel-body{border-top-color: #bce8f1}.panel-info > .panel-heading .badge{color: #d9edf7;background-color: #31708f}.panel-info > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #bce8f1}.panel-warning{border-color: #faebcc}.panel-warning > .panel-heading{color: #8a6d3b;background-color: #fcf8e3;border-color: #faebcc}.panel-warning > .panel-heading + .panel-collapse > .panel-body{border-top-color: #faebcc}.panel-warning > .panel-heading .badge{color: #fcf8e3;background-color: #8a6d3b}.panel-warning > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #faebcc}.panel-danger{border-color: #ebccd1}.panel-danger > .panel-heading{color: #a94442;background-color: #f2dede;border-color: #ebccd1}.panel-danger > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ebccd1}.panel-danger > .panel-heading .badge{color: #f2dede;background-color: #a94442}.panel-danger > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ebccd1}.embed-responsive{position: relative;display: block;height: 0;padding: 0;overflow: hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position: absolute;top: 0;left: 0;bottom: 0;height: 100%;width: 100%;border: 0}.embed-responsive.embed-responsive-16by9{padding-bottom: 56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom: 75%}.well{min-height: 20px;padding: 19px;margin-bottom: 20px;background-color: #f5f5f5;border: 1px solid #e3e3e3;border-radius: 3px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);box-shadow: inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color: #ddd;border-color: rgba(0,0,0,0.15)}.well-lg{padding: 24px;border-radius: 5px}.well-sm{padding: 9px;border-radius: 2px}.close{float: right;font-size: 19.5px;font-weight: bold;line-height: 1;color: #000;text-shadow: 0 1px 0 #fff;opacity: .2;filter: alpha(opacity=20)}.close:hover,.close:focus{color: #000;text-decoration: none;cursor: pointer;opacity: .5;filter: alpha(opacity=50)}button.close{padding: 0;cursor: pointer;background: transparent;border: 0;-webkit-appearance: none}.modal-open{overflow: hidden}.modal{display: none;overflow: hidden;position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1040;-webkit-overflow-scrolling: touch;outline: 0}.modal.fade .modal-dialog{-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-moz-transition: -moz-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0)}.modal-open .modal{overflow-x: hidden;overflow-y: auto}.modal-dialog{position: relative;width: auto;margin: 10px}.modal-content{position: relative;background-color: #fff;border: 1px solid #999;border: 1px solid rgba(0,0,0,0.2);border-radius: 5px;-webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);box-shadow: 0 3px 9px rgba(0,0,0,0.5);background-clip: padding-box;outline: 0}.modal-backdrop{position: absolute;top: 0;right: 0;left: 0;background-color: #000}.modal-backdrop.fade{opacity: 0;filter: alpha(opacity=0)}.modal-backdrop.in{opacity: .5;filter: alpha(opacity=50)}.modal-header{padding: 15px;border-bottom: 1px solid #e5e5e5;min-height: 16.42857143px}.modal-header .close{margin-top: -2px}.modal-title{margin: 0;line-height: 1.42857143}.modal-body{position: relative;padding: 15px}.modal-footer{padding: 15px;text-align: right;border-top: 1px solid #e5e5e5}.modal-footer .btn + .btn{margin-left: 5px;margin-bottom: 0}.modal-footer .btn-group .btn + .btn{margin-left: -1px}.modal-footer .btn-block + .btn-block{margin-left: 0}.modal-scrollbar-measure{position: absolute;top: -9999px;width: 50px;height: 50px;overflow: scroll}@media (min-width: 768px){.modal-dialog{width: 600px;margin: 30px auto}.modal-content{-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);box-shadow: 0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width: 300px}}@media (min-width: 992px){.modal-lg{width: 900px}}.tooltip{position: absolute;z-index: 1070;display: block;visibility: visible;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 12px;font-weight: normal;line-height: 1.4;opacity: 0;filter: alpha(opacity=0)}.tooltip.in{opacity: .9;filter: alpha(opacity=90)}.tooltip.top{margin-top: -3px;padding: 5px 0}.tooltip.right{margin-left: 3px;padding: 0 5px}.tooltip.bottom{margin-top: 3px;padding: 5px 0}.tooltip.left{margin-left: -3px;padding: 0 5px}.tooltip-inner{max-width: 200px;padding: 3px 8px;color: #fff;text-align: center;text-decoration: none;background-color: #000;border-radius: 3px}.tooltip-arrow{position: absolute;width: 0;height: 0;border-color: transparent;border-style: solid}.tooltip.top .tooltip-arrow{bottom: 0;left: 50%;margin-left: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-left .tooltip-arrow{bottom: 0;right: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-right .tooltip-arrow{bottom: 0;left: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.right .tooltip-arrow{top: 50%;left: 0;margin-top: -5px;border-width: 5px 5px 5px 0;border-right-color: #000}.tooltip.left .tooltip-arrow{top: 50%;right: 0;margin-top: -5px;border-width: 5px 0 5px 5px;border-left-color: #000}.tooltip.bottom .tooltip-arrow{top: 0;left: 50%;margin-left: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-left .tooltip-arrow{top: 0;right: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-right .tooltip-arrow{top: 0;left: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.popover{position: absolute;top: 0;left: 0;z-index: 1060;display: none;max-width: 276px;padding: 1px;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 13px;font-weight: normal;line-height: 1.42857143;text-align: left;background-color: #fff;background-clip: padding-box;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.2);border-radius: 5px;-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2);box-shadow: 0 5px 10px rgba(0,0,0,0.2);white-space: normal}.popover.top{margin-top: -10px}.popover.right{margin-left: 10px}.popover.bottom{margin-top: 10px}.popover.left{margin-left: -10px}.popover-title{margin: 0;padding: 8px 14px;font-size: 13px;background-color: #f7f7f7;border-bottom: 1px solid #ebebeb;border-radius: 4px 4px 0 0}.popover-content{padding: 9px 14px}.popover > .arrow,.popover > .arrow:after{position: absolute;display: block;width: 0;height: 0;border-color: transparent;border-style: solid}.popover > .arrow{border-width: 11px}.popover > .arrow:after{border-width: 10px;content: ""}.popover.top > .arrow{left: 50%;margin-left: -11px;border-bottom-width: 0;border-top-color: #999;border-top-color: rgba(0,0,0,0.25);bottom: -11px}.popover.top > .arrow:after{content: " ";bottom: 1px;margin-left: -10px;border-bottom-width: 0;border-top-color: #fff}.popover.right > .arrow{top: 50%;left: -11px;margin-top: -11px;border-left-width: 0;border-right-color: #999;border-right-color: rgba(0,0,0,0.25)}.popover.right > .arrow:after{content: " ";left: 1px;bottom: -10px;border-left-width: 0;border-right-color: #fff}.popover.bottom > .arrow{left: 50%;margin-left: -11px;border-top-width: 0;border-bottom-color: #999;border-bottom-color: rgba(0,0,0,0.25);top: -11px}.popover.bottom > .arrow:after{content: " ";top: 1px;margin-left: -10px;border-top-width: 0;border-bottom-color: #fff}.popover.left > .arrow{top: 50%;right: -11px;margin-top: -11px;border-right-width: 0;border-left-color: #999;border-left-color: rgba(0,0,0,0.25)}.popover.left > .arrow:after{content: " ";right: 1px;border-right-width: 0;border-left-color: #fff;bottom: -10px}.carousel{position: relative}.carousel-inner{position: relative;overflow: hidden;width: 100%}.carousel-inner > .item{display: none;position: relative;-webkit-transition: .6s ease-in-out left;-o-transition: .6s ease-in-out left;transition: .6s ease-in-out left}.carousel-inner > .item > img,.carousel-inner > .item > a > img{line-height: 1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner > .item{transition: transform .6s ease-in-out;backface-visibility: hidden;perspective: 1000}.carousel-inner > .item.next,.carousel-inner > .item.active.right{transform: translate3d(100%, 0, 0);left: 0}.carousel-inner > .item.prev,.carousel-inner > .item.active.left{transform: translate3d(-100%, 0, 0);left: 0}.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active{transform: translate3d(0, 0, 0);left: 0}}.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev{display: block}.carousel-inner > .active{left: 0}.carousel-inner > .next,.carousel-inner > .prev{position: absolute;top: 0;width: 100%}.carousel-inner > .next{left: 100%}.carousel-inner > .prev{left: -100%}.carousel-inner > .next.left,.carousel-inner > .prev.right{left: 0}.carousel-inner > .active.left{left: -100%}.carousel-inner > .active.right{left: 100%}.carousel-control{position: absolute;top: 0;left: 0;bottom: 0;width: 15%;opacity: .5;filter: alpha(opacity=50);font-size: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left: auto;right: 0;background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline: 0;color: #fff;text-decoration: none;opacity: .9;filter: alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position: absolute;top: 50%;z-index: 5;display: inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left: 50%;margin-left: -10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right: 50%;margin-right: -10px}.carousel-control .icon-prev,.carousel-control .icon-next{width: 20px;height: 20px;margin-top: -10px;font-family: serif}.carousel-control .icon-prev:before{content: '\2039'}.carousel-control .icon-next:before{content: '\203a'}.carousel-indicators{position: absolute;bottom: 10px;left: 50%;z-index: 15;width: 60%;margin-left: -30%;padding-left: 0;list-style: none;text-align: center}.carousel-indicators li{display: inline-block;width: 10px;height: 10px;margin: 1px;text-indent: -999px;border: 1px solid #fff;border-radius: 10px;cursor: pointer;background-color: #000 \9;background-color: rgba(0,0,0,0)}.carousel-indicators .active{margin: 0;width: 12px;height: 12px;background-color: #fff}.carousel-caption{position: absolute;left: 15%;right: 15%;bottom: 20px;z-index: 10;padding-top: 20px;padding-bottom: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow: none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width: 30px;height: 30px;margin-top: -15px;font-size: 30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left: -15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right: -15px}.carousel-caption{left: 20%;right: 20%;padding-bottom: 30px}.carousel-indicators{bottom: 20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content: " ";display: table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear: both}.center-block{display: block;margin-left: auto;margin-right: auto}.pull-right{float: right !important}.pull-left{float: left !important}.hide{display: none !important}.show{display: block !important}.invisible{visibility: hidden}.text-hide{font: 0/0 a;color: transparent;text-shadow: none;background-color: transparent;border: 0}.hidden{display: none !important;visibility: hidden !important}.affix{position: fixed}@-ms-viewport{width: device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display: none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display: none !important}@media (max-width: 767px){.visible-xs{display: block !important}table.visible-xs{display: table}tr.visible-xs{display: table-row !important}th.visible-xs,td.visible-xs{display: table-cell !important}}@media (max-width: 767px){.visible-xs-block{display: block !important}}@media (max-width: 767px){.visible-xs-inline{display: inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display: inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display: block !important}table.visible-sm{display: table}tr.visible-sm{display: table-row !important}th.visible-sm,td.visible-sm{display: table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display: block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display: inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display: inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display: block !important}table.visible-md{display: table}tr.visible-md{display: table-row !important}th.visible-md,td.visible-md{display: table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display: block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display: inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display: inline-block !important}}@media (min-width: 1200px){.visible-lg{display: block !important}table.visible-lg{display: table}tr.visible-lg{display: table-row !important}th.visible-lg,td.visible-lg{display: table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display: block !important}}@media (min-width: 1200px){.visible-lg-inline{display: inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display: inline-block !important}}@media (max-width: 767px){.hidden-xs{display: none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display: none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display: none !important}}@media (min-width: 1200px){.hidden-lg{display: none !important}}.visible-print{display: none !important}@media print{.visible-print{display: block !important}table.visible-print{display: table}tr.visible-print{display: table-row !important}th.visible-print,td.visible-print{display: table-cell !important}}.visible-print-block{display: none !important}@media print{.visible-print-block{display: block !important}}.visible-print-inline{display: none !important}@media print{.visible-print-inline{display: inline !important}}.visible-print-inline-block{display: none !important}@media print{.visible-print-inline-block{display: inline-block !important}}@media print{.hidden-print{display: none !important}}.sr-only{clip: rect(1px, 1px, 1px, 1px);position: absolute;width: auto;height: auto;margin: 0;padding: 0;overflow: hidden;border: 0}.sr-only:focus{background-color: #fff;border-radius: 3px;clip: auto;color: #132531;display: block;font-size: 13px;height: 65px;line-height: 18px;padding: 23.5px 7px;position: absolute;left: 5px;top: 5px;text-decoration: none;text-transform: none;width: auto;z-index: 100000}.navbar-brand{font-size: 20px}.alert.alert-info a{text-decoration: underline}.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover{color: #000}[data-toggle~=dropdown]{cursor: pointer}.fa{cursor: default}@media (min-width: 768px){.form-control{max-width: 400px}}.has-error{margin-bottom: 0}.help-block.with-errors{padding: 3px 0}.help-block.with-errors:empty{padding: 0}.help-block.with-errors,.help-block.with-errors .list-unstyled{margin: 0}.highlight,mark{background: #ff6;padding: .1em .2em}.icon-bar{background-color: #888}img{max-width: 100%}label.list-group-item{border-radius: 0;font-weight: normal;margin-top: 0;padding-left: 35px}.list-group-item.title{font-weight: bold}#modal .modal-body > h2:first-child{display: none}.popover{width: 250px}.sub-breadcrumb{padding: 5px 10px;white-space: nowrap}.sub-breadcrumb li{display: inline-block}.sub-breadcrumb li + li:before{content: "/\00a0";padding: 0 5px;color: #777}.tab-content{padding: 4px}.group{background: #eee;border-radius: 3px;border: 1px solid #c8c8c8;margin: 0 0 6px;padding: 10px 10px 10px 25px}.group .add_search_link{display: inline-block;margin-top: 4px}.group [class^=col-]{padding-left: 0}.group .search{margin-bottom: 2px}#groupPlaceHolder{display: block;padding: 6px}.alphabrowse{border-collapse: separate}.alphabrowse .lcc{width: 20%}.alphabrowse .titles{width: 10%;text-align: center}.alphabrowse tr.browse-match td{border-top: .2em solid #619144;border-bottom: .2em solid #619144}.alphabrowse tr.browse-match td:first-child{border-left: .2em solid #619144}.alphabrowse tr.browse-match td:last-child{border-right: .2em solid #619144}.twitter-typeahead{background: #FFF;border-radius: 3px;vertical-align: top}.twitter-typeahead .tt-hint{display: none}@media (max-width: 767px){.twitter-typeahead{width: 100%}}.tt-dropdown-menu{margin-bottom: 20px;padding-left: 0}.tt-suggestion{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd;cursor: pointer;text-overflow: ellipsis;white-space: nowrap}.tt-suggestion:first-child{border-top-right-radius: 3px;border-top-left-radius: 3px}.tt-suggestion:last-child{margin-bottom: 0;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.tt-suggestion.disabled,.tt-suggestion.disabled:hover,.tt-suggestion.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.tt-suggestion.disabled .list-group-item-heading,.tt-suggestion.disabled:hover .list-group-item-heading,.tt-suggestion.disabled:focus .list-group-item-heading{color: inherit}.tt-suggestion.disabled .list-group-item-text,.tt-suggestion.disabled:hover .list-group-item-text,.tt-suggestion.disabled:focus .list-group-item-text{color: #777}.tt-suggestion.active,.tt-suggestion.active:hover,.tt-suggestion.active:focus{z-index: 2;color: #fff;background-color: #619144;border-color: #619144}.tt-suggestion.active .list-group-item-heading,.tt-suggestion.active:hover .list-group-item-heading,.tt-suggestion.active:focus .list-group-item-heading,.tt-suggestion.active .list-group-item-heading > small,.tt-suggestion.active:hover .list-group-item-heading > small,.tt-suggestion.active:focus .list-group-item-heading > small,.tt-suggestion.active .list-group-item-heading > .small,.tt-suggestion.active:hover .list-group-item-heading > .small,.tt-suggestion.active:focus .list-group-item-heading > .small{color: inherit}.tt-suggestion.active .list-group-item-text,.tt-suggestion.active:hover .list-group-item-text,.tt-suggestion.active:focus .list-group-item-text{color: #cce1c0}.tt-suggestion i.fa{cursor: inherit}.tt-suggestion.active{white-space: inherit}.tt-suggestion.tt-cursor{background-color: #619144;color: #FFF}.tt-suggestion p{margin: 0}.badge a{color: #FFF}.browse.list-group .list-group-item{word-wrap: break-word}.browse.list-group .list-group-item.view-record{border-top: 0;font-size: 85%;padding: 2px 4px;text-align: right}.fa-grid:before{content: "\f00a"}.fa-visual:before{content: "\f008"}.fa-mobile:before{content: "\f10a"}.fa-x:before{content: "\f0f6"}.fa-atlas:before{content: "\f14e"}.fa-book:before{content: "\f02d"}.fa-braille:before{content: "\f0a6"}.fa-cdrom{content: "\f109"}.fa-chart:before{content: "\f012"}.fa-chipcartridge:before{content: "\f109"}.fa-collage:before{content: "\f03e"}.fa-disccartridge:before{content: "\f109"}.fa-drawing:before{content: "\f03e"}.fa-ebook:before{content: "\f0f6"}.fa-electronic:before{content: "\f1c6"}.fa-filmstrip:before{content: "\f008"}.fa-flashcard:before{content: "\f0e7"}.fa-floppydisk:before{content: "\f0c7"}.fa-globe:before{content: "\f0ac"}.fa-journal:before{content: "\f0f6"}.fa-kit:before{content: "\f0b1"}.fa-manuscript:before{content: "\f0f6"}.fa-map:before{content: "\f14e"}.fa-microfilm:before{content: "\f008"}.fa.fa-mobile:before{content: "\f10a"}.fa-motionpicture:before{content: "\f03d"}.fa-musicalscore:before{content: "\f001"}.fa-musicrecording:before{content: "\f001"}.fa-newspaper:before{content: "\f0f6"}.fa-online:before{content: "\f109"}.fa-painting:before{content: "\f03e"}.fa-photo:before{content: "\f03e"}.fa-photonegative:before{content: "\f03e"}.fa-physicalobject:before{content: "\f187"}.fa-print:before{content: "\f03e"}.fa-sensorimage:before{content: "\f03e"}.fa-serial:before{content: "\f0f6"}.fa-slide:before{content: "\f008"}.fa-software:before{content: "\f109"}.fa-soundcassette:before{content: "\f025"}.fa-sounddisc:before{content: "\f109"}.fa-soundrecording:before{content: "\f025"}.fa-tapecartridge:before{content: "\f109"}.fa-tapecassette:before{content: "\f025"}.fa-tapereel:before{content: "\f008"}.fa-transparency:before{content: "\f008"}.fa-unknown:before{content: "\f128"}.fa-video:before{content: "\f03d"}.fa-videocartridge:before{content: "\f03d"}.fa-videocassette:before{content: "\f03d"}.fa-videodisc:before{content: "\f109"}.fa-videoreel:before{content: "\f03d"}.citation .pace-car th,.citation .pace-car td{border: 0;padding: 0}.citation th{text-align: right}#hierarchyTreeHolder{border-right: 1px solid #eee;overflow-x: hidden}#hierarchyTree .currentHierarchy > a,#hierarchyTree .currentRecord a{color: #000;font-weight: bold}.bulkActionButtons label{display: inline-block}.bulkActionButtons label input{margin-top: 2px}@media (max-width: 767px){.grid{min-height: 250px}}.result a.title{font-weight: bold}.result .left{text-align: center}.result .left img{max-width: 100%}@media (max-width: 767px){.result a{text-decoration: underline}.result .middle,.result .right{padding: 0}}@media (max-width: 530px){.result .checkbox{display: none !important}.result .left{width: 40%}.result .middle{width: 60%}.result .right{display: none}}.search-controls .alert{margin-bottom: 0}.title-in-heading{font-size: inherit;font-style: italic}.sidebar label:not(.list-group-item){margin-left: 20px}.sidebar .list-group:not(.filters) .title{cursor: pointer}.sidebar .list-group:not(.filters) .title.collapsed{border-radius: 3px}.sidebar .list-group:not(.filters) .title.collapsed:after{content: '\25BC'}.sidebar .list-group:not(.filters) .title:after{content: '\25B2';float: right}.sidebar .collapse .list-group-item,.sidebar .collapsing .list-group-item{border-top-left-radius: 0px;border-top-right-radius: 0px}.sidebar .collapse .list-group-item[id^=more],.sidebar .collapsing .list-group-item[id^=more]{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.sidebar #side-collapse-publishDate .list-group-item{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.list-group-item i.fa,.badge i.fa{cursor: inherit}.sidebar .facet a{text-decoration: none}.top-row .applied{font-weight: bold}.top-row .applied:hover{color: #a94442}.top-row .applied:hover .fa.fa-check:before{content: "\f00d"}.slider-container{padding: 4px 10px;text-align: center}.slider-container .slider.slider-horizontal{width: 100%}.slider-container .slider-track{background: #777;box-shadow: inset 0 1px 0 rgba(0,0,0,0.4)}.slider-container .slider-handle{background: #619144;background-image: none;border: 1px solid #619144;box-shadow: none;opacity: .9}.slider-container .slider-handle:hover,.slider-container .slider-handle:active,.slider-container .slider-handle:focus{opacity: 1;background: #FFF;border-color: #777}.slider-container .slider-handle:active,.slider-container .slider-handle:focus{border-color: #619144}.slider-container .slider-selection{background: #CCC;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.3)}.table{word-wrap: break-word;table-layout: fixed}.node{border: 1px solid #fff;box-sizing: content-box;font: 10px sans-serif;line-height: 12px;overflow: hidden;position: absolute;margin: -1px}.node div{margin-top: 0px}.toplevel{border: 2px solid #000}.node .label{background: rgba(0,0,0,0.5);border-radius: 0;font-size: 85%;position: absolute;bottom: 0;left: 0;text-shadow: none;min-height: 1px;padding: 2px 4px}.notalabel{color: #000000}#viz-instructions{padding-top: 600px}#similar-items-carousel .carousel-indicators{bottom: 0px}#similar-items-carousel .carousel-indicators li{background: rgba(255,255,255,0.3);border-color: #222;margin: 2px;width: 8px;height: 8px}#similar-items-carousel .hover-overlay{display: block;position: relative;text-align: center;margin: auto;min-width: 150px;min-height: 200px}#similar-items-carousel .hover-overlay img{margin: 10px 0;max-width: 100%}#similar-items-carousel .hover-overlay .content{display: none;position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0,0,0,0.5);color: #FFF;padding: .5em .5em 0}#similar-items-carousel .hover-overlay:hover .content{display: block}#similar-items-carousel .item{padding: 0 4em}.facet .jstree-ocl:before{font-family: 'FontAwesome';float: left;speak: none;font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;padding: 0;width: 10px;margin-left: -10px}.facet .jstree-default .jstree-open > .jstree-ocl:before{content: "\f0d7"}.facet .jstree-default .jstree-closed > .jstree-ocl:before{content: "\f0da"}.facet .jstree-default .jstree-leaf > .jstree-ocl:before{content: " "}li.jstree-facet ul{padding-left: 20px}.jstree-facet li span.main{display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;padding-left: 1px}li.jstree-facet,li.jstree-node{list-style: none}.jstree-facet .jstree-container-ul{padding: 0}.jstree-facet .jstree-container-ul > li.active,.jstree-facet .jstree-container-ul > li.active a.jstree-anchor{background-color: #265680;color: #fff}li.jstree-facet .badge{cursor: text}.hierarchy-tree .jstree-ocl:before{font-family: 'FontAwesome';float: left;speak: none;font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;padding: 0;width: 10px;margin-left: -10px}.hierarchy-tree .jstree-open > .jstree-ocl:before{content: "\f0d7"}.hierarchy-tree .jstree-closed > .jstree-ocl:before{content: "\f0da"}.hierarchy-tree .jstree-leaf > .jstree-ocl:before{content: " "}.hierarchy-tree .jstree-icon{color: #000;width: 16px}.hierarchy-tree .jstree-anchor{white-space: nowrap;padding: 2px 5px}.hierarchy-tree .jstree-container-ul,.hierarchy-tree .jstree-children{padding-left: 16px}.hierarchy-tree .jstree-initial-node{display: none}.hierarchy-tree .jstree-clicked{color: #fff;background-color: #619144}.hierarchy-tree .jstree-clicked .jstree-icon{color: #FFF}.bp-icon,.fa-x,i.fa-archive,i.fa-asterisk,i.fa-atlas,i.fa-bell,i.fa-book,i.fa-bookbag-add,i.fa-bookbag-delete,i.fa-bookbag-empty,i.fa-bookmark,i.fa-braille,i.fa-cancel-all-holds,i.fa-cancel-all-storage-retrieval-requests,i.fa-cancel-holds,i.fa-cancel-storage-retrieval-requests,i.fa-cdrom,i.fa-chart,i.fa-chipcartridge,i.fa-collage,i.fa-disccartridge,i.fa-drawing,i.fa-ebook,i.fa-edit,i.fa-electronic,i.fa-email,i.fa-envelope,i.fa-envelope-alt,i.fa-exchange,i.fa-external-link,i.fa-filmstrip,i.fa-flag,i.fa-flag,i.fa-flashcard,i.fa-floppydisk,i.fa-globe,i.fa-grid,i.fa-heart,i.fa-home,i.fa-inbox,i.fa-journal,i.fa-kit,i.fa-leaf,.fa-sitemap,i.fa-list,i.fa-list-alt,i.fa-export,i.fa-lock,i.fa-manuscript,i.fa-map,i.fa-microfilm,i.fa-minus-circle,i.fa-minus-sign,i.fa-mobile,i.fa-motionpicture,i.fa-musicalscore,i.fa-musicrecording,i.fa-newspaper,i.fa-ok,i.fa-online,i.fa-painting,i.fa-photo,i.fa-photonegative,i.fa-physicalobject,i.fa-plus,i.fa-plus-sign,i.fa-print,i.fa-qrcode,i.fa-remove,i.fa-renew,i.fa-renew-all,i.fa-report,i.fa-rss,i.fa-search,i.fa-sensorimage,i.fa-serial,i.fa-shopping-cart,i.fa-sign-in,i.fa-sign-out,i.fa-slide,i.fa-software,i.fa-soundcassette,i.fa-sounddisc,i.fa-soundrecording,i.fa-spinner,i.fa-star,i.fa-suitcase,i.fa-tapecartridge,i.fa-tapecassette,i.fa-tapereel,i.fa-transparency,i.fa-trash-o,i.fa-tree,i.fa-tree-muted,i.fa-unknown,i.fa-usd,i.fa-user,i.fa-video,i.fa-videocartridge,i.fa-videocassette,i.fa-videodisc,i.fa-videoreel,i.fa-visual{background-position: center center;background-repeat: no-repeat;color: transparent;content: '';display: inline-block;height: 16px;margin: 0;padding: 0;text-shadow: none;vertical-align: text-bottom;width: 16px}.fa-x{background-image: url('../../../themes/bootprint3/images/icons/page_white.png')}i.fa-archive{background-image: url('../../../themes/bootprint3/images/icons/package.png')}i.fa-asterisk{background-image: url('../../../themes/bootprint3/images/icons/list.png')}i.fa-atlas{background-image: url('../../../themes/bootprint3/images/icons/map.png')}i.fa-bell{background-image: url('../../../themes/bootprint3/images/icons/bell.png')}i.fa-book{background-image: url('../../../themes/bootprint3/images/icons/book.png')}i.fa-bookbag-add{background-image: url('../../../themes/bootprint3/images/icons/bookbag_add.png')}i.fa-bookbag-delete{background-image: url('../../../themes/bootprint3/images/icons/bookbag_delete.png')}i.fa-bookbag-empty{background-image: url('../../../themes/bootprint3/images/icons/bookbag_empty.png')}i.fa-bookmark{background-image: url('../../../themes/bootprint3/images/icons/bookmark_add.png')}i.fa-braille{background-image: url('../../../themes/bootprint3/images/icons/page_red.png')}i.fa-cancel-all-holds{background-image: url('../../../themes/bootprint3/images/icons/holdCancelAll.png')}i.fa-cancel-all-storage-retrieval-requests{background-image: url('../../../themes/bootprint3/images/icons/holdCancelAll.png')}i.fa-cancel-holds{background-image: url('../../../themes/bootprint3/images/icons/holdCancel.png')}i.fa-cancel-storage-retrieval-requests{background-image: url('../../../themes/bootprint3/images/icons/holdCancel.png')}i.fa-cdrom{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-chart{background-image: url('../../../themes/bootprint3/images/icons/chart_bar.png')}i.fa-chipcartridge{background-image: url('../../../themes/bootprint3/images/icons/server.png')}i.fa-collage{background-image: url('../../../themes/bootprint3/images/icons/pictures.png')}i.fa-disccartridge{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-drawing{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-ebook{background-image: url('../../../themes/bootprint3/images/icons/book_addresses.png')}i.fa-edit{background-image: url('../../../themes/bootprint3/images/icons/edit.png')}i.fa-electronic{background-image: url('../../../themes/bootprint3/images/icons/mouse.png')}i.fa-email,i.fa-envelope,i.fa-envelope-alt{background-image: url('../../../themes/bootprint3/images/icons/email.png')}i.fa-exchange{background-image: url('../../../themes/bootprint3/images/icons/arrow_refresh.png')}i.fa-external-link{background-image: url('../../../themes/bootprint3/images/icons/link_go.png')}i.fa-filmstrip{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-flag{background-image: url('../../../themes/bootprint3/images/icons/flag_red.png')}i.fa-flashcard{background-image: url('../../../themes/bootprint3/images/icons/table_lightening.png')}i.fa-floppydisk{background-image: url('../../../themes/bootprint3/images/icons/disk.png')}i.fa-globe{background-image: url('../../../themes/bootprint3/images/icons/world.png')}i.fa-grid{background-image: url('../../../themes/bootprint3/images/icons/view_grid.png')}i.fa-heart{background-image: url('../../../themes/bootprint3/images/icons/heart.png')}i.fa-home{background-image: url('../../../themes/bootprint3/images/icons/house.png')}i.fa-inbox{background-image: url('../../../themes/bootprint3/images/icons/box.png')}i.fa-journal{background-image: url('../../../themes/bootprint3/images/icons/book.png')}i.fa-kit{background-image: url('../../../themes/bootprint3/images/icons/briefcase.png')}i.fa-leaf,.fa-sitemap{background-image: url('../../../themes/bootprint3/images/icons/treeCurrent.png')}i.fa-list{background-image: url('../../../themes/bootprint3/images/icons/view_list.png')}i.fa-list-alt,i.fa-export{background-image: url('../../../themes/bootprint3/images/icons/application_add.png')}i.fa-lock{background-image: url('../../../themes/bootprint3/images/icons/lock.png')}i.fa-manuscript{background-image: url('../../../themes/bootprint3/images/icons/script.png')}i.fa-map{background-image: url('../../../themes/bootprint3/images/icons/map.png')}i.fa-microfilm{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-minus-circle,i.fa-minus-sign{background-image: url('../../../themes/bootprint3/images/icons/delete.png')}i.fa-mobile{background-image: url('../../../themes/bootprint3/images/icons/phone.png')}i.fa-motionpicture{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-musicalscore{background-image: url('../../../themes/bootprint3/images/icons/music.png')}i.fa-musicrecording{background-image: url('../../../themes/bootprint3/images/icons/music.png')}i.fa-newspaper{background-image: url('../../../themes/bootprint3/images/icons/newspaper.png')}i.fa-ok{background-image: url('../../../themes/bootprint3/images/icons/tick.png')}i.fa-online{background-image: url('../../../themes/bootprint3/images/icons/computer.png')}i.fa-painting{background-image: url('../../../themes/bootprint3/images/icons/paintbrush.png')}i.fa-photo{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-photonegative{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-physicalobject{background-image: url('../../../themes/bootprint3/images/icons/box.png')}i.fa-plus{background-image: url('../../../themes/bootprint3/images/icons/add.png')}i.fa-plus-sign{background-image: url('../../../themes/bootprint3/images/icons/add.png')}i.fa-print{background-image: url('../../../themes/bootprint3/images/icons/printer.png')}i.fa-qrcode{background-image: url('../../../themes/bootprint3/images/icons/qrcode.png')}i.fa-remove{background-image: url('../../../themes/bootprint3/images/icons/delete.png')}i.fa-renew{background-image: url('../../../themes/bootprint3/images/icons/renew.png')}i.fa-renew-all{background-image: url('../../../themes/bootprint3/images/icons/renewAll.png')}i.fa-report{background-image: url('../../../themes/bootprint3/images/icons/report.png')}i.fa-rss{background-image: url('../../../themes/bootprint3/images/icons/feed.png')}i.fa-search{background-image: url('../../../themes/bootprint3/images/icons/magnifier.png')}i.fa-sensorimage{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-serial{background-image: url('../../../themes/bootprint3/images/icons/page_white_stack.png')}i.fa-shopping-cart{background-image: url('../../../themes/bootprint3/images/icons/cart.png')}i.fa-sign-in{background-image: url('../../../themes/bootprint3/images/icons/door_in.png')}i.fa-sign-out{background-image: url('../../../themes/bootprint3/images/icons/door_out.png')}i.fa-slide{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-software{background-image: url('../../../themes/bootprint3/images/icons/drive_cd.png')}i.fa-soundcassette{background-image: url('../../../themes/bootprint3/images/icons/sound.png')}i.fa-sounddisc{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-soundrecording{background-image: url('../../../themes/bootprint3/images/icons/sound.png')}i.fa-spinner{background-image: url('../../../themes/bootprint3/images/icons/ajax_loading.gif')}i.fa-star{background-image: url('../../../themes/bootprint3/images/icons/star.png')}i.fa-suitcase{background-image: url('../../../themes/bootprint3/images/icons/bookbag.png')}i.fa-tapecartridge{background-image: url('../../../themes/bootprint3/images/icons/drive.png')}i.fa-tapecassette{background-image: url('../../../themes/bootprint3/images/icons/drive.png')}i.fa-tapereel{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-transparency{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-trash-o{background-image: url('../../../themes/bootprint3/images/icons/bin.png')}i.fa-tree{background-image: url('../../../themes/bootprint3/images/icons/treeCurrent.png')}i.fa-tree-muted{background-image: url('../../../themes/bootprint3/images/icons/treeMuted.png')}i.fa-unknown{background-image: url('../../../themes/bootprint3/images/icons/page_white.png')}i.fa-usd{background-image: url('../../../themes/bootprint3/images/icons/money_dollar.png')}i.fa-user{background-image: url('../../../themes/bootprint3/images/icons/user.png')}i.fa-video{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videocartridge{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videocassette{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videodisc{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-videoreel{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-visual{background-image: url('../../../themes/bootprint3/images/icons/view_visual.png')}body{background: #619144;font-size: 13px}body a,body .btn-link{color: #06C}body a:hover,body .btn-link:hover{color: #09F}@media (max-width: 767px){body{padding: 6px}body header{margin-top: 0}body .label{font-size: 85%}}@media (min-width: 768px){.badge{font-size: 85%;margin-top: 1px}.label{padding-top: .3em}}.btn{padding: 3px 5px 2px}.btn.btn-default{background: #eee;background-image: linear-gradient(#fff, #ddd);border: 1px solid #777;color: #222;text-shadow: 0 1px 0 #fff}.btn.btn-default:hover{border: 1px solid #333;color: #222;text-shadow: none}.btn-danger,.btn-danger:hover{border-color: #6e110e;font-weight: bold}.btn-info,.btn-info:hover{border-color: #103743;font-weight: bold}.btn-primary,.btn-primary:hover{border-color: #456730;font-weight: bold}.btn-success,.btn-success:hover{border-color: #014701;font-weight: bold}.btn-warning,.btn-warning:hover{border-color: #683d00;font-weight: bold}h2{margin: 0 8px 8px}input[type=checkbox]{margin-top: 2px;margin: 0 auto;padding: 0 2px}.nav > li > a{padding: 5px 10px}.nav-pills{display: table;margin: 0 auto}.navbar{min-height: 1px}.navbar-form{margin-top: 5px;margin-bottom: 5px}.pagination{display: table;margin: 18px auto}.pagination > li > a,.pagination > li > span{padding: 4px 12px 3px 12px}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{background: #619144;border-color: #619144}.panel-heading{padding: 0}.panel-heading a{cursor: pointer;display: inline-block;padding: 6px;width: 100%}.row:not(.top-row){padding: 6px 4px;margin: 0 -4px}.row.result:nth-child(even){background: #eee}.row.result:last-child{margin-bottom: 1em}.row > p{padding: 0 1em}.search .row{padding: 2px 0}.sub-breadcrumb{padding: 0 5px}.tab-content{padding: 6px 8px;border: 1px solid #ddd;border-top: 0}.container{background: #FFF;padding: 0}header{margin-top: 18px}header .fa.fa-bars{font-size: 21px}header .navbar{border-radius: 5px 5px 0 0;padding: 0 10px}header .navbar #searchForm{display: none !important}header .navbar .navbar-brand{background-image: url('../../../themes/bootprint3/images/vufind_logo.png');color: transparent;height: 65px;margin-top: 5px;width: 170px}header .navbar .navbar-brand:hover,header .navbar .navbar-brand:active,header .navbar .navbar-brand:focus{color: transparent}header .navbar .navbar-nav > li > a{padding: 12px 6px}@media (max-width: 767px){header .navbar .navbar-nav > li > a{padding: 8px 24px}}header .navbar .navbar-right{margin-top: 12px}@media (max-width: 767px){header .navbar .navbar-right{margin: 0}}header .searchbox{background: linear-gradient(to bottom, #fff, #eee);display: block !important}header .searchbox .tab-content{border: 0}header .searchbox .tab-content .navbar-text{margin: 5px 10px 5px 0}@media (max-width: 767px){header #header-collapse .navbar-right li{text-align: right}header #searchForm_type{margin-top: 2px;margin-bottom: 2px}}header .breadcrumb{border: 1px solid #ccc;border-radius: 0;border-width: 1px 0;font-size: 12px;margin-bottom: 2px;padding: 7px 20px 5px}#searchForm_lookfor,#searchForm_type{border-color: #619144}[name=searchForm]{margin: 6px 8px 8px;padding: 0}[name=searchForm] .btn-primary,[name=searchForm] .form-control{font-size: 14px;height: 32px;padding: 5px 8px}[name=searchForm] .btn-primary[multiple],[name=searchForm] .form-control[multiple]{height: auto}@media (min-width: 768px){[name=searchForm] .search-query{width: 400px}}[name=searchForm] .nav-tabs{border-bottom: 0;padding: 0 6px}[name=searchForm] .nav-tabs li a{margin-bottom: -1px;border-bottom: 0;padding-bottom: 6px}[name=searchForm] .nav-tabs li a:hover{background: none;border-color: transparent;text-decoration: underline}[name=searchForm] .nav-tabs li.active a,[name=searchForm] .nav-tabs li.active a:hover{background: #FFF;border-color: #619144;border-bottom: 0;text-decoration: none;z-index: 5}.main .container{padding: 0 4px 18px}footer{margin-bottom: 36px}footer .container{border-radius: 0 0 5px 5px;border-top: 1px solid #ddd;padding-top: 18px}footer hr{display: none}footer p{margin: 0}footer ul{padding-left: 30px}#commentList .comment:nth-child(even){background: #eee}#hierarchyRecord{background: #FFF}.alert{padding: 8px}.bulkActionButtons{margin-bottom: 6px}.left{text-align: center}.result > .col-xs-1.checkbox{width: auto}.result .label{display: inline-block;margin-bottom: 4px}.result .savedLists{margin: 0 0 4px 0;padding: 4px 0 4px 6px}.result .savedLists ul{padding-left: 18px}@media (max-width: 767px){.result .search-controls .form-inline{text-align: left}}@media (min-width: 768px){.result > .col-xs-1.checkbox{padding: 0}.result > .col-xs-11{width: 95%;padding: 0}}.search-controls label{text-align: left}@media (max-width: 767px){.search-controls{margin: 4px -4px;padding: 4px 0}}.searchHomeContent{float: none;margin: 1em auto;width: 90%}#advSearchForm .search{margin: 0}.sidebar .list-group{margin-bottom: 5px}.sidebar .list-group label.list-group-item{padding-left: 26px}.sidebar .list-group label.list-group-item input[type=checkbox]{margin-top: 2px}.sidebar .list-group-item{padding: 7px 10px 6px}.sidebar .list-group-item.active{background: #e70;border-color: #e70;color: #FFF}.sidebar .list-group-item.active:hover{background: #e70;border-color: #e70}.sidebar .list-group-item.active .badge{color: #e70}.sidebar .slider-container{margin: 4px auto 10px;width: 95%}.sidebar .slider-container .slider-handle{background: #619144;opacity: 1}.sidebar .list-group-item .badge a,.top-row .badge a{color: #FFF}.sidebar .list-group-item .badge a:hover,.top-row .badge a:hover{color: #a41915}#custom_recaptcha_widget{display: table}#custom_recaptcha_widget embed{display: none}#custom_recaptcha_widget #recaptcha_image{border: 1px solid #000;padding: 6px;margin: 1em 0}#custom_recaptcha_widget #recaptcha_response_field{margin: 0 .5em}#custom_recaptcha_widget > div > a{display: inline-block;float: left;margin: 5px 10px 5px 0}ul.random{list-style: none;padding: 0;margin: 0px;text-align: justified}ul.random li{padding-bottom: 10px}ul.random li img{margin: 0 auto 1em auto}ul.random.image,ul.random.mixed{text-align: center}ul.random.image li img{margin: 0 auto}.tt-dropdown-menu{margin: 2px}[id^=list].list-group .col-sm-9{margin: 0}.container > .row > .col-xs-12{padding: 0}.vudl.row{padding: 4px 0}
\ No newline at end of file
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display: block}audio,canvas,progress,video{display: inline-block;vertical-align: baseline}audio:not([controls]){display: none;height: 0}[hidden],template{display: none}a{background-color: transparent}a:active,a:hover{outline: 0}abbr[title]{border-bottom: 1px dotted}b,strong{font-weight: bold}dfn{font-style: italic}h1{font-size: 2em;margin: .67em 0}mark{background: #ff0;color: #000}small{font-size: 80%}sub,sup{font-size: 75%;line-height: 0;position: relative;vertical-align: baseline}sup{top: -0.5em}sub{bottom: -0.25em}img{border: 0}svg:not(:root){overflow: hidden}figure{margin: 1em 40px}hr{-moz-box-sizing: content-box;box-sizing: content-box;height: 0}pre{overflow: auto}code,kbd,pre,samp{font-family: monospace, monospace;font-size: 1em}button,input,optgroup,select,textarea{color: inherit;font: inherit;margin: 0}button{overflow: visible}button,select{text-transform: none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance: button;cursor: pointer}button[disabled],html input[disabled]{cursor: default}button::-moz-focus-inner,input::-moz-focus-inner{border: 0;padding: 0}input{line-height: normal}input[type="checkbox"],input[type="radio"]{box-sizing: border-box;padding: 0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height: auto}input[type="search"]{-webkit-appearance: textfield;-moz-box-sizing: content-box;-webkit-box-sizing: content-box;box-sizing: content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance: none}fieldset{border: 1px solid #c0c0c0;margin: 0 2px;padding: .35em .625em .75em}legend{border: 0;padding: 0}textarea{overflow: auto}optgroup{font-weight: bold}table{border-collapse: collapse;border-spacing: 0}td,th{padding: 0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background: transparent !important;color: #000 !important;box-shadow: none !important;text-shadow: none !important}a,a:visited{text-decoration: underline}a[href]:after{content: " (" attr(href) ")"}abbr[title]:after{content: " (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content: ""}pre,blockquote{border: 1px solid #999;page-break-inside: avoid}thead{display: table-header-group}tr,img{page-break-inside: avoid}img{max-width: 100% !important}p,h2,h3{orphans: 3;widows: 3}h2,h3{page-break-after: avoid}select{background: #fff !important}.navbar{display: none}.btn > .caret,.dropup > .btn > .caret{border-top-color: #000 !important}.label{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 #ddd !important}}@font-face{font-family: 'Glyphicons Halflings';src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot');src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position: relative;top: 1px;display: inline-block;font-family: 'Glyphicons Halflings';font-style: normal;font-weight: normal;line-height: 1;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale}.glyphicon-asterisk:before{content: "\2a"}.glyphicon-plus:before{content: "\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content: "\20ac"}.glyphicon-minus:before{content: "\2212"}.glyphicon-cloud:before{content: "\2601"}.glyphicon-envelope:before{content: "\2709"}.glyphicon-pencil:before{content: "\270f"}.glyphicon-glass:before{content: "\e001"}.glyphicon-music:before{content: "\e002"}.glyphicon-search:before{content: "\e003"}.glyphicon-heart:before{content: "\e005"}.glyphicon-star:before{content: "\e006"}.glyphicon-star-empty:before{content: "\e007"}.glyphicon-user:before{content: "\e008"}.glyphicon-film:before{content: "\e009"}.glyphicon-th-large:before{content: "\e010"}.glyphicon-th:before{content: "\e011"}.glyphicon-th-list:before{content: "\e012"}.glyphicon-ok:before{content: "\e013"}.glyphicon-remove:before{content: "\e014"}.glyphicon-zoom-in:before{content: "\e015"}.glyphicon-zoom-out:before{content: "\e016"}.glyphicon-off:before{content: "\e017"}.glyphicon-signal:before{content: "\e018"}.glyphicon-cog:before{content: "\e019"}.glyphicon-trash:before{content: "\e020"}.glyphicon-home:before{content: "\e021"}.glyphicon-file:before{content: "\e022"}.glyphicon-time:before{content: "\e023"}.glyphicon-road:before{content: "\e024"}.glyphicon-download-alt:before{content: "\e025"}.glyphicon-download:before{content: "\e026"}.glyphicon-upload:before{content: "\e027"}.glyphicon-inbox:before{content: "\e028"}.glyphicon-play-circle:before{content: "\e029"}.glyphicon-repeat:before{content: "\e030"}.glyphicon-refresh:before{content: "\e031"}.glyphicon-list-alt:before{content: "\e032"}.glyphicon-lock:before{content: "\e033"}.glyphicon-flag:before{content: "\e034"}.glyphicon-headphones:before{content: "\e035"}.glyphicon-volume-off:before{content: "\e036"}.glyphicon-volume-down:before{content: "\e037"}.glyphicon-volume-up:before{content: "\e038"}.glyphicon-qrcode:before{content: "\e039"}.glyphicon-barcode:before{content: "\e040"}.glyphicon-tag:before{content: "\e041"}.glyphicon-tags:before{content: "\e042"}.glyphicon-book:before{content: "\e043"}.glyphicon-bookmark:before{content: "\e044"}.glyphicon-print:before{content: "\e045"}.glyphicon-camera:before{content: "\e046"}.glyphicon-font:before{content: "\e047"}.glyphicon-bold:before{content: "\e048"}.glyphicon-italic:before{content: "\e049"}.glyphicon-text-height:before{content: "\e050"}.glyphicon-text-width:before{content: "\e051"}.glyphicon-align-left:before{content: "\e052"}.glyphicon-align-center:before{content: "\e053"}.glyphicon-align-right:before{content: "\e054"}.glyphicon-align-justify:before{content: "\e055"}.glyphicon-list:before{content: "\e056"}.glyphicon-indent-left:before{content: "\e057"}.glyphicon-indent-right:before{content: "\e058"}.glyphicon-facetime-video:before{content: "\e059"}.glyphicon-picture:before{content: "\e060"}.glyphicon-map-marker:before{content: "\e062"}.glyphicon-adjust:before{content: "\e063"}.glyphicon-tint:before{content: "\e064"}.glyphicon-edit:before{content: "\e065"}.glyphicon-share:before{content: "\e066"}.glyphicon-check:before{content: "\e067"}.glyphicon-move:before{content: "\e068"}.glyphicon-step-backward:before{content: "\e069"}.glyphicon-fast-backward:before{content: "\e070"}.glyphicon-backward:before{content: "\e071"}.glyphicon-play:before{content: "\e072"}.glyphicon-pause:before{content: "\e073"}.glyphicon-stop:before{content: "\e074"}.glyphicon-forward:before{content: "\e075"}.glyphicon-fast-forward:before{content: "\e076"}.glyphicon-step-forward:before{content: "\e077"}.glyphicon-eject:before{content: "\e078"}.glyphicon-chevron-left:before{content: "\e079"}.glyphicon-chevron-right:before{content: "\e080"}.glyphicon-plus-sign:before{content: "\e081"}.glyphicon-minus-sign:before{content: "\e082"}.glyphicon-remove-sign:before{content: "\e083"}.glyphicon-ok-sign:before{content: "\e084"}.glyphicon-question-sign:before{content: "\e085"}.glyphicon-info-sign:before{content: "\e086"}.glyphicon-screenshot:before{content: "\e087"}.glyphicon-remove-circle:before{content: "\e088"}.glyphicon-ok-circle:before{content: "\e089"}.glyphicon-ban-circle:before{content: "\e090"}.glyphicon-arrow-left:before{content: "\e091"}.glyphicon-arrow-right:before{content: "\e092"}.glyphicon-arrow-up:before{content: "\e093"}.glyphicon-arrow-down:before{content: "\e094"}.glyphicon-share-alt:before{content: "\e095"}.glyphicon-resize-full:before{content: "\e096"}.glyphicon-resize-small:before{content: "\e097"}.glyphicon-exclamation-sign:before{content: "\e101"}.glyphicon-gift:before{content: "\e102"}.glyphicon-leaf:before{content: "\e103"}.glyphicon-fire:before{content: "\e104"}.glyphicon-eye-open:before{content: "\e105"}.glyphicon-eye-close:before{content: "\e106"}.glyphicon-warning-sign:before{content: "\e107"}.glyphicon-plane:before{content: "\e108"}.glyphicon-calendar:before{content: "\e109"}.glyphicon-random:before{content: "\e110"}.glyphicon-comment:before{content: "\e111"}.glyphicon-magnet:before{content: "\e112"}.glyphicon-chevron-up:before{content: "\e113"}.glyphicon-chevron-down:before{content: "\e114"}.glyphicon-retweet:before{content: "\e115"}.glyphicon-shopping-cart:before{content: "\e116"}.glyphicon-folder-close:before{content: "\e117"}.glyphicon-folder-open:before{content: "\e118"}.glyphicon-resize-vertical:before{content: "\e119"}.glyphicon-resize-horizontal:before{content: "\e120"}.glyphicon-hdd:before{content: "\e121"}.glyphicon-bullhorn:before{content: "\e122"}.glyphicon-bell:before{content: "\e123"}.glyphicon-certificate:before{content: "\e124"}.glyphicon-thumbs-up:before{content: "\e125"}.glyphicon-thumbs-down:before{content: "\e126"}.glyphicon-hand-right:before{content: "\e127"}.glyphicon-hand-left:before{content: "\e128"}.glyphicon-hand-up:before{content: "\e129"}.glyphicon-hand-down:before{content: "\e130"}.glyphicon-circle-arrow-right:before{content: "\e131"}.glyphicon-circle-arrow-left:before{content: "\e132"}.glyphicon-circle-arrow-up:before{content: "\e133"}.glyphicon-circle-arrow-down:before{content: "\e134"}.glyphicon-globe:before{content: "\e135"}.glyphicon-wrench:before{content: "\e136"}.glyphicon-tasks:before{content: "\e137"}.glyphicon-filter:before{content: "\e138"}.glyphicon-briefcase:before{content: "\e139"}.glyphicon-fullscreen:before{content: "\e140"}.glyphicon-dashboard:before{content: "\e141"}.glyphicon-paperclip:before{content: "\e142"}.glyphicon-heart-empty:before{content: "\e143"}.glyphicon-link:before{content: "\e144"}.glyphicon-phone:before{content: "\e145"}.glyphicon-pushpin:before{content: "\e146"}.glyphicon-usd:before{content: "\e148"}.glyphicon-gbp:before{content: "\e149"}.glyphicon-sort:before{content: "\e150"}.glyphicon-sort-by-alphabet:before{content: "\e151"}.glyphicon-sort-by-alphabet-alt:before{content: "\e152"}.glyphicon-sort-by-order:before{content: "\e153"}.glyphicon-sort-by-order-alt:before{content: "\e154"}.glyphicon-sort-by-attributes:before{content: "\e155"}.glyphicon-sort-by-attributes-alt:before{content: "\e156"}.glyphicon-unchecked:before{content: "\e157"}.glyphicon-expand:before{content: "\e158"}.glyphicon-collapse-down:before{content: "\e159"}.glyphicon-collapse-up:before{content: "\e160"}.glyphicon-log-in:before{content: "\e161"}.glyphicon-flash:before{content: "\e162"}.glyphicon-log-out:before{content: "\e163"}.glyphicon-new-window:before{content: "\e164"}.glyphicon-record:before{content: "\e165"}.glyphicon-save:before{content: "\e166"}.glyphicon-open:before{content: "\e167"}.glyphicon-saved:before{content: "\e168"}.glyphicon-import:before{content: "\e169"}.glyphicon-export:before{content: "\e170"}.glyphicon-send:before{content: "\e171"}.glyphicon-floppy-disk:before{content: "\e172"}.glyphicon-floppy-saved:before{content: "\e173"}.glyphicon-floppy-remove:before{content: "\e174"}.glyphicon-floppy-save:before{content: "\e175"}.glyphicon-floppy-open:before{content: "\e176"}.glyphicon-credit-card:before{content: "\e177"}.glyphicon-transfer:before{content: "\e178"}.glyphicon-cutlery:before{content: "\e179"}.glyphicon-header:before{content: "\e180"}.glyphicon-compressed:before{content: "\e181"}.glyphicon-earphone:before{content: "\e182"}.glyphicon-phone-alt:before{content: "\e183"}.glyphicon-tower:before{content: "\e184"}.glyphicon-stats:before{content: "\e185"}.glyphicon-sd-video:before{content: "\e186"}.glyphicon-hd-video:before{content: "\e187"}.glyphicon-subtitles:before{content: "\e188"}.glyphicon-sound-stereo:before{content: "\e189"}.glyphicon-sound-dolby:before{content: "\e190"}.glyphicon-sound-5-1:before{content: "\e191"}.glyphicon-sound-6-1:before{content: "\e192"}.glyphicon-sound-7-1:before{content: "\e193"}.glyphicon-copyright-mark:before{content: "\e194"}.glyphicon-registration-mark:before{content: "\e195"}.glyphicon-cloud-download:before{content: "\e197"}.glyphicon-cloud-upload:before{content: "\e198"}.glyphicon-tree-conifer:before{content: "\e199"}.glyphicon-tree-deciduous:before{content: "\e200"}.glyphicon-cd:before{content: "\e201"}.glyphicon-save-file:before{content: "\e202"}.glyphicon-open-file:before{content: "\e203"}.glyphicon-level-up:before{content: "\e204"}.glyphicon-copy:before{content: "\e205"}.glyphicon-paste:before{content: "\e206"}.glyphicon-alert:before{content: "\e209"}.glyphicon-equalizer:before{content: "\e210"}.glyphicon-king:before{content: "\e211"}.glyphicon-queen:before{content: "\e212"}.glyphicon-pawn:before{content: "\e213"}.glyphicon-bishop:before{content: "\e214"}.glyphicon-knight:before{content: "\e215"}.glyphicon-baby-formula:before{content: "\e216"}.glyphicon-tent:before{content: "\26fa"}.glyphicon-blackboard:before{content: "\e218"}.glyphicon-bed:before{content: "\e219"}.glyphicon-apple:before{content: "\f8ff"}.glyphicon-erase:before{content: "\e221"}.glyphicon-hourglass:before{content: "\231b"}.glyphicon-lamp:before{content: "\e223"}.glyphicon-duplicate:before{content: "\e224"}.glyphicon-piggy-bank:before{content: "\e225"}.glyphicon-scissors:before{content: "\e226"}.glyphicon-bitcoin:before{content: "\e227"}.glyphicon-btc:before{content: "\e227"}.glyphicon-xbt:before{content: "\e227"}.glyphicon-yen:before{content: "\00a5"}.glyphicon-jpy:before{content: "\00a5"}.glyphicon-ruble:before{content: "\20bd"}.glyphicon-rub:before{content: "\20bd"}.glyphicon-scale:before{content: "\e230"}.glyphicon-ice-lolly:before{content: "\e231"}.glyphicon-ice-lolly-tasted:before{content: "\e232"}.glyphicon-education:before{content: "\e233"}.glyphicon-option-horizontal:before{content: "\e234"}.glyphicon-option-vertical:before{content: "\e235"}.glyphicon-menu-hamburger:before{content: "\e236"}.glyphicon-modal-window:before{content: "\e237"}.glyphicon-oil:before{content: "\e238"}.glyphicon-grain:before{content: "\e239"}.glyphicon-sunglasses:before{content: "\e240"}.glyphicon-text-size:before{content: "\e241"}.glyphicon-text-color:before{content: "\e242"}.glyphicon-text-background:before{content: "\e243"}.glyphicon-object-align-top:before{content: "\e244"}.glyphicon-object-align-bottom:before{content: "\e245"}.glyphicon-object-align-horizontal:before{content: "\e246"}.glyphicon-object-align-left:before{content: "\e247"}.glyphicon-object-align-vertical:before{content: "\e248"}.glyphicon-object-align-right:before{content: "\e249"}.glyphicon-triangle-right:before{content: "\e250"}.glyphicon-triangle-left:before{content: "\e251"}.glyphicon-triangle-bottom:before{content: "\e252"}.glyphicon-triangle-top:before{content: "\e253"}.glyphicon-console:before{content: "\e254"}.glyphicon-superscript:before{content: "\e255"}.glyphicon-subscript:before{content: "\e256"}.glyphicon-menu-left:before{content: "\e257"}.glyphicon-menu-right:before{content: "\e258"}.glyphicon-menu-down:before{content: "\e259"}.glyphicon-menu-up:before{content: "\e260"}*{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}*:before,*:after{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}html{font-size: 10px;-webkit-tap-highlight-color: rgba(0,0,0,0)}body{font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 13px;line-height: 1.42857143;color: #333;background-color: #fff}input,button,select,textarea{font-family: inherit;font-size: inherit;line-height: inherit}a{color: #12538b;text-decoration: none}a:hover,a:focus{color: #092b47;text-decoration: underline}a:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}figure{margin: 0}img{vertical-align: middle}.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img{display: block;max-width: 100%;height: auto}.img-rounded{border-radius: 5px}.img-thumbnail{padding: 4px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 3px;-webkit-transition: all .2s ease-in-out;-o-transition: all .2s ease-in-out;transition: all .2s ease-in-out;display: inline-block;max-width: 100%;height: auto}.img-circle{border-radius: 50%}hr{margin-top: 18px;margin-bottom: 18px;border: 0;border-top: 1px solid #eee}.sr-only{position: absolute;width: 1px;height: 1px;margin: -1px;padding: 0;overflow: hidden;clip: rect(0, 0, 0, 0);border: 0}.sr-only-focusable:active,.sr-only-focusable:focus{position: static;width: auto;height: auto;margin: 0;overflow: visible;clip: auto}[role="button"]{cursor: pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family: inherit;font-weight: 500;line-height: 1.1;color: inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight: normal;line-height: 1;color: #777}h1,.h1,h2,.h2,h3,.h3{margin-top: 18px;margin-bottom: 9px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size: 65%}h4,.h4,h5,.h5,h6,.h6{margin-top: 9px;margin-bottom: 9px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size: 75%}h1,.h1{font-size: 33px}h2,.h2{font-size: 27px}h3,.h3{font-size: 23px}h4,.h4{font-size: 17px}h5,.h5{font-size: 13px}h6,.h6{font-size: 12px}p{margin: 0 0 9px}.lead{margin-bottom: 18px;font-size: 14px;font-weight: 300;line-height: 1.4}@media (min-width: 768px){.lead{font-size: 19.5px}}small,.small{font-size: 92%}mark,.mark{background-color: #fcf8e3;padding: .2em}.text-left{text-align: left}.text-right{text-align: right}.text-center{text-align: center}.text-justify{text-align: justify}.text-nowrap{white-space: nowrap}.text-lowercase{text-transform: lowercase}.text-uppercase{text-transform: uppercase}.text-capitalize{text-transform: capitalize}.text-muted{color: #777}.text-primary{color: #619144}a.text-primary:hover{color: #4a6e34}.text-success{color: #3c763d}a.text-success:hover{color: #2b542c}.text-info{color: #31708f}a.text-info:hover{color: #245269}.text-warning{color: #8a6d3b}a.text-warning:hover{color: #66512c}.text-danger{color: #a94442}a.text-danger:hover{color: #843534}.bg-primary{color: #fff;background-color: #619144}a.bg-primary:hover{background-color: #4a6e34}.bg-success{background-color: #dff0d8}a.bg-success:hover{background-color: #c1e2b3}.bg-info{background-color: #d9edf7}a.bg-info:hover{background-color: #afd9ee}.bg-warning{background-color: #fcf8e3}a.bg-warning:hover{background-color: #f7ecb5}.bg-danger{background-color: #f2dede}a.bg-danger:hover{background-color: #e4b9b9}.page-header{padding-bottom: 8px;margin: 36px 0 18px;border-bottom: 1px solid #eee}ul,ol{margin-top: 0;margin-bottom: 9px}ul ul,ol ul,ul ol,ol ol{margin-bottom: 0}.list-unstyled{padding-left: 0;list-style: none}.list-inline{padding-left: 0;list-style: none;margin: 0;margin-left: -5px}.list-inline > li{display: inline-block;padding-left: 5px;padding-right: 5px}dl{margin-top: 0;margin-bottom: 18px}dt,dd{line-height: 1.42857143}dt{font-weight: bold}dd{margin-left: 0}@media (min-width: 768px){.dl-horizontal dt{float: left;width: 160px;clear: left;text-align: right;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.dl-horizontal dd{margin-left: 180px}}abbr[title],abbr[data-original-title]{cursor: help;border-bottom: 1px dotted #777}.initialism{font-size: 90%;text-transform: uppercase}blockquote{padding: 9px 18px;margin: 0 0 18px;font-size: 16.25px;border-left: 5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom: 0}blockquote footer,blockquote small,blockquote .small{display: block;font-size: 80%;line-height: 1.42857143;color: #777}blockquote footer:before,blockquote small:before,blockquote .small:before{content: '\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right: 15px;padding-left: 0;border-right: 5px solid #eee;border-left: 0;text-align: right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content: ''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content: '\00A0 \2014'}address{margin-bottom: 18px;font-style: normal;line-height: 1.42857143}code,kbd,pre,samp{font-family: Menlo, Monaco, Consolas, "Courier New", monospace}code{padding: 2px 4px;font-size: 90%;color: #c7254e;background-color: #f9f2f4;border-radius: 3px}kbd{padding: 2px 4px;font-size: 90%;color: #fff;background-color: #333;border-radius: 2px;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding: 0;font-size: 100%;font-weight: bold;box-shadow: none}pre{display: block;padding: 8.5px;margin: 0 0 9px;font-size: 12px;line-height: 1.42857143;word-break: break-all;word-wrap: break-word;color: #333;background-color: #f5f5f5;border: 1px solid #ccc;border-radius: 3px}pre code{padding: 0;font-size: inherit;color: inherit;white-space: pre-wrap;background-color: transparent;border-radius: 0}.pre-scrollable{max-height: 340px;overflow-y: scroll}.container{margin-right: auto;margin-left: auto;padding-left: 7px;padding-right: 7px}@media (min-width: 768px){.container{width: 734px}}@media (min-width: 992px){.container{width: 952px}}@media (min-width: 1200px){.container{width: 952px}}.container-fluid{margin-right: auto;margin-left: auto;padding-left: 7px;padding-right: 7px}.row{margin-left: -7px;margin-right: -7px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position: relative;min-height: 1px;padding-left: 7px;padding-right: 7px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float: left}.col-xs-12{width: 100%}.col-xs-11{width: 91.66666667%}.col-xs-10{width: 83.33333333%}.col-xs-9{width: 75%}.col-xs-8{width: 66.66666667%}.col-xs-7{width: 58.33333333%}.col-xs-6{width: 50%}.col-xs-5{width: 41.66666667%}.col-xs-4{width: 33.33333333%}.col-xs-3{width: 25%}.col-xs-2{width: 16.66666667%}.col-xs-1{width: 8.33333333%}.col-xs-pull-12{right: 100%}.col-xs-pull-11{right: 91.66666667%}.col-xs-pull-10{right: 83.33333333%}.col-xs-pull-9{right: 75%}.col-xs-pull-8{right: 66.66666667%}.col-xs-pull-7{right: 58.33333333%}.col-xs-pull-6{right: 50%}.col-xs-pull-5{right: 41.66666667%}.col-xs-pull-4{right: 33.33333333%}.col-xs-pull-3{right: 25%}.col-xs-pull-2{right: 16.66666667%}.col-xs-pull-1{right: 8.33333333%}.col-xs-pull-0{right: auto}.col-xs-push-12{left: 100%}.col-xs-push-11{left: 91.66666667%}.col-xs-push-10{left: 83.33333333%}.col-xs-push-9{left: 75%}.col-xs-push-8{left: 66.66666667%}.col-xs-push-7{left: 58.33333333%}.col-xs-push-6{left: 50%}.col-xs-push-5{left: 41.66666667%}.col-xs-push-4{left: 33.33333333%}.col-xs-push-3{left: 25%}.col-xs-push-2{left: 16.66666667%}.col-xs-push-1{left: 8.33333333%}.col-xs-push-0{left: auto}.col-xs-offset-12{margin-left: 100%}.col-xs-offset-11{margin-left: 91.66666667%}.col-xs-offset-10{margin-left: 83.33333333%}.col-xs-offset-9{margin-left: 75%}.col-xs-offset-8{margin-left: 66.66666667%}.col-xs-offset-7{margin-left: 58.33333333%}.col-xs-offset-6{margin-left: 50%}.col-xs-offset-5{margin-left: 41.66666667%}.col-xs-offset-4{margin-left: 33.33333333%}.col-xs-offset-3{margin-left: 25%}.col-xs-offset-2{margin-left: 16.66666667%}.col-xs-offset-1{margin-left: 8.33333333%}.col-xs-offset-0{margin-left: 0%}@media (min-width: 768px){.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{float: left}.col-sm-12{width: 100%}.col-sm-11{width: 91.66666667%}.col-sm-10{width: 83.33333333%}.col-sm-9{width: 75%}.col-sm-8{width: 66.66666667%}.col-sm-7{width: 58.33333333%}.col-sm-6{width: 50%}.col-sm-5{width: 41.66666667%}.col-sm-4{width: 33.33333333%}.col-sm-3{width: 25%}.col-sm-2{width: 16.66666667%}.col-sm-1{width: 8.33333333%}.col-sm-pull-12{right: 100%}.col-sm-pull-11{right: 91.66666667%}.col-sm-pull-10{right: 83.33333333%}.col-sm-pull-9{right: 75%}.col-sm-pull-8{right: 66.66666667%}.col-sm-pull-7{right: 58.33333333%}.col-sm-pull-6{right: 50%}.col-sm-pull-5{right: 41.66666667%}.col-sm-pull-4{right: 33.33333333%}.col-sm-pull-3{right: 25%}.col-sm-pull-2{right: 16.66666667%}.col-sm-pull-1{right: 8.33333333%}.col-sm-pull-0{right: auto}.col-sm-push-12{left: 100%}.col-sm-push-11{left: 91.66666667%}.col-sm-push-10{left: 83.33333333%}.col-sm-push-9{left: 75%}.col-sm-push-8{left: 66.66666667%}.col-sm-push-7{left: 58.33333333%}.col-sm-push-6{left: 50%}.col-sm-push-5{left: 41.66666667%}.col-sm-push-4{left: 33.33333333%}.col-sm-push-3{left: 25%}.col-sm-push-2{left: 16.66666667%}.col-sm-push-1{left: 8.33333333%}.col-sm-push-0{left: auto}.col-sm-offset-12{margin-left: 100%}.col-sm-offset-11{margin-left: 91.66666667%}.col-sm-offset-10{margin-left: 83.33333333%}.col-sm-offset-9{margin-left: 75%}.col-sm-offset-8{margin-left: 66.66666667%}.col-sm-offset-7{margin-left: 58.33333333%}.col-sm-offset-6{margin-left: 50%}.col-sm-offset-5{margin-left: 41.66666667%}.col-sm-offset-4{margin-left: 33.33333333%}.col-sm-offset-3{margin-left: 25%}.col-sm-offset-2{margin-left: 16.66666667%}.col-sm-offset-1{margin-left: 8.33333333%}.col-sm-offset-0{margin-left: 0%}}@media (min-width: 992px){.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{float: left}.col-md-12{width: 100%}.col-md-11{width: 91.66666667%}.col-md-10{width: 83.33333333%}.col-md-9{width: 75%}.col-md-8{width: 66.66666667%}.col-md-7{width: 58.33333333%}.col-md-6{width: 50%}.col-md-5{width: 41.66666667%}.col-md-4{width: 33.33333333%}.col-md-3{width: 25%}.col-md-2{width: 16.66666667%}.col-md-1{width: 8.33333333%}.col-md-pull-12{right: 100%}.col-md-pull-11{right: 91.66666667%}.col-md-pull-10{right: 83.33333333%}.col-md-pull-9{right: 75%}.col-md-pull-8{right: 66.66666667%}.col-md-pull-7{right: 58.33333333%}.col-md-pull-6{right: 50%}.col-md-pull-5{right: 41.66666667%}.col-md-pull-4{right: 33.33333333%}.col-md-pull-3{right: 25%}.col-md-pull-2{right: 16.66666667%}.col-md-pull-1{right: 8.33333333%}.col-md-pull-0{right: auto}.col-md-push-12{left: 100%}.col-md-push-11{left: 91.66666667%}.col-md-push-10{left: 83.33333333%}.col-md-push-9{left: 75%}.col-md-push-8{left: 66.66666667%}.col-md-push-7{left: 58.33333333%}.col-md-push-6{left: 50%}.col-md-push-5{left: 41.66666667%}.col-md-push-4{left: 33.33333333%}.col-md-push-3{left: 25%}.col-md-push-2{left: 16.66666667%}.col-md-push-1{left: 8.33333333%}.col-md-push-0{left: auto}.col-md-offset-12{margin-left: 100%}.col-md-offset-11{margin-left: 91.66666667%}.col-md-offset-10{margin-left: 83.33333333%}.col-md-offset-9{margin-left: 75%}.col-md-offset-8{margin-left: 66.66666667%}.col-md-offset-7{margin-left: 58.33333333%}.col-md-offset-6{margin-left: 50%}.col-md-offset-5{margin-left: 41.66666667%}.col-md-offset-4{margin-left: 33.33333333%}.col-md-offset-3{margin-left: 25%}.col-md-offset-2{margin-left: 16.66666667%}.col-md-offset-1{margin-left: 8.33333333%}.col-md-offset-0{margin-left: 0%}}@media (min-width: 1200px){.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{float: left}.col-lg-12{width: 100%}.col-lg-11{width: 91.66666667%}.col-lg-10{width: 83.33333333%}.col-lg-9{width: 75%}.col-lg-8{width: 66.66666667%}.col-lg-7{width: 58.33333333%}.col-lg-6{width: 50%}.col-lg-5{width: 41.66666667%}.col-lg-4{width: 33.33333333%}.col-lg-3{width: 25%}.col-lg-2{width: 16.66666667%}.col-lg-1{width: 8.33333333%}.col-lg-pull-12{right: 100%}.col-lg-pull-11{right: 91.66666667%}.col-lg-pull-10{right: 83.33333333%}.col-lg-pull-9{right: 75%}.col-lg-pull-8{right: 66.66666667%}.col-lg-pull-7{right: 58.33333333%}.col-lg-pull-6{right: 50%}.col-lg-pull-5{right: 41.66666667%}.col-lg-pull-4{right: 33.33333333%}.col-lg-pull-3{right: 25%}.col-lg-pull-2{right: 16.66666667%}.col-lg-pull-1{right: 8.33333333%}.col-lg-pull-0{right: auto}.col-lg-push-12{left: 100%}.col-lg-push-11{left: 91.66666667%}.col-lg-push-10{left: 83.33333333%}.col-lg-push-9{left: 75%}.col-lg-push-8{left: 66.66666667%}.col-lg-push-7{left: 58.33333333%}.col-lg-push-6{left: 50%}.col-lg-push-5{left: 41.66666667%}.col-lg-push-4{left: 33.33333333%}.col-lg-push-3{left: 25%}.col-lg-push-2{left: 16.66666667%}.col-lg-push-1{left: 8.33333333%}.col-lg-push-0{left: auto}.col-lg-offset-12{margin-left: 100%}.col-lg-offset-11{margin-left: 91.66666667%}.col-lg-offset-10{margin-left: 83.33333333%}.col-lg-offset-9{margin-left: 75%}.col-lg-offset-8{margin-left: 66.66666667%}.col-lg-offset-7{margin-left: 58.33333333%}.col-lg-offset-6{margin-left: 50%}.col-lg-offset-5{margin-left: 41.66666667%}.col-lg-offset-4{margin-left: 33.33333333%}.col-lg-offset-3{margin-left: 25%}.col-lg-offset-2{margin-left: 16.66666667%}.col-lg-offset-1{margin-left: 8.33333333%}.col-lg-offset-0{margin-left: 0%}}table{background-color: transparent}caption{padding-top: 8px;padding-bottom: 8px;color: #777;text-align: left}th{text-align: left}.table{width: 100%;max-width: 100%;margin-bottom: 18px}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding: 8px;line-height: 1.42857143;vertical-align: top;border-top: 1px solid #ddd}.table > thead > tr > th{vertical-align: bottom;border-bottom: 2px solid #ddd}.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top: 0}.table > tbody + tbody{border-top: 2px solid #ddd}.table .table{background-color: #fff}.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding: 5px}.table-bordered{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width: 2px}.table-striped > tbody > tr:nth-of-type(odd){background-color: #f9f9f9}.table-hover > tbody > tr:hover{background-color: #f5f5f5}table col[class*="col-"]{position: static;float: none;display: table-column}table td[class*="col-"],table th[class*="col-"]{position: static;float: none;display: table-cell}.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color: #f5f5f5}.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th{background-color: #e8e8e8}.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color: #dff0d8}.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th{background-color: #d0e9c6}.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color: #d9edf7}.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th{background-color: #c4e3f3}.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color: #fcf8e3}.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th{background-color: #faf2cc}.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color: #f2dede}.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th{background-color: #ebcccc}.table-responsive{overflow-x: auto;min-height: 0.01%}@media screen and (max-width: 767px){.table-responsive{width: 100%;margin-bottom: 13.5px;overflow-y: hidden;-ms-overflow-style: -ms-autohiding-scrollbar;border: 1px solid #ddd}.table-responsive > .table{margin-bottom: 0}.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space: nowrap}.table-responsive > .table-bordered{border: 0}.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom: 0}}fieldset{padding: 0;margin: 0;border: 0;min-width: 0}legend{display: block;width: 100%;padding: 0;margin-bottom: 18px;font-size: 19.5px;line-height: inherit;color: #333;border: 0;border-bottom: 1px solid #777}label{display: inline-block;max-width: 100%;margin-bottom: 5px;font-weight: bold}input[type="search"]{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}input[type="radio"],input[type="checkbox"]{margin: 4px 0 0;margin-top: 1px \9;line-height: normal}input[type="file"]{display: block}input[type="range"]{display: block;width: 100%}select[multiple],select[size]{height: auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}output{display: block;padding-top: 4px;font-size: 13px;line-height: 1.42857143;color: #555}.form-control{display: block;width: 100%;height: 26px;padding: 3px 5px;font-size: 13px;line-height: 1.42857143;color: #555;background-color: #fff;background-image: none;border: 1px solid #ccc;border-radius: 3px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color: #619144;outline: 0;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(97,145,68,0.6);box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(97,145,68,0.6)}.form-control::-moz-placeholder{color: #999;opacity: 1}.form-control:-ms-input-placeholder{color: #999}.form-control::-webkit-input-placeholder{color: #999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color: #eee;opacity: 1}.form-control[disabled],fieldset[disabled] .form-control{cursor: not-allowed}textarea.form-control{height: auto}input[type="search"]{-webkit-appearance: none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height: 26px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height: 22px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height: 41px}}.form-group{margin-bottom: 15px}.radio,.checkbox{position: relative;display: block;margin-top: 10px;margin-bottom: 10px}.radio label,.checkbox label{min-height: 18px;padding-left: 20px;margin-bottom: 0;font-weight: normal;cursor: pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position: absolute;margin-left: -20px;margin-top: 4px \9}.radio + .radio,.checkbox + .checkbox{margin-top: -5px}.radio-inline,.checkbox-inline{position: relative;display: inline-block;padding-left: 20px;margin-bottom: 0;vertical-align: middle;font-weight: normal;cursor: pointer}.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top: 0;margin-left: 10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor: not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor: not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor: not-allowed}.form-control-static{padding-top: 4px;padding-bottom: 4px;margin-bottom: 0;min-height: 31px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left: 0;padding-right: 0}.input-sm{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}select.input-sm{height: 22px;line-height: 22px}textarea.input-sm,select[multiple].input-sm{height: auto}.form-group-sm .form-control{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}select.form-group-sm .form-control{height: 22px;line-height: 22px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height: auto}.form-group-sm .form-control-static{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;min-height: 30px}.input-lg{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.3333333;border-radius: 5px}select.input-lg{height: 41px;line-height: 41px}textarea.input-lg,select[multiple].input-lg{height: auto}.form-group-lg .form-control{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.3333333;border-radius: 5px}select.form-group-lg .form-control{height: 41px;line-height: 41px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height: auto}.form-group-lg .form-control-static{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.3333333;min-height: 35px}.has-feedback{position: relative}.has-feedback .form-control{padding-right: 32.5px}.form-control-feedback{position: absolute;top: 0;right: 0;z-index: 2;display: block;width: 26px;height: 26px;line-height: 26px;text-align: center;pointer-events: none}.input-lg + .form-control-feedback{width: 41px;height: 41px;line-height: 41px}.input-sm + .form-control-feedback{width: 22px;height: 22px;line-height: 22px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color: #3c763d}.has-success .form-control{border-color: #3c763d;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color: #2b542c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168}.has-success .input-group-addon{color: #3c763d;border-color: #3c763d;background-color: #dff0d8}.has-success .form-control-feedback{color: #3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color: #8a6d3b}.has-warning .form-control{border-color: #8a6d3b;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color: #66512c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b}.has-warning .input-group-addon{color: #8a6d3b;border-color: #8a6d3b;background-color: #fcf8e3}.has-warning .form-control-feedback{color: #8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color: #a94442}.has-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.has-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.has-error .form-control-feedback{color: #a94442}.has-feedback label ~ .form-control-feedback{top: 23px}.has-feedback label.sr-only ~ .form-control-feedback{top: 0}.help-block{display: block;margin-top: 5px;margin-bottom: 10px;color: #737373}@media (min-width: 768px){.form-inline .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle}.form-inline .form-control-static{display: inline-block}.form-inline .input-group{display: inline-table;vertical-align: middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width: auto}.form-inline .input-group > .form-control{width: 100%}.form-inline .control-label{margin-bottom: 0;vertical-align: middle}.form-inline .radio,.form-inline .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.form-inline .radio label,.form-inline .checkbox label{padding-left: 0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.form-inline .has-feedback .form-control-feedback{top: 0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top: 0;margin-bottom: 0;padding-top: 4px}.form-horizontal .radio,.form-horizontal .checkbox{min-height: 22px}.form-horizontal .form-group{margin-left: -7px;margin-right: -7px}@media (min-width: 768px){.form-horizontal .control-label{text-align: right;margin-bottom: 0;padding-top: 4px}}.form-horizontal .has-feedback .form-control-feedback{right: 7px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top: 11.6666664px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top: 2px}}.btn{display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 3px 5px;font-size: 13px;line-height: 1.42857143;border-radius: 3px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}.btn:hover,.btn:focus,.btn.focus{color: #333;text-decoration: none}.btn:active,.btn.active{outline: 0;background-image: none;-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor: not-allowed;pointer-events: none;opacity: .65;filter: alpha(opacity=65);-webkit-box-shadow: none;box-shadow: none}.btn-default{color: #333;background-color: #fff;border-color: #ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{color: #333;background-color: #e6e6e6;border-color: #adadad}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{background-image: none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color: #fff;border-color: #ccc}.btn-default .badge{color: #fff;background-color: #333}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color: #fff;background-color: #333;border-color: #adadad}.btn-primary{color: #fff;background-color: #619144;border-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{color: #fff;background-color: #4a6e34;border-color: #e0e0e0}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{background-image: none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color: #619144;border-color: #fff}.btn-primary .badge{color: #619144;background-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color: #619144;background-color: #fff;border-color: #e0e0e0}.btn-success{color: #fff;background-color: #028302;border-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{color: #fff;background-color: #015101;border-color: #e0e0e0}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{background-image: none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color: #028302;border-color: #fff}.btn-success .badge{color: #028302;background-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color: #028302;background-color: #fff;border-color: #e0e0e0}.btn-info{color: #fff;background-color: #1c5f74;border-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{color: #fff;background-color: #123d4b;border-color: #e0e0e0}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{background-image: none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color: #1c5f74;border-color: #fff}.btn-info .badge{color: #1c5f74;background-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color: #1c5f74;background-color: #fff;border-color: #e0e0e0}.btn-warning{color: #fff;background-color: #a56100;border-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{color: #fff;background-color: #724300;border-color: #e0e0e0}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{background-image: none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color: #a56100;border-color: #fff}.btn-warning .badge{color: #a56100;background-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color: #a56100;background-color: #fff;border-color: #e0e0e0}.btn-danger{color: #fff;background-color: #a41915;border-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{color: #fff;background-color: #77120f;border-color: #e0e0e0}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{background-image: none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color: #a41915;border-color: #fff}.btn-danger .badge{color: #a41915;background-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color: #a41915;background-color: #fff;border-color: #e0e0e0}.btn-link{color: #12538b;font-weight: normal;border-radius: 0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color: transparent;-webkit-box-shadow: none;box-shadow: none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color: transparent}.btn-link:hover,.btn-link:focus{color: #092b47;text-decoration: underline;background-color: transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color: #777;text-decoration: none}.btn-lg,.btn-group-lg > .btn{padding: 8px 5px;font-size: 17px;line-height: 1.3333333;border-radius: 5px}.btn-sm,.btn-group-sm > .btn{padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}.btn-xs,.btn-group-xs > .btn{padding: 1px 1px;font-size: 12px;line-height: 1.5;border-radius: 2px}.btn-block{display: block;width: 100%}.btn-block + .btn-block{margin-top: 5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width: 100%}.fade{opacity: 0;-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear}.fade.in{opacity: 1}.collapse{display: none}.collapse.in{display: block}tr.collapse.in{display: table-row}tbody.collapse.in{display: table-row-group}.collapsing{position: relative;height: 0;overflow: hidden;-webkit-transition-property: height, visibility;transition-property: height, visibility;-webkit-transition-duration: .35s;transition-duration: .35s;-webkit-transition-timing-function: ease;transition-timing-function: ease}.caret{display: inline-block;width: 0;height: 0;margin-left: 2px;vertical-align: middle;border-top: 4px dashed;border-right: 4px solid transparent;border-left: 4px solid transparent}.dropup,.dropdown{position: relative}.dropdown-toggle:focus{outline: 0}.dropdown-menu{position: absolute;top: 100%;left: 0;z-index: 1000;display: none;float: left;min-width: 160px;padding: 5px 0;margin: 2px 0 0;list-style: none;font-size: 13px;text-align: left;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.15);border-radius: 3px;-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);box-shadow: 0 6px 12px rgba(0,0,0,0.175);background-clip: padding-box}.dropdown-menu.pull-right{right: 0;left: auto}.dropdown-menu .divider{height: 1px;margin: 8px 0;overflow: hidden;background-color: #e5e5e5}.dropdown-menu > li > a{display: block;padding: 3px 20px;clear: both;font-weight: normal;line-height: 1.42857143;color: #333;white-space: nowrap}.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration: none;color: #262626;background-color: #f5f5f5}.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color: #fff;text-decoration: none;outline: 0;background-color: #619144}.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color: #777}.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration: none;background-color: transparent;background-image: none;filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor: not-allowed}.open > .dropdown-menu{display: block}.open > a{outline: 0}.dropdown-menu-right{left: auto;right: 0}.dropdown-menu-left{left: 0;right: auto}.dropdown-header{display: block;padding: 3px 20px;font-size: 12px;line-height: 1.42857143;color: #777;white-space: nowrap}.dropdown-backdrop{position: fixed;left: 0;right: 0;bottom: 0;top: 0;z-index: 990}.pull-right > .dropdown-menu{right: 0;left: auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top: 0;border-bottom: 4px solid;content: ""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top: auto;bottom: 100%;margin-bottom: 2px}@media (min-width: 768px){.navbar-right .dropdown-menu{left: auto;right: 0}.navbar-right .dropdown-menu-left{left: 0;right: auto}}.btn-group,.btn-group-vertical{position: relative;display: inline-block;vertical-align: middle}.btn-group > .btn,.btn-group-vertical > .btn{position: relative;float: left}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index: 2}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left: -1px}.btn-toolbar{margin-left: -5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float: left}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left: 5px}.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius: 0}.btn-group > .btn:first-child{margin-left: 0}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group > .btn-group{float: left}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child{border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline: 0}.btn-group > .btn + .dropdown-toggle{padding-left: 8px;padding-right: 8px}.btn-group > .btn-lg + .dropdown-toggle{padding-left: 12px;padding-right: 12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow: none;box-shadow: none}.btn .caret{margin-left: 0}.btn-lg .caret{border-width: 5px 5px 0;border-bottom-width: 0}.dropup .btn-lg .caret{border-width: 0 5px 5px}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display: block;float: none;width: 100%;max-width: 100%}.btn-group-vertical > .btn-group > .btn{float: none}.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(:first-child):not(:last-child){border-radius: 0}.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius: 3px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn:last-child:not(:first-child){border-bottom-left-radius: 3px;border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-justified{display: table;width: 100%;table-layout: fixed;border-collapse: separate}.btn-group-justified > .btn,.btn-group-justified > .btn-group{float: none;display: table-cell;width: 1%}.btn-group-justified > .btn-group .btn{width: 100%}.btn-group-justified > .btn-group .dropdown-menu{left: auto}[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"]{position: absolute;clip: rect(0, 0, 0, 0);pointer-events: none}.input-group{position: relative;display: table;border-collapse: separate}.input-group[class*="col-"]{float: none;padding-left: 0;padding-right: 0}.input-group .form-control{position: relative;z-index: 2;float: left;width: 100%;margin-bottom: 0}.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height: 41px;padding: 8px 5px;font-size: 17px;line-height: 1.3333333;border-radius: 5px}select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height: 41px;line-height: 41px}textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height: auto}.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height: 22px;padding: 1px 2px;font-size: 12px;line-height: 1.5;border-radius: 2px}select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height: 22px;line-height: 22px}textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height: auto}.input-group-addon,.input-group-btn,.input-group .form-control{display: table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius: 0}.input-group-addon,.input-group-btn{width: 1%;white-space: nowrap;vertical-align: middle}.input-group-addon{padding: 3px 5px;font-size: 13px;font-weight: normal;line-height: 1;color: #555;text-align: center;background-color: #eee;border: 1px solid #ccc;border-radius: 3px}.input-group-addon.input-sm{padding: 1px 2px;font-size: 12px;border-radius: 2px}.input-group-addon.input-lg{padding: 8px 5px;font-size: 17px;border-radius: 5px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top: 0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius: 0;border-top-right-radius: 0}.input-group-addon:first-child{border-right: 0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius: 0;border-top-left-radius: 0}.input-group-addon:last-child{border-left: 0}.input-group-btn{position: relative;font-size: 0;white-space: nowrap}.input-group-btn > .btn{position: relative}.input-group-btn > .btn + .btn{margin-left: -1px}.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index: 2}.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right: -1px}.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{margin-left: -1px}.nav{margin-bottom: 0;padding-left: 0;list-style: none}.nav > li{position: relative;display: block}.nav > li > a{position: relative;display: block;padding: 5px}.nav > li > a:hover,.nav > li > a:focus{text-decoration: none;background-color: #eee}.nav > li.disabled > a{color: #777}.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color: #777;text-decoration: none;background-color: transparent;cursor: not-allowed}.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color: #eee;border-color: #12538b}.nav .nav-divider{height: 1px;margin: 8px 0;overflow: hidden;background-color: #e5e5e5}.nav > li > a > img{max-width: none}.nav-tabs{border-bottom: 1px solid #ddd}.nav-tabs > li{float: left;margin-bottom: -1px}.nav-tabs > li > a{margin-right: 2px;line-height: 1.42857143;border: 1px solid transparent;border-radius: 3px 3px 0 0}.nav-tabs > li > a:hover{border-color: #eee #eee #ddd}.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color: #555;background-color: #fff;border: 1px solid #ddd;border-bottom-color: transparent;cursor: default}.nav-tabs.nav-justified{width: 100%;border-bottom: 0}.nav-tabs.nav-justified > li{float: none}.nav-tabs.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-tabs.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-tabs.nav-justified > li{display: table-cell;width: 1%}.nav-tabs.nav-justified > li > a{margin-bottom: 0}}.nav-tabs.nav-justified > li > a{margin-right: 0;border-radius: 3px}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs.nav-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 3px 3px 0 0}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color: #fff}}.nav-pills > li{float: left}.nav-pills > li > a{border-radius: 3px}.nav-pills > li + li{margin-left: 2px}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color: #fff;background-color: #619144}.nav-stacked > li{float: none}.nav-stacked > li + li{margin-top: 2px;margin-left: 0}.nav-justified{width: 100%}.nav-justified > li{float: none}.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-justified > li{display: table-cell;width: 1%}.nav-justified > li > a{margin-bottom: 0}}.nav-tabs-justified{border-bottom: 0}.nav-tabs-justified > li > a{margin-right: 0;border-radius: 3px}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 3px 3px 0 0}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color: #fff}}.tab-content > .tab-pane{display: none}.tab-content > .active{display: block}.nav-tabs .dropdown-menu{margin-top: -1px;border-top-right-radius: 0;border-top-left-radius: 0}.navbar{position: relative;min-height: 65px;margin-bottom: 0px;border: 1px solid transparent}@media (min-width: 768px){.navbar{border-radius: 3px}}@media (min-width: 768px){.navbar-header{float: left}}.navbar-collapse{overflow-x: visible;padding-right: 7px;padding-left: 7px;border-top: 1px solid transparent;box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling: touch}.navbar-collapse.in{overflow-y: auto}@media (min-width: 768px){.navbar-collapse{width: auto;border-top: 0;box-shadow: none}.navbar-collapse.collapse{display: block !important;height: auto !important;padding-bottom: 0;overflow: visible !important}.navbar-collapse.in{overflow-y: visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left: 0;padding-right: 0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 200px}}.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: -7px;margin-left: -7px}@media (min-width: 768px){.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: 0;margin-left: 0}}.navbar-static-top{z-index: 1000;border-width: 0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius: 0}}.navbar-fixed-top,.navbar-fixed-bottom{position: fixed;right: 0;left: 0;z-index: 1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius: 0}}.navbar-fixed-top{top: 0;border-width: 0 0 1px}.navbar-fixed-bottom{bottom: 0;margin-bottom: 0;border-width: 1px 0 0}.navbar-brand{float: left;padding: 23.5px 7px;font-size: 17px;line-height: 18px;height: 65px}.navbar-brand:hover,.navbar-brand:focus{text-decoration: none}.navbar-brand > img{display: block}@media (min-width: 768px){.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand{margin-left: -7px}}.navbar-toggle{position: relative;float: right;margin-right: 7px;padding: 9px 10px;margin-top: 15.5px;margin-bottom: 15.5px;background-color: transparent;background-image: none;border: 1px solid transparent;border-radius: 3px}.navbar-toggle:focus{outline: 0}.navbar-toggle .icon-bar{display: block;width: 22px;height: 2px;border-radius: 1px}.navbar-toggle .icon-bar + .icon-bar{margin-top: 4px}@media (min-width: 768px){.navbar-toggle{display: none}}.navbar-nav{margin: 11.75px -7px}.navbar-nav > li > a{padding-top: 10px;padding-bottom: 10px;line-height: 18px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position: static;float: none;width: auto;margin-top: 0;background-color: transparent;border: 0;box-shadow: none}.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header{padding: 5px 15px 5px 25px}.navbar-nav .open .dropdown-menu > li > a{line-height: 18px}.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus{background-image: none}}@media (min-width: 768px){.navbar-nav{float: left;margin: 0}.navbar-nav > li{float: left}.navbar-nav > li > a{padding-top: 23.5px;padding-bottom: 23.5px}}.navbar-form{margin-left: -7px;margin-right: -7px;padding: 10px 7px;border-top: 1px solid transparent;border-bottom: 1px solid transparent;-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);margin-top: 19.5px;margin-bottom: 19.5px}@media (min-width: 768px){.navbar-form .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.navbar-form .form-control{display: inline-block;width: auto;vertical-align: middle}.navbar-form .form-control-static{display: inline-block}.navbar-form .input-group{display: inline-table;vertical-align: middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width: auto}.navbar-form .input-group > .form-control{width: 100%}.navbar-form .control-label{margin-bottom: 0;vertical-align: middle}.navbar-form .radio,.navbar-form .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left: 0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.navbar-form .has-feedback .form-control-feedback{top: 0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom: 5px}.navbar-form .form-group:last-child{margin-bottom: 0}}@media (min-width: 768px){.navbar-form{width: auto;border: 0;margin-left: 0;margin-right: 0;padding-top: 0;padding-bottom: 0;-webkit-box-shadow: none;box-shadow: none}}.navbar-nav > li > .dropdown-menu{margin-top: 0;border-top-right-radius: 0;border-top-left-radius: 0}.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu{margin-bottom: 0;border-top-right-radius: 3px;border-top-left-radius: 3px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.navbar-btn{margin-top: 19.5px;margin-bottom: 19.5px}.navbar-btn.btn-sm{margin-top: 21.5px;margin-bottom: 21.5px}.navbar-btn.btn-xs{margin-top: 21.5px;margin-bottom: 21.5px}.navbar-text{margin-top: 23.5px;margin-bottom: 23.5px}@media (min-width: 768px){.navbar-text{float: left;margin-left: 7px;margin-right: 7px}}@media (min-width: 768px){.navbar-left{float: left !important}.navbar-right{float: right !important;margin-right: -7px}.navbar-right ~ .navbar-right{margin-right: 0}}.navbar-default{background-color: #132531;border-color: #0a1319}.navbar-default .navbar-brand{color: #fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color: #068139;background-color: transparent}.navbar-default .navbar-text{color: #fff}.navbar-default .navbar-nav > li > a{color: #fff}.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus{color: #fff;background-color: #068139}.navbar-default .navbar-toggle{border-color: #ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color: #ddd}.navbar-default .navbar-toggle .icon-bar{background-color: #888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color: #0a1319}.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus{background-color: #fff;color: #132531}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu > li > a{color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #fff;background-color: #068139}}.navbar-default .navbar-link{color: #fff}.navbar-default .navbar-link:hover{color: #132531}.navbar-default .btn-link{color: #fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color: #132531}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color: #fff}.navbar-inverse{background-color: #222;border-color: #080808}.navbar-inverse .navbar-brand{color: #9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-text{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus{color: #444;background-color: transparent}.navbar-inverse .navbar-toggle{border-color: #333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color: #333}.navbar-inverse .navbar-toggle .icon-bar{background-color: #fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color: #101010}.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus{background-color: #080808;color: #fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header{border-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #444;background-color: transparent}}.navbar-inverse .navbar-link{color: #9d9d9d}.navbar-inverse .navbar-link:hover{color: #fff}.navbar-inverse .btn-link{color: #9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color: #fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color: #444}.breadcrumb{padding: 6px 20px;margin-bottom: 18px;list-style: none;background-color: #fff;border-radius: 3px}.breadcrumb > li{display: inline-block}.breadcrumb > li + li:before{content: "/\00a0";padding: 0 5px;color: #777}.breadcrumb > .active{color: #333}.pagination{display: inline-block;padding-left: 0;margin: 18px 0;border-radius: 3px}.pagination > li{display: inline}.pagination > li > a,.pagination > li > span{position: relative;float: left;padding: 3px 5px;line-height: 1.42857143;text-decoration: none;color: #12538b;background-color: #fff;border: 1px solid #ddd;margin-left: -1px}.pagination > li:first-child > a,.pagination > li:first-child > span{margin-left: 0;border-bottom-left-radius: 3px;border-top-left-radius: 3px}.pagination > li:last-child > a,.pagination > li:last-child > span{border-bottom-right-radius: 3px;border-top-right-radius: 3px}.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus{color: #092b47;background-color: #eee;border-color: #ddd}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{z-index: 2;color: #fff;background-color: #1c5f74;border-color: #1c5f74;cursor: default}.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus{color: #777;background-color: #fff;border-color: #ddd;cursor: not-allowed}.pagination-lg > li > a,.pagination-lg > li > span{padding: 8px 5px;font-size: 17px}.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span{border-bottom-left-radius: 5px;border-top-left-radius: 5px}.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span{border-bottom-right-radius: 5px;border-top-right-radius: 5px}.pagination-sm > li > a,.pagination-sm > li > span{padding: 1px 2px;font-size: 12px}.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span{border-bottom-left-radius: 2px;border-top-left-radius: 2px}.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span{border-bottom-right-radius: 2px;border-top-right-radius: 2px}.pager{padding-left: 0;margin: 18px 0;list-style: none;text-align: center}.pager li{display: inline}.pager li > a,.pager li > span{display: inline-block;padding: 5px 14px;background-color: #fff;border: 1px solid #ddd;border-radius: 15px}.pager li > a:hover,.pager li > a:focus{text-decoration: none;background-color: #eee}.pager .next > a,.pager .next > span{float: right}.pager .previous > a,.pager .previous > span{float: left}.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span{color: #777;background-color: #fff;cursor: not-allowed}.label{display: inline;padding: .2em .6em .3em;font-size: 75%;font-weight: bold;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: .25em}a.label:hover,a.label:focus{color: #fff;text-decoration: none;cursor: pointer}.label:empty{display: none}.btn .label{position: relative;top: -1px}.label-default{background-color: #777}.label-default[href]:hover,.label-default[href]:focus{background-color: #5e5e5e}.label-primary{background-color: #619144}.label-primary[href]:hover,.label-primary[href]:focus{background-color: #4a6e34}.label-success{background-color: #028302}.label-success[href]:hover,.label-success[href]:focus{background-color: #015101}.label-info{background-color: #1c5f74}.label-info[href]:hover,.label-info[href]:focus{background-color: #123d4b}.label-warning{background-color: #a56100}.label-warning[href]:hover,.label-warning[href]:focus{background-color: #724300}.label-danger{background-color: #a41915}.label-danger[href]:hover,.label-danger[href]:focus{background-color: #77120f}.badge{display: inline-block;min-width: 10px;padding: 3px 7px;font-size: 12px;font-weight: bold;color: #fff;line-height: 1;vertical-align: baseline;white-space: nowrap;text-align: center;background-color: #777;border-radius: 10px}.badge:empty{display: none}.btn .badge{position: relative;top: -1px}.btn-xs .badge,.btn-group-xs > .btn .badge{top: 0;padding: 1px 5px}a.badge:hover,a.badge:focus{color: #fff;text-decoration: none;cursor: pointer}.list-group-item.active > .badge,.nav-pills > .active > a > .badge{color: #12538b;background-color: #fff}.list-group-item > .badge{float: right}.list-group-item > .badge + .badge{margin-right: 5px}.nav-pills > li > a > .badge{margin-left: 3px}.jumbotron{padding: 30px 15px;margin-bottom: 30px;color: inherit;background-color: #eee}.jumbotron h1,.jumbotron .h1{color: inherit}.jumbotron p{margin-bottom: 15px;font-size: 20px;font-weight: 200}.jumbotron > hr{border-top-color: #d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius: 5px}.jumbotron .container{max-width: 100%}@media screen and (min-width: 768px){.jumbotron{padding: 48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left: 60px;padding-right: 60px}.jumbotron h1,.jumbotron .h1{font-size: 58.5px}}.thumbnail{display: block;padding: 4px;margin-bottom: 18px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 3px;-webkit-transition: border .2s ease-in-out;-o-transition: border .2s ease-in-out;transition: border .2s ease-in-out}.thumbnail > img,.thumbnail a > img{margin-left: auto;margin-right: auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color: #12538b}.thumbnail .caption{padding: 9px;color: #333}.alert{padding: 15px;margin-bottom: 18px;border: 1px solid transparent;border-radius: 3px}.alert h4{margin-top: 0;color: inherit}.alert .alert-link{font-weight: bold}.alert > p,.alert > ul{margin-bottom: 0}.alert > p + p{margin-top: 5px}.alert-dismissable,.alert-dismissible{padding-right: 35px}.alert-dismissable .close,.alert-dismissible .close{position: relative;top: -2px;right: -21px;color: inherit}.alert-success{background-color: #dff0d8;border-color: #d6e9c6;color: #3c763d}.alert-success hr{border-top-color: #c9e2b3}.alert-success .alert-link{color: #2b542c}.alert-info{background-color: #d9edf7;border-color: #bce8f1;color: #31708f}.alert-info hr{border-top-color: #a6e1ec}.alert-info .alert-link{color: #245269}.alert-warning{background-color: #fcf8e3;border-color: #faebcc;color: #8a6d3b}.alert-warning hr{border-top-color: #f7e1b5}.alert-warning .alert-link{color: #66512c}.alert-danger{background-color: #f2dede;border-color: #ebccd1;color: #a94442}.alert-danger hr{border-top-color: #e4b9c0}.alert-danger .alert-link{color: #843534}@-webkit-keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}@keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}.progress{overflow: hidden;height: 18px;margin-bottom: 18px;background-color: #f5f5f5;border-radius: 3px;-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);box-shadow: inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float: left;width: 0%;height: 100%;font-size: 12px;line-height: 18px;color: #fff;text-align: center;background-color: #619144;-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition: width .6s ease;-o-transition: width .6s ease;transition: width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image: -webkit-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-image: -o-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-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: 40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation: progress-bar-stripes 2s linear infinite;-o-animation: progress-bar-stripes 2s linear infinite;animation: progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color: #028302}.progress-striped .progress-bar-success{background-image: -webkit-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-image: -o-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-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)}.progress-bar-info{background-color: #1c5f74}.progress-striped .progress-bar-info{background-image: -webkit-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-image: -o-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-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)}.progress-bar-warning{background-color: #a56100}.progress-striped .progress-bar-warning{background-image: -webkit-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-image: -o-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-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)}.progress-bar-danger{background-color: #a41915}.progress-striped .progress-bar-danger{background-image: -webkit-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-image: -o-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-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)}.media{margin-top: 15px}.media:first-child{margin-top: 0}.media,.media-body{zoom: 1;overflow: hidden}.media-body{width: 10000px}.media-object{display: block}.media-right,.media > .pull-right{padding-left: 10px}.media-left,.media > .pull-left{padding-right: 10px}.media-left,.media-right,.media-body{display: table-cell;vertical-align: top}.media-middle{vertical-align: middle}.media-bottom{vertical-align: bottom}.media-heading{margin-top: 0;margin-bottom: 5px}.media-list{padding-left: 0;list-style: none}.list-group,.tt-dropdown-menu{margin-bottom: 20px;padding-left: 0}.list-group-item,.tt-suggestion{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd}.list-group-item:first-child{border-top-right-radius: 3px;border-top-left-radius: 3px}.list-group-item:last-child{margin-bottom: 0;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}a.list-group-item{color: #555}a.list-group-item .list-group-item-heading{color: #333}a.list-group-item:hover,a.list-group-item:focus{text-decoration: none;color: #555;background-color: #f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color: inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color: #777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index: 2;color: #fff;background-color: #619144;border-color: #619144}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small{color: inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color: #cce1c0}.list-group-item-success{color: #3c763d;background-color: #dff0d8}a.list-group-item-success{color: #3c763d}a.list-group-item-success .list-group-item-heading{color: inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color: #3c763d;background-color: #d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color: #fff;background-color: #3c763d;border-color: #3c763d}.list-group-item-info{color: #31708f;background-color: #d9edf7}a.list-group-item-info{color: #31708f}a.list-group-item-info .list-group-item-heading{color: inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color: #31708f;background-color: #c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color: #fff;background-color: #31708f;border-color: #31708f}.list-group-item-warning{color: #8a6d3b;background-color: #fcf8e3}a.list-group-item-warning{color: #8a6d3b}a.list-group-item-warning .list-group-item-heading{color: inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color: #8a6d3b;background-color: #faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color: #fff;background-color: #8a6d3b;border-color: #8a6d3b}.list-group-item-danger{color: #a94442;background-color: #f2dede}a.list-group-item-danger{color: #a94442}a.list-group-item-danger .list-group-item-heading{color: inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color: #a94442;background-color: #ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color: #fff;background-color: #a94442;border-color: #a94442}.list-group-item-heading{margin-top: 0;margin-bottom: 5px}.list-group-item-text{margin-bottom: 0;line-height: 1.3}.panel{margin-bottom: 18px;background-color: #fff;border: 1px solid transparent;border-radius: 3px;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);box-shadow: 0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding: 5px}.panel-heading{padding: 10px 15px;border-bottom: 1px solid transparent;border-top-right-radius: 2px;border-top-left-radius: 2px}.panel-heading > .dropdown .dropdown-toggle{color: inherit}.panel-title{margin-top: 0;margin-bottom: 0;font-size: 15px;color: inherit}.panel-title > a,.panel-title > small,.panel-title > .small,.panel-title > small > a,.panel-title > .small > a{color: inherit}.panel-footer{padding: 10px 15px;background-color: #f5f5f5;border-top: 1px solid #ddd;border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel > .list-group,.panel > .panel-collapse > .list-group{margin-bottom: 0}.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item{border-width: 1px 0;border-radius: 0}.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child{border-top: 0;border-top-right-radius: 2px;border-top-left-radius: 2px}.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child{border-bottom: 0;border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel-heading + .list-group .list-group-item:first-child{border-top-width: 0}.list-group + .panel-footer{border-top-width: 0}.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table{margin-bottom: 0}.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption{padding-left: 5px;padding-right: 5px}.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child{border-top-right-radius: 2px;border-top-left-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child{border-top-left-radius: 2px;border-top-right-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child{border-top-left-radius: 2px}.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child{border-top-right-radius: 2px}.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child{border-bottom-right-radius: 2px;border-bottom-left-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child{border-bottom-left-radius: 2px;border-bottom-right-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child{border-bottom-left-radius: 2px}.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child{border-bottom-right-radius: 2px}.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body{border-top: 1px solid #ddd}.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td{border-top: 0}.panel > .table-bordered,.panel > .table-responsive > .table-bordered{border: 0}.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th{border-bottom: 0}.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th{border-bottom: 0}.panel > .table-responsive{border: 0;margin-bottom: 0}.panel-group{margin-bottom: 18px}.panel-group .panel{margin-bottom: 0;border-radius: 3px}.panel-group .panel + .panel{margin-top: 5px}.panel-group .panel-heading{border-bottom: 0}.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group{border-top: 1px solid #ddd}.panel-group .panel-footer{border-top: 0}.panel-group .panel-footer + .panel-collapse .panel-body{border-bottom: 1px solid #ddd}.panel-default{border-color: #ddd}.panel-default > .panel-heading{color: #333;background-color: #f5f5f5;border-color: #ddd}.panel-default > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ddd}.panel-default > .panel-heading .badge{color: #f5f5f5;background-color: #333}.panel-default > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ddd}.panel-primary{border-color: #619144}.panel-primary > .panel-heading{color: #fff;background-color: #619144;border-color: #619144}.panel-primary > .panel-heading + .panel-collapse > .panel-body{border-top-color: #619144}.panel-primary > .panel-heading .badge{color: #619144;background-color: #fff}.panel-primary > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #619144}.panel-success{border-color: #d6e9c6}.panel-success > .panel-heading{color: #3c763d;background-color: #dff0d8;border-color: #d6e9c6}.panel-success > .panel-heading + .panel-collapse > .panel-body{border-top-color: #d6e9c6}.panel-success > .panel-heading .badge{color: #dff0d8;background-color: #3c763d}.panel-success > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #d6e9c6}.panel-info{border-color: #bce8f1}.panel-info > .panel-heading{color: #31708f;background-color: #d9edf7;border-color: #bce8f1}.panel-info > .panel-heading + .panel-collapse > .panel-body{border-top-color: #bce8f1}.panel-info > .panel-heading .badge{color: #d9edf7;background-color: #31708f}.panel-info > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #bce8f1}.panel-warning{border-color: #faebcc}.panel-warning > .panel-heading{color: #8a6d3b;background-color: #fcf8e3;border-color: #faebcc}.panel-warning > .panel-heading + .panel-collapse > .panel-body{border-top-color: #faebcc}.panel-warning > .panel-heading .badge{color: #fcf8e3;background-color: #8a6d3b}.panel-warning > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #faebcc}.panel-danger{border-color: #ebccd1}.panel-danger > .panel-heading{color: #a94442;background-color: #f2dede;border-color: #ebccd1}.panel-danger > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ebccd1}.panel-danger > .panel-heading .badge{color: #f2dede;background-color: #a94442}.panel-danger > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ebccd1}.embed-responsive{position: relative;display: block;height: 0;padding: 0;overflow: hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position: absolute;top: 0;left: 0;bottom: 0;height: 100%;width: 100%;border: 0}.embed-responsive-16by9{padding-bottom: 56.25%}.embed-responsive-4by3{padding-bottom: 75%}.well{min-height: 20px;padding: 19px;margin-bottom: 20px;background-color: #f5f5f5;border: 1px solid #e3e3e3;border-radius: 3px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);box-shadow: inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color: #ddd;border-color: rgba(0,0,0,0.15)}.well-lg{padding: 24px;border-radius: 5px}.well-sm{padding: 9px;border-radius: 2px}.close,.group .group-close{float: right;font-size: 19.5px;font-weight: bold;line-height: 1;color: #000;text-shadow: 0 1px 0 #fff;opacity: .2;filter: alpha(opacity=20)}.close:hover,.close:focus{color: #000;text-decoration: none;cursor: pointer;opacity: .5;filter: alpha(opacity=50)}button.close{padding: 0;cursor: pointer;background: transparent;border: 0;-webkit-appearance: none}.modal-open{overflow: hidden}.modal{display: none;overflow: hidden;position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1050;-webkit-overflow-scrolling: touch;outline: 0}.modal.fade .modal-dialog{-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-moz-transition: -moz-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0)}.modal-open .modal{overflow-x: hidden;overflow-y: auto}.modal-dialog{position: relative;width: auto;margin: 10px}.modal-content{position: relative;background-color: #fff;border: 1px solid #999;border: 1px solid rgba(0,0,0,0.2);border-radius: 5px;-webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);box-shadow: 0 3px 9px rgba(0,0,0,0.5);background-clip: padding-box;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;filter: alpha(opacity=0)}.modal-backdrop.in{opacity: .5;filter: alpha(opacity=50)}.modal-header{padding: 15px;border-bottom: 1px solid #e5e5e5;min-height: 16.42857143px}.modal-header .close{margin-top: -2px}.modal-title{margin: 0;line-height: 1.42857143}.modal-body{position: relative;padding: 15px}.modal-footer{padding: 15px;text-align: right;border-top: 1px solid #e5e5e5}.modal-footer .btn + .btn{margin-left: 5px;margin-bottom: 0}.modal-footer .btn-group .btn + .btn{margin-left: -1px}.modal-footer .btn-block + .btn-block{margin-left: 0}.modal-scrollbar-measure{position: absolute;top: -9999px;width: 50px;height: 50px;overflow: scroll}@media (min-width: 768px){.modal-dialog{width: 600px;margin: 30px auto}.modal-content{-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);box-shadow: 0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width: 300px}}@media (min-width: 992px){.modal-lg{width: 900px}}.tooltip{position: absolute;z-index: 1070;display: block;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 12px;font-weight: normal;line-height: 1.4;opacity: 0;filter: alpha(opacity=0)}.tooltip.in{opacity: .9;filter: alpha(opacity=90)}.tooltip.top{margin-top: -3px;padding: 5px 0}.tooltip.right{margin-left: 3px;padding: 0 5px}.tooltip.bottom{margin-top: 3px;padding: 5px 0}.tooltip.left{margin-left: -3px;padding: 0 5px}.tooltip-inner{max-width: 200px;padding: 3px 8px;color: #fff;text-align: center;text-decoration: none;background-color: #000;border-radius: 3px}.tooltip-arrow{position: absolute;width: 0;height: 0;border-color: transparent;border-style: solid}.tooltip.top .tooltip-arrow{bottom: 0;left: 50%;margin-left: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-left .tooltip-arrow{bottom: 0;right: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-right .tooltip-arrow{bottom: 0;left: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.right .tooltip-arrow{top: 50%;left: 0;margin-top: -5px;border-width: 5px 5px 5px 0;border-right-color: #000}.tooltip.left .tooltip-arrow{top: 50%;right: 0;margin-top: -5px;border-width: 5px 0 5px 5px;border-left-color: #000}.tooltip.bottom .tooltip-arrow{top: 0;left: 50%;margin-left: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-left .tooltip-arrow{top: 0;right: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-right .tooltip-arrow{top: 0;left: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.popover{position: absolute;top: 0;left: 0;z-index: 1060;display: none;max-width: 276px;padding: 1px;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 13px;font-weight: normal;line-height: 1.42857143;text-align: left;background-color: #fff;background-clip: padding-box;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.2);border-radius: 5px;-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2);box-shadow: 0 5px 10px rgba(0,0,0,0.2);white-space: normal}.popover.top{margin-top: -10px}.popover.right{margin-left: 10px}.popover.bottom{margin-top: 10px}.popover.left{margin-left: -10px}.popover-title{margin: 0;padding: 8px 14px;font-size: 13px;background-color: #f7f7f7;border-bottom: 1px solid #ebebeb;border-radius: 4px 4px 0 0}.popover-content{padding: 9px 14px}.popover > .arrow,.popover > .arrow:after{position: absolute;display: block;width: 0;height: 0;border-color: transparent;border-style: solid}.popover > .arrow{border-width: 11px}.popover > .arrow:after{border-width: 10px;content: ""}.popover.top > .arrow{left: 50%;margin-left: -11px;border-bottom-width: 0;border-top-color: #999;border-top-color: rgba(0,0,0,0.25);bottom: -11px}.popover.top > .arrow:after{content: " ";bottom: 1px;margin-left: -10px;border-bottom-width: 0;border-top-color: #fff}.popover.right > .arrow{top: 50%;left: -11px;margin-top: -11px;border-left-width: 0;border-right-color: #999;border-right-color: rgba(0,0,0,0.25)}.popover.right > .arrow:after{content: " ";left: 1px;bottom: -10px;border-left-width: 0;border-right-color: #fff}.popover.bottom > .arrow{left: 50%;margin-left: -11px;border-top-width: 0;border-bottom-color: #999;border-bottom-color: rgba(0,0,0,0.25);top: -11px}.popover.bottom > .arrow:after{content: " ";top: 1px;margin-left: -10px;border-top-width: 0;border-bottom-color: #fff}.popover.left > .arrow{top: 50%;right: -11px;margin-top: -11px;border-right-width: 0;border-left-color: #999;border-left-color: rgba(0,0,0,0.25)}.popover.left > .arrow:after{content: " ";right: 1px;border-right-width: 0;border-left-color: #fff;bottom: -10px}.carousel{position: relative}.carousel-inner{position: relative;overflow: hidden;width: 100%}.carousel-inner > .item{display: none;position: relative;-webkit-transition: .6s ease-in-out left;-o-transition: .6s ease-in-out left;transition: .6s ease-in-out left}.carousel-inner > .item > img,.carousel-inner > .item > a > img{line-height: 1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner > .item{-webkit-transition: -webkit-transform 0.6s ease-in-out;-moz-transition: -moz-transform 0.6s ease-in-out;-o-transition: -o-transform 0.6s ease-in-out;transition: transform 0.6s ease-in-out;-webkit-backface-visibility: hidden;-moz-backface-visibility: hidden;backface-visibility: hidden;-webkit-perspective: 1000;-moz-perspective: 1000;perspective: 1000}.carousel-inner > .item.next,.carousel-inner > .item.active.right{-webkit-transform: translate3d(100%, 0, 0);transform: translate3d(100%, 0, 0);left: 0}.carousel-inner > .item.prev,.carousel-inner > .item.active.left{-webkit-transform: translate3d(-100%, 0, 0);transform: translate3d(-100%, 0, 0);left: 0}.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active{-webkit-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);left: 0}}.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev{display: block}.carousel-inner > .active{left: 0}.carousel-inner > .next,.carousel-inner > .prev{position: absolute;top: 0;width: 100%}.carousel-inner > .next{left: 100%}.carousel-inner > .prev{left: -100%}.carousel-inner > .next.left,.carousel-inner > .prev.right{left: 0}.carousel-inner > .active.left{left: -100%}.carousel-inner > .active.right{left: 100%}.carousel-control{position: absolute;top: 0;left: 0;bottom: 0;width: 15%;opacity: .5;filter: alpha(opacity=50);font-size: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left: auto;right: 0;background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline: 0;color: #fff;text-decoration: none;opacity: .9;filter: alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position: absolute;top: 50%;z-index: 5;display: inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left: 50%;margin-left: -10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right: 50%;margin-right: -10px}.carousel-control .icon-prev,.carousel-control .icon-next{width: 20px;height: 20px;margin-top: -10px;line-height: 1;font-family: serif}.carousel-control .icon-prev:before{content: '\2039'}.carousel-control .icon-next:before{content: '\203a'}.carousel-indicators{position: absolute;bottom: 10px;left: 50%;z-index: 15;width: 60%;margin-left: -30%;padding-left: 0;list-style: none;text-align: center}.carousel-indicators li{display: inline-block;width: 10px;height: 10px;margin: 1px;text-indent: -999px;border: 1px solid #fff;border-radius: 10px;cursor: pointer;background-color: #000 \9;background-color: rgba(0,0,0,0)}.carousel-indicators .active{margin: 0;width: 12px;height: 12px;background-color: #fff}.carousel-caption{position: absolute;left: 15%;right: 15%;bottom: 20px;z-index: 10;padding-top: 20px;padding-bottom: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow: none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width: 30px;height: 30px;margin-top: -15px;font-size: 30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left: -15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right: -15px}.carousel-caption{left: 20%;right: 20%;padding-bottom: 30px}.carousel-indicators{bottom: 20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content: " ";display: table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear: both}.center-block{display: block;margin-left: auto;margin-right: auto}.pull-right{float: right !important}.pull-left{float: left !important}.hide{display: none !important}.show{display: block !important}.invisible{visibility: hidden}.text-hide{font: 0/0 a;color: transparent;text-shadow: none;background-color: transparent;border: 0}.hidden{display: none !important}.affix{position: fixed}@-ms-viewport{width: device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display: none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display: none !important}@media (max-width: 767px){.visible-xs{display: block !important}table.visible-xs{display: table}tr.visible-xs{display: table-row !important}th.visible-xs,td.visible-xs{display: table-cell !important}}@media (max-width: 767px){.visible-xs-block{display: block !important}}@media (max-width: 767px){.visible-xs-inline{display: inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display: inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display: block !important}table.visible-sm{display: table}tr.visible-sm{display: table-row !important}th.visible-sm,td.visible-sm{display: table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display: block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display: inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display: inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display: block !important}table.visible-md{display: table}tr.visible-md{display: table-row !important}th.visible-md,td.visible-md{display: table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display: block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display: inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display: inline-block !important}}@media (min-width: 1200px){.visible-lg{display: block !important}table.visible-lg{display: table}tr.visible-lg{display: table-row !important}th.visible-lg,td.visible-lg{display: table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display: block !important}}@media (min-width: 1200px){.visible-lg-inline{display: inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display: inline-block !important}}@media (max-width: 767px){.hidden-xs{display: none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display: none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display: none !important}}@media (min-width: 1200px){.hidden-lg{display: none !important}}.visible-print{display: none !important}@media print{.visible-print{display: block !important}table.visible-print{display: table}tr.visible-print{display: table-row !important}th.visible-print,td.visible-print{display: table-cell !important}}.visible-print-block{display: none !important}@media print{.visible-print-block{display: block !important}}.visible-print-inline{display: none !important}@media print{.visible-print-inline{display: inline !important}}.visible-print-inline-block{display: none !important}@media print{.visible-print-inline-block{display: inline-block !important}}@media print{.hidden-print{display: none !important}}.sr-only{clip: rect(1px, 1px, 1px, 1px);position: absolute;width: auto;height: auto;margin: 0;padding: 0;overflow: hidden;border: 0}.sr-only:focus{background-color: #fff;border-radius: 3px;clip: auto;color: #132531;display: block;font-size: 13px;height: 65px;line-height: 18px;padding: 23.5px 7px;position: absolute;left: 5px;top: 5px;text-decoration: none;text-transform: none;width: auto;z-index: 100000}.navbar-brand{font-size: 20px}.alert.alert-info a{text-decoration: underline}.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover{color: #000}[data-toggle~="dropdown"]{cursor: pointer}.fa{cursor: default}@media (min-width: 768px){.form-control{max-width: 400px}}.has-error{margin-bottom: 0}.sms-error{margin-bottom: 0}.sms-error .help-block,.sms-error .control-label,.sms-error .radio,.sms-error .checkbox,.sms-error .radio-inline,.sms-error .checkbox-inline,.sms-error.radio label,.sms-error.checkbox label,.sms-error.radio-inline label,.sms-error.checkbox-inline label{color: #a94442}.sms-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.sms-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.sms-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.sms-error .form-control-feedback{color: #a94442}.help-block.with-errors{padding-top: 3px;padding-bottom: 3px}.help-block.with-errors:empty{padding: 0}.help-block.with-errors,.list-unstyled{margin: 0}.highlight,mark{background: #ff6;padding: .1em .2em}.icon-bar{background-color: #888}img{max-width: 100%}label.list-group-item{margin-top: 0;padding-left: 35px;font-weight: normal;border-radius: 0}.list-group-item.title{font-weight: bold}#modal{background-color: rgba(0,0,0,0.2)}#modal .modal-body > h2:first-child{display: none}.popover{width: 250px}@media (min-width: 768px){p.lead{font-size: 23px;font-weight: normal}}@media (max-width: 767px){p.lead{font-size: 20px}}.recordcover{max-height: 300px}.sub-breadcrumb{padding: 5px 10px;white-space: nowrap}.sub-breadcrumb li{display: inline-block}.sub-breadcrumb li + li:before{padding-left: 5px;padding-right: 5px;color: #777;content: "/\00a0"}.tab-content{padding: 4px}@media (max-width: 991px){header .container.navbar{margin-bottom: 0}#searchForm{margin-top: 0}}@media (max-width: 767px){#searchForm{padding-top: 0}}.group{position: relative;background: #eee;border-radius: 3px;border: 1px solid #c8c8c8;margin-top: 0;margin-bottom: .5em !important}.group .add_search_link{display: inline-block;margin-top: 4px}.group .group-close{position: absolute;top: .3em;right: .5em;opacity: .4;z-index: 2}.group .search{margin-bottom: 2px}.group .search .close{opacity: .8}@media (min-width: 768px){.group{padding: 10px 10px 10px 25px}.group [class^=col-]{padding-left: 0}}@media (max-width: 767px){.group .search .middle{float: left;width: 90%}.group .group-close{top: .5em;right: 1em;opacity: .6}}@media (max-width: 991px){.group .form-control{max-width: none}}#groupPlaceHolder{display: block;padding: 6px}.template-dir-eds.template-name-advanced legend{margin-bottom: 0}.template-dir-eds.template-name-advanced .no-js .group:nth-child(n+3){display: none}.template-dir-eds.template-name-advanced .search .close a{margin-left: -2em}.alphabrowse{border-collapse: separate}.alphabrowse .lcc{width: 20%}.alphabrowse .titles{width: 10%;text-align: center}.alphabrowse tr.browse-match td{border-top: .2em solid #619144;border-bottom: .2em solid #619144}.alphabrowse tr.browse-match td:first-child{border-left: .2em solid #619144}.alphabrowse tr.browse-match td:last-child{border-right: .2em solid #619144}.twitter-typeahead{vertical-align: top;background-color: #fff;border-radius: 3px}@media (max-width: 767px){.twitter-typeahead{width: 100%}}.twitter-typeahead .tt-hint{display: none}.tt-suggestion{cursor: pointer;text-overflow: ellipsis;white-space: nowrap}.tt-suggestion.active{white-space: inherit}.tt-suggestion.tt-cursor{background-color: #619144;color: #fff}.tt-suggestion p{margin: 0}.badge a{color: #fff}.browse.list-group .list-group-item{word-wrap: break-word}.browse.list-group .list-group-item.view-record{padding: 2px 4px;font-size: 85%;text-align: right;border-top: 0}.cart-controls .checkbox{line-height: 2.5em;padding-right: 1em}#modal .cart-controls .btn{margin-bottom: 4px}#modal .cart-controls .checkbox{padding-bottom: 1em}#modal .cart-controls ~ hr{margin-top: 0}.fa-grid:before{content: "\f00a"}.fa-visual:before{content: "\f008"}.fa-x:before{content: "\f0f6"}.fa-atlas:before{content: "\f14e"}.fa-book:before{content: "\f02d"}.fa-braille:before{content: "\f0a6"}.fa-cdrom:before{content: "\f109"}.fa-chart:before{content: "\f012"}.fa-chipcartridge:before{content: "\f109"}.fa-collage:before{content: "\f03e"}.fa-disccartridge:before{content: "\f109"}.fa-drawing:before{content: "\f03e"}.fa-ebook:before{content: "\f0f6"}.fa-electronic:before{content: "\f1c6"}.fa-filmstrip:before{content: "\f008"}.fa-flashcard:before{content: "\f0e7"}.fa-floppydisk:before{content: "\f0c7"}.fa-globe:before{content: "\f0ac"}.fa-journal:before{content: "\f0f6"}.fa-kit:before{content: "\f0b1"}.fa-manuscript:before{content: "\f0f6"}.fa-map:before{content: "\f14e"}.fa-microfilm:before{content: "\f008"}.fa-motionpicture:before{content: "\f03d"}.fa-musicalscore:before{content: "\f001"}.fa-musicrecording:before{content: "\f001"}.fa-newspaper:before{content: "\f0f6"}.fa-online:before{content: "\f109"}.fa-painting:before{content: "\f03e"}.fa-photo:before{content: "\f03e"}.fa-photonegative:before{content: "\f03e"}.fa-physicalobject:before{content: "\f187"}.fa-print:before{content: "\f03e"}.fa-sensorimage:before{content: "\f03e"}.fa-serial:before{content: "\f0f6"}.fa-slide:before{content: "\f008"}.fa-software:before{content: "\f109"}.fa-soundcassette:before{content: "\f025"}.fa-sounddisc:before{content: "\f109"}.fa-soundrecording:before{content: "\f025"}.fa-tapecartridge:before{content: "\f109"}.fa-tapecassette:before{content: "\f025"}.fa-tapereel:before{content: "\f008"}.fa-transparency:before{content: "\f008"}.fa-unknown:before{content: "\f128"}.fa-video:before{content: "\f03d"}.fa-videocartridge:before{content: "\f03d"}.fa-videocassette:before{content: "\f03d"}.fa-videodisc:before{content: "\f109"}.fa-videoreel:before{content: "\f03d"}#dateVisColorSettings{background-color: #fff;fill: #eaeaea;outline-color: #e8cfac;stroke: #619144}.citation .pace-car th,.citation .pace-car td{border: 0;padding: 0}.citation th{text-align: right}#hierarchyTreeHolder{overflow-x: hidden;border-right: 1px solid #eee}#hierarchyTree .currentHierarchy > a,#hierarchyTree .currentRecord a{font-weight: bold;color: #000}#tagList .tag{display: inline-block;margin: 0 1px 1px;border-radius: 4px;padding: 3px 3px;font-size: 13px;line-height: 1.42857143;border-radius: 3px}#tagList .tag.selected{background-color: #619144}#tagList .tag.selected a{color: #fff}#tagList .tag.selected .badge{color: #222;background-color: #fff}#tagList .tag.selected .badge:hover{color: #a94442}#tagList .tag .badge .fa{width: 12px}#tagList .tag-form{display: inline}#tagList .tag-form button{border: 0}#tagList.loggedin .tag:not(.selected) .badge:hover{background-color: #028302}.bulkActionButtons label{display: inline-block}.bulkActionButtons label input{margin-top: 2px}@media (max-width: 767px){.grid{min-height: 250px}}.result a.title{font-weight: bold}.result .left{text-align: center}.result .left img{max-width: 100%}@media (max-width: 767px){.result a{text-decoration: underline}.result .middle,.result .right{padding: 0}}@media (max-width: 530px){.result .checkbox{display: none !important}.result .left{width: 40%}.result .middle{width: 60%}.result .right{display: none}}.search-controls .alert{margin-bottom: 0}.searchtools a{padding: 0 .5em}.title-in-heading{font-size: inherit;font-style: italic}.sidebar label:not(.list-group-item){margin-left: 20px}.sidebar .list-group:not(.filters) .title{cursor: pointer}.sidebar .list-group:not(.filters) .title.collapsed{border-radius: 3px}.sidebar .list-group:not(.filters) .title.collapsed:after{content: '\25BC'}.sidebar .list-group:not(.filters) .title:after{content: '\25B2';float: right}.sidebar .collapse .list-group-item,.sidebar .collapsing .list-group-item{border-top-left-radius: 0px;border-top-right-radius: 0px}.sidebar .collapse .list-group-item[id^=more],.sidebar .collapsing .list-group-item[id^=more]{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.sidebar #side-collapse-publishDate .list-group-item{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.list-group-item,.badge i.fa,.tt-suggestion{cursor: inherit}.sidebar .facet a{text-decoration: none}.top-row .applied{font-weight: bold}.top-row .applied:hover{color: #a94442}.top-row .applied:hover .fa.fa-check:before{content: "\f00d"}.slider-container{padding: 4px 10px;text-align: center}.slider-container .slider.slider-horizontal{width: 100%}.slider-container .slider-track{background: #777;box-shadow: inset 0 1px 0 rgba(0,0,0,0.4)}.slider-container .slider-handle{background: #619144;background-image: none;border: 1px solid #619144;box-shadow: none;opacity: .9}.slider-container .slider-handle:hover,.slider-container .slider-handle:active,.slider-container .slider-handle:focus{opacity: 1;background: #FFF;border-color: #777}.slider-container .slider-handle:active,.slider-container .slider-handle:focus{border-color: #619144}.slider-container .slider-selection{background: #CCC;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.3)}.slider-container input{display: none}.table{table-layout: fixed;word-wrap: break-word}.node{position: absolute;box-sizing: content-box;margin: -1px;overflow: hidden;font: 10px sans-serif;line-height: 12px;border: 1px solid #fff}.node div{margin-top: 0px}.toplevel{border: 2px solid #000}.node .label{position: absolute;bottom: 0;left: 0;min-height: 1px;padding: 2px 4px;font-size: 85%;background-color: rgba(0,0,0,0.5);border-radius: 0;text-shadow: none}.notalabel{color: #000}#viz-instructions{padding-top: 600px}#similar-items-carousel .carousel-indicators{bottom: 0px}#similar-items-carousel .carousel-indicators li{width: 8px;height: 8px;margin: 2px;background-color: rgba(255,255,255,0.3);border-color: #222}#similar-items-carousel .hover-overlay{position: relative;display: block;min-width: 150px;min-height: 200px;margin: auto;text-align: center}#similar-items-carousel .hover-overlay img{max-width: 100%;margin: 10px 0}#similar-items-carousel .hover-overlay .content{position: absolute;top: 0;left: 0;display: none;width: 100%;height: 100%;padding: .5em .5em 0;color: #fff;background-color: rgba(0,0,0,0.5)}#similar-items-carousel .hover-overlay:hover .content{display: block}#similar-items-carousel .item{padding: 0 4em}.facet .jstree-ocl:before{float: left;width: 10px;padding: 0;margin-left: -10px;font-family: 'FontAwesome';font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;speak: none}.facet .jstree-default .jstree-open > .jstree-ocl:before{content: "\f0d7"}.facet .jstree-default .jstree-closed > .jstree-ocl:before{content: "\f0da"}.facet .jstree-default .jstree-leaf > .jstree-ocl:before{content: " "}.jstree-facet li span.main{display: block;padding-left: 1px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.jstree-facet .jstree-container-ul{padding: 0}.jstree-facet .jstree-container-ul > li.active,.jstree-facet .jstree-container-ul > li.active a.jstree-anchor{background-color: #265680;color: #fff}li.jstree-facet,li.jstree-node{list-style: none}li.jstree-facet .badge{cursor: text}li.jstree-facet ul{padding-left: 20px}.hierarchy-tree .jstree-ocl:before{float: left;width: 10px;padding: 0;margin-left: -10px;font-family: 'FontAwesome';font-style: normal;font-weight: normal;cursor: pointer;text-decoration: inherit;speak: none}.hierarchy-tree .jstree-open > .jstree-ocl:before{content: "\f0d7"}.hierarchy-tree .jstree-closed > .jstree-ocl:before{content: "\f0da"}.hierarchy-tree .jstree-leaf > .jstree-ocl:before{content: " "}.hierarchy-tree .jstree-icon{width: 16px;color: #000}.hierarchy-tree .jstree-anchor{padding: 2px 5px;white-space: nowrap}.hierarchy-tree .jstree-container-ul,.hierarchy-tree .jstree-children{padding-left: 16px}.hierarchy-tree .jstree-initial-node{display: none}.hierarchy-tree .jstree-clicked{color: #fff;background-color: #619144}.hierarchy-tree .jstree-clicked .jstree-icon{color: #fff}.offcanvas-overlay,.offcanvas-toggle{display: none}@media screen and (max-width: 767px){body.offcanvas{overflow-x: hidden}body.offcanvas .sidebar{position: fixed;height: 100%;top: 0;width: 75%;padding-left: 0;padding-right: 0;overflow-y: auto}body.offcanvas .sidebar h4{padding-left: 5px}body.offcanvas .sidebar .checkbox{margin-left: 25px}body.offcanvas .sidebar .list-group,body.offcanvas .sidebar .list-group-item{border-left: 0;border-right: 0;border-radius: 0 !important}body.offcanvas.active{overflow-y: hidden}body.offcanvas.offcanvas-left > .container{background: #FFF;padding-left: 25px}body.offcanvas.offcanvas-left.active{margin-left: 75%;margin-right: -75%}body.offcanvas.offcanvas-left.active .sidebar{left: 0}body.offcanvas.offcanvas-left.active .offcanvas-overlay{right: -75%}body.offcanvas.offcanvas-left.active .offcanvas-toggle{left: 75%}body.offcanvas.offcanvas-left .sidebar{left: -75%}body.offcanvas.offcanvas-left .offcanvas-overlay{right: -100%}body.offcanvas.offcanvas-left .offcanvas-toggle{border-radius: 0 2px 2px 0;left: 0}body.offcanvas.offcanvas-right > .container{background: #FFF;padding-right: 25px}body.offcanvas.offcanvas-right.active{margin-left: -75%;margin-right: 75%}body.offcanvas.offcanvas-right.active .sidebar{right: 0}body.offcanvas.offcanvas-right.active .offcanvas-overlay{left: -75%}body.offcanvas.offcanvas-right.active .offcanvas-toggle{right: 75%}body.offcanvas.offcanvas-right .sidebar{right: -75%}body.offcanvas.offcanvas-right .offcanvas-overlay{left: -100%}body.offcanvas.offcanvas-right .offcanvas-toggle{border-radius: 2px 0 0 2px;right: 0}body.offcanvas .offcanvas-overlay{display: block;position: fixed;top: 0;width: 100%;height: 100%;background-color: rgba(0,0,0,0.3);z-index: 3}body.offcanvas .offcanvas-toggle{display: block;position: fixed;top: 50%;width: 25px;padding: 20px 0;background: #619144;color: #EEE;text-align: center;z-index: 5}body.offcanvas .offcanvas-overlay,body.offcanvas .offcanvas-toggle,body.offcanvas .offcanvas-toggle *{cursor: pointer}body.offcanvas,body.offcanvas .sidebar,body.offcanvas .offcanvas-overlay,body.offcanvas .offcanvas-toggle{-webkit-transition: all .25s ease-out;-o-transition: all .25s ease-out;transition: all .25s ease-out}}.bp-icon,.fa-x,i.fa-archive,i.fa-asterisk,i.fa-atlas,i.fa-bell,i.fa-book,i.fa-bookbag-add,i.fa-bookbag-delete,i.fa-bookbag-empty,i.fa-bookmark,i.fa-braille,i.fa-cancel-all-holds,i.fa-cancel-all-storage-retrieval-requests,i.fa-cancel-holds,i.fa-cancel-storage-retrieval-requests,i.fa-cdrom,i.fa-chart,i.fa-chipcartridge,i.fa-collage,i.fa-disccartridge,i.fa-drawing,i.fa-ebook,i.fa-edit,i.fa-electronic,i.fa-email,i.fa-envelope,i.fa-envelope-alt,i.fa-exchange,i.fa-external-link,i.fa-filmstrip,i.fa-flag,i.fa-flag,i.fa-flashcard,i.fa-floppydisk,i.fa-globe,i.fa-grid,i.fa-heart,i.fa-home,i.fa-inbox,i.fa-journal,i.fa-kit,i.fa-leaf,.fa-sitemap,i.fa-list,i.fa-list-alt,i.fa-export,i.fa-lock,i.fa-manuscript,i.fa-map,i.fa-microfilm,i.fa-minus-circle,i.fa-minus-sign,i.fa-mobile,i.fa-motionpicture,i.fa-musicalscore,i.fa-musicrecording,i.fa-newspaper,i.fa-ok,i.fa-online,i.fa-painting,i.fa-photo,i.fa-photonegative,i.fa-physicalobject,i.fa-plus,i.fa-plus-sign,i.fa-print,i.fa-qrcode,i.fa-remove,i.fa-renew,i.fa-renew-all,i.fa-report,i.fa-rss,i.fa-search,i.fa-sensorimage,i.fa-serial,i.fa-shopping-cart,i.fa-sign-in,i.fa-sign-out,i.fa-slide,i.fa-software,i.fa-soundcassette,i.fa-sounddisc,i.fa-soundrecording,i.fa-spinner,i.fa-star,i.fa-suitcase,i.fa-tapecartridge,i.fa-tapecassette,i.fa-tapereel,i.fa-transparency,i.fa-trash-o,i.fa-tree,i.fa-tree-muted,i.fa-unknown,i.fa-usd,i.fa-user,i.fa-video,i.fa-videocartridge,i.fa-videocassette,i.fa-videodisc,i.fa-videoreel,i.fa-visual{background-position: center center;background-repeat: no-repeat;color: transparent;content: '';display: inline-block;height: 16px;margin: 0;padding: 0;text-shadow: none;vertical-align: text-bottom;width: 16px}.fa-x{background-image: url('../../../themes/bootprint3/images/icons/page_white.png')}i.fa-archive{background-image: url('../../../themes/bootprint3/images/icons/package.png')}i.fa-asterisk{background-image: url('../../../themes/bootprint3/images/icons/list.png')}i.fa-atlas{background-image: url('../../../themes/bootprint3/images/icons/map.png')}i.fa-bell{background-image: url('../../../themes/bootprint3/images/icons/bell.png')}i.fa-book{background-image: url('../../../themes/bootprint3/images/icons/book.png')}i.fa-bookbag-add{background-image: url('../../../themes/bootprint3/images/icons/bookbag_add.png')}i.fa-bookbag-delete{background-image: url('../../../themes/bootprint3/images/icons/bookbag_delete.png')}i.fa-bookbag-empty{background-image: url('../../../themes/bootprint3/images/icons/bookbag_empty.png')}i.fa-bookmark{background-image: url('../../../themes/bootprint3/images/icons/bookmark_add.png')}i.fa-braille{background-image: url('../../../themes/bootprint3/images/icons/page_red.png')}i.fa-cancel-all-holds{background-image: url('../../../themes/bootprint3/images/icons/holdCancelAll.png')}i.fa-cancel-all-storage-retrieval-requests{background-image: url('../../../themes/bootprint3/images/icons/holdCancelAll.png')}i.fa-cancel-holds{background-image: url('../../../themes/bootprint3/images/icons/holdCancel.png')}i.fa-cancel-storage-retrieval-requests{background-image: url('../../../themes/bootprint3/images/icons/holdCancel.png')}i.fa-cdrom{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-chart{background-image: url('../../../themes/bootprint3/images/icons/chart_bar.png')}i.fa-chipcartridge{background-image: url('../../../themes/bootprint3/images/icons/server.png')}i.fa-collage{background-image: url('../../../themes/bootprint3/images/icons/pictures.png')}i.fa-disccartridge{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-drawing{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-ebook{background-image: url('../../../themes/bootprint3/images/icons/book_addresses.png')}i.fa-edit{background-image: url('../../../themes/bootprint3/images/icons/edit.png')}i.fa-electronic{background-image: url('../../../themes/bootprint3/images/icons/mouse.png')}i.fa-email,i.fa-envelope,i.fa-envelope-alt{background-image: url('../../../themes/bootprint3/images/icons/email.png')}i.fa-exchange{background-image: url('../../../themes/bootprint3/images/icons/arrow_refresh.png')}i.fa-external-link{background-image: url('../../../themes/bootprint3/images/icons/link_go.png')}i.fa-filmstrip{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-flag{background-image: url('../../../themes/bootprint3/images/icons/flag_red.png')}i.fa-flashcard{background-image: url('../../../themes/bootprint3/images/icons/table_lightening.png')}i.fa-floppydisk{background-image: url('../../../themes/bootprint3/images/icons/disk.png')}i.fa-globe{background-image: url('../../../themes/bootprint3/images/icons/world.png')}i.fa-grid{background-image: url('../../../themes/bootprint3/images/icons/view_grid.png')}i.fa-heart{background-image: url('../../../themes/bootprint3/images/icons/heart.png')}i.fa-home{background-image: url('../../../themes/bootprint3/images/icons/house.png')}i.fa-inbox{background-image: url('../../../themes/bootprint3/images/icons/box.png')}i.fa-journal{background-image: url('../../../themes/bootprint3/images/icons/book.png')}i.fa-kit{background-image: url('../../../themes/bootprint3/images/icons/briefcase.png')}i.fa-leaf,.fa-sitemap{background-image: url('../../../themes/bootprint3/images/icons/treeCurrent.png')}i.fa-list{background-image: url('../../../themes/bootprint3/images/icons/view_list.png')}i.fa-list-alt,i.fa-export{background-image: url('../../../themes/bootprint3/images/icons/application_add.png')}i.fa-lock{background-image: url('../../../themes/bootprint3/images/icons/lock.png')}i.fa-manuscript{background-image: url('../../../themes/bootprint3/images/icons/script.png')}i.fa-map{background-image: url('../../../themes/bootprint3/images/icons/map.png')}i.fa-microfilm{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-minus-circle,i.fa-minus-sign{background-image: url('../../../themes/bootprint3/images/icons/delete.png')}i.fa-mobile{background-image: url('../../../themes/bootprint3/images/icons/phone.png')}i.fa-motionpicture{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-musicalscore{background-image: url('../../../themes/bootprint3/images/icons/music.png')}i.fa-musicrecording{background-image: url('../../../themes/bootprint3/images/icons/music.png')}i.fa-newspaper{background-image: url('../../../themes/bootprint3/images/icons/newspaper.png')}i.fa-ok{background-image: url('../../../themes/bootprint3/images/icons/tick.png')}i.fa-online{background-image: url('../../../themes/bootprint3/images/icons/computer.png')}i.fa-painting{background-image: url('../../../themes/bootprint3/images/icons/paintbrush.png')}i.fa-photo{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-photonegative{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-physicalobject{background-image: url('../../../themes/bootprint3/images/icons/box.png')}i.fa-plus{background-image: url('../../../themes/bootprint3/images/icons/add.png')}i.fa-plus-sign{background-image: url('../../../themes/bootprint3/images/icons/add.png')}i.fa-print{background-image: url('../../../themes/bootprint3/images/icons/printer.png')}i.fa-qrcode{background-image: url('../../../themes/bootprint3/images/icons/qrcode.png')}i.fa-remove{background-image: url('../../../themes/bootprint3/images/icons/delete.png')}i.fa-renew{background-image: url('../../../themes/bootprint3/images/icons/renew.png')}i.fa-renew-all{background-image: url('../../../themes/bootprint3/images/icons/renewAll.png')}i.fa-report{background-image: url('../../../themes/bootprint3/images/icons/report.png')}i.fa-rss{background-image: url('../../../themes/bootprint3/images/icons/feed.png')}i.fa-search{background-image: url('../../../themes/bootprint3/images/icons/magnifier.png')}i.fa-sensorimage{background-image: url('../../../themes/bootprint3/images/icons/photo.png')}i.fa-serial{background-image: url('../../../themes/bootprint3/images/icons/page_white_stack.png')}i.fa-shopping-cart{background-image: url('../../../themes/bootprint3/images/icons/cart.png')}i.fa-sign-in{background-image: url('../../../themes/bootprint3/images/icons/door_in.png')}i.fa-sign-out{background-image: url('../../../themes/bootprint3/images/icons/door_out.png')}i.fa-slide{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-software{background-image: url('../../../themes/bootprint3/images/icons/drive_cd.png')}i.fa-soundcassette{background-image: url('../../../themes/bootprint3/images/icons/sound.png')}i.fa-sounddisc{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-soundrecording{background-image: url('../../../themes/bootprint3/images/icons/sound.png')}i.fa-spinner{background-image: url('../../../themes/bootprint3/images/icons/ajax_loading.gif')}i.fa-star{background-image: url('../../../themes/bootprint3/images/icons/star.png')}i.fa-suitcase{background-image: url('../../../themes/bootprint3/images/icons/bookbag.png')}i.fa-tapecartridge{background-image: url('../../../themes/bootprint3/images/icons/drive.png')}i.fa-tapecassette{background-image: url('../../../themes/bootprint3/images/icons/drive.png')}i.fa-tapereel{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-transparency{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-trash-o{background-image: url('../../../themes/bootprint3/images/icons/bin.png')}i.fa-tree{background-image: url('../../../themes/bootprint3/images/icons/treeCurrent.png')}i.fa-tree-muted{background-image: url('../../../themes/bootprint3/images/icons/treeMuted.png')}i.fa-unknown{background-image: url('../../../themes/bootprint3/images/icons/page_white.png')}i.fa-usd{background-image: url('../../../themes/bootprint3/images/icons/money_dollar.png')}i.fa-user{background-image: url('../../../themes/bootprint3/images/icons/user.png')}i.fa-video{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videocartridge{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videocassette{background-image: url('../../../themes/bootprint3/images/icons/television.png')}i.fa-videodisc{background-image: url('../../../themes/bootprint3/images/icons/cd.png')}i.fa-videoreel{background-image: url('../../../themes/bootprint3/images/icons/film.png')}i.fa-visual{background-image: url('../../../themes/bootprint3/images/icons/view_visual.png')}body{background: #619144;font-size: 13px}body a,body .btn-link{color: #06C}body a:hover,body .btn-link:hover{color: #09F}@media (max-width: 767px){body{padding: 6px}body header{margin-top: 0}body .label{font-size: 85%}}@media (min-width: 768px){.badge{font-size: 85%;margin-top: 1px}.label{padding-top: .3em}}.btn{padding: 3px 5px 2px}.btn.btn-default{background: #eee;background-image: linear-gradient(#fff, #ddd);border: 1px solid #777;color: #222;text-shadow: 0 1px 0 #fff}.btn.btn-default:hover{border: 1px solid #333;color: #222;text-shadow: none}.btn-danger,.btn-danger:hover{border-color: #6e110e;font-weight: bold}.btn-info,.btn-info:hover{border-color: #103743;font-weight: bold}.btn-primary,.btn-primary:hover{border-color: #456730;font-weight: bold}.btn-success,.btn-success:hover{border-color: #014701;font-weight: bold}.btn-warning,.btn-warning:hover{border-color: #683d00;font-weight: bold}h2{margin: 0 8px 8px}input[type="radio"],input[type="checkbox"]{margin: 0 auto;margin-top: 2px;padding: 0 2px}.nav > li > a{padding: 5px 10px}.nav-pills{display: table;margin: 0 auto}.navbar{min-height: 1px}.navbar-form{margin-top: 5px;margin-bottom: 5px}.pagination{display: table;margin: 18px auto}.pagination > li > a,.pagination > li > span{padding: 4px 12px 3px 12px}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{background: #619144;border-color: #619144}.panel-heading{padding: 0}.panel-heading a{cursor: pointer;display: inline-block;padding: 6px;width: 100%}.row:not(.top-row){padding: 6px 4px;margin: 0 -4px}.row.result:nth-child(even){background: #eee}.row.result:last-child{margin-bottom: 1em}.row > p{padding: 0 1em}.search .row{padding: 2px 0}.sub-breadcrumb{padding: 0 5px}.tab-content{padding: 6px 8px;border: 1px solid #ddd;border-top: 0}.container{background: #FFF;padding: 0}header{margin-top: 18px}header .fa.fa-bars{font-size: 21px}header .navbar{border-radius: 5px 5px 0 0;padding: 0 10px}header .navbar #searchForm{display: none !important}header .navbar .navbar-brand{background-image: url('../../../themes/bootprint3/images/vufind_logo.png');color: transparent;height: 65px;margin-top: 5px;width: 170px}header .navbar .navbar-brand:hover,header .navbar .navbar-brand:active,header .navbar .navbar-brand:focus{color: transparent}header .navbar .navbar-nav > li > a{padding: 12px 6px}@media (max-width: 767px){header .navbar .navbar-nav > li > a{padding: 8px 24px}}header .navbar .navbar-right{margin-top: 12px}@media (max-width: 767px){header .navbar .navbar-right{margin: 0}}header .searchbox{background: linear-gradient(to bottom, #fff, #eee);display: block !important}header .searchbox .tab-content{border: 0}header .searchbox .tab-content .navbar-text{margin: 5px 10px 5px 0}@media (max-width: 767px){header #header-collapse .navbar-right li{text-align: right}header #searchForm_type{margin-top: 2px;margin-bottom: 2px}}header .breadcrumb{border: 1px solid #ccc;border-radius: 0;border-width: 1px 0;font-size: 12px;margin-bottom: 2px;padding: 7px 20px 5px}#searchForm_lookfor,#searchForm_type{border-color: #619144}[name=searchForm]{margin: 6px 8px 8px;padding: 0}[name=searchForm] .btn-primary,[name=searchForm] .form-control,.template-dir-eds.template-name-advanced [name=searchForm] .clear-btn,.template-dir-search.template-name-advanced [name=searchForm] .clear-btn{font-size: 14px;height: 32px;padding: 5px 8px}[name=searchForm] .btn-primary[multiple],[name=searchForm] .form-control[multiple],.template-dir-eds.template-name-advanced [name=searchForm] .clear-btn[multiple],.template-dir-search.template-name-advanced [name=searchForm] .clear-btn[multiple]{height: auto}@media (min-width: 768px){[name=searchForm] .search-query{width: 400px}}[name=searchForm] .nav-tabs{border-bottom: 0;padding: 0 6px}[name=searchForm] .nav-tabs li a{margin-bottom: -1px;border-bottom: 0;padding-bottom: 6px}[name=searchForm] .nav-tabs li a:hover{background: none;border-color: transparent;text-decoration: underline}[name=searchForm] .nav-tabs li.active a,[name=searchForm] .nav-tabs li.active a:hover{background: #FFF;border-color: #619144;border-bottom: 0;text-decoration: none;z-index: 5}.main .container{padding: 0 4px 18px}footer{margin-bottom: 36px}footer .container{border-radius: 0 0 5px 5px;border-top: 1px solid #ddd;padding-top: 18px}footer hr{display: none}footer p{margin: 0}footer ul{padding-left: 30px}.offcanvas.active .sidebar{color: #FFF}.offcanvas .sidebar .list-group{color: #000}#dateVisColorSettings{background-color: #fff;fill: #eaeaea;outline-color: #e8cfac;stroke: #619144}#commentList .comment:nth-child(even){background: #eee}#hierarchyRecord{background: #FFF}.alert{padding: 8px}.bulkActionButtons{margin-bottom: 6px}.result > .col-xs-1.checkbox{width: auto}.result .label{display: inline-block;margin-bottom: 4px}.result .left{text-align: center}.result .savedLists{margin: 0 0 4px 0;padding: 4px 0 4px 6px}.result .savedLists ul{padding-left: 18px}@media (max-width: 767px){.result .search-controls .form-inline{text-align: left}}@media (min-width: 768px){.result > .col-xs-1.checkbox{padding: 0}.result > .col-xs-11{width: 95%;padding: 0}}.search-controls label{text-align: left}@media (max-width: 767px){.search-controls{margin: 4px -4px;padding: 4px 0}}.searchHomeContent{float: none;margin: 1em auto;width: 90%}#advSearchForm .search{margin: 0}.group .match{margin-top: .5em}.template-dir-eds.template-name-advanced .clear-btn,.template-dir-search.template-name-advanced .clear-btn{background-image: linear-gradient(#fff, #eee)}.sidebar .list-group{margin-bottom: 5px}.sidebar .list-group label.list-group-item{padding-left: 26px}.sidebar .list-group label.list-group-item input[type=checkbox]{margin-top: 2px}.sidebar .list-group-item{padding: 7px 10px 6px}.sidebar .list-group-item.active{background: #e70;border-color: #e70;color: #FFF}.sidebar .list-group-item.active:hover{background: #e70;border-color: #e70}.sidebar .list-group-item.active .badge{color: #e70}.sidebar .slider-container{margin: 4px auto 10px;width: 95%}.sidebar .slider-container .slider-handle{background: #619144;opacity: 1}.sidebar .list-group-item .badge a,.top-row .badge a{color: #FFF}.sidebar .list-group-item .badge a:hover,.top-row .badge a:hover{color: #a41915}#custom_recaptcha_widget{display: table}#custom_recaptcha_widget embed{display: none}#custom_recaptcha_widget #recaptcha_image{border: 1px solid #000;padding: 6px;margin: 1em 0}#custom_recaptcha_widget #recaptcha_response_field{margin: 0 .5em}#custom_recaptcha_widget > div > a{display: inline-block;float: left;margin: 5px 10px 5px 0}ul.random{list-style: none;padding: 0;margin: 0px;text-align: justified}ul.random li{padding-bottom: 10px}ul.random li img{margin: 0 auto 1em auto}ul.random.image,ul.random.mixed{text-align: center}ul.random.image li img{margin: 0 auto}.tt-dropdown-menu{margin: 2px}[id^=list].list-group .col-sm-9{margin: 0}.container > .row > .col-xs-12{padding: 0}.vudl.row{padding: 4px 0}
\ No newline at end of file
diff --git a/themes/bootprint3/js/pubdate_vis.js b/themes/bootprint3/js/pubdate_vis.js
deleted file mode 100644
index 542506e0f5e0521d36ce5f00999fef27d8c4de17..0000000000000000000000000000000000000000
--- a/themes/bootprint3/js/pubdate_vis.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*global htmlEncode*/
-
-function PadDigits(n, totalDigits)
-{
-  if (n <= 0){
-    n= 1;
-  }
-  n = n.toString();
-  var pd = '';
-  if (totalDigits > n.length)
-  {
-    for (var i=0; i < (totalDigits-n.length); i++)
-    {
-      pd += '0';
-    }
-  }
-  return pd + n;
-}
-
-function loadVis(facetFields, searchParams, baseURL, zooming) {
-  // options for the graph, TODO: make configurable
-  var options = {
-    series: {
-      bars: {
-        show: true,
-        align: "center",
-        fill: true,
-        fillColor: "rgb(234,234,234)"
-      }
-    },
-    colors: ["#619144"],
-    legend: { noColumns: 2 },
-    xaxis: { tickDecimals: 0 },
-    yaxis: { min: 0, ticks: [] },
-    selection: {mode: "x"},
-    grid: { backgroundColor: null /*"#ffffff"*/ }
-  };
-
-  // AJAX call
-  var url = baseURL + '/AJAX/json?method=getVisData&facetFields=' + encodeURIComponent(facetFields) + '&' + searchParams;
-  $.getJSON(url, function (data) {
-    if (data.status == 'OK') {
-      $.each(data['data'], function(key, val) {
-        //check if there is data to display, if there isn't hide the box
-        if (val['data'] == undefined || val['data'].length == 0) {
-          return;
-        }
-        $("#datevis" + key + "xWrapper").removeClass('hidden');
-
-        // plot graph
-        var placeholder = $("#datevis" + key + "x");
-
-        //set up the hasFilter variable
-        var hasFilter = true;
-
-        //set the has filter
-        if (val['min'] == 0 && val['max']== 0) {
-          hasFilter = false;
-        }
-
-        //check if the min and max value have been set otherwise set them to the ends of the graph
-        if (val['min'] == 0) {
-          val['min'] = val['data'][0][0] - 5;
-        }
-        if (val['max']== 0) {
-          val['max'] =  parseInt(val['data'][val['data'].length - 1][0], 10) + 5;
-        }
-
-        if (zooming) {
-          //check the first and last elements of the data array against min and max value (+padding)
-          //if the element exists leave it, otherwise create a new marker with a minus one value
-          if (val['data'][val['data'].length - 1][0] != parseInt(val['max'], 10) + 5) {
-            val['data'].push([parseInt(val['max'], 10) + 5, -1]);
-          }
-          if (val['data'][0][0] != val['min'] - 5) {
-            val['data'].push([val['min'] - 5, -1]);
-          }
-          //check for values outside the selected range and remove them by setting them to null
-          for (var i=0; i<val['data'].length; i++) {
-            if (val['data'][i][0] < val['min'] -5 || val['data'][i][0] > parseInt(val['max'], 10) + 5) {
-              //remove this
-              val['data'].splice(i,1);
-              i--;
-            }
-          }
-
-        } else {
-          //no zooming means that we need to specifically set the margins
-          //do the last one first to avoid getting the new last element
-          val['data'].push([parseInt(val['data'][val['data'].length - 1][0], 10) + 5, -1]);
-          //now get the first element
-          val['data'].push([val['data'][0][0] - 5, -1]);
-        }
-
-
-        var plot = $.plot(placeholder, [val], options);
-        if (hasFilter) {
-          // mark pre-selected area
-          plot.setSelection({ x1: val['min'] , x2: val['max']});
-        }
-        // selection handler
-        placeholder.bind("plotselected", function (event, ranges) {
-          var from = Math.floor(ranges.xaxis.from);
-          var to = Math.ceil(ranges.xaxis.to);
-          location.href = val['removalURL'] + '&daterange[]=' + key + '&' + key + 'to=' + PadDigits(to,4) + '&' + key + 'from=' + PadDigits(from,4);
-        });
-
-        if (hasFilter) {
-          var newdiv = document.createElement('span');
-          var text = document.getElementById("clearButtonText").innerHTML;
-          newdiv.setAttribute('id', 'clearButton' + key);
-          newdiv.innerHTML = '<a href="' + htmlEncode(val['removalURL']) + '">' + text + '</a>';
-          newdiv.className += "dateVisClear";
-          placeholder.before(newdiv);
-        }
-      });
-    }
-  });
-}
\ No newline at end of file
diff --git a/themes/bootprint3/less/bootprint.less b/themes/bootprint3/less/bootprint.less
index 0ef7fec48b96d348d894b652067a3ee27cdd88b0..7a3a2e57620ca09a718fe0ad7755f685dec13ecc 100644
--- a/themes/bootprint3/less/bootprint.less
+++ b/themes/bootprint3/less/bootprint.less
@@ -48,9 +48,9 @@ body {
 .btn-success,.btn-success:hover {border-color:darken(@brand-success, 12%);font-weight:bold;}
 .btn-warning,.btn-warning:hover {border-color:darken(@brand-warning, 12%);font-weight:bold;}
 h2 {margin:0 8px 8px}
-input[type=checkbox] {
-  margin-top:2px;
+input[type="radio"], input[type="checkbox"] {
   margin:0 auto;
+  margin-top:2px;
   padding:0 2px;
 }
 .nav > li > a {
@@ -182,7 +182,9 @@ header {
 [name=searchForm] {
   margin:6px 8px 8px;
   padding:0;
-  & .btn-primary,& .form-control {
+  & .btn-primary,& .form-control,
+  .template-dir-eds.template-name-advanced & .clear-btn,
+  .template-dir-search.template-name-advanced & .clear-btn {
     font-size:14px;
     height:32px;
     padding:5px 8px;
@@ -234,6 +236,18 @@ footer {
   ul {padding-left:30px}
 }
 
+/* --- Offcanvas --- */
+.offcanvas.active .sidebar {color: #FFF;}
+.offcanvas .sidebar .list-group {color: #000;}
+
+/* --- PubDateVis --- */
+#dateVisColorSettings {
+  background-color: #fff; // background of box
+  fill: rgb(234,234,234); // fillColor
+  outline-color: #e8cfac; // selection color
+  stroke: @brand-primary; // color
+}
+
 /* --- Record --- */
 #commentList {
   .comment {
@@ -247,7 +261,6 @@ footer {
 /* --- Search --- */
 .alert {padding:8px}
 .bulkActionButtons {margin-bottom:6px}
-.left {text-align:center}
 .result {
   & > .col-xs-1.checkbox {
     width:auto;
@@ -256,6 +269,7 @@ footer {
     display:inline-block;
     margin-bottom:4px;
   }
+  .left {text-align:center}
   .savedLists {
     margin:0 0 4px 0;
     padding:4px 0 4px 6px;
@@ -293,6 +307,9 @@ footer {
 
 /* --- Advanced Search --- */
 #advSearchForm .search {margin:0}
+.group .match {margin-top: .5em;}
+.template-dir-eds.template-name-advanced .clear-btn,
+.template-dir-search.template-name-advanced .clear-btn {background-image: linear-gradient(#fff, #eee);}
 
 /* --- Sidebar --- */
 @active-orange: #E70;
diff --git a/themes/bootstrap3/css/bootstrap-custom.css b/themes/bootstrap3/css/bootstrap-custom.css
index 5f815641b7e26f0241bcd7f6bf8b5eae9eee5d8f..db2bcf7dee1825270d3c1bbe7c1243076fa1ae71 100644
--- a/themes/bootstrap3/css/bootstrap-custom.css
+++ b/themes/bootstrap3/css/bootstrap-custom.css
@@ -1,5 +1,215 @@
+.list-group {
+  margin-bottom: 20px;
+  padding-left: 0;
+}
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
+}
+.list-group-item:first-child {
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+}
+.list-group-item:last-child {
+  margin-bottom: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+a.list-group-item {
+  color: #555555;
+}
+a.list-group-item .list-group-item-heading {
+  color: #333333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+  text-decoration: none;
+  color: #555555;
+  background-color: #f5f5f5;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  background-color: #eeeeee;
+  color: #777777;
+  cursor: not-allowed;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+  color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+  color: #777777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #ffffff;
+  background-color: #265680;
+  border-color: #265680;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+  color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+  color: #93bcdf;
+}
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+a.list-group-item-success {
+  color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+a.list-group-item-info {
+  color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+a.list-group-item-warning {
+  color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+a.list-group-item-danger {
+  color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
+/* mixins */
+.sr-only {
+  clip: rect(1px, 1px, 1px, 1px);
+  position: absolute;
+  /* reset */
+  width: auto;
+  height: auto;
+  margin: 0;
+  padding: 0;
+  overflow: hidden;
+  border: 0;
+}
+.sr-only:focus {
+  background-color: #ffffff;
+  border-radius: 4px;
+  clip: auto;
+  color: #132531;
+  display: block;
+  font-size: 14px;
+  height: 50px;
+  line-height: 20px;
+  padding: 15px 15px;
+  position: absolute;
+  left: 5px;
+  top: 5px;
+  text-decoration: none;
+  text-transform: none;
+  width: auto;
+  z-index: 100000;
+  /* Above WP toolbar */
+}
+/* this mixins give output generate duplicate CSS code
+ * alternatively you will to have to rewrite the original mixin in buttons.less
+ */
+.navbar-brand {
+  font-size: 20px;
+}
 /* buttons */
 /* link on white background */
+.alert.alert-info a {
+  text-decoration: underline;
+}
 .btn.disabled:active,
 .btn.disabled:focus,
 .btn.disabled:hover {
@@ -16,9 +226,6 @@
     max-width: 400px;
   }
 }
-.group [class^=col-] {
-  padding-left: 0;
-}
 .has-error {
   margin-bottom: 0;
 }
@@ -32,6 +239,11 @@
 .help-block.with-errors .list-unstyled {
   margin: 0;
 }
+.highlight,
+mark {
+  background: #ffff66;
+  padding: .1em .2em;
+}
 .icon-bar {
   background-color: #888;
 }
@@ -50,6 +262,9 @@ label.list-group-item {
 #modal .modal-body > h2:first-child {
   display: none;
 }
+.popover {
+  width: 250px;
+}
 .sub-breadcrumb {
   padding: 5px 10px;
   white-space: nowrap;
@@ -65,7 +280,33 @@ label.list-group-item {
 .tab-content {
   padding: 4px;
 }
+/* --- Advanced Search --- */
+.group {
+  background: #eeeeee;
+  border-radius: 4px;
+  border: 1px solid #c8c8c8;
+  margin: 0 0 6px;
+  padding: 10px 10px 10px 25px;
+}
+.group .add_search_link {
+  display: inline-block;
+  margin-top: 4px;
+}
+.group [class^=col-] {
+  padding-left: 0;
+}
+.group .search {
+  margin-bottom: 2px;
+}
+#groupPlaceHolder {
+  display: block;
+  padding: 6px;
+}
 /* --- Alphabrowse --- */
+.alphabrowse {
+  border-collapse: separate;
+  /* highlighting the row makes ff bugs; operate on its children */
+}
 .alphabrowse .lcc {
   width: 20%;
 }
@@ -73,6 +314,16 @@ label.list-group-item {
   width: 10%;
   text-align: center;
 }
+.alphabrowse tr.browse-match td {
+  border-top: 0.2em solid #265680;
+  border-bottom: 0.2em solid #265680;
+}
+.alphabrowse tr.browse-match td:first-child {
+  border-left: 0.2em solid #265680;
+}
+.alphabrowse tr.browse-match td:last-child {
+  border-right: 0.2em solid #265680;
+}
 /* --- Autocomplete --- */
 .twitter-typeahead {
   background: #FFF;
@@ -152,6 +403,9 @@ label.list-group-item {
 .tt-suggestion.active:focus .list-group-item-text {
   color: #93bcdf;
 }
+.tt-suggestion i.fa {
+  cursor: inherit;
+}
 .tt-suggestion.active {
   white-space: inherit;
 }
@@ -333,6 +587,13 @@ label.list-group-item {
 .fa-videoreel:before {
   content: "\f03d";
 }
+/* --- PubDateVis --- */
+#dateVisColorSettings {
+  background-color: #ffffff;
+  fill: #eaeaea;
+  outline-color: #e8cfac;
+  stroke: #265680;
+}
 /* --- Record --- */
 .citation .pace-car th,
 .citation .pace-car td {
@@ -346,6 +607,11 @@ label.list-group-item {
   border-right: 1px solid #eeeeee;
   overflow-x: hidden;
 }
+#hierarchyTree .currentHierarchy > a,
+#hierarchyTree .currentRecord a {
+  color: #000;
+  font-weight: bold;
+}
 /* --- Search --- */
 .bulkActionButtons label {
   display: inline-block;
@@ -361,6 +627,9 @@ label.list-group-item {
 .result a.title {
   font-weight: bold;
 }
+.result .left {
+  text-align: center;
+}
 .result .left img {
   max-width: 100%;
 }
@@ -390,7 +659,12 @@ label.list-group-item {
 .search-controls .alert {
   margin-bottom: 0;
 }
-/* --- Sidebar rounded corners --- */
+.title-in-heading {
+  font-size: inherit;
+  font-style: italic;
+}
+/* --- Sidebar --- */
+/* Sidebar rounded corners */
 .sidebar .list-group:not(.filters) .title {
   cursor: pointer;
 }
@@ -418,39 +692,54 @@ label.list-group-item {
   border-bottom-left-radius: 4px;
   border-bottom-right-radius: 4px;
 }
-.list-group-item.active i.fa,
+.list-group-item i.fa,
 .badge i.fa {
   cursor: inherit;
 }
+.sidebar .facet a {
+  text-decoration: none;
+}
+.top-row .applied {
+  font-weight: bold;
+}
+.top-row .applied:hover {
+  color: #a94442;
+}
+.top-row .applied:hover .fa.fa-check:before {
+  content: "\f00d";
+}
 /* --- Slider accessibility --- */
 .slider-container {
-  padding: 4px 0;
+  padding: 4px 10px;
   text-align: center;
 }
-.slider-container .slider .slider-track {
+.slider-container .slider.slider-horizontal {
+  width: 100%;
+}
+.slider-container .slider-track {
   background: #777777;
   box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.4);
 }
-.slider-container .slider .slider-track .slider-handle {
+.slider-container .slider-handle {
   background: #265680;
   background-image: none;
   border: 1px solid #265680;
   box-shadow: none;
   opacity: .9;
 }
-.slider-container .slider .slider-track .slider-handle:hover,
-.slider-container .slider .slider-track .slider-handle:active,
-.slider-container .slider .slider-track .slider-handle:focus {
+.slider-container .slider-handle:hover,
+.slider-container .slider-handle:active,
+.slider-container .slider-handle:focus {
   opacity: 1;
   background: #FFF;
   border-color: #777777;
 }
-.slider-container .slider .slider-track .slider-handle:active,
-.slider-container .slider .slider-track .slider-handle:focus {
+.slider-container .slider-handle:active,
+.slider-container .slider-handle:focus {
   border-color: #265680;
 }
-.slider-container .slider .slider-track .slider-selection {
-  background: #eeeeee;
+.slider-container .slider-selection {
+  background: #CCC;
   box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.3);
 }
 /* --- Table wrapping to prevent horizontal overflow --- */
@@ -491,3 +780,139 @@ label.list-group-item {
 #viz-instructions {
   padding-top: 600px;
 }
+/* ----- HOVER OVERLAY ------ */
+/* - similar items carousel - */
+#similar-items-carousel .carousel-indicators {
+  bottom: 0px;
+}
+#similar-items-carousel .carousel-indicators li {
+  background: rgba(255, 255, 255, 0.3);
+  border-color: #222222;
+  margin: 2px;
+  width: 8px;
+  height: 8px;
+}
+#similar-items-carousel .hover-overlay {
+  display: block;
+  position: relative;
+  text-align: center;
+  margin: auto;
+  min-width: 150px;
+  min-height: 200px;
+}
+#similar-items-carousel .hover-overlay img {
+  margin: 10px 0;
+  max-width: 100%;
+}
+#similar-items-carousel .hover-overlay .content {
+  display: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.5);
+  color: #FFF;
+  padding: .5em .5em 0;
+}
+#similar-items-carousel .hover-overlay:hover .content {
+  display: block;
+}
+#similar-items-carousel .item {
+  padding: 0 4em;
+}
+/* --- Hierarchical facets --- */
+/* jsTree arrows */
+.facet .jstree-ocl:before {
+  font-family: 'FontAwesome';
+  float: left;
+  speak: none;
+  font-weight: normal;
+  font-style: normal;
+  text-decoration: inherit;
+  cursor: pointer;
+  padding: 0;
+  width: 10px;
+  margin-left: -10px;
+}
+.facet .jstree-default .jstree-open > .jstree-ocl:before {
+  content: "\f0d7";
+}
+.facet .jstree-default .jstree-closed > .jstree-ocl:before {
+  content: "\f0da";
+}
+.facet .jstree-default .jstree-leaf > .jstree-ocl:before {
+  content: " ";
+}
+/* facet list styling */
+li.jstree-facet ul {
+  padding-left: 20px;
+}
+.jstree-facet li span.main {
+  display: block;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  padding-left: 1px;
+  /* Fix Firefox cutting the checkboxes */
+}
+li.jstree-facet,
+li.jstree-node {
+  list-style: none;
+}
+.jstree-facet .jstree-container-ul {
+  padding: 0;
+}
+.jstree-facet .jstree-container-ul > li.active,
+.jstree-facet .jstree-container-ul > li.active a.jstree-anchor {
+  background-color: #265680;
+  color: #fff;
+}
+li.jstree-facet .badge {
+  cursor: text;
+}
+/* --- Hierarchy tree --- */
+/* jsTree arrows */
+.hierarchy-tree .jstree-ocl:before {
+  font-family: 'FontAwesome';
+  float: left;
+  speak: none;
+  font-weight: normal;
+  font-style: normal;
+  text-decoration: inherit;
+  cursor: pointer;
+  padding: 0;
+  width: 10px;
+  margin-left: -10px;
+}
+.hierarchy-tree .jstree-open > .jstree-ocl:before {
+  content: "\f0d7";
+}
+.hierarchy-tree .jstree-closed > .jstree-ocl:before {
+  content: "\f0da";
+}
+.hierarchy-tree .jstree-leaf > .jstree-ocl:before {
+  content: " ";
+}
+.hierarchy-tree .jstree-icon {
+  color: #000;
+  width: 16px;
+}
+.hierarchy-tree .jstree-anchor {
+  white-space: nowrap;
+  padding: 2px 5px;
+}
+.hierarchy-tree .jstree-container-ul,
+.hierarchy-tree .jstree-children {
+  padding-left: 16px;
+}
+.hierarchy-tree .jstree-initial-node {
+  display: none;
+}
+.hierarchy-tree .jstree-clicked {
+  color: #ffffff;
+  background-color: #265680;
+}
+.hierarchy-tree .jstree-clicked .jstree-icon {
+  color: #FFF;
+}
diff --git a/themes/bootstrap3/css/compiled.css b/themes/bootstrap3/css/compiled.css
index 1383e7357bd6fad5e6ae2a5025e772f07d46971a..521096988c239a80bbbfbc230d1541c65b5d5a30 100644
--- a/themes/bootstrap3/css/compiled.css
+++ b/themes/bootstrap3/css/compiled.css
@@ -1 +1 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display: block}audio,canvas,progress,video{display: inline-block;vertical-align: baseline}audio:not([controls]){display: none;height: 0}[hidden],template{display: none}a{background-color: transparent}a:active,a:hover{outline: 0}abbr[title]{border-bottom: 1px dotted}b,strong{font-weight: bold}dfn{font-style: italic}h1{font-size: 2em;margin: .67em 0}mark{background: #ff0;color: #000}small{font-size: 80%}sub,sup{font-size: 75%;line-height: 0;position: relative;vertical-align: baseline}sup{top: -0.5em}sub{bottom: -0.25em}img{border: 0}svg:not(:root){overflow: hidden}figure{margin: 1em 40px}hr{-moz-box-sizing: content-box;box-sizing: content-box;height: 0}pre{overflow: auto}code,kbd,pre,samp{font-family: monospace, monospace;font-size: 1em}button,input,optgroup,select,textarea{color: inherit;font: inherit;margin: 0}button{overflow: visible}button,select{text-transform: none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance: button;cursor: pointer}button[disabled],html input[disabled]{cursor: default}button::-moz-focus-inner,input::-moz-focus-inner{border: 0;padding: 0}input{line-height: normal}input[type="checkbox"],input[type="radio"]{box-sizing: border-box;padding: 0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height: auto}input[type="search"]{-webkit-appearance: textfield;-moz-box-sizing: content-box;-webkit-box-sizing: content-box;box-sizing: content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance: none}fieldset{border: 1px solid #c0c0c0;margin: 0 2px;padding: .35em .625em .75em}legend{border: 0;padding: 0}textarea{overflow: auto}optgroup{font-weight: bold}table{border-collapse: collapse;border-spacing: 0}td,th{padding: 0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background: transparent !important;color: #000 !important;box-shadow: none !important;text-shadow: none !important}a,a:visited{text-decoration: underline}a[href]:after{content: " (" attr(href) ")"}abbr[title]:after{content: " (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content: ""}pre,blockquote{border: 1px solid #999;page-break-inside: avoid}thead{display: table-header-group}tr,img{page-break-inside: avoid}img{max-width: 100% !important}p,h2,h3{orphans: 3;widows: 3}h2,h3{page-break-after: avoid}select{background: #fff !important}.navbar{display: none}.btn > .caret,.dropup > .btn > .caret{border-top-color: #000 !important}.label{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 #ddd !important}}@font-face{font-family: 'Glyphicons Halflings';src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot');src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position: relative;top: 1px;display: inline-block;font-family: 'Glyphicons Halflings';font-style: normal;font-weight: normal;line-height: 1;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale}.glyphicon-asterisk:before{content: "\2a"}.glyphicon-plus:before{content: "\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content: "\20ac"}.glyphicon-minus:before{content: "\2212"}.glyphicon-cloud:before{content: "\2601"}.glyphicon-envelope:before{content: "\2709"}.glyphicon-pencil:before{content: "\270f"}.glyphicon-glass:before{content: "\e001"}.glyphicon-music:before{content: "\e002"}.glyphicon-search:before{content: "\e003"}.glyphicon-heart:before{content: "\e005"}.glyphicon-star:before{content: "\e006"}.glyphicon-star-empty:before{content: "\e007"}.glyphicon-user:before{content: "\e008"}.glyphicon-film:before{content: "\e009"}.glyphicon-th-large:before{content: "\e010"}.glyphicon-th:before{content: "\e011"}.glyphicon-th-list:before{content: "\e012"}.glyphicon-ok:before{content: "\e013"}.glyphicon-remove:before{content: "\e014"}.glyphicon-zoom-in:before{content: "\e015"}.glyphicon-zoom-out:before{content: "\e016"}.glyphicon-off:before{content: "\e017"}.glyphicon-signal:before{content: "\e018"}.glyphicon-cog:before{content: "\e019"}.glyphicon-trash:before{content: "\e020"}.glyphicon-home:before{content: "\e021"}.glyphicon-file:before{content: "\e022"}.glyphicon-time:before{content: "\e023"}.glyphicon-road:before{content: "\e024"}.glyphicon-download-alt:before{content: "\e025"}.glyphicon-download:before{content: "\e026"}.glyphicon-upload:before{content: "\e027"}.glyphicon-inbox:before{content: "\e028"}.glyphicon-play-circle:before{content: "\e029"}.glyphicon-repeat:before{content: "\e030"}.glyphicon-refresh:before{content: "\e031"}.glyphicon-list-alt:before{content: "\e032"}.glyphicon-lock:before{content: "\e033"}.glyphicon-flag:before{content: "\e034"}.glyphicon-headphones:before{content: "\e035"}.glyphicon-volume-off:before{content: "\e036"}.glyphicon-volume-down:before{content: "\e037"}.glyphicon-volume-up:before{content: "\e038"}.glyphicon-qrcode:before{content: "\e039"}.glyphicon-barcode:before{content: "\e040"}.glyphicon-tag:before{content: "\e041"}.glyphicon-tags:before{content: "\e042"}.glyphicon-book:before{content: "\e043"}.glyphicon-bookmark:before{content: "\e044"}.glyphicon-print:before{content: "\e045"}.glyphicon-camera:before{content: "\e046"}.glyphicon-font:before{content: "\e047"}.glyphicon-bold:before{content: "\e048"}.glyphicon-italic:before{content: "\e049"}.glyphicon-text-height:before{content: "\e050"}.glyphicon-text-width:before{content: "\e051"}.glyphicon-align-left:before{content: "\e052"}.glyphicon-align-center:before{content: "\e053"}.glyphicon-align-right:before{content: "\e054"}.glyphicon-align-justify:before{content: "\e055"}.glyphicon-list:before{content: "\e056"}.glyphicon-indent-left:before{content: "\e057"}.glyphicon-indent-right:before{content: "\e058"}.glyphicon-facetime-video:before{content: "\e059"}.glyphicon-picture:before{content: "\e060"}.glyphicon-map-marker:before{content: "\e062"}.glyphicon-adjust:before{content: "\e063"}.glyphicon-tint:before{content: "\e064"}.glyphicon-edit:before{content: "\e065"}.glyphicon-share:before{content: "\e066"}.glyphicon-check:before{content: "\e067"}.glyphicon-move:before{content: "\e068"}.glyphicon-step-backward:before{content: "\e069"}.glyphicon-fast-backward:before{content: "\e070"}.glyphicon-backward:before{content: "\e071"}.glyphicon-play:before{content: "\e072"}.glyphicon-pause:before{content: "\e073"}.glyphicon-stop:before{content: "\e074"}.glyphicon-forward:before{content: "\e075"}.glyphicon-fast-forward:before{content: "\e076"}.glyphicon-step-forward:before{content: "\e077"}.glyphicon-eject:before{content: "\e078"}.glyphicon-chevron-left:before{content: "\e079"}.glyphicon-chevron-right:before{content: "\e080"}.glyphicon-plus-sign:before{content: "\e081"}.glyphicon-minus-sign:before{content: "\e082"}.glyphicon-remove-sign:before{content: "\e083"}.glyphicon-ok-sign:before{content: "\e084"}.glyphicon-question-sign:before{content: "\e085"}.glyphicon-info-sign:before{content: "\e086"}.glyphicon-screenshot:before{content: "\e087"}.glyphicon-remove-circle:before{content: "\e088"}.glyphicon-ok-circle:before{content: "\e089"}.glyphicon-ban-circle:before{content: "\e090"}.glyphicon-arrow-left:before{content: "\e091"}.glyphicon-arrow-right:before{content: "\e092"}.glyphicon-arrow-up:before{content: "\e093"}.glyphicon-arrow-down:before{content: "\e094"}.glyphicon-share-alt:before{content: "\e095"}.glyphicon-resize-full:before{content: "\e096"}.glyphicon-resize-small:before{content: "\e097"}.glyphicon-exclamation-sign:before{content: "\e101"}.glyphicon-gift:before{content: "\e102"}.glyphicon-leaf:before{content: "\e103"}.glyphicon-fire:before{content: "\e104"}.glyphicon-eye-open:before{content: "\e105"}.glyphicon-eye-close:before{content: "\e106"}.glyphicon-warning-sign:before{content: "\e107"}.glyphicon-plane:before{content: "\e108"}.glyphicon-calendar:before{content: "\e109"}.glyphicon-random:before{content: "\e110"}.glyphicon-comment:before{content: "\e111"}.glyphicon-magnet:before{content: "\e112"}.glyphicon-chevron-up:before{content: "\e113"}.glyphicon-chevron-down:before{content: "\e114"}.glyphicon-retweet:before{content: "\e115"}.glyphicon-shopping-cart:before{content: "\e116"}.glyphicon-folder-close:before{content: "\e117"}.glyphicon-folder-open:before{content: "\e118"}.glyphicon-resize-vertical:before{content: "\e119"}.glyphicon-resize-horizontal:before{content: "\e120"}.glyphicon-hdd:before{content: "\e121"}.glyphicon-bullhorn:before{content: "\e122"}.glyphicon-bell:before{content: "\e123"}.glyphicon-certificate:before{content: "\e124"}.glyphicon-thumbs-up:before{content: "\e125"}.glyphicon-thumbs-down:before{content: "\e126"}.glyphicon-hand-right:before{content: "\e127"}.glyphicon-hand-left:before{content: "\e128"}.glyphicon-hand-up:before{content: "\e129"}.glyphicon-hand-down:before{content: "\e130"}.glyphicon-circle-arrow-right:before{content: "\e131"}.glyphicon-circle-arrow-left:before{content: "\e132"}.glyphicon-circle-arrow-up:before{content: "\e133"}.glyphicon-circle-arrow-down:before{content: "\e134"}.glyphicon-globe:before{content: "\e135"}.glyphicon-wrench:before{content: "\e136"}.glyphicon-tasks:before{content: "\e137"}.glyphicon-filter:before{content: "\e138"}.glyphicon-briefcase:before{content: "\e139"}.glyphicon-fullscreen:before{content: "\e140"}.glyphicon-dashboard:before{content: "\e141"}.glyphicon-paperclip:before{content: "\e142"}.glyphicon-heart-empty:before{content: "\e143"}.glyphicon-link:before{content: "\e144"}.glyphicon-phone:before{content: "\e145"}.glyphicon-pushpin:before{content: "\e146"}.glyphicon-usd:before{content: "\e148"}.glyphicon-gbp:before{content: "\e149"}.glyphicon-sort:before{content: "\e150"}.glyphicon-sort-by-alphabet:before{content: "\e151"}.glyphicon-sort-by-alphabet-alt:before{content: "\e152"}.glyphicon-sort-by-order:before{content: "\e153"}.glyphicon-sort-by-order-alt:before{content: "\e154"}.glyphicon-sort-by-attributes:before{content: "\e155"}.glyphicon-sort-by-attributes-alt:before{content: "\e156"}.glyphicon-unchecked:before{content: "\e157"}.glyphicon-expand:before{content: "\e158"}.glyphicon-collapse-down:before{content: "\e159"}.glyphicon-collapse-up:before{content: "\e160"}.glyphicon-log-in:before{content: "\e161"}.glyphicon-flash:before{content: "\e162"}.glyphicon-log-out:before{content: "\e163"}.glyphicon-new-window:before{content: "\e164"}.glyphicon-record:before{content: "\e165"}.glyphicon-save:before{content: "\e166"}.glyphicon-open:before{content: "\e167"}.glyphicon-saved:before{content: "\e168"}.glyphicon-import:before{content: "\e169"}.glyphicon-export:before{content: "\e170"}.glyphicon-send:before{content: "\e171"}.glyphicon-floppy-disk:before{content: "\e172"}.glyphicon-floppy-saved:before{content: "\e173"}.glyphicon-floppy-remove:before{content: "\e174"}.glyphicon-floppy-save:before{content: "\e175"}.glyphicon-floppy-open:before{content: "\e176"}.glyphicon-credit-card:before{content: "\e177"}.glyphicon-transfer:before{content: "\e178"}.glyphicon-cutlery:before{content: "\e179"}.glyphicon-header:before{content: "\e180"}.glyphicon-compressed:before{content: "\e181"}.glyphicon-earphone:before{content: "\e182"}.glyphicon-phone-alt:before{content: "\e183"}.glyphicon-tower:before{content: "\e184"}.glyphicon-stats:before{content: "\e185"}.glyphicon-sd-video:before{content: "\e186"}.glyphicon-hd-video:before{content: "\e187"}.glyphicon-subtitles:before{content: "\e188"}.glyphicon-sound-stereo:before{content: "\e189"}.glyphicon-sound-dolby:before{content: "\e190"}.glyphicon-sound-5-1:before{content: "\e191"}.glyphicon-sound-6-1:before{content: "\e192"}.glyphicon-sound-7-1:before{content: "\e193"}.glyphicon-copyright-mark:before{content: "\e194"}.glyphicon-registration-mark:before{content: "\e195"}.glyphicon-cloud-download:before{content: "\e197"}.glyphicon-cloud-upload:before{content: "\e198"}.glyphicon-tree-conifer:before{content: "\e199"}.glyphicon-tree-deciduous:before{content: "\e200"}*{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}*:before,*:after{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}html{font-size: 10px;-webkit-tap-highlight-color: rgba(0,0,0,0)}body{font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 14px;line-height: 1.42857143;color: #333;background-color: #fff}input,button,select,textarea{font-family: inherit;font-size: inherit;line-height: inherit}a{color: #12538b;text-decoration: none}a:hover,a:focus{color: #092b47;text-decoration: underline}a:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}figure{margin: 0}img{vertical-align: middle}.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img{display: block;max-width: 100%;height: auto}.img-rounded{border-radius: 6px}.img-thumbnail{padding: 4px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 4px;-webkit-transition: all .2s ease-in-out;-o-transition: all .2s ease-in-out;transition: all .2s ease-in-out;display: inline-block;max-width: 100%;height: auto}.img-circle{border-radius: 50%}hr{margin-top: 20px;margin-bottom: 20px;border: 0;border-top: 1px solid #eee}.sr-only{position: absolute;width: 1px;height: 1px;margin: -1px;padding: 0;overflow: hidden;clip: rect(0, 0, 0, 0);border: 0}.sr-only-focusable:active,.sr-only-focusable:focus{position: static;width: auto;height: auto;margin: 0;overflow: visible;clip: auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family: inherit;font-weight: 500;line-height: 1.1;color: inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight: normal;line-height: 1;color: #777}h1,.h1,h2,.h2,h3,.h3{margin-top: 20px;margin-bottom: 10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size: 65%}h4,.h4,h5,.h5,h6,.h6{margin-top: 10px;margin-bottom: 10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size: 75%}h1,.h1{font-size: 36px}h2,.h2{font-size: 30px}h3,.h3{font-size: 24px}h4,.h4{font-size: 18px}h5,.h5{font-size: 14px}h6,.h6{font-size: 12px}p{margin: 0 0 10px}.lead{margin-bottom: 20px;font-size: 16px;font-weight: 300;line-height: 1.4}@media (min-width: 768px){.lead{font-size: 21px}}small,.small{font-size: 85%}mark,.mark{background-color: #fcf8e3;padding: .2em}.text-left{text-align: left}.text-right{text-align: right}.text-center{text-align: center}.text-justify{text-align: justify}.text-nowrap{white-space: nowrap}.text-lowercase{text-transform: lowercase}.text-uppercase{text-transform: uppercase}.text-capitalize{text-transform: capitalize}.text-muted{color: #777}.text-primary{color: #265680}a.text-primary:hover{color: #1a3c59}.text-success{color: #3c763d}a.text-success:hover{color: #2b542c}.text-info{color: #31708f}a.text-info:hover{color: #245269}.text-warning{color: #8a6d3b}a.text-warning:hover{color: #66512c}.text-danger{color: #a94442}a.text-danger:hover{color: #843534}.bg-primary{color: #fff;background-color: #265680}a.bg-primary:hover{background-color: #1a3c59}.bg-success{background-color: #dff0d8}a.bg-success:hover{background-color: #c1e2b3}.bg-info{background-color: #d9edf7}a.bg-info:hover{background-color: #afd9ee}.bg-warning{background-color: #fcf8e3}a.bg-warning:hover{background-color: #f7ecb5}.bg-danger{background-color: #f2dede}a.bg-danger:hover{background-color: #e4b9b9}.page-header{padding-bottom: 9px;margin: 40px 0 20px;border-bottom: 1px solid #eee}ul,ol{margin-top: 0;margin-bottom: 10px}ul ul,ol ul,ul ol,ol ol{margin-bottom: 0}.list-unstyled{padding-left: 0;list-style: none}.list-inline{padding-left: 0;list-style: none;margin-left: -5px}.list-inline > li{display: inline-block;padding-left: 5px;padding-right: 5px}dl{margin-top: 0;margin-bottom: 20px}dt,dd{line-height: 1.42857143}dt{font-weight: bold}dd{margin-left: 0}@media (min-width: 768px){.dl-horizontal dt{float: left;width: 160px;clear: left;text-align: right;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.dl-horizontal dd{margin-left: 180px}}abbr[title],abbr[data-original-title]{cursor: help;border-bottom: 1px dotted #777}.initialism{font-size: 90%;text-transform: uppercase}blockquote{padding: 10px 20px;margin: 0 0 20px;font-size: 17.5px;border-left: 5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom: 0}blockquote footer,blockquote small,blockquote .small{display: block;font-size: 80%;line-height: 1.42857143;color: #777}blockquote footer:before,blockquote small:before,blockquote .small:before{content: '\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right: 15px;padding-left: 0;border-right: 5px solid #eee;border-left: 0;text-align: right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content: ''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content: '\00A0 \2014'}address{margin-bottom: 20px;font-style: normal;line-height: 1.42857143}code,kbd,pre,samp{font-family: Menlo, Monaco, Consolas, "Courier New", monospace}code{padding: 2px 4px;font-size: 90%;color: #c7254e;background-color: #f9f2f4;border-radius: 4px}kbd{padding: 2px 4px;font-size: 90%;color: #fff;background-color: #333;border-radius: 3px;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding: 0;font-size: 100%;font-weight: bold;box-shadow: none}pre{display: block;padding: 9.5px;margin: 0 0 10px;font-size: 13px;line-height: 1.42857143;word-break: break-all;word-wrap: break-word;color: #333;background-color: #f5f5f5;border: 1px solid #ccc;border-radius: 4px}pre code{padding: 0;font-size: inherit;color: inherit;white-space: pre-wrap;background-color: transparent;border-radius: 0}.pre-scrollable{max-height: 340px;overflow-y: scroll}.container{margin-right: auto;margin-left: auto;padding-left: 15px;padding-right: 15px}@media (min-width: 768px){.container{width: 750px}}@media (min-width: 992px){.container{width: 970px}}@media (min-width: 1200px){.container{width: 1170px}}.container-fluid{margin-right: auto;margin-left: auto;padding-left: 15px;padding-right: 15px}.row{margin-left: -15px;margin-right: -15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position: relative;min-height: 1px;padding-left: 15px;padding-right: 15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float: left}.col-xs-12{width: 100%}.col-xs-11{width: 91.66666667%}.col-xs-10{width: 83.33333333%}.col-xs-9{width: 75%}.col-xs-8{width: 66.66666667%}.col-xs-7{width: 58.33333333%}.col-xs-6{width: 50%}.col-xs-5{width: 41.66666667%}.col-xs-4{width: 33.33333333%}.col-xs-3{width: 25%}.col-xs-2{width: 16.66666667%}.col-xs-1{width: 8.33333333%}.col-xs-pull-12{right: 100%}.col-xs-pull-11{right: 91.66666667%}.col-xs-pull-10{right: 83.33333333%}.col-xs-pull-9{right: 75%}.col-xs-pull-8{right: 66.66666667%}.col-xs-pull-7{right: 58.33333333%}.col-xs-pull-6{right: 50%}.col-xs-pull-5{right: 41.66666667%}.col-xs-pull-4{right: 33.33333333%}.col-xs-pull-3{right: 25%}.col-xs-pull-2{right: 16.66666667%}.col-xs-pull-1{right: 8.33333333%}.col-xs-pull-0{right: auto}.col-xs-push-12{left: 100%}.col-xs-push-11{left: 91.66666667%}.col-xs-push-10{left: 83.33333333%}.col-xs-push-9{left: 75%}.col-xs-push-8{left: 66.66666667%}.col-xs-push-7{left: 58.33333333%}.col-xs-push-6{left: 50%}.col-xs-push-5{left: 41.66666667%}.col-xs-push-4{left: 33.33333333%}.col-xs-push-3{left: 25%}.col-xs-push-2{left: 16.66666667%}.col-xs-push-1{left: 8.33333333%}.col-xs-push-0{left: auto}.col-xs-offset-12{margin-left: 100%}.col-xs-offset-11{margin-left: 91.66666667%}.col-xs-offset-10{margin-left: 83.33333333%}.col-xs-offset-9{margin-left: 75%}.col-xs-offset-8{margin-left: 66.66666667%}.col-xs-offset-7{margin-left: 58.33333333%}.col-xs-offset-6{margin-left: 50%}.col-xs-offset-5{margin-left: 41.66666667%}.col-xs-offset-4{margin-left: 33.33333333%}.col-xs-offset-3{margin-left: 25%}.col-xs-offset-2{margin-left: 16.66666667%}.col-xs-offset-1{margin-left: 8.33333333%}.col-xs-offset-0{margin-left: 0%}@media (min-width: 768px){.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{float: left}.col-sm-12{width: 100%}.col-sm-11{width: 91.66666667%}.col-sm-10{width: 83.33333333%}.col-sm-9{width: 75%}.col-sm-8{width: 66.66666667%}.col-sm-7{width: 58.33333333%}.col-sm-6{width: 50%}.col-sm-5{width: 41.66666667%}.col-sm-4{width: 33.33333333%}.col-sm-3{width: 25%}.col-sm-2{width: 16.66666667%}.col-sm-1{width: 8.33333333%}.col-sm-pull-12{right: 100%}.col-sm-pull-11{right: 91.66666667%}.col-sm-pull-10{right: 83.33333333%}.col-sm-pull-9{right: 75%}.col-sm-pull-8{right: 66.66666667%}.col-sm-pull-7{right: 58.33333333%}.col-sm-pull-6{right: 50%}.col-sm-pull-5{right: 41.66666667%}.col-sm-pull-4{right: 33.33333333%}.col-sm-pull-3{right: 25%}.col-sm-pull-2{right: 16.66666667%}.col-sm-pull-1{right: 8.33333333%}.col-sm-pull-0{right: auto}.col-sm-push-12{left: 100%}.col-sm-push-11{left: 91.66666667%}.col-sm-push-10{left: 83.33333333%}.col-sm-push-9{left: 75%}.col-sm-push-8{left: 66.66666667%}.col-sm-push-7{left: 58.33333333%}.col-sm-push-6{left: 50%}.col-sm-push-5{left: 41.66666667%}.col-sm-push-4{left: 33.33333333%}.col-sm-push-3{left: 25%}.col-sm-push-2{left: 16.66666667%}.col-sm-push-1{left: 8.33333333%}.col-sm-push-0{left: auto}.col-sm-offset-12{margin-left: 100%}.col-sm-offset-11{margin-left: 91.66666667%}.col-sm-offset-10{margin-left: 83.33333333%}.col-sm-offset-9{margin-left: 75%}.col-sm-offset-8{margin-left: 66.66666667%}.col-sm-offset-7{margin-left: 58.33333333%}.col-sm-offset-6{margin-left: 50%}.col-sm-offset-5{margin-left: 41.66666667%}.col-sm-offset-4{margin-left: 33.33333333%}.col-sm-offset-3{margin-left: 25%}.col-sm-offset-2{margin-left: 16.66666667%}.col-sm-offset-1{margin-left: 8.33333333%}.col-sm-offset-0{margin-left: 0%}}@media (min-width: 992px){.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{float: left}.col-md-12{width: 100%}.col-md-11{width: 91.66666667%}.col-md-10{width: 83.33333333%}.col-md-9{width: 75%}.col-md-8{width: 66.66666667%}.col-md-7{width: 58.33333333%}.col-md-6{width: 50%}.col-md-5{width: 41.66666667%}.col-md-4{width: 33.33333333%}.col-md-3{width: 25%}.col-md-2{width: 16.66666667%}.col-md-1{width: 8.33333333%}.col-md-pull-12{right: 100%}.col-md-pull-11{right: 91.66666667%}.col-md-pull-10{right: 83.33333333%}.col-md-pull-9{right: 75%}.col-md-pull-8{right: 66.66666667%}.col-md-pull-7{right: 58.33333333%}.col-md-pull-6{right: 50%}.col-md-pull-5{right: 41.66666667%}.col-md-pull-4{right: 33.33333333%}.col-md-pull-3{right: 25%}.col-md-pull-2{right: 16.66666667%}.col-md-pull-1{right: 8.33333333%}.col-md-pull-0{right: auto}.col-md-push-12{left: 100%}.col-md-push-11{left: 91.66666667%}.col-md-push-10{left: 83.33333333%}.col-md-push-9{left: 75%}.col-md-push-8{left: 66.66666667%}.col-md-push-7{left: 58.33333333%}.col-md-push-6{left: 50%}.col-md-push-5{left: 41.66666667%}.col-md-push-4{left: 33.33333333%}.col-md-push-3{left: 25%}.col-md-push-2{left: 16.66666667%}.col-md-push-1{left: 8.33333333%}.col-md-push-0{left: auto}.col-md-offset-12{margin-left: 100%}.col-md-offset-11{margin-left: 91.66666667%}.col-md-offset-10{margin-left: 83.33333333%}.col-md-offset-9{margin-left: 75%}.col-md-offset-8{margin-left: 66.66666667%}.col-md-offset-7{margin-left: 58.33333333%}.col-md-offset-6{margin-left: 50%}.col-md-offset-5{margin-left: 41.66666667%}.col-md-offset-4{margin-left: 33.33333333%}.col-md-offset-3{margin-left: 25%}.col-md-offset-2{margin-left: 16.66666667%}.col-md-offset-1{margin-left: 8.33333333%}.col-md-offset-0{margin-left: 0%}}@media (min-width: 1200px){.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{float: left}.col-lg-12{width: 100%}.col-lg-11{width: 91.66666667%}.col-lg-10{width: 83.33333333%}.col-lg-9{width: 75%}.col-lg-8{width: 66.66666667%}.col-lg-7{width: 58.33333333%}.col-lg-6{width: 50%}.col-lg-5{width: 41.66666667%}.col-lg-4{width: 33.33333333%}.col-lg-3{width: 25%}.col-lg-2{width: 16.66666667%}.col-lg-1{width: 8.33333333%}.col-lg-pull-12{right: 100%}.col-lg-pull-11{right: 91.66666667%}.col-lg-pull-10{right: 83.33333333%}.col-lg-pull-9{right: 75%}.col-lg-pull-8{right: 66.66666667%}.col-lg-pull-7{right: 58.33333333%}.col-lg-pull-6{right: 50%}.col-lg-pull-5{right: 41.66666667%}.col-lg-pull-4{right: 33.33333333%}.col-lg-pull-3{right: 25%}.col-lg-pull-2{right: 16.66666667%}.col-lg-pull-1{right: 8.33333333%}.col-lg-pull-0{right: auto}.col-lg-push-12{left: 100%}.col-lg-push-11{left: 91.66666667%}.col-lg-push-10{left: 83.33333333%}.col-lg-push-9{left: 75%}.col-lg-push-8{left: 66.66666667%}.col-lg-push-7{left: 58.33333333%}.col-lg-push-6{left: 50%}.col-lg-push-5{left: 41.66666667%}.col-lg-push-4{left: 33.33333333%}.col-lg-push-3{left: 25%}.col-lg-push-2{left: 16.66666667%}.col-lg-push-1{left: 8.33333333%}.col-lg-push-0{left: auto}.col-lg-offset-12{margin-left: 100%}.col-lg-offset-11{margin-left: 91.66666667%}.col-lg-offset-10{margin-left: 83.33333333%}.col-lg-offset-9{margin-left: 75%}.col-lg-offset-8{margin-left: 66.66666667%}.col-lg-offset-7{margin-left: 58.33333333%}.col-lg-offset-6{margin-left: 50%}.col-lg-offset-5{margin-left: 41.66666667%}.col-lg-offset-4{margin-left: 33.33333333%}.col-lg-offset-3{margin-left: 25%}.col-lg-offset-2{margin-left: 16.66666667%}.col-lg-offset-1{margin-left: 8.33333333%}.col-lg-offset-0{margin-left: 0%}}table{background-color: transparent}caption{padding-top: 8px;padding-bottom: 8px;color: #777;text-align: left}th{text-align: left}.table{width: 100%;max-width: 100%;margin-bottom: 20px}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding: 8px;line-height: 1.42857143;vertical-align: top;border-top: 1px solid #ddd}.table > thead > tr > th{vertical-align: bottom;border-bottom: 2px solid #ddd}.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top: 0}.table > tbody + tbody{border-top: 2px solid #ddd}.table .table{background-color: #fff}.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding: 5px}.table-bordered{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width: 2px}.table-striped > tbody > tr:nth-child(odd){background-color: #f9f9f9}.table-hover > tbody > tr:hover{background-color: #f5f5f5}table col[class*="col-"]{position: static;float: none;display: table-column}table td[class*="col-"],table th[class*="col-"]{position: static;float: none;display: table-cell}.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color: #f5f5f5}.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th{background-color: #e8e8e8}.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color: #dff0d8}.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th{background-color: #d0e9c6}.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color: #d9edf7}.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th{background-color: #c4e3f3}.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color: #fcf8e3}.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th{background-color: #faf2cc}.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color: #f2dede}.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th{background-color: #ebcccc}.table-responsive{overflow-x: auto;min-height: 0.01%}@media screen and (max-width: 767px){.table-responsive{width: 100%;margin-bottom: 15px;overflow-y: hidden;-ms-overflow-style: -ms-autohiding-scrollbar;border: 1px solid #ddd}.table-responsive > .table{margin-bottom: 0}.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space: nowrap}.table-responsive > .table-bordered{border: 0}.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom: 0}}fieldset{padding: 0;margin: 0;border: 0;min-width: 0}legend{display: block;width: 100%;padding: 0;margin-bottom: 20px;font-size: 21px;line-height: inherit;color: #333;border: 0;border-bottom: 1px solid #e5e5e5}label{display: inline-block;max-width: 100%;margin-bottom: 5px;font-weight: bold}input[type="search"]{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}input[type="radio"],input[type="checkbox"]{margin: 4px 0 0;margin-top: 1px \9;line-height: normal}input[type="file"]{display: block}input[type="range"]{display: block;width: 100%}select[multiple],select[size]{height: auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}output{display: block;padding-top: 7px;font-size: 14px;line-height: 1.42857143;color: #555}.form-control{display: block;width: 100%;height: 34px;padding: 6px 12px;font-size: 14px;line-height: 1.42857143;color: #555;background-color: #fff;background-image: none;border: 1px solid #ccc;border-radius: 4px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color: #66afe9;outline: 0;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,0.6);box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color: #999;opacity: 1}.form-control:-ms-input-placeholder{color: #999}.form-control::-webkit-input-placeholder{color: #999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor: not-allowed;background-color: #eee;opacity: 1}textarea.form-control{height: auto}input[type="search"]{-webkit-appearance: none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height: 34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height: 30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height: 46px}}.form-group{margin-bottom: 15px}.radio,.checkbox{position: relative;display: block;margin-top: 10px;margin-bottom: 10px}.radio label,.checkbox label{min-height: 20px;padding-left: 20px;margin-bottom: 0;font-weight: normal;cursor: pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position: absolute;margin-left: -20px;margin-top: 4px \9}.radio + .radio,.checkbox + .checkbox{margin-top: -5px}.radio-inline,.checkbox-inline{display: inline-block;padding-left: 20px;margin-bottom: 0;vertical-align: middle;font-weight: normal;cursor: pointer}.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top: 0;margin-left: 10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor: not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor: not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor: not-allowed}.form-control-static{padding-top: 7px;padding-bottom: 7px;margin-bottom: 0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left: 0;padding-right: 0}.input-sm,.form-group-sm .form-control{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}select.input-sm,select.form-group-sm .form-control{height: 30px;line-height: 30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height: auto}.input-lg,.form-group-lg .form-control{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.33;border-radius: 6px}select.input-lg,select.form-group-lg .form-control{height: 46px;line-height: 46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height: auto}.has-feedback{position: relative}.has-feedback .form-control{padding-right: 42.5px}.form-control-feedback{position: absolute;top: 0;right: 0;z-index: 2;display: block;width: 34px;height: 34px;line-height: 34px;text-align: center;pointer-events: none}.input-lg + .form-control-feedback{width: 46px;height: 46px;line-height: 46px}.input-sm + .form-control-feedback{width: 30px;height: 30px;line-height: 30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color: #3c763d}.has-success .form-control{border-color: #3c763d;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color: #2b542c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168}.has-success .input-group-addon{color: #3c763d;border-color: #3c763d;background-color: #dff0d8}.has-success .form-control-feedback{color: #3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color: #8a6d3b}.has-warning .form-control{border-color: #8a6d3b;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color: #66512c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b}.has-warning .input-group-addon{color: #8a6d3b;border-color: #8a6d3b;background-color: #fcf8e3}.has-warning .form-control-feedback{color: #8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color: #a94442}.has-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.has-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.has-error .form-control-feedback{color: #a94442}.has-feedback label ~ .form-control-feedback{top: 25px}.has-feedback label.sr-only ~ .form-control-feedback{top: 0}.help-block{display: block;margin-top: 5px;margin-bottom: 10px;color: #737373}@media (min-width: 768px){.form-inline .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle}.form-inline .form-control-static{display: inline-block}.form-inline .input-group{display: inline-table;vertical-align: middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width: auto}.form-inline .input-group > .form-control{width: 100%}.form-inline .control-label{margin-bottom: 0;vertical-align: middle}.form-inline .radio,.form-inline .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.form-inline .radio label,.form-inline .checkbox label{padding-left: 0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.form-inline .has-feedback .form-control-feedback{top: 0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top: 0;margin-bottom: 0;padding-top: 7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height: 27px}.form-horizontal .form-group{margin-left: -15px;margin-right: -15px}@media (min-width: 768px){.form-horizontal .control-label{text-align: right;margin-bottom: 0;padding-top: 7px}}.form-horizontal .has-feedback .form-control-feedback{right: 15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top: 14.3px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top: 6px}}.btn{display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 6px 12px;font-size: 14px;line-height: 1.42857143;border-radius: 4px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}.btn:hover,.btn:focus,.btn.focus{color: #333;text-decoration: none}.btn:active,.btn.active{outline: 0;background-image: none;-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor: not-allowed;pointer-events: none;opacity: .65;filter: alpha(opacity=65);-webkit-box-shadow: none;box-shadow: none}.btn-default{color: #333;background-color: #fff;border-color: #ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{color: #333;background-color: #e6e6e6;border-color: #adadad}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{background-image: none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color: #fff;border-color: #ccc}.btn-default .badge{color: #fff;background-color: #333}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color: #fff;background-color: #333;border-color: #adadad}.btn-primary{color: #fff;background-color: #265680;border-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{color: #fff;background-color: #1a3c59;border-color: #e0e0e0}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{background-image: none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color: #265680;border-color: #fff}.btn-primary .badge{color: #265680;background-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color: #265680;background-color: #fff;border-color: #e0e0e0}.btn-success{color: #fff;background-color: #028302;border-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{color: #fff;background-color: #015101;border-color: #e0e0e0}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{background-image: none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color: #028302;border-color: #fff}.btn-success .badge{color: #028302;background-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color: #028302;background-color: #fff;border-color: #e0e0e0}.btn-info{color: #fff;background-color: #1c5f74;border-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{color: #fff;background-color: #123d4b;border-color: #e0e0e0}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{background-image: none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color: #1c5f74;border-color: #fff}.btn-info .badge{color: #1c5f74;background-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color: #1c5f74;background-color: #fff;border-color: #e0e0e0}.btn-warning{color: #fff;background-color: #a56100;border-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{color: #fff;background-color: #724300;border-color: #e0e0e0}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{background-image: none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color: #a56100;border-color: #fff}.btn-warning .badge{color: #a56100;background-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color: #a56100;background-color: #fff;border-color: #e0e0e0}.btn-danger{color: #fff;background-color: #a41915;border-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{color: #fff;background-color: #77120f;border-color: #e0e0e0}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{background-image: none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color: #a41915;border-color: #fff}.btn-danger .badge{color: #a41915;background-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color: #a41915;background-color: #fff;border-color: #e0e0e0}.btn-link{color: #12538b;font-weight: normal;border-radius: 0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color: transparent;-webkit-box-shadow: none;box-shadow: none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color: transparent}.btn-link:hover,.btn-link:focus{color: #092b47;text-decoration: underline;background-color: transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color: #777;text-decoration: none}.btn-lg,.btn-group-lg > .btn{padding: 10px 16px;font-size: 18px;line-height: 1.33;border-radius: 6px}.btn-sm,.btn-group-sm > .btn{padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}.btn-xs,.btn-group-xs > .btn{padding: 1px 5px;font-size: 12px;line-height: 1.5;border-radius: 3px}.btn-block{display: block;width: 100%}.btn-block + .btn-block{margin-top: 5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width: 100%}.fade{opacity: 0;-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear}.fade.in{opacity: 1}.collapse{display: none;visibility: hidden}.collapse.in{display: block;visibility: visible}tr.collapse.in{display: table-row}tbody.collapse.in{display: table-row-group}.collapsing{position: relative;height: 0;overflow: hidden;-webkit-transition-property: height, visibility;transition-property: height, visibility;-webkit-transition-duration: .35s;transition-duration: .35s;-webkit-transition-timing-function: ease;transition-timing-function: ease}.caret{display: inline-block;width: 0;height: 0;margin-left: 2px;vertical-align: middle;border-top: 4px solid;border-right: 4px solid transparent;border-left: 4px solid transparent}.dropdown{position: relative}.dropdown-toggle:focus{outline: 0}.dropdown-menu{position: absolute;top: 100%;left: 0;z-index: 1000;display: none;float: left;min-width: 160px;padding: 5px 0;margin: 2px 0 0;list-style: none;font-size: 14px;text-align: left;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.15);border-radius: 4px;-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);box-shadow: 0 6px 12px rgba(0,0,0,0.175);background-clip: padding-box}.dropdown-menu.pull-right{right: 0;left: auto}.dropdown-menu .divider{height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5}.dropdown-menu > li > a{display: block;padding: 3px 20px;clear: both;font-weight: normal;line-height: 1.42857143;color: #333;white-space: nowrap}.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration: none;color: #262626;background-color: #f5f5f5}.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color: #fff;text-decoration: none;outline: 0;background-color: #265680}.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color: #777}.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration: none;background-color: transparent;background-image: none;filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor: not-allowed}.open > .dropdown-menu{display: block}.open > a{outline: 0}.dropdown-menu-right{left: auto;right: 0}.dropdown-menu-left{left: 0;right: auto}.dropdown-header{display: block;padding: 3px 20px;font-size: 12px;line-height: 1.42857143;color: #777;white-space: nowrap}.dropdown-backdrop{position: fixed;left: 0;right: 0;bottom: 0;top: 0;z-index: 990}.pull-right > .dropdown-menu{right: 0;left: auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top: 0;border-bottom: 4px solid;content: ""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top: auto;bottom: 100%;margin-bottom: 1px}@media (min-width: 768px){.navbar-right .dropdown-menu{left: auto;right: 0}.navbar-right .dropdown-menu-left{left: 0;right: auto}}.btn-group,.btn-group-vertical{position: relative;display: inline-block;vertical-align: middle}.btn-group > .btn,.btn-group-vertical > .btn{position: relative;float: left}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index: 2}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left: -1px}.btn-toolbar{margin-left: -5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float: left}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left: 5px}.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius: 0}.btn-group > .btn:first-child{margin-left: 0}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group > .btn-group{float: left}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group > .btn-group:first-child > .btn:last-child,.btn-group > .btn-group:first-child > .dropdown-toggle{border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn-group:last-child > .btn:first-child{border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline: 0}.btn-group > .btn + .dropdown-toggle{padding-left: 8px;padding-right: 8px}.btn-group > .btn-lg + .dropdown-toggle{padding-left: 12px;padding-right: 12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow: none;box-shadow: none}.btn .caret{margin-left: 0}.btn-lg .caret{border-width: 5px 5px 0;border-bottom-width: 0}.dropup .btn-lg .caret{border-width: 0 5px 5px}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display: block;float: none;width: 100%;max-width: 100%}.btn-group-vertical > .btn-group > .btn{float: none}.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(:first-child):not(:last-child){border-radius: 0}.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius: 4px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn:last-child:not(:first-child){border-bottom-left-radius: 4px;border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-justified{display: table;width: 100%;table-layout: fixed;border-collapse: separate}.btn-group-justified > .btn,.btn-group-justified > .btn-group{float: none;display: table-cell;width: 1%}.btn-group-justified > .btn-group .btn{width: 100%}.btn-group-justified > .btn-group .dropdown-menu{left: auto}[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"]{position: absolute;clip: rect(0, 0, 0, 0);pointer-events: none}.input-group{position: relative;display: table;border-collapse: separate}.input-group[class*="col-"]{float: none;padding-left: 0;padding-right: 0}.input-group .form-control{position: relative;z-index: 2;float: left;width: 100%;margin-bottom: 0}.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.33;border-radius: 6px}select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height: 46px;line-height: 46px}textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height: auto}.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height: 30px;line-height: 30px}textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height: auto}.input-group-addon,.input-group-btn,.input-group .form-control{display: table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius: 0}.input-group-addon,.input-group-btn{width: 1%;white-space: nowrap;vertical-align: middle}.input-group-addon{padding: 6px 12px;font-size: 14px;font-weight: normal;line-height: 1;color: #555;text-align: center;background-color: #eee;border: 1px solid #ccc;border-radius: 4px}.input-group-addon.input-sm{padding: 5px 10px;font-size: 12px;border-radius: 3px}.input-group-addon.input-lg{padding: 10px 16px;font-size: 18px;border-radius: 6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top: 0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius: 0;border-top-right-radius: 0}.input-group-addon:first-child{border-right: 0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius: 0;border-top-left-radius: 0}.input-group-addon:last-child{border-left: 0}.input-group-btn{position: relative;font-size: 0;white-space: nowrap}.input-group-btn > .btn{position: relative}.input-group-btn > .btn + .btn{margin-left: -1px}.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index: 2}.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right: -1px}.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{margin-left: -1px}.nav{margin-bottom: 0;padding-left: 0;list-style: none}.nav > li{position: relative;display: block}.nav > li > a{position: relative;display: block;padding: 10px 15px}.nav > li > a:hover,.nav > li > a:focus{text-decoration: none;background-color: #eee}.nav > li.disabled > a{color: #777}.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color: #777;text-decoration: none;background-color: transparent;cursor: not-allowed}.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color: #eee;border-color: #12538b}.nav .nav-divider{height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5}.nav > li > a > img{max-width: none}.nav-tabs{border-bottom: 1px solid #ddd}.nav-tabs > li{float: left;margin-bottom: -1px}.nav-tabs > li > a{margin-right: 2px;line-height: 1.42857143;border: 1px solid transparent;border-radius: 4px 4px 0 0}.nav-tabs > li > a:hover{border-color: #eee #eee #ddd}.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color: #555;background-color: #fff;border: 1px solid #ddd;border-bottom-color: transparent;cursor: default}.nav-tabs.nav-justified{width: 100%;border-bottom: 0}.nav-tabs.nav-justified > li{float: none}.nav-tabs.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-tabs.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-tabs.nav-justified > li{display: table-cell;width: 1%}.nav-tabs.nav-justified > li > a{margin-bottom: 0}}.nav-tabs.nav-justified > li > a{margin-right: 0;border-radius: 4px}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs.nav-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 4px 4px 0 0}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color: #fff}}.nav-pills > li{float: left}.nav-pills > li > a{border-radius: 4px}.nav-pills > li + li{margin-left: 2px}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color: #fff;background-color: #265680}.nav-stacked > li{float: none}.nav-stacked > li + li{margin-top: 2px;margin-left: 0}.nav-justified{width: 100%}.nav-justified > li{float: none}.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-justified > li{display: table-cell;width: 1%}.nav-justified > li > a{margin-bottom: 0}}.nav-tabs-justified{border-bottom: 0}.nav-tabs-justified > li > a{margin-right: 0;border-radius: 4px}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 4px 4px 0 0}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color: #fff}}.tab-content > .tab-pane{display: none;visibility: hidden}.tab-content > .active{display: block;visibility: visible}.nav-tabs .dropdown-menu{margin-top: -1px;border-top-right-radius: 0;border-top-left-radius: 0}.navbar{position: relative;min-height: 50px;margin-bottom: 20px;border: 1px solid transparent}@media (min-width: 768px){.navbar{border-radius: 4px}}@media (min-width: 768px){.navbar-header{float: left}}.navbar-collapse{overflow-x: visible;padding-right: 15px;padding-left: 15px;border-top: 1px solid transparent;box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling: touch}.navbar-collapse.in{overflow-y: auto}@media (min-width: 768px){.navbar-collapse{width: auto;border-top: 0;box-shadow: none}.navbar-collapse.collapse{display: block !important;visibility: visible !important;height: auto !important;padding-bottom: 0;overflow: visible !important}.navbar-collapse.in{overflow-y: visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left: 0;padding-right: 0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 200px}}.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: -15px;margin-left: -15px}@media (min-width: 768px){.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: 0;margin-left: 0}}.navbar-static-top{z-index: 1000;border-width: 0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius: 0}}.navbar-fixed-top,.navbar-fixed-bottom{position: fixed;right: 0;left: 0;z-index: 1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius: 0}}.navbar-fixed-top{top: 0;border-width: 0 0 1px}.navbar-fixed-bottom{bottom: 0;margin-bottom: 0;border-width: 1px 0 0}.navbar-brand{float: left;padding: 15px 15px;font-size: 18px;line-height: 20px;height: 50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration: none}.navbar-brand > img{display: block}@media (min-width: 768px){.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand{margin-left: -15px}}.navbar-toggle{position: relative;float: right;margin-right: 15px;padding: 9px 10px;margin-top: 8px;margin-bottom: 8px;background-color: transparent;background-image: none;border: 1px solid transparent;border-radius: 4px}.navbar-toggle:focus{outline: 0}.navbar-toggle .icon-bar{display: block;width: 22px;height: 2px;border-radius: 1px}.navbar-toggle .icon-bar + .icon-bar{margin-top: 4px}@media (min-width: 768px){.navbar-toggle{display: none}}.navbar-nav{margin: 7.5px -15px}.navbar-nav > li > a{padding-top: 10px;padding-bottom: 10px;line-height: 20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position: static;float: none;width: auto;margin-top: 0;background-color: transparent;border: 0;box-shadow: none}.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header{padding: 5px 15px 5px 25px}.navbar-nav .open .dropdown-menu > li > a{line-height: 20px}.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus{background-image: none}}@media (min-width: 768px){.navbar-nav{float: left;margin: 0}.navbar-nav > li{float: left}.navbar-nav > li > a{padding-top: 15px;padding-bottom: 15px}}.navbar-form{margin-left: -15px;margin-right: -15px;padding: 10px 15px;border-top: 1px solid transparent;border-bottom: 1px solid transparent;-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);margin-top: 8px;margin-bottom: 8px}@media (min-width: 768px){.navbar-form .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.navbar-form .form-control{display: inline-block;width: auto;vertical-align: middle}.navbar-form .form-control-static{display: inline-block}.navbar-form .input-group{display: inline-table;vertical-align: middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width: auto}.navbar-form .input-group > .form-control{width: 100%}.navbar-form .control-label{margin-bottom: 0;vertical-align: middle}.navbar-form .radio,.navbar-form .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left: 0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.navbar-form .has-feedback .form-control-feedback{top: 0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom: 5px}.navbar-form .form-group:last-child{margin-bottom: 0}}@media (min-width: 768px){.navbar-form{width: auto;border: 0;margin-left: 0;margin-right: 0;padding-top: 0;padding-bottom: 0;-webkit-box-shadow: none;box-shadow: none}}.navbar-nav > li > .dropdown-menu{margin-top: 0;border-top-right-radius: 0;border-top-left-radius: 0}.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu{border-top-right-radius: 4px;border-top-left-radius: 4px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.navbar-btn{margin-top: 8px;margin-bottom: 8px}.navbar-btn.btn-sm{margin-top: 10px;margin-bottom: 10px}.navbar-btn.btn-xs{margin-top: 14px;margin-bottom: 14px}.navbar-text{margin-top: 15px;margin-bottom: 15px}@media (min-width: 768px){.navbar-text{float: left;margin-left: 15px;margin-right: 15px}}@media (min-width: 768px){.navbar-left{float: left !important}.navbar-right{float: right !important;margin-right: -15px}.navbar-right ~ .navbar-right{margin-right: 0}}.navbar-default{background-color: #132531;border-color: #0a1319}.navbar-default .navbar-brand{color: #fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color: #068139;background-color: transparent}.navbar-default .navbar-text{color: #fff}.navbar-default .navbar-nav > li > a{color: #fff}.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus{color: #fff;background-color: #068139}.navbar-default .navbar-toggle{border-color: #ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color: #ddd}.navbar-default .navbar-toggle .icon-bar{background-color: #888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color: #0a1319}.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus{background-color: #fff;color: #132531}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu > li > a{color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #fff;background-color: #068139}}.navbar-default .navbar-link{color: #fff}.navbar-default .navbar-link:hover{color: #132531}.navbar-default .btn-link{color: #fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color: #132531}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color: #fff}.navbar-inverse{background-color: #222;border-color: #080808}.navbar-inverse .navbar-brand{color: #9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-text{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus{color: #444;background-color: transparent}.navbar-inverse .navbar-toggle{border-color: #333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color: #333}.navbar-inverse .navbar-toggle .icon-bar{background-color: #fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color: #101010}.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus{background-color: #080808;color: #fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header{border-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #444;background-color: transparent}}.navbar-inverse .navbar-link{color: #9d9d9d}.navbar-inverse .navbar-link:hover{color: #fff}.navbar-inverse .btn-link{color: #9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color: #fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color: #444}.breadcrumb{padding: 8px 15px;margin-bottom: 20px;list-style: none;background-color: #f5f5f5;border-radius: 4px}.breadcrumb > li{display: inline-block}.breadcrumb > li + li:before{content: "/\00a0";padding: 0 5px;color: #ccc}.breadcrumb > .active{color: #777}.pagination{display: inline-block;padding-left: 0;margin: 20px 0;border-radius: 4px}.pagination > li{display: inline}.pagination > li > a,.pagination > li > span{position: relative;float: left;padding: 6px 12px;line-height: 1.42857143;text-decoration: none;color: #12538b;background-color: #fff;border: 1px solid #ddd;margin-left: -1px}.pagination > li:first-child > a,.pagination > li:first-child > span{margin-left: 0;border-bottom-left-radius: 4px;border-top-left-radius: 4px}.pagination > li:last-child > a,.pagination > li:last-child > span{border-bottom-right-radius: 4px;border-top-right-radius: 4px}.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus{color: #092b47;background-color: #eee;border-color: #ddd}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{z-index: 2;color: #fff;background-color: #265680;border-color: #265680;cursor: default}.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus{color: #777;background-color: #fff;border-color: #ddd;cursor: not-allowed}.pagination-lg > li > a,.pagination-lg > li > span{padding: 10px 16px;font-size: 18px}.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span{border-bottom-left-radius: 6px;border-top-left-radius: 6px}.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span{border-bottom-right-radius: 6px;border-top-right-radius: 6px}.pagination-sm > li > a,.pagination-sm > li > span{padding: 5px 10px;font-size: 12px}.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span{border-bottom-left-radius: 3px;border-top-left-radius: 3px}.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span{border-bottom-right-radius: 3px;border-top-right-radius: 3px}.pager{padding-left: 0;margin: 20px 0;list-style: none;text-align: center}.pager li{display: inline}.pager li > a,.pager li > span{display: inline-block;padding: 5px 14px;background-color: #fff;border: 1px solid #ddd;border-radius: 15px}.pager li > a:hover,.pager li > a:focus{text-decoration: none;background-color: #eee}.pager .next > a,.pager .next > span{float: right}.pager .previous > a,.pager .previous > span{float: left}.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span{color: #777;background-color: #fff;cursor: not-allowed}.label{display: inline;padding: .2em .6em .3em;font-size: 75%;font-weight: bold;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: .25em}a.label:hover,a.label:focus{color: #fff;text-decoration: none;cursor: pointer}.label:empty{display: none}.btn .label{position: relative;top: -1px}.label-default{background-color: #777}.label-default[href]:hover,.label-default[href]:focus{background-color: #5e5e5e}.label-primary{background-color: #265680}.label-primary[href]:hover,.label-primary[href]:focus{background-color: #1a3c59}.label-success{background-color: #028302}.label-success[href]:hover,.label-success[href]:focus{background-color: #015101}.label-info{background-color: #1c5f74}.label-info[href]:hover,.label-info[href]:focus{background-color: #123d4b}.label-warning{background-color: #a56100}.label-warning[href]:hover,.label-warning[href]:focus{background-color: #724300}.label-danger{background-color: #a41915}.label-danger[href]:hover,.label-danger[href]:focus{background-color: #77120f}.badge{display: inline-block;min-width: 10px;padding: 3px 7px;font-size: 12px;font-weight: bold;color: #fff;line-height: 1;vertical-align: baseline;white-space: nowrap;text-align: center;background-color: #777;border-radius: 10px}.badge:empty{display: none}.btn .badge{position: relative;top: -1px}.btn-xs .badge{top: 0;padding: 1px 5px}a.badge:hover,a.badge:focus{color: #fff;text-decoration: none;cursor: pointer}.list-group-item.active > .badge,.nav-pills > .active > a > .badge{color: #12538b;background-color: #fff}.list-group-item > .badge{float: right}.list-group-item > .badge + .badge{margin-right: 5px}.nav-pills > li > a > .badge{margin-left: 3px}.jumbotron{padding: 30px 15px;margin-bottom: 30px;color: inherit;background-color: #eee}.jumbotron h1,.jumbotron .h1{color: inherit}.jumbotron p{margin-bottom: 15px;font-size: 21px;font-weight: 200}.jumbotron > hr{border-top-color: #d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius: 6px}.jumbotron .container{max-width: 100%}@media screen and (min-width: 768px){.jumbotron{padding: 48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left: 60px;padding-right: 60px}.jumbotron h1,.jumbotron .h1{font-size: 63px}}.thumbnail{display: block;padding: 4px;margin-bottom: 20px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 4px;-webkit-transition: border .2s ease-in-out;-o-transition: border .2s ease-in-out;transition: border .2s ease-in-out}.thumbnail > img,.thumbnail a > img{margin-left: auto;margin-right: auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color: #12538b}.thumbnail .caption{padding: 9px;color: #333}.alert{padding: 15px;margin-bottom: 20px;border: 1px solid transparent;border-radius: 4px}.alert h4{margin-top: 0;color: inherit}.alert .alert-link{font-weight: bold}.alert > p,.alert > ul{margin-bottom: 0}.alert > p + p{margin-top: 5px}.alert-dismissable,.alert-dismissible{padding-right: 35px}.alert-dismissable .close,.alert-dismissible .close{position: relative;top: -2px;right: -21px;color: inherit}.alert-success{background-color: #dff0d8;border-color: #d6e9c6;color: #3c763d}.alert-success hr{border-top-color: #c9e2b3}.alert-success .alert-link{color: #2b542c}.alert-info{background-color: #d9edf7;border-color: #bce8f1;color: #31708f}.alert-info hr{border-top-color: #a6e1ec}.alert-info .alert-link{color: #245269}.alert-warning{background-color: #fcf8e3;border-color: #faebcc;color: #8a6d3b}.alert-warning hr{border-top-color: #f7e1b5}.alert-warning .alert-link{color: #66512c}.alert-danger{background-color: #f2dede;border-color: #ebccd1;color: #a94442}.alert-danger hr{border-top-color: #e4b9c0}.alert-danger .alert-link{color: #843534}@-webkit-keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}@keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}.progress{overflow: hidden;height: 20px;margin-bottom: 20px;background-color: #f5f5f5;border-radius: 4px;-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);box-shadow: inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float: left;width: 0%;height: 100%;font-size: 12px;line-height: 20px;color: #fff;text-align: center;background-color: #265680;-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition: width .6s ease;-o-transition: width .6s ease;transition: width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image: -webkit-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-image: -o-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-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: 40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation: progress-bar-stripes 2s linear infinite;-o-animation: progress-bar-stripes 2s linear infinite;animation: progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color: #028302}.progress-striped .progress-bar-success{background-image: -webkit-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-image: -o-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-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)}.progress-bar-info{background-color: #1c5f74}.progress-striped .progress-bar-info{background-image: -webkit-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-image: -o-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-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)}.progress-bar-warning{background-color: #a56100}.progress-striped .progress-bar-warning{background-image: -webkit-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-image: -o-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-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)}.progress-bar-danger{background-color: #a41915}.progress-striped .progress-bar-danger{background-image: -webkit-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-image: -o-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-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)}.media{margin-top: 15px}.media:first-child{margin-top: 0}.media-right,.media > .pull-right{padding-left: 10px}.media-left,.media > .pull-left{padding-right: 10px}.media-left,.media-right,.media-body{display: table-cell;vertical-align: top}.media-middle{vertical-align: middle}.media-bottom{vertical-align: bottom}.media-heading{margin-top: 0;margin-bottom: 5px}.media-list{padding-left: 0;list-style: none}.list-group{margin-bottom: 20px;padding-left: 0}.list-group-item{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd}.list-group-item:first-child{border-top-right-radius: 4px;border-top-left-radius: 4px}.list-group-item:last-child{margin-bottom: 0;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px}a.list-group-item{color: #555}a.list-group-item .list-group-item-heading{color: #333}a.list-group-item:hover,a.list-group-item:focus{text-decoration: none;color: #555;background-color: #f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color: inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color: #777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index: 2;color: #fff;background-color: #265680;border-color: #265680}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small{color: inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color: #93bcdf}.list-group-item-success{color: #3c763d;background-color: #dff0d8}a.list-group-item-success{color: #3c763d}a.list-group-item-success .list-group-item-heading{color: inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color: #3c763d;background-color: #d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color: #fff;background-color: #3c763d;border-color: #3c763d}.list-group-item-info{color: #31708f;background-color: #d9edf7}a.list-group-item-info{color: #31708f}a.list-group-item-info .list-group-item-heading{color: inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color: #31708f;background-color: #c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color: #fff;background-color: #31708f;border-color: #31708f}.list-group-item-warning{color: #8a6d3b;background-color: #fcf8e3}a.list-group-item-warning{color: #8a6d3b}a.list-group-item-warning .list-group-item-heading{color: inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color: #8a6d3b;background-color: #faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color: #fff;background-color: #8a6d3b;border-color: #8a6d3b}.list-group-item-danger{color: #a94442;background-color: #f2dede}a.list-group-item-danger{color: #a94442}a.list-group-item-danger .list-group-item-heading{color: inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color: #a94442;background-color: #ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color: #fff;background-color: #a94442;border-color: #a94442}.list-group-item-heading{margin-top: 0;margin-bottom: 5px}.list-group-item-text{margin-bottom: 0;line-height: 1.3}.panel{margin-bottom: 20px;background-color: #fff;border: 1px solid transparent;border-radius: 4px;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);box-shadow: 0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding: 15px}.panel-heading{padding: 10px 15px;border-bottom: 1px solid transparent;border-top-right-radius: 3px;border-top-left-radius: 3px}.panel-heading > .dropdown .dropdown-toggle{color: inherit}.panel-title{margin-top: 0;margin-bottom: 0;font-size: 16px;color: inherit}.panel-title > a{color: inherit}.panel-footer{padding: 10px 15px;background-color: #f5f5f5;border-top: 1px solid #ddd;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel > .list-group,.panel > .panel-collapse > .list-group{margin-bottom: 0}.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item{border-width: 1px 0;border-radius: 0}.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child{border-top: 0;border-top-right-radius: 3px;border-top-left-radius: 3px}.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child{border-bottom: 0;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel-heading + .list-group .list-group-item:first-child{border-top-width: 0}.list-group + .panel-footer{border-top-width: 0}.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table{margin-bottom: 0}.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption{padding-left: 15px;padding-right: 15px}.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child{border-top-right-radius: 3px;border-top-left-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child{border-top-left-radius: 3px;border-top-right-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child{border-top-left-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child{border-top-right-radius: 3px}.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child{border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child{border-bottom-left-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child{border-bottom-right-radius: 3px}.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body{border-top: 1px solid #ddd}.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td{border-top: 0}.panel > .table-bordered,.panel > .table-responsive > .table-bordered{border: 0}.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th{border-bottom: 0}.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th{border-bottom: 0}.panel > .table-responsive{border: 0;margin-bottom: 0}.panel-group{margin-bottom: 20px}.panel-group .panel{margin-bottom: 0;border-radius: 4px}.panel-group .panel + .panel{margin-top: 5px}.panel-group .panel-heading{border-bottom: 0}.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group{border-top: 1px solid #ddd}.panel-group .panel-footer{border-top: 0}.panel-group .panel-footer + .panel-collapse .panel-body{border-bottom: 1px solid #ddd}.panel-default{border-color: #ddd}.panel-default > .panel-heading{color: #333;background-color: #f5f5f5;border-color: #ddd}.panel-default > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ddd}.panel-default > .panel-heading .badge{color: #f5f5f5;background-color: #333}.panel-default > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ddd}.panel-primary{border-color: #265680}.panel-primary > .panel-heading{color: #fff;background-color: #265680;border-color: #265680}.panel-primary > .panel-heading + .panel-collapse > .panel-body{border-top-color: #265680}.panel-primary > .panel-heading .badge{color: #265680;background-color: #fff}.panel-primary > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #265680}.panel-success{border-color: #d6e9c6}.panel-success > .panel-heading{color: #3c763d;background-color: #dff0d8;border-color: #d6e9c6}.panel-success > .panel-heading + .panel-collapse > .panel-body{border-top-color: #d6e9c6}.panel-success > .panel-heading .badge{color: #dff0d8;background-color: #3c763d}.panel-success > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #d6e9c6}.panel-info{border-color: #bce8f1}.panel-info > .panel-heading{color: #31708f;background-color: #d9edf7;border-color: #bce8f1}.panel-info > .panel-heading + .panel-collapse > .panel-body{border-top-color: #bce8f1}.panel-info > .panel-heading .badge{color: #d9edf7;background-color: #31708f}.panel-info > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #bce8f1}.panel-warning{border-color: #faebcc}.panel-warning > .panel-heading{color: #8a6d3b;background-color: #fcf8e3;border-color: #faebcc}.panel-warning > .panel-heading + .panel-collapse > .panel-body{border-top-color: #faebcc}.panel-warning > .panel-heading .badge{color: #fcf8e3;background-color: #8a6d3b}.panel-warning > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #faebcc}.panel-danger{border-color: #ebccd1}.panel-danger > .panel-heading{color: #a94442;background-color: #f2dede;border-color: #ebccd1}.panel-danger > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ebccd1}.panel-danger > .panel-heading .badge{color: #f2dede;background-color: #a94442}.panel-danger > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ebccd1}.embed-responsive{position: relative;display: block;height: 0;padding: 0;overflow: hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position: absolute;top: 0;left: 0;bottom: 0;height: 100%;width: 100%;border: 0}.embed-responsive.embed-responsive-16by9{padding-bottom: 56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom: 75%}.well{min-height: 20px;padding: 19px;margin-bottom: 20px;background-color: #f5f5f5;border: 1px solid #e3e3e3;border-radius: 4px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);box-shadow: inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color: #ddd;border-color: rgba(0,0,0,0.15)}.well-lg{padding: 24px;border-radius: 6px}.well-sm{padding: 9px;border-radius: 3px}.close{float: right;font-size: 21px;font-weight: bold;line-height: 1;color: #000;text-shadow: 0 1px 0 #fff;opacity: .2;filter: alpha(opacity=20)}.close:hover,.close:focus{color: #000;text-decoration: none;cursor: pointer;opacity: .5;filter: alpha(opacity=50)}button.close{padding: 0;cursor: pointer;background: transparent;border: 0;-webkit-appearance: none}.modal-open{overflow: hidden}.modal{display: none;overflow: hidden;position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1040;-webkit-overflow-scrolling: touch;outline: 0}.modal.fade .modal-dialog{-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-moz-transition: -moz-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0)}.modal-open .modal{overflow-x: hidden;overflow-y: auto}.modal-dialog{position: relative;width: auto;margin: 10px}.modal-content{position: relative;background-color: #fff;border: 1px solid #999;border: 1px solid rgba(0,0,0,0.2);border-radius: 6px;-webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);box-shadow: 0 3px 9px rgba(0,0,0,0.5);background-clip: padding-box;outline: 0}.modal-backdrop{position: absolute;top: 0;right: 0;left: 0;background-color: #000}.modal-backdrop.fade{opacity: 0;filter: alpha(opacity=0)}.modal-backdrop.in{opacity: .5;filter: alpha(opacity=50)}.modal-header{padding: 15px;border-bottom: 1px solid #e5e5e5;min-height: 16.42857143px}.modal-header .close{margin-top: -2px}.modal-title{margin: 0;line-height: 1.42857143}.modal-body{position: relative;padding: 15px}.modal-footer{padding: 15px;text-align: right;border-top: 1px solid #e5e5e5}.modal-footer .btn + .btn{margin-left: 5px;margin-bottom: 0}.modal-footer .btn-group .btn + .btn{margin-left: -1px}.modal-footer .btn-block + .btn-block{margin-left: 0}.modal-scrollbar-measure{position: absolute;top: -9999px;width: 50px;height: 50px;overflow: scroll}@media (min-width: 768px){.modal-dialog{width: 600px;margin: 30px auto}.modal-content{-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);box-shadow: 0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width: 300px}}@media (min-width: 992px){.modal-lg{width: 900px}}.tooltip{position: absolute;z-index: 1070;display: block;visibility: visible;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 12px;font-weight: normal;line-height: 1.4;opacity: 0;filter: alpha(opacity=0)}.tooltip.in{opacity: .9;filter: alpha(opacity=90)}.tooltip.top{margin-top: -3px;padding: 5px 0}.tooltip.right{margin-left: 3px;padding: 0 5px}.tooltip.bottom{margin-top: 3px;padding: 5px 0}.tooltip.left{margin-left: -3px;padding: 0 5px}.tooltip-inner{max-width: 200px;padding: 3px 8px;color: #fff;text-align: center;text-decoration: none;background-color: #000;border-radius: 4px}.tooltip-arrow{position: absolute;width: 0;height: 0;border-color: transparent;border-style: solid}.tooltip.top .tooltip-arrow{bottom: 0;left: 50%;margin-left: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-left .tooltip-arrow{bottom: 0;right: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-right .tooltip-arrow{bottom: 0;left: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.right .tooltip-arrow{top: 50%;left: 0;margin-top: -5px;border-width: 5px 5px 5px 0;border-right-color: #000}.tooltip.left .tooltip-arrow{top: 50%;right: 0;margin-top: -5px;border-width: 5px 0 5px 5px;border-left-color: #000}.tooltip.bottom .tooltip-arrow{top: 0;left: 50%;margin-left: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-left .tooltip-arrow{top: 0;right: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-right .tooltip-arrow{top: 0;left: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.popover{position: absolute;top: 0;left: 0;z-index: 1060;display: none;max-width: 276px;padding: 1px;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 14px;font-weight: normal;line-height: 1.42857143;text-align: left;background-color: #fff;background-clip: padding-box;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.2);border-radius: 6px;-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2);box-shadow: 0 5px 10px rgba(0,0,0,0.2);white-space: normal}.popover.top{margin-top: -10px}.popover.right{margin-left: 10px}.popover.bottom{margin-top: 10px}.popover.left{margin-left: -10px}.popover-title{margin: 0;padding: 8px 14px;font-size: 14px;background-color: #f7f7f7;border-bottom: 1px solid #ebebeb;border-radius: 5px 5px 0 0}.popover-content{padding: 9px 14px}.popover > .arrow,.popover > .arrow:after{position: absolute;display: block;width: 0;height: 0;border-color: transparent;border-style: solid}.popover > .arrow{border-width: 11px}.popover > .arrow:after{border-width: 10px;content: ""}.popover.top > .arrow{left: 50%;margin-left: -11px;border-bottom-width: 0;border-top-color: #999;border-top-color: rgba(0,0,0,0.25);bottom: -11px}.popover.top > .arrow:after{content: " ";bottom: 1px;margin-left: -10px;border-bottom-width: 0;border-top-color: #fff}.popover.right > .arrow{top: 50%;left: -11px;margin-top: -11px;border-left-width: 0;border-right-color: #999;border-right-color: rgba(0,0,0,0.25)}.popover.right > .arrow:after{content: " ";left: 1px;bottom: -10px;border-left-width: 0;border-right-color: #fff}.popover.bottom > .arrow{left: 50%;margin-left: -11px;border-top-width: 0;border-bottom-color: #999;border-bottom-color: rgba(0,0,0,0.25);top: -11px}.popover.bottom > .arrow:after{content: " ";top: 1px;margin-left: -10px;border-top-width: 0;border-bottom-color: #fff}.popover.left > .arrow{top: 50%;right: -11px;margin-top: -11px;border-right-width: 0;border-left-color: #999;border-left-color: rgba(0,0,0,0.25)}.popover.left > .arrow:after{content: " ";right: 1px;border-right-width: 0;border-left-color: #fff;bottom: -10px}.carousel{position: relative}.carousel-inner{position: relative;overflow: hidden;width: 100%}.carousel-inner > .item{display: none;position: relative;-webkit-transition: .6s ease-in-out left;-o-transition: .6s ease-in-out left;transition: .6s ease-in-out left}.carousel-inner > .item > img,.carousel-inner > .item > a > img{line-height: 1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner > .item{transition: transform .6s ease-in-out;backface-visibility: hidden;perspective: 1000}.carousel-inner > .item.next,.carousel-inner > .item.active.right{transform: translate3d(100%, 0, 0);left: 0}.carousel-inner > .item.prev,.carousel-inner > .item.active.left{transform: translate3d(-100%, 0, 0);left: 0}.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active{transform: translate3d(0, 0, 0);left: 0}}.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev{display: block}.carousel-inner > .active{left: 0}.carousel-inner > .next,.carousel-inner > .prev{position: absolute;top: 0;width: 100%}.carousel-inner > .next{left: 100%}.carousel-inner > .prev{left: -100%}.carousel-inner > .next.left,.carousel-inner > .prev.right{left: 0}.carousel-inner > .active.left{left: -100%}.carousel-inner > .active.right{left: 100%}.carousel-control{position: absolute;top: 0;left: 0;bottom: 0;width: 15%;opacity: .5;filter: alpha(opacity=50);font-size: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left: auto;right: 0;background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline: 0;color: #fff;text-decoration: none;opacity: .9;filter: alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position: absolute;top: 50%;z-index: 5;display: inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left: 50%;margin-left: -10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right: 50%;margin-right: -10px}.carousel-control .icon-prev,.carousel-control .icon-next{width: 20px;height: 20px;margin-top: -10px;font-family: serif}.carousel-control .icon-prev:before{content: '\2039'}.carousel-control .icon-next:before{content: '\203a'}.carousel-indicators{position: absolute;bottom: 10px;left: 50%;z-index: 15;width: 60%;margin-left: -30%;padding-left: 0;list-style: none;text-align: center}.carousel-indicators li{display: inline-block;width: 10px;height: 10px;margin: 1px;text-indent: -999px;border: 1px solid #fff;border-radius: 10px;cursor: pointer;background-color: #000 \9;background-color: rgba(0,0,0,0)}.carousel-indicators .active{margin: 0;width: 12px;height: 12px;background-color: #fff}.carousel-caption{position: absolute;left: 15%;right: 15%;bottom: 20px;z-index: 10;padding-top: 20px;padding-bottom: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow: none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width: 30px;height: 30px;margin-top: -15px;font-size: 30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left: -15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right: -15px}.carousel-caption{left: 20%;right: 20%;padding-bottom: 30px}.carousel-indicators{bottom: 20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content: " ";display: table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear: both}.center-block{display: block;margin-left: auto;margin-right: auto}.pull-right{float: right !important}.pull-left{float: left !important}.hide{display: none !important}.show{display: block !important}.invisible{visibility: hidden}.text-hide{font: 0/0 a;color: transparent;text-shadow: none;background-color: transparent;border: 0}.hidden{display: none !important;visibility: hidden !important}.affix{position: fixed}@-ms-viewport{width: device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display: none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display: none !important}@media (max-width: 767px){.visible-xs{display: block !important}table.visible-xs{display: table}tr.visible-xs{display: table-row !important}th.visible-xs,td.visible-xs{display: table-cell !important}}@media (max-width: 767px){.visible-xs-block{display: block !important}}@media (max-width: 767px){.visible-xs-inline{display: inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display: inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display: block !important}table.visible-sm{display: table}tr.visible-sm{display: table-row !important}th.visible-sm,td.visible-sm{display: table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display: block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display: inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display: inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display: block !important}table.visible-md{display: table}tr.visible-md{display: table-row !important}th.visible-md,td.visible-md{display: table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display: block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display: inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display: inline-block !important}}@media (min-width: 1200px){.visible-lg{display: block !important}table.visible-lg{display: table}tr.visible-lg{display: table-row !important}th.visible-lg,td.visible-lg{display: table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display: block !important}}@media (min-width: 1200px){.visible-lg-inline{display: inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display: inline-block !important}}@media (max-width: 767px){.hidden-xs{display: none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display: none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display: none !important}}@media (min-width: 1200px){.hidden-lg{display: none !important}}.visible-print{display: none !important}@media print{.visible-print{display: block !important}table.visible-print{display: table}tr.visible-print{display: table-row !important}th.visible-print,td.visible-print{display: table-cell !important}}.visible-print-block{display: none !important}@media print{.visible-print-block{display: block !important}}.visible-print-inline{display: none !important}@media print{.visible-print-inline{display: inline !important}}.visible-print-inline-block{display: none !important}@media print{.visible-print-inline-block{display: inline-block !important}}@media print{.hidden-print{display: none !important}}.sr-only{clip: rect(1px, 1px, 1px, 1px);position: absolute;width: auto;height: auto;margin: 0;padding: 0;overflow: hidden;border: 0}.sr-only:focus{background-color: #fff;border-radius: 4px;clip: auto;color: #132531;display: block;font-size: 14px;height: 50px;line-height: 20px;padding: 15px 15px;position: absolute;left: 5px;top: 5px;text-decoration: none;text-transform: none;width: auto;z-index: 100000}.navbar-brand{font-size: 20px}.alert.alert-info a{text-decoration: underline}.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover{color: #000}[data-toggle~=dropdown]{cursor: pointer}.fa{cursor: default}@media (min-width: 768px){.form-control{max-width: 400px}}.has-error{margin-bottom: 0}.help-block.with-errors{padding: 6px 0}.help-block.with-errors:empty{padding: 0}.help-block.with-errors,.help-block.with-errors .list-unstyled{margin: 0}.highlight,mark{background: #ff6;padding: .1em .2em}.icon-bar{background-color: #888}img{max-width: 100%}label.list-group-item{border-radius: 0;font-weight: normal;margin-top: 0;padding-left: 35px}.list-group-item.title{font-weight: bold}#modal .modal-body > h2:first-child{display: none}.popover{width: 250px}.sub-breadcrumb{padding: 5px 10px;white-space: nowrap}.sub-breadcrumb li{display: inline-block}.sub-breadcrumb li + li:before{content: "/\00a0";padding: 0 5px;color: #ccc}.tab-content{padding: 4px}.group{background: #eee;border-radius: 4px;border: 1px solid #c8c8c8;margin: 0 0 6px;padding: 10px 10px 10px 25px}.group .add_search_link{display: inline-block;margin-top: 4px}.group [class^=col-]{padding-left: 0}.group .search{margin-bottom: 2px}#groupPlaceHolder{display: block;padding: 6px}.alphabrowse{border-collapse: separate}.alphabrowse .lcc{width: 20%}.alphabrowse .titles{width: 10%;text-align: center}.alphabrowse tr.browse-match td{border-top: .2em solid #265680;border-bottom: .2em solid #265680}.alphabrowse tr.browse-match td:first-child{border-left: .2em solid #265680}.alphabrowse tr.browse-match td:last-child{border-right: .2em solid #265680}.twitter-typeahead{background: #FFF;border-radius: 4px;vertical-align: top}.twitter-typeahead .tt-hint{display: none}@media (max-width: 767px){.twitter-typeahead{width: 100%}}.tt-dropdown-menu{margin-bottom: 20px;padding-left: 0}.tt-suggestion{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd;cursor: pointer;text-overflow: ellipsis;white-space: nowrap}.tt-suggestion:first-child{border-top-right-radius: 4px;border-top-left-radius: 4px}.tt-suggestion:last-child{margin-bottom: 0;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px}.tt-suggestion.disabled,.tt-suggestion.disabled:hover,.tt-suggestion.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.tt-suggestion.disabled .list-group-item-heading,.tt-suggestion.disabled:hover .list-group-item-heading,.tt-suggestion.disabled:focus .list-group-item-heading{color: inherit}.tt-suggestion.disabled .list-group-item-text,.tt-suggestion.disabled:hover .list-group-item-text,.tt-suggestion.disabled:focus .list-group-item-text{color: #777}.tt-suggestion.active,.tt-suggestion.active:hover,.tt-suggestion.active:focus{z-index: 2;color: #fff;background-color: #265680;border-color: #265680}.tt-suggestion.active .list-group-item-heading,.tt-suggestion.active:hover .list-group-item-heading,.tt-suggestion.active:focus .list-group-item-heading,.tt-suggestion.active .list-group-item-heading > small,.tt-suggestion.active:hover .list-group-item-heading > small,.tt-suggestion.active:focus .list-group-item-heading > small,.tt-suggestion.active .list-group-item-heading > .small,.tt-suggestion.active:hover .list-group-item-heading > .small,.tt-suggestion.active:focus .list-group-item-heading > .small{color: inherit}.tt-suggestion.active .list-group-item-text,.tt-suggestion.active:hover .list-group-item-text,.tt-suggestion.active:focus .list-group-item-text{color: #93bcdf}.tt-suggestion i.fa{cursor: inherit}.tt-suggestion.active{white-space: inherit}.tt-suggestion.tt-cursor{background-color: #265680;color: #FFF}.tt-suggestion p{margin: 0}.badge a{color: #FFF}.browse.list-group .list-group-item{word-wrap: break-word}.browse.list-group .list-group-item.view-record{border-top: 0;font-size: 85%;padding: 2px 4px;text-align: right}.fa-grid:before{content: "\f00a"}.fa-visual:before{content: "\f008"}.fa-mobile:before{content: "\f10a"}.fa-x:before{content: "\f0f6"}.fa-atlas:before{content: "\f14e"}.fa-book:before{content: "\f02d"}.fa-braille:before{content: "\f0a6"}.fa-cdrom{content: "\f109"}.fa-chart:before{content: "\f012"}.fa-chipcartridge:before{content: "\f109"}.fa-collage:before{content: "\f03e"}.fa-disccartridge:before{content: "\f109"}.fa-drawing:before{content: "\f03e"}.fa-ebook:before{content: "\f0f6"}.fa-electronic:before{content: "\f1c6"}.fa-filmstrip:before{content: "\f008"}.fa-flashcard:before{content: "\f0e7"}.fa-floppydisk:before{content: "\f0c7"}.fa-globe:before{content: "\f0ac"}.fa-journal:before{content: "\f0f6"}.fa-kit:before{content: "\f0b1"}.fa-manuscript:before{content: "\f0f6"}.fa-map:before{content: "\f14e"}.fa-microfilm:before{content: "\f008"}.fa.fa-mobile:before{content: "\f10a"}.fa-motionpicture:before{content: "\f03d"}.fa-musicalscore:before{content: "\f001"}.fa-musicrecording:before{content: "\f001"}.fa-newspaper:before{content: "\f0f6"}.fa-online:before{content: "\f109"}.fa-painting:before{content: "\f03e"}.fa-photo:before{content: "\f03e"}.fa-photonegative:before{content: "\f03e"}.fa-physicalobject:before{content: "\f187"}.fa-print:before{content: "\f03e"}.fa-sensorimage:before{content: "\f03e"}.fa-serial:before{content: "\f0f6"}.fa-slide:before{content: "\f008"}.fa-software:before{content: "\f109"}.fa-soundcassette:before{content: "\f025"}.fa-sounddisc:before{content: "\f109"}.fa-soundrecording:before{content: "\f025"}.fa-tapecartridge:before{content: "\f109"}.fa-tapecassette:before{content: "\f025"}.fa-tapereel:before{content: "\f008"}.fa-transparency:before{content: "\f008"}.fa-unknown:before{content: "\f128"}.fa-video:before{content: "\f03d"}.fa-videocartridge:before{content: "\f03d"}.fa-videocassette:before{content: "\f03d"}.fa-videodisc:before{content: "\f109"}.fa-videoreel:before{content: "\f03d"}.citation .pace-car th,.citation .pace-car td{border: 0;padding: 0}.citation th{text-align: right}#hierarchyTreeHolder{border-right: 1px solid #eee;overflow-x: hidden}#hierarchyTree .currentHierarchy > a,#hierarchyTree .currentRecord a{color: #000;font-weight: bold}.bulkActionButtons label{display: inline-block}.bulkActionButtons label input{margin-top: 2px}@media (max-width: 767px){.grid{min-height: 250px}}.result a.title{font-weight: bold}.result .left{text-align: center}.result .left img{max-width: 100%}@media (max-width: 767px){.result a{text-decoration: underline}.result .middle,.result .right{padding: 0}}@media (max-width: 530px){.result .checkbox{display: none !important}.result .left{width: 40%}.result .middle{width: 60%}.result .right{display: none}}.search-controls .alert{margin-bottom: 0}.title-in-heading{font-size: inherit;font-style: italic}.sidebar label:not(.list-group-item){margin-left: 20px}.sidebar .list-group:not(.filters) .title{cursor: pointer}.sidebar .list-group:not(.filters) .title.collapsed{border-radius: 4px}.sidebar .list-group:not(.filters) .title.collapsed:after{content: '\25BC'}.sidebar .list-group:not(.filters) .title:after{content: '\25B2';float: right}.sidebar .collapse .list-group-item,.sidebar .collapsing .list-group-item{border-top-left-radius: 0px;border-top-right-radius: 0px}.sidebar .collapse .list-group-item[id^=more],.sidebar .collapsing .list-group-item[id^=more]{border-bottom-left-radius: 4px;border-bottom-right-radius: 4px}.sidebar #side-collapse-publishDate .list-group-item{border-bottom-left-radius: 4px;border-bottom-right-radius: 4px}.list-group-item i.fa,.badge i.fa{cursor: inherit}.sidebar .facet a{text-decoration: none}.top-row .applied{font-weight: bold}.top-row .applied:hover{color: #a94442}.top-row .applied:hover .fa.fa-check:before{content: "\f00d"}.slider-container{padding: 4px 10px;text-align: center}.slider-container .slider.slider-horizontal{width: 100%}.slider-container .slider-track{background: #777;box-shadow: inset 0 1px 0 rgba(0,0,0,0.4)}.slider-container .slider-handle{background: #265680;background-image: none;border: 1px solid #265680;box-shadow: none;opacity: .9}.slider-container .slider-handle:hover,.slider-container .slider-handle:active,.slider-container .slider-handle:focus{opacity: 1;background: #FFF;border-color: #777}.slider-container .slider-handle:active,.slider-container .slider-handle:focus{border-color: #265680}.slider-container .slider-selection{background: #CCC;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.3)}.table{word-wrap: break-word;table-layout: fixed}.node{border: 1px solid #fff;box-sizing: content-box;font: 10px sans-serif;line-height: 12px;overflow: hidden;position: absolute;margin: -1px}.node div{margin-top: 0px}.toplevel{border: 2px solid #000}.node .label{background: rgba(0,0,0,0.5);border-radius: 0;font-size: 85%;position: absolute;bottom: 0;left: 0;text-shadow: none;min-height: 1px;padding: 2px 4px}.notalabel{color: #000000}#viz-instructions{padding-top: 600px}#similar-items-carousel .carousel-indicators{bottom: 0px}#similar-items-carousel .carousel-indicators li{background: rgba(255,255,255,0.3);border-color: #222;margin: 2px;width: 8px;height: 8px}#similar-items-carousel .hover-overlay{display: block;position: relative;text-align: center;margin: auto;min-width: 150px;min-height: 200px}#similar-items-carousel .hover-overlay img{margin: 10px 0;max-width: 100%}#similar-items-carousel .hover-overlay .content{display: none;position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0,0,0,0.5);color: #FFF;padding: .5em .5em 0}#similar-items-carousel .hover-overlay:hover .content{display: block}#similar-items-carousel .item{padding: 0 4em}.facet .jstree-ocl:before{font-family: 'FontAwesome';float: left;speak: none;font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;padding: 0;width: 10px;margin-left: -10px}.facet .jstree-default .jstree-open > .jstree-ocl:before{content: "\f0d7"}.facet .jstree-default .jstree-closed > .jstree-ocl:before{content: "\f0da"}.facet .jstree-default .jstree-leaf > .jstree-ocl:before{content: " "}li.jstree-facet ul{padding-left: 20px}.jstree-facet li span.main{display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;padding-left: 1px}li.jstree-facet,li.jstree-node{list-style: none}.jstree-facet .jstree-container-ul{padding: 0}.jstree-facet .jstree-container-ul > li.active,.jstree-facet .jstree-container-ul > li.active a.jstree-anchor{background-color: #265680;color: #fff}li.jstree-facet .badge{cursor: text}.hierarchy-tree .jstree-ocl:before{font-family: 'FontAwesome';float: left;speak: none;font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;padding: 0;width: 10px;margin-left: -10px}.hierarchy-tree .jstree-open > .jstree-ocl:before{content: "\f0d7"}.hierarchy-tree .jstree-closed > .jstree-ocl:before{content: "\f0da"}.hierarchy-tree .jstree-leaf > .jstree-ocl:before{content: " "}.hierarchy-tree .jstree-icon{color: #000;width: 16px}.hierarchy-tree .jstree-anchor{white-space: nowrap;padding: 2px 5px}.hierarchy-tree .jstree-container-ul,.hierarchy-tree .jstree-children{padding-left: 16px}.hierarchy-tree .jstree-initial-node{display: none}.hierarchy-tree .jstree-clicked{color: #fff;background-color: #265680}.hierarchy-tree .jstree-clicked .jstree-icon{color: #FFF}
\ No newline at end of file
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display: block}audio,canvas,progress,video{display: inline-block;vertical-align: baseline}audio:not([controls]){display: none;height: 0}[hidden],template{display: none}a{background-color: transparent}a:active,a:hover{outline: 0}abbr[title]{border-bottom: 1px dotted}b,strong{font-weight: bold}dfn{font-style: italic}h1{font-size: 2em;margin: .67em 0}mark{background: #ff0;color: #000}small{font-size: 80%}sub,sup{font-size: 75%;line-height: 0;position: relative;vertical-align: baseline}sup{top: -0.5em}sub{bottom: -0.25em}img{border: 0}svg:not(:root){overflow: hidden}figure{margin: 1em 40px}hr{-moz-box-sizing: content-box;box-sizing: content-box;height: 0}pre{overflow: auto}code,kbd,pre,samp{font-family: monospace, monospace;font-size: 1em}button,input,optgroup,select,textarea{color: inherit;font: inherit;margin: 0}button{overflow: visible}button,select{text-transform: none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance: button;cursor: pointer}button[disabled],html input[disabled]{cursor: default}button::-moz-focus-inner,input::-moz-focus-inner{border: 0;padding: 0}input{line-height: normal}input[type="checkbox"],input[type="radio"]{box-sizing: border-box;padding: 0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height: auto}input[type="search"]{-webkit-appearance: textfield;-moz-box-sizing: content-box;-webkit-box-sizing: content-box;box-sizing: content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance: none}fieldset{border: 1px solid #c0c0c0;margin: 0 2px;padding: .35em .625em .75em}legend{border: 0;padding: 0}textarea{overflow: auto}optgroup{font-weight: bold}table{border-collapse: collapse;border-spacing: 0}td,th{padding: 0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background: transparent !important;color: #000 !important;box-shadow: none !important;text-shadow: none !important}a,a:visited{text-decoration: underline}a[href]:after{content: " (" attr(href) ")"}abbr[title]:after{content: " (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content: ""}pre,blockquote{border: 1px solid #999;page-break-inside: avoid}thead{display: table-header-group}tr,img{page-break-inside: avoid}img{max-width: 100% !important}p,h2,h3{orphans: 3;widows: 3}h2,h3{page-break-after: avoid}select{background: #fff !important}.navbar{display: none}.btn > .caret,.dropup > .btn > .caret{border-top-color: #000 !important}.label{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 #ddd !important}}@font-face{font-family: 'Glyphicons Halflings';src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot');src: url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../../themes/bootstrap3/css/less/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position: relative;top: 1px;display: inline-block;font-family: 'Glyphicons Halflings';font-style: normal;font-weight: normal;line-height: 1;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale}.glyphicon-asterisk:before{content: "\2a"}.glyphicon-plus:before{content: "\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content: "\20ac"}.glyphicon-minus:before{content: "\2212"}.glyphicon-cloud:before{content: "\2601"}.glyphicon-envelope:before{content: "\2709"}.glyphicon-pencil:before{content: "\270f"}.glyphicon-glass:before{content: "\e001"}.glyphicon-music:before{content: "\e002"}.glyphicon-search:before{content: "\e003"}.glyphicon-heart:before{content: "\e005"}.glyphicon-star:before{content: "\e006"}.glyphicon-star-empty:before{content: "\e007"}.glyphicon-user:before{content: "\e008"}.glyphicon-film:before{content: "\e009"}.glyphicon-th-large:before{content: "\e010"}.glyphicon-th:before{content: "\e011"}.glyphicon-th-list:before{content: "\e012"}.glyphicon-ok:before{content: "\e013"}.glyphicon-remove:before{content: "\e014"}.glyphicon-zoom-in:before{content: "\e015"}.glyphicon-zoom-out:before{content: "\e016"}.glyphicon-off:before{content: "\e017"}.glyphicon-signal:before{content: "\e018"}.glyphicon-cog:before{content: "\e019"}.glyphicon-trash:before{content: "\e020"}.glyphicon-home:before{content: "\e021"}.glyphicon-file:before{content: "\e022"}.glyphicon-time:before{content: "\e023"}.glyphicon-road:before{content: "\e024"}.glyphicon-download-alt:before{content: "\e025"}.glyphicon-download:before{content: "\e026"}.glyphicon-upload:before{content: "\e027"}.glyphicon-inbox:before{content: "\e028"}.glyphicon-play-circle:before{content: "\e029"}.glyphicon-repeat:before{content: "\e030"}.glyphicon-refresh:before{content: "\e031"}.glyphicon-list-alt:before{content: "\e032"}.glyphicon-lock:before{content: "\e033"}.glyphicon-flag:before{content: "\e034"}.glyphicon-headphones:before{content: "\e035"}.glyphicon-volume-off:before{content: "\e036"}.glyphicon-volume-down:before{content: "\e037"}.glyphicon-volume-up:before{content: "\e038"}.glyphicon-qrcode:before{content: "\e039"}.glyphicon-barcode:before{content: "\e040"}.glyphicon-tag:before{content: "\e041"}.glyphicon-tags:before{content: "\e042"}.glyphicon-book:before{content: "\e043"}.glyphicon-bookmark:before{content: "\e044"}.glyphicon-print:before{content: "\e045"}.glyphicon-camera:before{content: "\e046"}.glyphicon-font:before{content: "\e047"}.glyphicon-bold:before{content: "\e048"}.glyphicon-italic:before{content: "\e049"}.glyphicon-text-height:before{content: "\e050"}.glyphicon-text-width:before{content: "\e051"}.glyphicon-align-left:before{content: "\e052"}.glyphicon-align-center:before{content: "\e053"}.glyphicon-align-right:before{content: "\e054"}.glyphicon-align-justify:before{content: "\e055"}.glyphicon-list:before{content: "\e056"}.glyphicon-indent-left:before{content: "\e057"}.glyphicon-indent-right:before{content: "\e058"}.glyphicon-facetime-video:before{content: "\e059"}.glyphicon-picture:before{content: "\e060"}.glyphicon-map-marker:before{content: "\e062"}.glyphicon-adjust:before{content: "\e063"}.glyphicon-tint:before{content: "\e064"}.glyphicon-edit:before{content: "\e065"}.glyphicon-share:before{content: "\e066"}.glyphicon-check:before{content: "\e067"}.glyphicon-move:before{content: "\e068"}.glyphicon-step-backward:before{content: "\e069"}.glyphicon-fast-backward:before{content: "\e070"}.glyphicon-backward:before{content: "\e071"}.glyphicon-play:before{content: "\e072"}.glyphicon-pause:before{content: "\e073"}.glyphicon-stop:before{content: "\e074"}.glyphicon-forward:before{content: "\e075"}.glyphicon-fast-forward:before{content: "\e076"}.glyphicon-step-forward:before{content: "\e077"}.glyphicon-eject:before{content: "\e078"}.glyphicon-chevron-left:before{content: "\e079"}.glyphicon-chevron-right:before{content: "\e080"}.glyphicon-plus-sign:before{content: "\e081"}.glyphicon-minus-sign:before{content: "\e082"}.glyphicon-remove-sign:before{content: "\e083"}.glyphicon-ok-sign:before{content: "\e084"}.glyphicon-question-sign:before{content: "\e085"}.glyphicon-info-sign:before{content: "\e086"}.glyphicon-screenshot:before{content: "\e087"}.glyphicon-remove-circle:before{content: "\e088"}.glyphicon-ok-circle:before{content: "\e089"}.glyphicon-ban-circle:before{content: "\e090"}.glyphicon-arrow-left:before{content: "\e091"}.glyphicon-arrow-right:before{content: "\e092"}.glyphicon-arrow-up:before{content: "\e093"}.glyphicon-arrow-down:before{content: "\e094"}.glyphicon-share-alt:before{content: "\e095"}.glyphicon-resize-full:before{content: "\e096"}.glyphicon-resize-small:before{content: "\e097"}.glyphicon-exclamation-sign:before{content: "\e101"}.glyphicon-gift:before{content: "\e102"}.glyphicon-leaf:before{content: "\e103"}.glyphicon-fire:before{content: "\e104"}.glyphicon-eye-open:before{content: "\e105"}.glyphicon-eye-close:before{content: "\e106"}.glyphicon-warning-sign:before{content: "\e107"}.glyphicon-plane:before{content: "\e108"}.glyphicon-calendar:before{content: "\e109"}.glyphicon-random:before{content: "\e110"}.glyphicon-comment:before{content: "\e111"}.glyphicon-magnet:before{content: "\e112"}.glyphicon-chevron-up:before{content: "\e113"}.glyphicon-chevron-down:before{content: "\e114"}.glyphicon-retweet:before{content: "\e115"}.glyphicon-shopping-cart:before{content: "\e116"}.glyphicon-folder-close:before{content: "\e117"}.glyphicon-folder-open:before{content: "\e118"}.glyphicon-resize-vertical:before{content: "\e119"}.glyphicon-resize-horizontal:before{content: "\e120"}.glyphicon-hdd:before{content: "\e121"}.glyphicon-bullhorn:before{content: "\e122"}.glyphicon-bell:before{content: "\e123"}.glyphicon-certificate:before{content: "\e124"}.glyphicon-thumbs-up:before{content: "\e125"}.glyphicon-thumbs-down:before{content: "\e126"}.glyphicon-hand-right:before{content: "\e127"}.glyphicon-hand-left:before{content: "\e128"}.glyphicon-hand-up:before{content: "\e129"}.glyphicon-hand-down:before{content: "\e130"}.glyphicon-circle-arrow-right:before{content: "\e131"}.glyphicon-circle-arrow-left:before{content: "\e132"}.glyphicon-circle-arrow-up:before{content: "\e133"}.glyphicon-circle-arrow-down:before{content: "\e134"}.glyphicon-globe:before{content: "\e135"}.glyphicon-wrench:before{content: "\e136"}.glyphicon-tasks:before{content: "\e137"}.glyphicon-filter:before{content: "\e138"}.glyphicon-briefcase:before{content: "\e139"}.glyphicon-fullscreen:before{content: "\e140"}.glyphicon-dashboard:before{content: "\e141"}.glyphicon-paperclip:before{content: "\e142"}.glyphicon-heart-empty:before{content: "\e143"}.glyphicon-link:before{content: "\e144"}.glyphicon-phone:before{content: "\e145"}.glyphicon-pushpin:before{content: "\e146"}.glyphicon-usd:before{content: "\e148"}.glyphicon-gbp:before{content: "\e149"}.glyphicon-sort:before{content: "\e150"}.glyphicon-sort-by-alphabet:before{content: "\e151"}.glyphicon-sort-by-alphabet-alt:before{content: "\e152"}.glyphicon-sort-by-order:before{content: "\e153"}.glyphicon-sort-by-order-alt:before{content: "\e154"}.glyphicon-sort-by-attributes:before{content: "\e155"}.glyphicon-sort-by-attributes-alt:before{content: "\e156"}.glyphicon-unchecked:before{content: "\e157"}.glyphicon-expand:before{content: "\e158"}.glyphicon-collapse-down:before{content: "\e159"}.glyphicon-collapse-up:before{content: "\e160"}.glyphicon-log-in:before{content: "\e161"}.glyphicon-flash:before{content: "\e162"}.glyphicon-log-out:before{content: "\e163"}.glyphicon-new-window:before{content: "\e164"}.glyphicon-record:before{content: "\e165"}.glyphicon-save:before{content: "\e166"}.glyphicon-open:before{content: "\e167"}.glyphicon-saved:before{content: "\e168"}.glyphicon-import:before{content: "\e169"}.glyphicon-export:before{content: "\e170"}.glyphicon-send:before{content: "\e171"}.glyphicon-floppy-disk:before{content: "\e172"}.glyphicon-floppy-saved:before{content: "\e173"}.glyphicon-floppy-remove:before{content: "\e174"}.glyphicon-floppy-save:before{content: "\e175"}.glyphicon-floppy-open:before{content: "\e176"}.glyphicon-credit-card:before{content: "\e177"}.glyphicon-transfer:before{content: "\e178"}.glyphicon-cutlery:before{content: "\e179"}.glyphicon-header:before{content: "\e180"}.glyphicon-compressed:before{content: "\e181"}.glyphicon-earphone:before{content: "\e182"}.glyphicon-phone-alt:before{content: "\e183"}.glyphicon-tower:before{content: "\e184"}.glyphicon-stats:before{content: "\e185"}.glyphicon-sd-video:before{content: "\e186"}.glyphicon-hd-video:before{content: "\e187"}.glyphicon-subtitles:before{content: "\e188"}.glyphicon-sound-stereo:before{content: "\e189"}.glyphicon-sound-dolby:before{content: "\e190"}.glyphicon-sound-5-1:before{content: "\e191"}.glyphicon-sound-6-1:before{content: "\e192"}.glyphicon-sound-7-1:before{content: "\e193"}.glyphicon-copyright-mark:before{content: "\e194"}.glyphicon-registration-mark:before{content: "\e195"}.glyphicon-cloud-download:before{content: "\e197"}.glyphicon-cloud-upload:before{content: "\e198"}.glyphicon-tree-conifer:before{content: "\e199"}.glyphicon-tree-deciduous:before{content: "\e200"}.glyphicon-cd:before{content: "\e201"}.glyphicon-save-file:before{content: "\e202"}.glyphicon-open-file:before{content: "\e203"}.glyphicon-level-up:before{content: "\e204"}.glyphicon-copy:before{content: "\e205"}.glyphicon-paste:before{content: "\e206"}.glyphicon-alert:before{content: "\e209"}.glyphicon-equalizer:before{content: "\e210"}.glyphicon-king:before{content: "\e211"}.glyphicon-queen:before{content: "\e212"}.glyphicon-pawn:before{content: "\e213"}.glyphicon-bishop:before{content: "\e214"}.glyphicon-knight:before{content: "\e215"}.glyphicon-baby-formula:before{content: "\e216"}.glyphicon-tent:before{content: "\26fa"}.glyphicon-blackboard:before{content: "\e218"}.glyphicon-bed:before{content: "\e219"}.glyphicon-apple:before{content: "\f8ff"}.glyphicon-erase:before{content: "\e221"}.glyphicon-hourglass:before{content: "\231b"}.glyphicon-lamp:before{content: "\e223"}.glyphicon-duplicate:before{content: "\e224"}.glyphicon-piggy-bank:before{content: "\e225"}.glyphicon-scissors:before{content: "\e226"}.glyphicon-bitcoin:before{content: "\e227"}.glyphicon-btc:before{content: "\e227"}.glyphicon-xbt:before{content: "\e227"}.glyphicon-yen:before{content: "\00a5"}.glyphicon-jpy:before{content: "\00a5"}.glyphicon-ruble:before{content: "\20bd"}.glyphicon-rub:before{content: "\20bd"}.glyphicon-scale:before{content: "\e230"}.glyphicon-ice-lolly:before{content: "\e231"}.glyphicon-ice-lolly-tasted:before{content: "\e232"}.glyphicon-education:before{content: "\e233"}.glyphicon-option-horizontal:before{content: "\e234"}.glyphicon-option-vertical:before{content: "\e235"}.glyphicon-menu-hamburger:before{content: "\e236"}.glyphicon-modal-window:before{content: "\e237"}.glyphicon-oil:before{content: "\e238"}.glyphicon-grain:before{content: "\e239"}.glyphicon-sunglasses:before{content: "\e240"}.glyphicon-text-size:before{content: "\e241"}.glyphicon-text-color:before{content: "\e242"}.glyphicon-text-background:before{content: "\e243"}.glyphicon-object-align-top:before{content: "\e244"}.glyphicon-object-align-bottom:before{content: "\e245"}.glyphicon-object-align-horizontal:before{content: "\e246"}.glyphicon-object-align-left:before{content: "\e247"}.glyphicon-object-align-vertical:before{content: "\e248"}.glyphicon-object-align-right:before{content: "\e249"}.glyphicon-triangle-right:before{content: "\e250"}.glyphicon-triangle-left:before{content: "\e251"}.glyphicon-triangle-bottom:before{content: "\e252"}.glyphicon-triangle-top:before{content: "\e253"}.glyphicon-console:before{content: "\e254"}.glyphicon-superscript:before{content: "\e255"}.glyphicon-subscript:before{content: "\e256"}.glyphicon-menu-left:before{content: "\e257"}.glyphicon-menu-right:before{content: "\e258"}.glyphicon-menu-down:before{content: "\e259"}.glyphicon-menu-up:before{content: "\e260"}*{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}*:before,*:after{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}html{font-size: 10px;-webkit-tap-highlight-color: rgba(0,0,0,0)}body{font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 14px;line-height: 1.42857143;color: #333;background-color: #fff}input,button,select,textarea{font-family: inherit;font-size: inherit;line-height: inherit}a{color: #12538b;text-decoration: none}a:hover,a:focus{color: #092b47;text-decoration: underline}a:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}figure{margin: 0}img{vertical-align: middle}.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img{display: block;max-width: 100%;height: auto}.img-rounded{border-radius: 6px}.img-thumbnail{padding: 4px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 4px;-webkit-transition: all .2s ease-in-out;-o-transition: all .2s ease-in-out;transition: all .2s ease-in-out;display: inline-block;max-width: 100%;height: auto}.img-circle{border-radius: 50%}hr{margin-top: 20px;margin-bottom: 20px;border: 0;border-top: 1px solid #eee}.sr-only{position: absolute;width: 1px;height: 1px;margin: -1px;padding: 0;overflow: hidden;clip: rect(0, 0, 0, 0);border: 0}.sr-only-focusable:active,.sr-only-focusable:focus{position: static;width: auto;height: auto;margin: 0;overflow: visible;clip: auto}[role="button"]{cursor: pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family: inherit;font-weight: 500;line-height: 1.1;color: inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight: normal;line-height: 1;color: #777}h1,.h1,h2,.h2,h3,.h3{margin-top: 20px;margin-bottom: 10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size: 65%}h4,.h4,h5,.h5,h6,.h6{margin-top: 10px;margin-bottom: 10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size: 75%}h1,.h1{font-size: 36px}h2,.h2{font-size: 30px}h3,.h3{font-size: 24px}h4,.h4{font-size: 18px}h5,.h5{font-size: 14px}h6,.h6{font-size: 12px}p{margin: 0 0 10px}.lead{margin-bottom: 20px;font-size: 16px;font-weight: 300;line-height: 1.4}@media (min-width: 768px){.lead{font-size: 21px}}small,.small{font-size: 85%}mark,.mark{background-color: #fcf8e3;padding: .2em}.text-left{text-align: left}.text-right{text-align: right}.text-center{text-align: center}.text-justify{text-align: justify}.text-nowrap{white-space: nowrap}.text-lowercase{text-transform: lowercase}.text-uppercase{text-transform: uppercase}.text-capitalize{text-transform: capitalize}.text-muted{color: #777}.text-primary{color: #265680}a.text-primary:hover{color: #1a3c59}.text-success{color: #3c763d}a.text-success:hover{color: #2b542c}.text-info{color: #31708f}a.text-info:hover{color: #245269}.text-warning{color: #8a6d3b}a.text-warning:hover{color: #66512c}.text-danger{color: #a94442}a.text-danger:hover{color: #843534}.bg-primary{color: #fff;background-color: #265680}a.bg-primary:hover{background-color: #1a3c59}.bg-success{background-color: #dff0d8}a.bg-success:hover{background-color: #c1e2b3}.bg-info{background-color: #d9edf7}a.bg-info:hover{background-color: #afd9ee}.bg-warning{background-color: #fcf8e3}a.bg-warning:hover{background-color: #f7ecb5}.bg-danger{background-color: #f2dede}a.bg-danger:hover{background-color: #e4b9b9}.page-header{padding-bottom: 9px;margin: 40px 0 20px;border-bottom: 1px solid #eee}ul,ol{margin-top: 0;margin-bottom: 10px}ul ul,ol ul,ul ol,ol ol{margin-bottom: 0}.list-unstyled{padding-left: 0;list-style: none}.list-inline{padding-left: 0;list-style: none;margin: 0;margin-left: -5px}.list-inline > li{display: inline-block;padding-left: 5px;padding-right: 5px}dl{margin-top: 0;margin-bottom: 20px}dt,dd{line-height: 1.42857143}dt{font-weight: bold}dd{margin-left: 0}@media (min-width: 768px){.dl-horizontal dt{float: left;width: 160px;clear: left;text-align: right;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.dl-horizontal dd{margin-left: 180px}}abbr[title],abbr[data-original-title]{cursor: help;border-bottom: 1px dotted #777}.initialism{font-size: 90%;text-transform: uppercase}blockquote{padding: 10px 20px;margin: 0 0 20px;font-size: 17.5px;border-left: 5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom: 0}blockquote footer,blockquote small,blockquote .small{display: block;font-size: 80%;line-height: 1.42857143;color: #777}blockquote footer:before,blockquote small:before,blockquote .small:before{content: '\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right: 15px;padding-left: 0;border-right: 5px solid #eee;border-left: 0;text-align: right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content: ''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content: '\00A0 \2014'}address{margin-bottom: 20px;font-style: normal;line-height: 1.42857143}code,kbd,pre,samp{font-family: Menlo, Monaco, Consolas, "Courier New", monospace}code{padding: 2px 4px;font-size: 90%;color: #c7254e;background-color: #f9f2f4;border-radius: 4px}kbd{padding: 2px 4px;font-size: 90%;color: #fff;background-color: #333;border-radius: 3px;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding: 0;font-size: 100%;font-weight: bold;box-shadow: none}pre{display: block;padding: 9.5px;margin: 0 0 10px;font-size: 13px;line-height: 1.42857143;word-break: break-all;word-wrap: break-word;color: #333;background-color: #f5f5f5;border: 1px solid #ccc;border-radius: 4px}pre code{padding: 0;font-size: inherit;color: inherit;white-space: pre-wrap;background-color: transparent;border-radius: 0}.pre-scrollable{max-height: 340px;overflow-y: scroll}.container{margin-right: auto;margin-left: auto;padding-left: 15px;padding-right: 15px}@media (min-width: 768px){.container{width: 750px}}@media (min-width: 992px){.container{width: 970px}}@media (min-width: 1200px){.container{width: 1170px}}.container-fluid{margin-right: auto;margin-left: auto;padding-left: 15px;padding-right: 15px}.row{margin-left: -15px;margin-right: -15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position: relative;min-height: 1px;padding-left: 15px;padding-right: 15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float: left}.col-xs-12{width: 100%}.col-xs-11{width: 91.66666667%}.col-xs-10{width: 83.33333333%}.col-xs-9{width: 75%}.col-xs-8{width: 66.66666667%}.col-xs-7{width: 58.33333333%}.col-xs-6{width: 50%}.col-xs-5{width: 41.66666667%}.col-xs-4{width: 33.33333333%}.col-xs-3{width: 25%}.col-xs-2{width: 16.66666667%}.col-xs-1{width: 8.33333333%}.col-xs-pull-12{right: 100%}.col-xs-pull-11{right: 91.66666667%}.col-xs-pull-10{right: 83.33333333%}.col-xs-pull-9{right: 75%}.col-xs-pull-8{right: 66.66666667%}.col-xs-pull-7{right: 58.33333333%}.col-xs-pull-6{right: 50%}.col-xs-pull-5{right: 41.66666667%}.col-xs-pull-4{right: 33.33333333%}.col-xs-pull-3{right: 25%}.col-xs-pull-2{right: 16.66666667%}.col-xs-pull-1{right: 8.33333333%}.col-xs-pull-0{right: auto}.col-xs-push-12{left: 100%}.col-xs-push-11{left: 91.66666667%}.col-xs-push-10{left: 83.33333333%}.col-xs-push-9{left: 75%}.col-xs-push-8{left: 66.66666667%}.col-xs-push-7{left: 58.33333333%}.col-xs-push-6{left: 50%}.col-xs-push-5{left: 41.66666667%}.col-xs-push-4{left: 33.33333333%}.col-xs-push-3{left: 25%}.col-xs-push-2{left: 16.66666667%}.col-xs-push-1{left: 8.33333333%}.col-xs-push-0{left: auto}.col-xs-offset-12{margin-left: 100%}.col-xs-offset-11{margin-left: 91.66666667%}.col-xs-offset-10{margin-left: 83.33333333%}.col-xs-offset-9{margin-left: 75%}.col-xs-offset-8{margin-left: 66.66666667%}.col-xs-offset-7{margin-left: 58.33333333%}.col-xs-offset-6{margin-left: 50%}.col-xs-offset-5{margin-left: 41.66666667%}.col-xs-offset-4{margin-left: 33.33333333%}.col-xs-offset-3{margin-left: 25%}.col-xs-offset-2{margin-left: 16.66666667%}.col-xs-offset-1{margin-left: 8.33333333%}.col-xs-offset-0{margin-left: 0%}@media (min-width: 768px){.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{float: left}.col-sm-12{width: 100%}.col-sm-11{width: 91.66666667%}.col-sm-10{width: 83.33333333%}.col-sm-9{width: 75%}.col-sm-8{width: 66.66666667%}.col-sm-7{width: 58.33333333%}.col-sm-6{width: 50%}.col-sm-5{width: 41.66666667%}.col-sm-4{width: 33.33333333%}.col-sm-3{width: 25%}.col-sm-2{width: 16.66666667%}.col-sm-1{width: 8.33333333%}.col-sm-pull-12{right: 100%}.col-sm-pull-11{right: 91.66666667%}.col-sm-pull-10{right: 83.33333333%}.col-sm-pull-9{right: 75%}.col-sm-pull-8{right: 66.66666667%}.col-sm-pull-7{right: 58.33333333%}.col-sm-pull-6{right: 50%}.col-sm-pull-5{right: 41.66666667%}.col-sm-pull-4{right: 33.33333333%}.col-sm-pull-3{right: 25%}.col-sm-pull-2{right: 16.66666667%}.col-sm-pull-1{right: 8.33333333%}.col-sm-pull-0{right: auto}.col-sm-push-12{left: 100%}.col-sm-push-11{left: 91.66666667%}.col-sm-push-10{left: 83.33333333%}.col-sm-push-9{left: 75%}.col-sm-push-8{left: 66.66666667%}.col-sm-push-7{left: 58.33333333%}.col-sm-push-6{left: 50%}.col-sm-push-5{left: 41.66666667%}.col-sm-push-4{left: 33.33333333%}.col-sm-push-3{left: 25%}.col-sm-push-2{left: 16.66666667%}.col-sm-push-1{left: 8.33333333%}.col-sm-push-0{left: auto}.col-sm-offset-12{margin-left: 100%}.col-sm-offset-11{margin-left: 91.66666667%}.col-sm-offset-10{margin-left: 83.33333333%}.col-sm-offset-9{margin-left: 75%}.col-sm-offset-8{margin-left: 66.66666667%}.col-sm-offset-7{margin-left: 58.33333333%}.col-sm-offset-6{margin-left: 50%}.col-sm-offset-5{margin-left: 41.66666667%}.col-sm-offset-4{margin-left: 33.33333333%}.col-sm-offset-3{margin-left: 25%}.col-sm-offset-2{margin-left: 16.66666667%}.col-sm-offset-1{margin-left: 8.33333333%}.col-sm-offset-0{margin-left: 0%}}@media (min-width: 992px){.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{float: left}.col-md-12{width: 100%}.col-md-11{width: 91.66666667%}.col-md-10{width: 83.33333333%}.col-md-9{width: 75%}.col-md-8{width: 66.66666667%}.col-md-7{width: 58.33333333%}.col-md-6{width: 50%}.col-md-5{width: 41.66666667%}.col-md-4{width: 33.33333333%}.col-md-3{width: 25%}.col-md-2{width: 16.66666667%}.col-md-1{width: 8.33333333%}.col-md-pull-12{right: 100%}.col-md-pull-11{right: 91.66666667%}.col-md-pull-10{right: 83.33333333%}.col-md-pull-9{right: 75%}.col-md-pull-8{right: 66.66666667%}.col-md-pull-7{right: 58.33333333%}.col-md-pull-6{right: 50%}.col-md-pull-5{right: 41.66666667%}.col-md-pull-4{right: 33.33333333%}.col-md-pull-3{right: 25%}.col-md-pull-2{right: 16.66666667%}.col-md-pull-1{right: 8.33333333%}.col-md-pull-0{right: auto}.col-md-push-12{left: 100%}.col-md-push-11{left: 91.66666667%}.col-md-push-10{left: 83.33333333%}.col-md-push-9{left: 75%}.col-md-push-8{left: 66.66666667%}.col-md-push-7{left: 58.33333333%}.col-md-push-6{left: 50%}.col-md-push-5{left: 41.66666667%}.col-md-push-4{left: 33.33333333%}.col-md-push-3{left: 25%}.col-md-push-2{left: 16.66666667%}.col-md-push-1{left: 8.33333333%}.col-md-push-0{left: auto}.col-md-offset-12{margin-left: 100%}.col-md-offset-11{margin-left: 91.66666667%}.col-md-offset-10{margin-left: 83.33333333%}.col-md-offset-9{margin-left: 75%}.col-md-offset-8{margin-left: 66.66666667%}.col-md-offset-7{margin-left: 58.33333333%}.col-md-offset-6{margin-left: 50%}.col-md-offset-5{margin-left: 41.66666667%}.col-md-offset-4{margin-left: 33.33333333%}.col-md-offset-3{margin-left: 25%}.col-md-offset-2{margin-left: 16.66666667%}.col-md-offset-1{margin-left: 8.33333333%}.col-md-offset-0{margin-left: 0%}}@media (min-width: 1200px){.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{float: left}.col-lg-12{width: 100%}.col-lg-11{width: 91.66666667%}.col-lg-10{width: 83.33333333%}.col-lg-9{width: 75%}.col-lg-8{width: 66.66666667%}.col-lg-7{width: 58.33333333%}.col-lg-6{width: 50%}.col-lg-5{width: 41.66666667%}.col-lg-4{width: 33.33333333%}.col-lg-3{width: 25%}.col-lg-2{width: 16.66666667%}.col-lg-1{width: 8.33333333%}.col-lg-pull-12{right: 100%}.col-lg-pull-11{right: 91.66666667%}.col-lg-pull-10{right: 83.33333333%}.col-lg-pull-9{right: 75%}.col-lg-pull-8{right: 66.66666667%}.col-lg-pull-7{right: 58.33333333%}.col-lg-pull-6{right: 50%}.col-lg-pull-5{right: 41.66666667%}.col-lg-pull-4{right: 33.33333333%}.col-lg-pull-3{right: 25%}.col-lg-pull-2{right: 16.66666667%}.col-lg-pull-1{right: 8.33333333%}.col-lg-pull-0{right: auto}.col-lg-push-12{left: 100%}.col-lg-push-11{left: 91.66666667%}.col-lg-push-10{left: 83.33333333%}.col-lg-push-9{left: 75%}.col-lg-push-8{left: 66.66666667%}.col-lg-push-7{left: 58.33333333%}.col-lg-push-6{left: 50%}.col-lg-push-5{left: 41.66666667%}.col-lg-push-4{left: 33.33333333%}.col-lg-push-3{left: 25%}.col-lg-push-2{left: 16.66666667%}.col-lg-push-1{left: 8.33333333%}.col-lg-push-0{left: auto}.col-lg-offset-12{margin-left: 100%}.col-lg-offset-11{margin-left: 91.66666667%}.col-lg-offset-10{margin-left: 83.33333333%}.col-lg-offset-9{margin-left: 75%}.col-lg-offset-8{margin-left: 66.66666667%}.col-lg-offset-7{margin-left: 58.33333333%}.col-lg-offset-6{margin-left: 50%}.col-lg-offset-5{margin-left: 41.66666667%}.col-lg-offset-4{margin-left: 33.33333333%}.col-lg-offset-3{margin-left: 25%}.col-lg-offset-2{margin-left: 16.66666667%}.col-lg-offset-1{margin-left: 8.33333333%}.col-lg-offset-0{margin-left: 0%}}table{background-color: transparent}caption{padding-top: 8px;padding-bottom: 8px;color: #777;text-align: left}th{text-align: left}.table{width: 100%;max-width: 100%;margin-bottom: 20px}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding: 8px;line-height: 1.42857143;vertical-align: top;border-top: 1px solid #ddd}.table > thead > tr > th{vertical-align: bottom;border-bottom: 2px solid #ddd}.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top: 0}.table > tbody + tbody{border-top: 2px solid #ddd}.table .table{background-color: #fff}.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding: 5px}.table-bordered{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border: 1px solid #ddd}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width: 2px}.table-striped > tbody > tr:nth-of-type(odd){background-color: #f9f9f9}.table-hover > tbody > tr:hover{background-color: #f5f5f5}table col[class*="col-"]{position: static;float: none;display: table-column}table td[class*="col-"],table th[class*="col-"]{position: static;float: none;display: table-cell}.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color: #f5f5f5}.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th{background-color: #e8e8e8}.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color: #dff0d8}.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th{background-color: #d0e9c6}.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color: #d9edf7}.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th{background-color: #c4e3f3}.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color: #fcf8e3}.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th{background-color: #faf2cc}.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color: #f2dede}.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th{background-color: #ebcccc}.table-responsive{overflow-x: auto;min-height: 0.01%}@media screen and (max-width: 767px){.table-responsive{width: 100%;margin-bottom: 15px;overflow-y: hidden;-ms-overflow-style: -ms-autohiding-scrollbar;border: 1px solid #ddd}.table-responsive > .table{margin-bottom: 0}.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space: nowrap}.table-responsive > .table-bordered{border: 0}.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom: 0}}fieldset{padding: 0;margin: 0;border: 0;min-width: 0}legend{display: block;width: 100%;padding: 0;margin-bottom: 20px;font-size: 21px;line-height: inherit;color: #333;border: 0;border-bottom: 1px solid #e5e5e5}label{display: inline-block;max-width: 100%;margin-bottom: 5px;font-weight: bold}input[type="search"]{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box}input[type="radio"],input[type="checkbox"]{margin: 4px 0 0;margin-top: 1px \9;line-height: normal}input[type="file"]{display: block}input[type="range"]{display: block;width: 100%}select[multiple],select[size]{height: auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}output{display: block;padding-top: 7px;font-size: 14px;line-height: 1.42857143;color: #555}.form-control{display: block;width: 100%;height: 34px;padding: 6px 12px;font-size: 14px;line-height: 1.42857143;color: #555;background-color: #fff;background-image: none;border: 1px solid #ccc;border-radius: 4px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color: #66afe9;outline: 0;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,0.6);box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color: #999;opacity: 1}.form-control:-ms-input-placeholder{color: #999}.form-control::-webkit-input-placeholder{color: #999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color: #eee;opacity: 1}.form-control[disabled],fieldset[disabled] .form-control{cursor: not-allowed}textarea.form-control{height: auto}input[type="search"]{-webkit-appearance: none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height: 34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height: 30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height: 46px}}.form-group{margin-bottom: 15px}.radio,.checkbox{position: relative;display: block;margin-top: 10px;margin-bottom: 10px}.radio label,.checkbox label{min-height: 20px;padding-left: 20px;margin-bottom: 0;font-weight: normal;cursor: pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position: absolute;margin-left: -20px;margin-top: 4px \9}.radio + .radio,.checkbox + .checkbox{margin-top: -5px}.radio-inline,.checkbox-inline{position: relative;display: inline-block;padding-left: 20px;margin-bottom: 0;vertical-align: middle;font-weight: normal;cursor: pointer}.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top: 0;margin-left: 10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor: not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor: not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor: not-allowed}.form-control-static{padding-top: 7px;padding-bottom: 7px;margin-bottom: 0;min-height: 34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left: 0;padding-right: 0}.input-sm{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}select.input-sm{height: 30px;line-height: 30px}textarea.input-sm,select[multiple].input-sm{height: auto}.form-group-sm .form-control{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}select.form-group-sm .form-control{height: 30px;line-height: 30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height: auto}.form-group-sm .form-control-static{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;min-height: 32px}.input-lg{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.3333333;border-radius: 6px}select.input-lg{height: 46px;line-height: 46px}textarea.input-lg,select[multiple].input-lg{height: auto}.form-group-lg .form-control{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.3333333;border-radius: 6px}select.form-group-lg .form-control{height: 46px;line-height: 46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height: auto}.form-group-lg .form-control-static{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.3333333;min-height: 38px}.has-feedback{position: relative}.has-feedback .form-control{padding-right: 42.5px}.form-control-feedback{position: absolute;top: 0;right: 0;z-index: 2;display: block;width: 34px;height: 34px;line-height: 34px;text-align: center;pointer-events: none}.input-lg + .form-control-feedback{width: 46px;height: 46px;line-height: 46px}.input-sm + .form-control-feedback{width: 30px;height: 30px;line-height: 30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color: #3c763d}.has-success .form-control{border-color: #3c763d;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color: #2b542c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #67b168}.has-success .input-group-addon{color: #3c763d;border-color: #3c763d;background-color: #dff0d8}.has-success .form-control-feedback{color: #3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color: #8a6d3b}.has-warning .form-control{border-color: #8a6d3b;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color: #66512c;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c0a16b}.has-warning .input-group-addon{color: #8a6d3b;border-color: #8a6d3b;background-color: #fcf8e3}.has-warning .form-control-feedback{color: #8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color: #a94442}.has-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.has-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.has-error .form-control-feedback{color: #a94442}.has-feedback label ~ .form-control-feedback{top: 25px}.has-feedback label.sr-only ~ .form-control-feedback{top: 0}.help-block{display: block;margin-top: 5px;margin-bottom: 10px;color: #737373}@media (min-width: 768px){.form-inline .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle}.form-inline .form-control-static{display: inline-block}.form-inline .input-group{display: inline-table;vertical-align: middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width: auto}.form-inline .input-group > .form-control{width: 100%}.form-inline .control-label{margin-bottom: 0;vertical-align: middle}.form-inline .radio,.form-inline .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.form-inline .radio label,.form-inline .checkbox label{padding-left: 0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.form-inline .has-feedback .form-control-feedback{top: 0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top: 0;margin-bottom: 0;padding-top: 7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height: 27px}.form-horizontal .form-group{margin-left: -15px;margin-right: -15px}@media (min-width: 768px){.form-horizontal .control-label{text-align: right;margin-bottom: 0;padding-top: 7px}}.form-horizontal .has-feedback .form-control-feedback{right: 15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top: 14.333333px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top: 6px}}.btn{display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 6px 12px;font-size: 14px;line-height: 1.42857143;border-radius: 4px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline: thin dotted;outline: 5px auto -webkit-focus-ring-color;outline-offset: -2px}.btn:hover,.btn:focus,.btn.focus{color: #333;text-decoration: none}.btn:active,.btn.active{outline: 0;background-image: none;-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor: not-allowed;pointer-events: none;opacity: .65;filter: alpha(opacity=65);-webkit-box-shadow: none;box-shadow: none}.btn-default{color: #333;background-color: #fff;border-color: #ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{color: #333;background-color: #e6e6e6;border-color: #adadad}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{background-image: none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color: #fff;border-color: #ccc}.btn-default .badge{color: #fff;background-color: #333}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color: #fff;background-color: #333;border-color: #adadad}.btn-primary{color: #fff;background-color: #265680;border-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{color: #fff;background-color: #1a3c59;border-color: #e0e0e0}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{background-image: none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color: #265680;border-color: #fff}.btn-primary .badge{color: #265680;background-color: #fff}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color: #265680;background-color: #fff;border-color: #e0e0e0}.btn-success{color: #fff;background-color: #028302;border-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{color: #fff;background-color: #015101;border-color: #e0e0e0}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{background-image: none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color: #028302;border-color: #fff}.btn-success .badge{color: #028302;background-color: #fff}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color: #028302;background-color: #fff;border-color: #e0e0e0}.btn-info{color: #fff;background-color: #1c5f74;border-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{color: #fff;background-color: #123d4b;border-color: #e0e0e0}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{background-image: none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color: #1c5f74;border-color: #fff}.btn-info .badge{color: #1c5f74;background-color: #fff}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color: #1c5f74;background-color: #fff;border-color: #e0e0e0}.btn-warning{color: #fff;background-color: #a56100;border-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{color: #fff;background-color: #724300;border-color: #e0e0e0}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{background-image: none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color: #a56100;border-color: #fff}.btn-warning .badge{color: #a56100;background-color: #fff}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color: #a56100;background-color: #fff;border-color: #e0e0e0}.btn-danger{color: #fff;background-color: #a41915;border-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{color: #fff;background-color: #77120f;border-color: #e0e0e0}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{background-image: none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color: #a41915;border-color: #fff}.btn-danger .badge{color: #a41915;background-color: #fff}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color: #a41915;background-color: #fff;border-color: #e0e0e0}.btn-link{color: #12538b;font-weight: normal;border-radius: 0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color: transparent;-webkit-box-shadow: none;box-shadow: none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color: transparent}.btn-link:hover,.btn-link:focus{color: #092b47;text-decoration: underline;background-color: transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color: #777;text-decoration: none}.btn-lg,.btn-group-lg > .btn{padding: 10px 16px;font-size: 18px;line-height: 1.3333333;border-radius: 6px}.btn-sm,.btn-group-sm > .btn{padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}.btn-xs,.btn-group-xs > .btn{padding: 1px 5px;font-size: 12px;line-height: 1.5;border-radius: 3px}.btn-block{display: block;width: 100%}.btn-block + .btn-block{margin-top: 5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width: 100%}.fade{opacity: 0;-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear}.fade.in{opacity: 1}.collapse{display: none}.collapse.in{display: block}tr.collapse.in{display: table-row}tbody.collapse.in{display: table-row-group}.collapsing{position: relative;height: 0;overflow: hidden;-webkit-transition-property: height, visibility;transition-property: height, visibility;-webkit-transition-duration: .35s;transition-duration: .35s;-webkit-transition-timing-function: ease;transition-timing-function: ease}.caret{display: inline-block;width: 0;height: 0;margin-left: 2px;vertical-align: middle;border-top: 4px dashed;border-right: 4px solid transparent;border-left: 4px solid transparent}.dropup,.dropdown{position: relative}.dropdown-toggle:focus{outline: 0}.dropdown-menu{position: absolute;top: 100%;left: 0;z-index: 1000;display: none;float: left;min-width: 160px;padding: 5px 0;margin: 2px 0 0;list-style: none;font-size: 14px;text-align: left;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.15);border-radius: 4px;-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);box-shadow: 0 6px 12px rgba(0,0,0,0.175);background-clip: padding-box}.dropdown-menu.pull-right{right: 0;left: auto}.dropdown-menu .divider{height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5}.dropdown-menu > li > a{display: block;padding: 3px 20px;clear: both;font-weight: normal;line-height: 1.42857143;color: #333;white-space: nowrap}.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration: none;color: #262626;background-color: #f5f5f5}.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color: #fff;text-decoration: none;outline: 0;background-color: #265680}.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color: #777}.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration: none;background-color: transparent;background-image: none;filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor: not-allowed}.open > .dropdown-menu{display: block}.open > a{outline: 0}.dropdown-menu-right{left: auto;right: 0}.dropdown-menu-left{left: 0;right: auto}.dropdown-header{display: block;padding: 3px 20px;font-size: 12px;line-height: 1.42857143;color: #777;white-space: nowrap}.dropdown-backdrop{position: fixed;left: 0;right: 0;bottom: 0;top: 0;z-index: 990}.pull-right > .dropdown-menu{right: 0;left: auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top: 0;border-bottom: 4px solid;content: ""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top: auto;bottom: 100%;margin-bottom: 2px}@media (min-width: 768px){.navbar-right .dropdown-menu{left: auto;right: 0}.navbar-right .dropdown-menu-left{left: 0;right: auto}}.btn-group,.btn-group-vertical{position: relative;display: inline-block;vertical-align: middle}.btn-group > .btn,.btn-group-vertical > .btn{position: relative;float: left}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index: 2}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left: -1px}.btn-toolbar{margin-left: -5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float: left}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left: 5px}.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius: 0}.btn-group > .btn:first-child{margin-left: 0}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group > .btn-group{float: left}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-top-right-radius: 0}.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child{border-bottom-left-radius: 0;border-top-left-radius: 0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline: 0}.btn-group > .btn + .dropdown-toggle{padding-left: 8px;padding-right: 8px}.btn-group > .btn-lg + .dropdown-toggle{padding-left: 12px;padding-right: 12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);box-shadow: inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow: none;box-shadow: none}.btn .caret{margin-left: 0}.btn-lg .caret{border-width: 5px 5px 0;border-bottom-width: 0}.dropup .btn-lg .caret{border-width: 0 5px 5px}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display: block;float: none;width: 100%;max-width: 100%}.btn-group-vertical > .btn-group > .btn{float: none}.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(:first-child):not(:last-child){border-radius: 0}.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius: 4px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn:last-child:not(:first-child){border-bottom-left-radius: 4px;border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius: 0}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius: 0;border-bottom-left-radius: 0}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius: 0;border-top-left-radius: 0}.btn-group-justified{display: table;width: 100%;table-layout: fixed;border-collapse: separate}.btn-group-justified > .btn,.btn-group-justified > .btn-group{float: none;display: table-cell;width: 1%}.btn-group-justified > .btn-group .btn{width: 100%}.btn-group-justified > .btn-group .dropdown-menu{left: auto}[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"]{position: absolute;clip: rect(0, 0, 0, 0);pointer-events: none}.input-group{position: relative;display: table;border-collapse: separate}.input-group[class*="col-"]{float: none;padding-left: 0;padding-right: 0}.input-group .form-control{position: relative;z-index: 2;float: left;width: 100%;margin-bottom: 0}.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height: 46px;padding: 10px 16px;font-size: 18px;line-height: 1.3333333;border-radius: 6px}select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height: 46px;line-height: 46px}textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height: auto}.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height: 30px;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-radius: 3px}select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height: 30px;line-height: 30px}textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height: auto}.input-group-addon,.input-group-btn,.input-group .form-control{display: table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius: 0}.input-group-addon,.input-group-btn{width: 1%;white-space: nowrap;vertical-align: middle}.input-group-addon{padding: 6px 12px;font-size: 14px;font-weight: normal;line-height: 1;color: #555;text-align: center;background-color: #eee;border: 1px solid #ccc;border-radius: 4px}.input-group-addon.input-sm{padding: 5px 10px;font-size: 12px;border-radius: 3px}.input-group-addon.input-lg{padding: 10px 16px;font-size: 18px;border-radius: 6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top: 0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius: 0;border-top-right-radius: 0}.input-group-addon:first-child{border-right: 0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius: 0;border-top-left-radius: 0}.input-group-addon:last-child{border-left: 0}.input-group-btn{position: relative;font-size: 0;white-space: nowrap}.input-group-btn > .btn{position: relative}.input-group-btn > .btn + .btn{margin-left: -1px}.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index: 2}.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right: -1px}.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{margin-left: -1px}.nav{margin-bottom: 0;padding-left: 0;list-style: none}.nav > li{position: relative;display: block}.nav > li > a{position: relative;display: block;padding: 10px 15px}.nav > li > a:hover,.nav > li > a:focus{text-decoration: none;background-color: #eee}.nav > li.disabled > a{color: #777}.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color: #777;text-decoration: none;background-color: transparent;cursor: not-allowed}.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color: #eee;border-color: #12538b}.nav .nav-divider{height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5}.nav > li > a > img{max-width: none}.nav-tabs{border-bottom: 1px solid #ddd}.nav-tabs > li{float: left;margin-bottom: -1px}.nav-tabs > li > a{margin-right: 2px;line-height: 1.42857143;border: 1px solid transparent;border-radius: 4px 4px 0 0}.nav-tabs > li > a:hover{border-color: #eee #eee #ddd}.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color: #555;background-color: #fff;border: 1px solid #ddd;border-bottom-color: transparent;cursor: default}.nav-tabs.nav-justified{width: 100%;border-bottom: 0}.nav-tabs.nav-justified > li{float: none}.nav-tabs.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-tabs.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-tabs.nav-justified > li{display: table-cell;width: 1%}.nav-tabs.nav-justified > li > a{margin-bottom: 0}}.nav-tabs.nav-justified > li > a{margin-right: 0;border-radius: 4px}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs.nav-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 4px 4px 0 0}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color: #fff}}.nav-pills > li{float: left}.nav-pills > li > a{border-radius: 4px}.nav-pills > li + li{margin-left: 2px}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color: #fff;background-color: #265680}.nav-stacked > li{float: none}.nav-stacked > li + li{margin-top: 2px;margin-left: 0}.nav-justified{width: 100%}.nav-justified > li{float: none}.nav-justified > li > a{text-align: center;margin-bottom: 5px}.nav-justified > .dropdown .dropdown-menu{top: auto;left: auto}@media (min-width: 768px){.nav-justified > li{display: table-cell;width: 1%}.nav-justified > li > a{margin-bottom: 0}}.nav-tabs-justified{border-bottom: 0}.nav-tabs-justified > li > a{margin-right: 0;border-radius: 4px}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border: 1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified > li > a{border-bottom: 1px solid #ddd;border-radius: 4px 4px 0 0}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color: #fff}}.tab-content > .tab-pane{display: none}.tab-content > .active{display: block}.nav-tabs .dropdown-menu{margin-top: -1px;border-top-right-radius: 0;border-top-left-radius: 0}.navbar{position: relative;min-height: 50px;margin-bottom: 20px;border: 1px solid transparent}@media (min-width: 768px){.navbar{border-radius: 4px}}@media (min-width: 768px){.navbar-header{float: left}}.navbar-collapse{overflow-x: visible;padding-right: 15px;padding-left: 15px;border-top: 1px solid transparent;box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling: touch}.navbar-collapse.in{overflow-y: auto}@media (min-width: 768px){.navbar-collapse{width: auto;border-top: 0;box-shadow: none}.navbar-collapse.collapse{display: block !important;height: auto !important;padding-bottom: 0;overflow: visible !important}.navbar-collapse.in{overflow-y: visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left: 0;padding-right: 0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height: 200px}}.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: -15px;margin-left: -15px}@media (min-width: 768px){.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right: 0;margin-left: 0}}.navbar-static-top{z-index: 1000;border-width: 0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius: 0}}.navbar-fixed-top,.navbar-fixed-bottom{position: fixed;right: 0;left: 0;z-index: 1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius: 0}}.navbar-fixed-top{top: 0;border-width: 0 0 1px}.navbar-fixed-bottom{bottom: 0;margin-bottom: 0;border-width: 1px 0 0}.navbar-brand{float: left;padding: 15px 15px;font-size: 18px;line-height: 20px;height: 50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration: none}.navbar-brand > img{display: block}@media (min-width: 768px){.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand{margin-left: -15px}}.navbar-toggle{position: relative;float: right;margin-right: 15px;padding: 9px 10px;margin-top: 8px;margin-bottom: 8px;background-color: transparent;background-image: none;border: 1px solid transparent;border-radius: 4px}.navbar-toggle:focus{outline: 0}.navbar-toggle .icon-bar{display: block;width: 22px;height: 2px;border-radius: 1px}.navbar-toggle .icon-bar + .icon-bar{margin-top: 4px}@media (min-width: 768px){.navbar-toggle{display: none}}.navbar-nav{margin: 7.5px -15px}.navbar-nav > li > a{padding-top: 10px;padding-bottom: 10px;line-height: 20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position: static;float: none;width: auto;margin-top: 0;background-color: transparent;border: 0;box-shadow: none}.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header{padding: 5px 15px 5px 25px}.navbar-nav .open .dropdown-menu > li > a{line-height: 20px}.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus{background-image: none}}@media (min-width: 768px){.navbar-nav{float: left;margin: 0}.navbar-nav > li{float: left}.navbar-nav > li > a{padding-top: 15px;padding-bottom: 15px}}.navbar-form{margin-left: -15px;margin-right: -15px;padding: 10px 15px;border-top: 1px solid transparent;border-bottom: 1px solid transparent;-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1);margin-top: 8px;margin-bottom: 8px}@media (min-width: 768px){.navbar-form .form-group{display: inline-block;margin-bottom: 0;vertical-align: middle}.navbar-form .form-control{display: inline-block;width: auto;vertical-align: middle}.navbar-form .form-control-static{display: inline-block}.navbar-form .input-group{display: inline-table;vertical-align: middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width: auto}.navbar-form .input-group > .form-control{width: 100%}.navbar-form .control-label{margin-bottom: 0;vertical-align: middle}.navbar-form .radio,.navbar-form .checkbox{display: inline-block;margin-top: 0;margin-bottom: 0;vertical-align: middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left: 0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position: relative;margin-left: 0}.navbar-form .has-feedback .form-control-feedback{top: 0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom: 5px}.navbar-form .form-group:last-child{margin-bottom: 0}}@media (min-width: 768px){.navbar-form{width: auto;border: 0;margin-left: 0;margin-right: 0;padding-top: 0;padding-bottom: 0;-webkit-box-shadow: none;box-shadow: none}}.navbar-nav > li > .dropdown-menu{margin-top: 0;border-top-right-radius: 0;border-top-left-radius: 0}.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu{margin-bottom: 0;border-top-right-radius: 4px;border-top-left-radius: 4px;border-bottom-right-radius: 0;border-bottom-left-radius: 0}.navbar-btn{margin-top: 8px;margin-bottom: 8px}.navbar-btn.btn-sm{margin-top: 10px;margin-bottom: 10px}.navbar-btn.btn-xs{margin-top: 14px;margin-bottom: 14px}.navbar-text{margin-top: 15px;margin-bottom: 15px}@media (min-width: 768px){.navbar-text{float: left;margin-left: 15px;margin-right: 15px}}@media (min-width: 768px){.navbar-left{float: left !important}.navbar-right{float: right !important;margin-right: -15px}.navbar-right ~ .navbar-right{margin-right: 0}}.navbar-default{background-color: #132531;border-color: #0a1319}.navbar-default .navbar-brand{color: #fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color: #068139;background-color: transparent}.navbar-default .navbar-text{color: #fff}.navbar-default .navbar-nav > li > a{color: #fff}.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus{color: #fff;background-color: #068139}.navbar-default .navbar-toggle{border-color: #ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color: #ddd}.navbar-default .navbar-toggle .icon-bar{background-color: #888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color: #0a1319}.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus{background-color: #fff;color: #132531}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu > li > a{color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus{color: #132531;background-color: #fff}.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #fff;background-color: #068139}}.navbar-default .navbar-link{color: #fff}.navbar-default .navbar-link:hover{color: #132531}.navbar-default .btn-link{color: #fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color: #132531}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color: #fff}.navbar-inverse{background-color: #222;border-color: #080808}.navbar-inverse .navbar-brand{color: #9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-text{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus{color: #444;background-color: transparent}.navbar-inverse .navbar-toggle{border-color: #333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color: #333}.navbar-inverse .navbar-toggle .icon-bar{background-color: #fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color: #101010}.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus{background-color: #080808;color: #fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header{border-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a{color: #9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus{color: #fff;background-color: transparent}.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus{color: #fff;background-color: #080808}.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus{color: #444;background-color: transparent}}.navbar-inverse .navbar-link{color: #9d9d9d}.navbar-inverse .navbar-link:hover{color: #fff}.navbar-inverse .btn-link{color: #9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color: #fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color: #444}.breadcrumb{padding: 8px 15px;margin-bottom: 20px;list-style: none;background-color: #f5f5f5;border-radius: 4px}.breadcrumb > li{display: inline-block}.breadcrumb > li + li:before{content: "/\00a0";padding: 0 5px;color: #ccc}.breadcrumb > .active{color: #777}.pagination{display: inline-block;padding-left: 0;margin: 20px 0;border-radius: 4px}.pagination > li{display: inline}.pagination > li > a,.pagination > li > span{position: relative;float: left;padding: 6px 12px;line-height: 1.42857143;text-decoration: none;color: #12538b;background-color: #fff;border: 1px solid #ddd;margin-left: -1px}.pagination > li:first-child > a,.pagination > li:first-child > span{margin-left: 0;border-bottom-left-radius: 4px;border-top-left-radius: 4px}.pagination > li:last-child > a,.pagination > li:last-child > span{border-bottom-right-radius: 4px;border-top-right-radius: 4px}.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus{color: #092b47;background-color: #eee;border-color: #ddd}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{z-index: 2;color: #fff;background-color: #265680;border-color: #265680;cursor: default}.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus{color: #777;background-color: #fff;border-color: #ddd;cursor: not-allowed}.pagination-lg > li > a,.pagination-lg > li > span{padding: 10px 16px;font-size: 18px}.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span{border-bottom-left-radius: 6px;border-top-left-radius: 6px}.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span{border-bottom-right-radius: 6px;border-top-right-radius: 6px}.pagination-sm > li > a,.pagination-sm > li > span{padding: 5px 10px;font-size: 12px}.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span{border-bottom-left-radius: 3px;border-top-left-radius: 3px}.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span{border-bottom-right-radius: 3px;border-top-right-radius: 3px}.pager{padding-left: 0;margin: 20px 0;list-style: none;text-align: center}.pager li{display: inline}.pager li > a,.pager li > span{display: inline-block;padding: 5px 14px;background-color: #fff;border: 1px solid #ddd;border-radius: 15px}.pager li > a:hover,.pager li > a:focus{text-decoration: none;background-color: #eee}.pager .next > a,.pager .next > span{float: right}.pager .previous > a,.pager .previous > span{float: left}.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span{color: #777;background-color: #fff;cursor: not-allowed}.label{display: inline;padding: .2em .6em .3em;font-size: 75%;font-weight: bold;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: .25em}a.label:hover,a.label:focus{color: #fff;text-decoration: none;cursor: pointer}.label:empty{display: none}.btn .label{position: relative;top: -1px}.label-default{background-color: #777}.label-default[href]:hover,.label-default[href]:focus{background-color: #5e5e5e}.label-primary{background-color: #265680}.label-primary[href]:hover,.label-primary[href]:focus{background-color: #1a3c59}.label-success{background-color: #028302}.label-success[href]:hover,.label-success[href]:focus{background-color: #015101}.label-info{background-color: #1c5f74}.label-info[href]:hover,.label-info[href]:focus{background-color: #123d4b}.label-warning{background-color: #a56100}.label-warning[href]:hover,.label-warning[href]:focus{background-color: #724300}.label-danger{background-color: #a41915}.label-danger[href]:hover,.label-danger[href]:focus{background-color: #77120f}.badge{display: inline-block;min-width: 10px;padding: 3px 7px;font-size: 12px;font-weight: bold;color: #fff;line-height: 1;vertical-align: baseline;white-space: nowrap;text-align: center;background-color: #777;border-radius: 10px}.badge:empty{display: none}.btn .badge{position: relative;top: -1px}.btn-xs .badge,.btn-group-xs > .btn .badge{top: 0;padding: 1px 5px}a.badge:hover,a.badge:focus{color: #fff;text-decoration: none;cursor: pointer}.list-group-item.active > .badge,.nav-pills > .active > a > .badge{color: #12538b;background-color: #fff}.list-group-item > .badge{float: right}.list-group-item > .badge + .badge{margin-right: 5px}.nav-pills > li > a > .badge{margin-left: 3px}.jumbotron{padding: 30px 15px;margin-bottom: 30px;color: inherit;background-color: #eee}.jumbotron h1,.jumbotron .h1{color: inherit}.jumbotron p{margin-bottom: 15px;font-size: 21px;font-weight: 200}.jumbotron > hr{border-top-color: #d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius: 6px}.jumbotron .container{max-width: 100%}@media screen and (min-width: 768px){.jumbotron{padding: 48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left: 60px;padding-right: 60px}.jumbotron h1,.jumbotron .h1{font-size: 63px}}.thumbnail{display: block;padding: 4px;margin-bottom: 20px;line-height: 1.42857143;background-color: #fff;border: 1px solid #ddd;border-radius: 4px;-webkit-transition: border .2s ease-in-out;-o-transition: border .2s ease-in-out;transition: border .2s ease-in-out}.thumbnail > img,.thumbnail a > img{margin-left: auto;margin-right: auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color: #12538b}.thumbnail .caption{padding: 9px;color: #333}.alert{padding: 15px;margin-bottom: 20px;border: 1px solid transparent;border-radius: 4px}.alert h4{margin-top: 0;color: inherit}.alert .alert-link{font-weight: bold}.alert > p,.alert > ul{margin-bottom: 0}.alert > p + p{margin-top: 5px}.alert-dismissable,.alert-dismissible{padding-right: 35px}.alert-dismissable .close,.alert-dismissible .close{position: relative;top: -2px;right: -21px;color: inherit}.alert-success{background-color: #dff0d8;border-color: #d6e9c6;color: #3c763d}.alert-success hr{border-top-color: #c9e2b3}.alert-success .alert-link{color: #2b542c}.alert-info{background-color: #d9edf7;border-color: #bce8f1;color: #31708f}.alert-info hr{border-top-color: #a6e1ec}.alert-info .alert-link{color: #245269}.alert-warning{background-color: #fcf8e3;border-color: #faebcc;color: #8a6d3b}.alert-warning hr{border-top-color: #f7e1b5}.alert-warning .alert-link{color: #66512c}.alert-danger{background-color: #f2dede;border-color: #ebccd1;color: #a94442}.alert-danger hr{border-top-color: #e4b9c0}.alert-danger .alert-link{color: #843534}@-webkit-keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}@keyframes progress-bar-stripes{from{background-position: 40px 0}to{background-position: 0 0}}.progress{overflow: hidden;height: 20px;margin-bottom: 20px;background-color: #f5f5f5;border-radius: 4px;-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);box-shadow: inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float: left;width: 0%;height: 100%;font-size: 12px;line-height: 20px;color: #fff;text-align: center;background-color: #265680;-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition: width .6s ease;-o-transition: width .6s ease;transition: width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image: -webkit-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-image: -o-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-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: 40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation: progress-bar-stripes 2s linear infinite;-o-animation: progress-bar-stripes 2s linear infinite;animation: progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color: #028302}.progress-striped .progress-bar-success{background-image: -webkit-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-image: -o-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-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)}.progress-bar-info{background-color: #1c5f74}.progress-striped .progress-bar-info{background-image: -webkit-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-image: -o-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-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)}.progress-bar-warning{background-color: #a56100}.progress-striped .progress-bar-warning{background-image: -webkit-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-image: -o-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-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)}.progress-bar-danger{background-color: #a41915}.progress-striped .progress-bar-danger{background-image: -webkit-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-image: -o-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-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)}.media{margin-top: 15px}.media:first-child{margin-top: 0}.media,.media-body{zoom: 1;overflow: hidden}.media-body{width: 10000px}.media-object{display: block}.media-right,.media > .pull-right{padding-left: 10px}.media-left,.media > .pull-left{padding-right: 10px}.media-left,.media-right,.media-body{display: table-cell;vertical-align: top}.media-middle{vertical-align: middle}.media-bottom{vertical-align: bottom}.media-heading{margin-top: 0;margin-bottom: 5px}.media-list{padding-left: 0;list-style: none}.list-group,.tt-dropdown-menu{margin-bottom: 20px;padding-left: 0}.list-group-item,.tt-suggestion{position: relative;display: block;padding: 10px 15px;margin-bottom: -1px;background-color: #fff;border: 1px solid #ddd}.list-group-item:first-child{border-top-right-radius: 4px;border-top-left-radius: 4px}.list-group-item:last-child{margin-bottom: 0;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px}a.list-group-item{color: #555}a.list-group-item .list-group-item-heading{color: #333}a.list-group-item:hover,a.list-group-item:focus{text-decoration: none;color: #555;background-color: #f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color: #eee;color: #777;cursor: not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color: inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color: #777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index: 2;color: #fff;background-color: #265680;border-color: #265680}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small{color: inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color: #93bcdf}.list-group-item-success{color: #3c763d;background-color: #dff0d8}a.list-group-item-success{color: #3c763d}a.list-group-item-success .list-group-item-heading{color: inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color: #3c763d;background-color: #d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color: #fff;background-color: #3c763d;border-color: #3c763d}.list-group-item-info{color: #31708f;background-color: #d9edf7}a.list-group-item-info{color: #31708f}a.list-group-item-info .list-group-item-heading{color: inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color: #31708f;background-color: #c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color: #fff;background-color: #31708f;border-color: #31708f}.list-group-item-warning{color: #8a6d3b;background-color: #fcf8e3}a.list-group-item-warning{color: #8a6d3b}a.list-group-item-warning .list-group-item-heading{color: inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color: #8a6d3b;background-color: #faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color: #fff;background-color: #8a6d3b;border-color: #8a6d3b}.list-group-item-danger{color: #a94442;background-color: #f2dede}a.list-group-item-danger{color: #a94442}a.list-group-item-danger .list-group-item-heading{color: inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color: #a94442;background-color: #ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color: #fff;background-color: #a94442;border-color: #a94442}.list-group-item-heading{margin-top: 0;margin-bottom: 5px}.list-group-item-text{margin-bottom: 0;line-height: 1.3}.panel{margin-bottom: 20px;background-color: #fff;border: 1px solid transparent;border-radius: 4px;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);box-shadow: 0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding: 15px}.panel-heading{padding: 10px 15px;border-bottom: 1px solid transparent;border-top-right-radius: 3px;border-top-left-radius: 3px}.panel-heading > .dropdown .dropdown-toggle{color: inherit}.panel-title{margin-top: 0;margin-bottom: 0;font-size: 16px;color: inherit}.panel-title > a,.panel-title > small,.panel-title > .small,.panel-title > small > a,.panel-title > .small > a{color: inherit}.panel-footer{padding: 10px 15px;background-color: #f5f5f5;border-top: 1px solid #ddd;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel > .list-group,.panel > .panel-collapse > .list-group{margin-bottom: 0}.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item{border-width: 1px 0;border-radius: 0}.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child{border-top: 0;border-top-right-radius: 3px;border-top-left-radius: 3px}.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child{border-bottom: 0;border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel-heading + .list-group .list-group-item:first-child{border-top-width: 0}.list-group + .panel-footer{border-top-width: 0}.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table{margin-bottom: 0}.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption{padding-left: 15px;padding-right: 15px}.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child{border-top-right-radius: 3px;border-top-left-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child{border-top-left-radius: 3px;border-top-right-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child{border-top-left-radius: 3px}.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child{border-top-right-radius: 3px}.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child{border-bottom-right-radius: 3px;border-bottom-left-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child{border-bottom-left-radius: 3px;border-bottom-right-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child{border-bottom-left-radius: 3px}.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child{border-bottom-right-radius: 3px}.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body{border-top: 1px solid #ddd}.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td{border-top: 0}.panel > .table-bordered,.panel > .table-responsive > .table-bordered{border: 0}.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left: 0}.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right: 0}.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th{border-bottom: 0}.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th{border-bottom: 0}.panel > .table-responsive{border: 0;margin-bottom: 0}.panel-group{margin-bottom: 20px}.panel-group .panel{margin-bottom: 0;border-radius: 4px}.panel-group .panel + .panel{margin-top: 5px}.panel-group .panel-heading{border-bottom: 0}.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group{border-top: 1px solid #ddd}.panel-group .panel-footer{border-top: 0}.panel-group .panel-footer + .panel-collapse .panel-body{border-bottom: 1px solid #ddd}.panel-default{border-color: #ddd}.panel-default > .panel-heading{color: #333;background-color: #f5f5f5;border-color: #ddd}.panel-default > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ddd}.panel-default > .panel-heading .badge{color: #f5f5f5;background-color: #333}.panel-default > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ddd}.panel-primary{border-color: #265680}.panel-primary > .panel-heading{color: #fff;background-color: #265680;border-color: #265680}.panel-primary > .panel-heading + .panel-collapse > .panel-body{border-top-color: #265680}.panel-primary > .panel-heading .badge{color: #265680;background-color: #fff}.panel-primary > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #265680}.panel-success{border-color: #d6e9c6}.panel-success > .panel-heading{color: #3c763d;background-color: #dff0d8;border-color: #d6e9c6}.panel-success > .panel-heading + .panel-collapse > .panel-body{border-top-color: #d6e9c6}.panel-success > .panel-heading .badge{color: #dff0d8;background-color: #3c763d}.panel-success > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #d6e9c6}.panel-info{border-color: #bce8f1}.panel-info > .panel-heading{color: #31708f;background-color: #d9edf7;border-color: #bce8f1}.panel-info > .panel-heading + .panel-collapse > .panel-body{border-top-color: #bce8f1}.panel-info > .panel-heading .badge{color: #d9edf7;background-color: #31708f}.panel-info > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #bce8f1}.panel-warning{border-color: #faebcc}.panel-warning > .panel-heading{color: #8a6d3b;background-color: #fcf8e3;border-color: #faebcc}.panel-warning > .panel-heading + .panel-collapse > .panel-body{border-top-color: #faebcc}.panel-warning > .panel-heading .badge{color: #fcf8e3;background-color: #8a6d3b}.panel-warning > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #faebcc}.panel-danger{border-color: #ebccd1}.panel-danger > .panel-heading{color: #a94442;background-color: #f2dede;border-color: #ebccd1}.panel-danger > .panel-heading + .panel-collapse > .panel-body{border-top-color: #ebccd1}.panel-danger > .panel-heading .badge{color: #f2dede;background-color: #a94442}.panel-danger > .panel-footer + .panel-collapse > .panel-body{border-bottom-color: #ebccd1}.embed-responsive{position: relative;display: block;height: 0;padding: 0;overflow: hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position: absolute;top: 0;left: 0;bottom: 0;height: 100%;width: 100%;border: 0}.embed-responsive-16by9{padding-bottom: 56.25%}.embed-responsive-4by3{padding-bottom: 75%}.well{min-height: 20px;padding: 19px;margin-bottom: 20px;background-color: #f5f5f5;border: 1px solid #e3e3e3;border-radius: 4px;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);box-shadow: inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color: #ddd;border-color: rgba(0,0,0,0.15)}.well-lg{padding: 24px;border-radius: 6px}.well-sm{padding: 9px;border-radius: 3px}.close,.group .group-close{float: right;font-size: 21px;font-weight: bold;line-height: 1;color: #000;text-shadow: 0 1px 0 #fff;opacity: .2;filter: alpha(opacity=20)}.close:hover,.close:focus{color: #000;text-decoration: none;cursor: pointer;opacity: .5;filter: alpha(opacity=50)}button.close{padding: 0;cursor: pointer;background: transparent;border: 0;-webkit-appearance: none}.modal-open{overflow: hidden}.modal{display: none;overflow: hidden;position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1050;-webkit-overflow-scrolling: touch;outline: 0}.modal.fade .modal-dialog{-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-moz-transition: -moz-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0)}.modal-open .modal{overflow-x: hidden;overflow-y: auto}.modal-dialog{position: relative;width: auto;margin: 10px}.modal-content{position: relative;background-color: #fff;border: 1px solid #999;border: 1px solid rgba(0,0,0,0.2);border-radius: 6px;-webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);box-shadow: 0 3px 9px rgba(0,0,0,0.5);background-clip: padding-box;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;filter: alpha(opacity=0)}.modal-backdrop.in{opacity: .5;filter: alpha(opacity=50)}.modal-header{padding: 15px;border-bottom: 1px solid #e5e5e5;min-height: 16.42857143px}.modal-header .close{margin-top: -2px}.modal-title{margin: 0;line-height: 1.42857143}.modal-body{position: relative;padding: 15px}.modal-footer{padding: 15px;text-align: right;border-top: 1px solid #e5e5e5}.modal-footer .btn + .btn{margin-left: 5px;margin-bottom: 0}.modal-footer .btn-group .btn + .btn{margin-left: -1px}.modal-footer .btn-block + .btn-block{margin-left: 0}.modal-scrollbar-measure{position: absolute;top: -9999px;width: 50px;height: 50px;overflow: scroll}@media (min-width: 768px){.modal-dialog{width: 600px;margin: 30px auto}.modal-content{-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);box-shadow: 0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width: 300px}}@media (min-width: 992px){.modal-lg{width: 900px}}.tooltip{position: absolute;z-index: 1070;display: block;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 12px;font-weight: normal;line-height: 1.4;opacity: 0;filter: alpha(opacity=0)}.tooltip.in{opacity: .9;filter: alpha(opacity=90)}.tooltip.top{margin-top: -3px;padding: 5px 0}.tooltip.right{margin-left: 3px;padding: 0 5px}.tooltip.bottom{margin-top: 3px;padding: 5px 0}.tooltip.left{margin-left: -3px;padding: 0 5px}.tooltip-inner{max-width: 200px;padding: 3px 8px;color: #fff;text-align: center;text-decoration: none;background-color: #000;border-radius: 4px}.tooltip-arrow{position: absolute;width: 0;height: 0;border-color: transparent;border-style: solid}.tooltip.top .tooltip-arrow{bottom: 0;left: 50%;margin-left: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-left .tooltip-arrow{bottom: 0;right: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.top-right .tooltip-arrow{bottom: 0;left: 5px;margin-bottom: -5px;border-width: 5px 5px 0;border-top-color: #000}.tooltip.right .tooltip-arrow{top: 50%;left: 0;margin-top: -5px;border-width: 5px 5px 5px 0;border-right-color: #000}.tooltip.left .tooltip-arrow{top: 50%;right: 0;margin-top: -5px;border-width: 5px 0 5px 5px;border-left-color: #000}.tooltip.bottom .tooltip-arrow{top: 0;left: 50%;margin-left: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-left .tooltip-arrow{top: 0;right: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.tooltip.bottom-right .tooltip-arrow{top: 0;left: 5px;margin-top: -5px;border-width: 0 5px 5px;border-bottom-color: #000}.popover{position: absolute;top: 0;left: 0;z-index: 1060;display: none;max-width: 276px;padding: 1px;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 14px;font-weight: normal;line-height: 1.42857143;text-align: left;background-color: #fff;background-clip: padding-box;border: 1px solid #ccc;border: 1px solid rgba(0,0,0,0.2);border-radius: 6px;-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2);box-shadow: 0 5px 10px rgba(0,0,0,0.2);white-space: normal}.popover.top{margin-top: -10px}.popover.right{margin-left: 10px}.popover.bottom{margin-top: 10px}.popover.left{margin-left: -10px}.popover-title{margin: 0;padding: 8px 14px;font-size: 14px;background-color: #f7f7f7;border-bottom: 1px solid #ebebeb;border-radius: 5px 5px 0 0}.popover-content{padding: 9px 14px}.popover > .arrow,.popover > .arrow:after{position: absolute;display: block;width: 0;height: 0;border-color: transparent;border-style: solid}.popover > .arrow{border-width: 11px}.popover > .arrow:after{border-width: 10px;content: ""}.popover.top > .arrow{left: 50%;margin-left: -11px;border-bottom-width: 0;border-top-color: #999;border-top-color: rgba(0,0,0,0.25);bottom: -11px}.popover.top > .arrow:after{content: " ";bottom: 1px;margin-left: -10px;border-bottom-width: 0;border-top-color: #fff}.popover.right > .arrow{top: 50%;left: -11px;margin-top: -11px;border-left-width: 0;border-right-color: #999;border-right-color: rgba(0,0,0,0.25)}.popover.right > .arrow:after{content: " ";left: 1px;bottom: -10px;border-left-width: 0;border-right-color: #fff}.popover.bottom > .arrow{left: 50%;margin-left: -11px;border-top-width: 0;border-bottom-color: #999;border-bottom-color: rgba(0,0,0,0.25);top: -11px}.popover.bottom > .arrow:after{content: " ";top: 1px;margin-left: -10px;border-top-width: 0;border-bottom-color: #fff}.popover.left > .arrow{top: 50%;right: -11px;margin-top: -11px;border-right-width: 0;border-left-color: #999;border-left-color: rgba(0,0,0,0.25)}.popover.left > .arrow:after{content: " ";right: 1px;border-right-width: 0;border-left-color: #fff;bottom: -10px}.carousel{position: relative}.carousel-inner{position: relative;overflow: hidden;width: 100%}.carousel-inner > .item{display: none;position: relative;-webkit-transition: .6s ease-in-out left;-o-transition: .6s ease-in-out left;transition: .6s ease-in-out left}.carousel-inner > .item > img,.carousel-inner > .item > a > img{line-height: 1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner > .item{-webkit-transition: -webkit-transform 0.6s ease-in-out;-moz-transition: -moz-transform 0.6s ease-in-out;-o-transition: -o-transform 0.6s ease-in-out;transition: transform 0.6s ease-in-out;-webkit-backface-visibility: hidden;-moz-backface-visibility: hidden;backface-visibility: hidden;-webkit-perspective: 1000;-moz-perspective: 1000;perspective: 1000}.carousel-inner > .item.next,.carousel-inner > .item.active.right{-webkit-transform: translate3d(100%, 0, 0);transform: translate3d(100%, 0, 0);left: 0}.carousel-inner > .item.prev,.carousel-inner > .item.active.left{-webkit-transform: translate3d(-100%, 0, 0);transform: translate3d(-100%, 0, 0);left: 0}.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active{-webkit-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);left: 0}}.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev{display: block}.carousel-inner > .active{left: 0}.carousel-inner > .next,.carousel-inner > .prev{position: absolute;top: 0;width: 100%}.carousel-inner > .next{left: 100%}.carousel-inner > .prev{left: -100%}.carousel-inner > .next.left,.carousel-inner > .prev.right{left: 0}.carousel-inner > .active.left{left: -100%}.carousel-inner > .active.right{left: 100%}.carousel-control{position: absolute;top: 0;left: 0;bottom: 0;width: 15%;opacity: .5;filter: alpha(opacity=50);font-size: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left: auto;right: 0;background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: -o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image: linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline: 0;color: #fff;text-decoration: none;opacity: .9;filter: alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position: absolute;top: 50%;z-index: 5;display: inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left: 50%;margin-left: -10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right: 50%;margin-right: -10px}.carousel-control .icon-prev,.carousel-control .icon-next{width: 20px;height: 20px;margin-top: -10px;line-height: 1;font-family: serif}.carousel-control .icon-prev:before{content: '\2039'}.carousel-control .icon-next:before{content: '\203a'}.carousel-indicators{position: absolute;bottom: 10px;left: 50%;z-index: 15;width: 60%;margin-left: -30%;padding-left: 0;list-style: none;text-align: center}.carousel-indicators li{display: inline-block;width: 10px;height: 10px;margin: 1px;text-indent: -999px;border: 1px solid #fff;border-radius: 10px;cursor: pointer;background-color: #000 \9;background-color: rgba(0,0,0,0)}.carousel-indicators .active{margin: 0;width: 12px;height: 12px;background-color: #fff}.carousel-caption{position: absolute;left: 15%;right: 15%;bottom: 20px;z-index: 10;padding-top: 20px;padding-bottom: 20px;color: #fff;text-align: center;text-shadow: 0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow: none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width: 30px;height: 30px;margin-top: -15px;font-size: 30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left: -15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right: -15px}.carousel-caption{left: 20%;right: 20%;padding-bottom: 30px}.carousel-indicators{bottom: 20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content: " ";display: table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear: both}.center-block{display: block;margin-left: auto;margin-right: auto}.pull-right{float: right !important}.pull-left{float: left !important}.hide{display: none !important}.show{display: block !important}.invisible{visibility: hidden}.text-hide{font: 0/0 a;color: transparent;text-shadow: none;background-color: transparent;border: 0}.hidden{display: none !important}.affix{position: fixed}@-ms-viewport{width: device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display: none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display: none !important}@media (max-width: 767px){.visible-xs{display: block !important}table.visible-xs{display: table}tr.visible-xs{display: table-row !important}th.visible-xs,td.visible-xs{display: table-cell !important}}@media (max-width: 767px){.visible-xs-block{display: block !important}}@media (max-width: 767px){.visible-xs-inline{display: inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display: inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display: block !important}table.visible-sm{display: table}tr.visible-sm{display: table-row !important}th.visible-sm,td.visible-sm{display: table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display: block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display: inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display: inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display: block !important}table.visible-md{display: table}tr.visible-md{display: table-row !important}th.visible-md,td.visible-md{display: table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display: block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display: inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display: inline-block !important}}@media (min-width: 1200px){.visible-lg{display: block !important}table.visible-lg{display: table}tr.visible-lg{display: table-row !important}th.visible-lg,td.visible-lg{display: table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display: block !important}}@media (min-width: 1200px){.visible-lg-inline{display: inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display: inline-block !important}}@media (max-width: 767px){.hidden-xs{display: none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display: none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display: none !important}}@media (min-width: 1200px){.hidden-lg{display: none !important}}.visible-print{display: none !important}@media print{.visible-print{display: block !important}table.visible-print{display: table}tr.visible-print{display: table-row !important}th.visible-print,td.visible-print{display: table-cell !important}}.visible-print-block{display: none !important}@media print{.visible-print-block{display: block !important}}.visible-print-inline{display: none !important}@media print{.visible-print-inline{display: inline !important}}.visible-print-inline-block{display: none !important}@media print{.visible-print-inline-block{display: inline-block !important}}@media print{.hidden-print{display: none !important}}.sr-only{clip: rect(1px, 1px, 1px, 1px);position: absolute;width: auto;height: auto;margin: 0;padding: 0;overflow: hidden;border: 0}.sr-only:focus{background-color: #fff;border-radius: 4px;clip: auto;color: #132531;display: block;font-size: 14px;height: 50px;line-height: 20px;padding: 15px 15px;position: absolute;left: 5px;top: 5px;text-decoration: none;text-transform: none;width: auto;z-index: 100000}.navbar-brand{font-size: 20px}.alert.alert-info a{text-decoration: underline}.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover{color: #000}[data-toggle~="dropdown"]{cursor: pointer}.fa{cursor: default}@media (min-width: 768px){.form-control{max-width: 400px}}.has-error{margin-bottom: 0}.sms-error{margin-bottom: 0}.sms-error .help-block,.sms-error .control-label,.sms-error .radio,.sms-error .checkbox,.sms-error .radio-inline,.sms-error .checkbox-inline,.sms-error.radio label,.sms-error.checkbox label,.sms-error.radio-inline label,.sms-error.checkbox-inline label{color: #a94442}.sms-error .form-control{border-color: #a94442;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);box-shadow: inset 0 1px 1px rgba(0,0,0,0.075)}.sms-error .form-control:focus{border-color: #843534;-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483;box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #ce8483}.sms-error .input-group-addon{color: #a94442;border-color: #a94442;background-color: #f2dede}.sms-error .form-control-feedback{color: #a94442}.help-block.with-errors{padding-top: 6px;padding-bottom: 6px}.help-block.with-errors:empty{padding: 0}.help-block.with-errors,.list-unstyled{margin: 0}.highlight,mark{background: #ff6;padding: .1em .2em}.icon-bar{background-color: #888}img{max-width: 100%}label.list-group-item{margin-top: 0;padding-left: 35px;font-weight: normal;border-radius: 0}.list-group-item.title{font-weight: bold}#modal{background-color: rgba(0,0,0,0.2)}#modal .modal-body > h2:first-child{display: none}.popover{width: 250px}@media (min-width: 768px){p.lead{font-size: 23px;font-weight: normal}}@media (max-width: 767px){p.lead{font-size: 20px}}.recordcover{max-height: 300px}.sub-breadcrumb{padding: 5px 10px;white-space: nowrap}.sub-breadcrumb li{display: inline-block}.sub-breadcrumb li + li:before{padding-left: 5px;padding-right: 5px;color: #ccc;content: "/\00a0"}.tab-content{padding: 4px}@media (max-width: 991px){header .container.navbar{margin-bottom: 0}#searchForm{margin-top: 0}}@media (max-width: 767px){#searchForm{padding-top: 0}}.group{position: relative;background: #eee;border-radius: 4px;border: 1px solid #c8c8c8;margin-top: 0;margin-bottom: .5em !important}.group .add_search_link{display: inline-block;margin-top: 4px}.group .group-close{position: absolute;top: .3em;right: .5em;opacity: .4;z-index: 2}.group .search{margin-bottom: 2px}.group .search .close{opacity: .8}@media (min-width: 768px){.group{padding: 10px 10px 10px 25px}.group [class^=col-]{padding-left: 0}}@media (max-width: 767px){.group .search .middle{float: left;width: 90%}.group .group-close{top: .5em;right: 1em;opacity: .6}}@media (max-width: 991px){.group .form-control{max-width: none}}#groupPlaceHolder{display: block;padding: 6px}.template-dir-eds.template-name-advanced legend{margin-bottom: 0}.template-dir-eds.template-name-advanced .no-js .group:nth-child(n+3){display: none}.template-dir-eds.template-name-advanced .search .close a{margin-left: -2em}.alphabrowse{border-collapse: separate}.alphabrowse .lcc{width: 20%}.alphabrowse .titles{width: 10%;text-align: center}.alphabrowse tr.browse-match td{border-top: .2em solid #265680;border-bottom: .2em solid #265680}.alphabrowse tr.browse-match td:first-child{border-left: .2em solid #265680}.alphabrowse tr.browse-match td:last-child{border-right: .2em solid #265680}.twitter-typeahead{vertical-align: top;background-color: #fff;border-radius: 4px}@media (max-width: 767px){.twitter-typeahead{width: 100%}}.twitter-typeahead .tt-hint{display: none}.tt-suggestion{cursor: pointer;text-overflow: ellipsis;white-space: nowrap}.tt-suggestion.active{white-space: inherit}.tt-suggestion.tt-cursor{background-color: #265680;color: #fff}.tt-suggestion p{margin: 0}.badge a{color: #fff}.browse.list-group .list-group-item{word-wrap: break-word}.browse.list-group .list-group-item.view-record{padding: 2px 4px;font-size: 85%;text-align: right;border-top: 0}.cart-controls .checkbox{line-height: 2.5em;padding-right: 1em}#modal .cart-controls .btn{margin-bottom: 4px}#modal .cart-controls .checkbox{padding-bottom: 1em}#modal .cart-controls ~ hr{margin-top: 0}.fa-grid:before{content: "\f00a"}.fa-visual:before{content: "\f008"}.fa-x:before{content: "\f0f6"}.fa-atlas:before{content: "\f14e"}.fa-book:before{content: "\f02d"}.fa-braille:before{content: "\f0a6"}.fa-cdrom:before{content: "\f109"}.fa-chart:before{content: "\f012"}.fa-chipcartridge:before{content: "\f109"}.fa-collage:before{content: "\f03e"}.fa-disccartridge:before{content: "\f109"}.fa-drawing:before{content: "\f03e"}.fa-ebook:before{content: "\f0f6"}.fa-electronic:before{content: "\f1c6"}.fa-filmstrip:before{content: "\f008"}.fa-flashcard:before{content: "\f0e7"}.fa-floppydisk:before{content: "\f0c7"}.fa-globe:before{content: "\f0ac"}.fa-journal:before{content: "\f0f6"}.fa-kit:before{content: "\f0b1"}.fa-manuscript:before{content: "\f0f6"}.fa-map:before{content: "\f14e"}.fa-microfilm:before{content: "\f008"}.fa-motionpicture:before{content: "\f03d"}.fa-musicalscore:before{content: "\f001"}.fa-musicrecording:before{content: "\f001"}.fa-newspaper:before{content: "\f0f6"}.fa-online:before{content: "\f109"}.fa-painting:before{content: "\f03e"}.fa-photo:before{content: "\f03e"}.fa-photonegative:before{content: "\f03e"}.fa-physicalobject:before{content: "\f187"}.fa-print:before{content: "\f03e"}.fa-sensorimage:before{content: "\f03e"}.fa-serial:before{content: "\f0f6"}.fa-slide:before{content: "\f008"}.fa-software:before{content: "\f109"}.fa-soundcassette:before{content: "\f025"}.fa-sounddisc:before{content: "\f109"}.fa-soundrecording:before{content: "\f025"}.fa-tapecartridge:before{content: "\f109"}.fa-tapecassette:before{content: "\f025"}.fa-tapereel:before{content: "\f008"}.fa-transparency:before{content: "\f008"}.fa-unknown:before{content: "\f128"}.fa-video:before{content: "\f03d"}.fa-videocartridge:before{content: "\f03d"}.fa-videocassette:before{content: "\f03d"}.fa-videodisc:before{content: "\f109"}.fa-videoreel:before{content: "\f03d"}#dateVisColorSettings{background-color: #fff;fill: #eaeaea;outline-color: #e8cfac;stroke: #265680}.citation .pace-car th,.citation .pace-car td{border: 0;padding: 0}.citation th{text-align: right}#hierarchyTreeHolder{overflow-x: hidden;border-right: 1px solid #eee}#hierarchyTree .currentHierarchy > a,#hierarchyTree .currentRecord a{font-weight: bold;color: #000}#tagList .tag{display: inline-block;margin: 0 1px 1px;padding: 6px 6px;font-size: 14px;line-height: 1.42857143;border-radius: 4px}#tagList .tag.selected{background-color: #265680}#tagList .tag.selected a{color: #fff}#tagList .tag.selected .badge{color: #222;background-color: #fff}#tagList .tag.selected .badge:hover{color: #a94442}#tagList .tag .badge .fa{width: 12px}#tagList .tag-form{display: inline}#tagList .tag-form button{border: 0}#tagList.loggedin .tag:not(.selected) .badge:hover{background-color: #028302}.bulkActionButtons label{display: inline-block}.bulkActionButtons label input{margin-top: 2px}@media (max-width: 767px){.grid{min-height: 250px}}.result a.title{font-weight: bold}.result .left{text-align: center}.result .left img{max-width: 100%}@media (max-width: 767px){.result a{text-decoration: underline}.result .middle,.result .right{padding: 0}}@media (max-width: 530px){.result .checkbox{display: none !important}.result .left{width: 40%}.result .middle{width: 60%}.result .right{display: none}}.search-controls .alert{margin-bottom: 0}.searchtools a{padding: 0 .5em}.title-in-heading{font-size: inherit;font-style: italic}.sidebar label:not(.list-group-item){margin-left: 20px}.sidebar .list-group:not(.filters) .title{cursor: pointer}.sidebar .list-group:not(.filters) .title.collapsed{border-radius: 4px}.sidebar .list-group:not(.filters) .title.collapsed:after{content: '\25BC'}.sidebar .list-group:not(.filters) .title:after{content: '\25B2';float: right}.sidebar .collapse .list-group-item,.sidebar .collapsing .list-group-item{border-top-left-radius: 0px;border-top-right-radius: 0px}.sidebar .collapse .list-group-item[id^=more],.sidebar .collapsing .list-group-item[id^=more]{border-bottom-left-radius: 4px;border-bottom-right-radius: 4px}.sidebar #side-collapse-publishDate .list-group-item{border-bottom-left-radius: 4px;border-bottom-right-radius: 4px}.list-group-item,.badge i.fa,.tt-suggestion{cursor: inherit}.sidebar .facet a{text-decoration: none}.top-row .applied{font-weight: bold}.top-row .applied:hover{color: #a94442}.top-row .applied:hover .fa.fa-check:before{content: "\f00d"}.slider-container{padding: 4px 10px;text-align: center}.slider-container .slider.slider-horizontal{width: 100%}.slider-container .slider-track{background: #777;box-shadow: inset 0 1px 0 rgba(0,0,0,0.4)}.slider-container .slider-handle{background: #265680;background-image: none;border: 1px solid #265680;box-shadow: none;opacity: .9}.slider-container .slider-handle:hover,.slider-container .slider-handle:active,.slider-container .slider-handle:focus{opacity: 1;background: #FFF;border-color: #777}.slider-container .slider-handle:active,.slider-container .slider-handle:focus{border-color: #265680}.slider-container .slider-selection{background: #CCC;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.3)}.slider-container input{display: none}.table{table-layout: fixed;word-wrap: break-word}.node{position: absolute;box-sizing: content-box;margin: -1px;overflow: hidden;font: 10px sans-serif;line-height: 12px;border: 1px solid #fff}.node div{margin-top: 0px}.toplevel{border: 2px solid #000}.node .label{position: absolute;bottom: 0;left: 0;min-height: 1px;padding: 2px 4px;font-size: 85%;background-color: rgba(0,0,0,0.5);border-radius: 0;text-shadow: none}.notalabel{color: #000}#viz-instructions{padding-top: 600px}#similar-items-carousel .carousel-indicators{bottom: 0px}#similar-items-carousel .carousel-indicators li{width: 8px;height: 8px;margin: 2px;background-color: rgba(255,255,255,0.3);border-color: #222}#similar-items-carousel .hover-overlay{position: relative;display: block;min-width: 150px;min-height: 200px;margin: auto;text-align: center}#similar-items-carousel .hover-overlay img{max-width: 100%;margin: 10px 0}#similar-items-carousel .hover-overlay .content{position: absolute;top: 0;left: 0;display: none;width: 100%;height: 100%;padding: .5em .5em 0;color: #fff;background-color: rgba(0,0,0,0.5)}#similar-items-carousel .hover-overlay:hover .content{display: block}#similar-items-carousel .item{padding: 0 4em}.facet .jstree-ocl:before{float: left;width: 10px;padding: 0;margin-left: -10px;font-family: 'FontAwesome';font-weight: normal;font-style: normal;text-decoration: inherit;cursor: pointer;speak: none}.facet .jstree-default .jstree-open > .jstree-ocl:before{content: "\f0d7"}.facet .jstree-default .jstree-closed > .jstree-ocl:before{content: "\f0da"}.facet .jstree-default .jstree-leaf > .jstree-ocl:before{content: " "}.jstree-facet li span.main{display: block;padding-left: 1px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap}.jstree-facet .jstree-container-ul{padding: 0}.jstree-facet .jstree-container-ul > li.active,.jstree-facet .jstree-container-ul > li.active a.jstree-anchor{background-color: #265680;color: #fff}li.jstree-facet,li.jstree-node{list-style: none}li.jstree-facet .badge{cursor: text}li.jstree-facet ul{padding-left: 20px}.hierarchy-tree .jstree-ocl:before{float: left;width: 10px;padding: 0;margin-left: -10px;font-family: 'FontAwesome';font-style: normal;font-weight: normal;cursor: pointer;text-decoration: inherit;speak: none}.hierarchy-tree .jstree-open > .jstree-ocl:before{content: "\f0d7"}.hierarchy-tree .jstree-closed > .jstree-ocl:before{content: "\f0da"}.hierarchy-tree .jstree-leaf > .jstree-ocl:before{content: " "}.hierarchy-tree .jstree-icon{width: 16px;color: #000}.hierarchy-tree .jstree-anchor{padding: 2px 5px;white-space: nowrap}.hierarchy-tree .jstree-container-ul,.hierarchy-tree .jstree-children{padding-left: 16px}.hierarchy-tree .jstree-initial-node{display: none}.hierarchy-tree .jstree-clicked{color: #fff;background-color: #265680}.hierarchy-tree .jstree-clicked .jstree-icon{color: #fff}.offcanvas-overlay,.offcanvas-toggle{display: none}@media screen and (max-width: 767px){body.offcanvas{overflow-x: hidden}body.offcanvas .sidebar{position: fixed;height: 100%;top: 0;width: 75%;padding-left: 0;padding-right: 0;overflow-y: auto}body.offcanvas .sidebar h4{padding-left: 12px}body.offcanvas .sidebar .checkbox{margin-left: 32px}body.offcanvas .sidebar .list-group,body.offcanvas .sidebar .list-group-item{border-left: 0;border-right: 0;border-radius: 0 !important}body.offcanvas.active{overflow-y: hidden}body.offcanvas.offcanvas-left > .container{background: #FFF;padding-left: 25px}body.offcanvas.offcanvas-left.active{margin-left: 75%;margin-right: -75%}body.offcanvas.offcanvas-left.active .sidebar{left: 0}body.offcanvas.offcanvas-left.active .offcanvas-overlay{right: -75%}body.offcanvas.offcanvas-left.active .offcanvas-toggle{left: 75%}body.offcanvas.offcanvas-left .sidebar{left: -75%}body.offcanvas.offcanvas-left .offcanvas-overlay{right: -100%}body.offcanvas.offcanvas-left .offcanvas-toggle{border-radius: 0 3px 3px 0;left: 0}body.offcanvas.offcanvas-right > .container{background: #FFF;padding-right: 25px}body.offcanvas.offcanvas-right.active{margin-left: -75%;margin-right: 75%}body.offcanvas.offcanvas-right.active .sidebar{right: 0}body.offcanvas.offcanvas-right.active .offcanvas-overlay{left: -75%}body.offcanvas.offcanvas-right.active .offcanvas-toggle{right: 75%}body.offcanvas.offcanvas-right .sidebar{right: -75%}body.offcanvas.offcanvas-right .offcanvas-overlay{left: -100%}body.offcanvas.offcanvas-right .offcanvas-toggle{border-radius: 3px 0 0 3px;right: 0}body.offcanvas .offcanvas-overlay{display: block;position: fixed;top: 0;width: 100%;height: 100%;background-color: rgba(0,0,0,0.3);z-index: 3}body.offcanvas .offcanvas-toggle{display: block;position: fixed;top: 50%;width: 25px;padding: 20px 0;background: #265680;color: #EEE;text-align: center;z-index: 5}body.offcanvas .offcanvas-overlay,body.offcanvas .offcanvas-toggle,body.offcanvas .offcanvas-toggle *{cursor: pointer}body.offcanvas,body.offcanvas .sidebar,body.offcanvas .offcanvas-overlay,body.offcanvas .offcanvas-toggle{-webkit-transition: all .25s ease-out;-o-transition: all .25s ease-out;transition: all .25s ease-out}}
\ No newline at end of file
diff --git a/themes/bootstrap3/js/advanced_search.js b/themes/bootstrap3/js/advanced_search.js
index 6310e40ff0d6fe40a8d2cd7221f854aeee75461b..f28910422527a823f14ea3e07be560a4735aad2f 100644
--- a/themes/bootstrap3/js/advanced_search.js
+++ b/themes/bootstrap3/js/advanced_search.js
@@ -1,54 +1,71 @@
-/*global addSearchString, deleteSearchGroupString, searchFields, searchJoins, searchLabel, searchMatch */
-
 var nextGroup = 0;
+var groupLength = [];
 
-function addSearch(group, term, field)
+function addSearch(group, fieldValues)
 {
-  // Does anyone use this???
-  if (term  == undefined) {term  = '';}
-  if (field == undefined) {field = '';}
-
+  if(typeof fieldValues === "undefined") {
+    fieldValues = {};
+  }
   // Build the new search
-  var inputIndex = $('#group'+group+' input').length;
-  var inputID = group+'_'+inputIndex;
-  var newSearch = '<div class="search" id="search'+inputID+'"><div class="row"><div class="col-md-7"><input id="search_lookfor'+inputID+'" class="form-control" type="text" name="lookfor'+group+'[]" value="'+term.replace(/"/g, '&quot;')+'"/></div>'
-    + '<div class="col-md-4"><select id="search_type'+inputID+'" name="type'+group+'[]" class="form-control">';
-  for (var key in searchFields) {
-    newSearch += '<option value="' + key + '"';
-    if (key == field) {
-      newSearch += ' selected="selected"';
-    }
-    newSearch += ">" + searchFields[key] + "</option>";
+  var inputID = group+'_'+groupLength[group];
+  var $newSearch = $($('#new_search_template').html());
+
+  $newSearch.attr('id', 'search'+inputID);
+  $newSearch.find('input.form-control')
+    .attr('id', 'search_lookfor'+inputID)
+    .attr('name', 'lookfor'+group+'[]');
+  $newSearch.find('select.type')
+    .attr('id', 'search_type'+inputID)
+    .attr('name', 'type'+group+'[]');
+  $newSearch.find('.close a')
+    .attr('onClick', 'deleteSearch('+group+','+groupLength[group]+')');
+  // Preset Values
+  if(typeof fieldValues.term !== "undefined") {
+    $newSearch.find('input.form-control').attr('value', fieldValues.term);
   }
-  newSearch += '</select></div><div class="col-md-1"><a class="help-block delete';
-  if(inputIndex == 0) {
-    newSearch += ' hidden';
+  if(typeof fieldValues.field !== "undefined") {
+    $newSearch.find('select.type option[value="'+fieldValues.field+'"]').attr('selected', 1);
+  }
+  if (typeof fieldValues.op !== "undefined") {
+    $newSearch.find('select.op option[value="'+fieldValues.op+'"]').attr('selected', 1);
   }
-  newSearch += '" href="#" onClick="deleteSearch('+group+','+inputIndex+')" class="delete">&times;</a></div></div>';
-
   // Insert it
-  $("#group" + group + "Holder").before(newSearch);
-  // Show x if we have more than one search inputs
-  if(inputIndex > 0) {
-    $('#group'+group+' .search .delete').removeClass('hidden');
+  $("#group" + group + "Holder").before($newSearch);
+  // Individual search ops (for searches like EDS)
+  if (groupLength[group] == 0) {
+    $newSearch.find('.first-op')
+      .attr('name', 'op' + group + '[]')
+      .removeClass('hidden');
+    $newSearch.find('select.op').remove();
+  } else {
+    $newSearch.find('select.op')
+      .attr('id', 'search_op' + group + '_' + groupLength[group])
+      .attr('name', 'op' + group + '[]')
+      .removeClass('hidden');
+    $newSearch.find('.first-op').remove();
+    $newSearch.find('label').remove();
+    // Show x if we have more than one search inputs
+    $('#group'+group+' .search .close').removeClass('hidden');
   }
+  groupLength[group]++;
 }
 
-function deleteSearch(group, eq)
+function deleteSearch(group, sindex)
 {
-  var searches = $('#group'+group+' .search');
-  for(var i=eq;i<searches.length-1;i++) {
-    $(searches[i]).find('input').val($(searches[i+1]).find('input').val());
-    var select0 = $(searches[i]).find('select')[0];
-    var select1 = $(searches[i+1]).find('select')[0];
+  for(var i=sindex;i<groupLength[group]-1;i++) {
+    var $search0 = $('#search'+group+'_'+i);
+    var $search1 = $('#search'+group+'_'+(i+1));
+    $search0.find('input').val($search1.find('input').val());
+    var select0 = $search0.find('select')[0];
+    var select1 = $search1.find('select')[0];
     select0.selectedIndex = select1.selectedIndex;
   }
-  if($('#group'+group+' .search').length > 1) {
-    $('#group'+group+' .search:last').remove();
-  }
-  // Hide x
-  if($('#group'+group+' .search').length == 1) {
-    $('#group'+group+' .search .delete').addClass('hidden');
+  if(groupLength[group] > 1) {
+    groupLength[group]--;
+    $('#search'+group+'_'+groupLength[group]).remove();
+    if(groupLength[group] == 1) {
+      $('#group'+group+' .search .close').addClass('hidden'); // Hide x
+    }
   }
 }
 
@@ -58,37 +75,35 @@ function addGroup(firstTerm, firstField, join)
   if (firstField == undefined) {firstField = '';}
   if (join       == undefined) {join       = '';}
 
-  var newGroup = '<div id="group'+nextGroup+'" class="group well row">'
-    + '<div class="col-md-9"><div class="row"><div class="col-md-3"><label class="help-block">'+searchLabel+':</label></div>'
-    + '<div class="col-md-9"><i id="group'+nextGroup+'Holder" class="fa fa-plus-circle"></i> <a href="#" id="add_search_link_'+nextGroup+'" onClick="addSearch('+nextGroup+')">'+addSearchString+'</a></div></div></div>'
-    + '<div class="col-md-3">'
-    + '<label for="search_bool'+nextGroup+'">'+searchMatch+':&nbsp;</label>'
-    + '<a href="#" onClick="deleteGroup('+nextGroup+')" class="close hidden" title="'+deleteSearchGroupString+'">&times;</a>'
-    + '<select id="search_bool'+nextGroup+'" name="bool'+nextGroup+'[]" class="form-control">'
-    + '<option value="AND"';
-  if(join == 'AND') {
-    newGroup += ' selected';
-  }
-  newGroup += '>' +searchJoins['AND'] + '</option>'
-    + '<option value="OR"';
-  if(join == 'OR') {
-    newGroup += ' selected';
-  }
-  newGroup += '>' +searchJoins['OR'] + '</option>'
-    + '<option value="NOT"';
-  if(join == 'NOT') {
-    newGroup += ' selected';
+  var $newGroup = $($('#new_group_template').html());
+  $newGroup.attr('id', 'group'+nextGroup);
+  $newGroup.find('.search_place_holder')
+    .attr('id', 'group'+nextGroup+'Holder')
+    .removeClass('hidden');
+  $newGroup.find('.add_search_link')
+    .attr('id', 'add_search_link_'+nextGroup)
+    .attr('onClick', 'addSearch('+nextGroup+')')
+    .removeClass('hidden');
+  $newGroup.find('.group-close')
+    .attr('onClick', 'deleteGroup('+nextGroup+')');
+  $newGroup.find('select.form-control')
+    .attr('id', 'search_bool'+nextGroup)
+    .attr('name', 'bool'+nextGroup+'[]');
+  $newGroup.find('.search_bool')
+    .attr('for', 'search_bool'+nextGroup);
+  if(join.length > 0) {
+    $newGroup.find('option[value="'+join+'"]').attr('selected', 1);
   }
-  newGroup += '>' +searchJoins['NOT'] + '</option>'
-    + '</select></div></div>';
-
-  $('#groupPlaceHolder').before(newGroup);
-  addSearch(nextGroup, firstTerm, firstField);
+  // Insert
+  $('#groupPlaceHolder').before($newGroup);
+  // Populate
+  groupLength[nextGroup] = 0;
+  addSearch(nextGroup, {term:firstTerm, field:firstField});
   // Show join menu
-  if($('.group').length > 1) {
+  if(nextGroup > 0) {
     $('#groupJoin').removeClass('hidden');
     // Show x
-    $('.group .close').removeClass('hidden');
+    $('.group .group-close').removeClass('hidden');
   }
   return nextGroup++;
 }
@@ -100,10 +115,9 @@ function deleteGroup(group)
   // If the last group was removed, add an empty group
   if($('.group').length == 0) {
     addGroup();
-  } else if($('.group').length == 1) { // Hide join menu
-    $('#groupJoin').addClass('hidden');
-    // Hide x
-    $('.group .close').addClass('hidden');
+  } else if($('#advSearchForm .group').length == 1) {
+    $('#groupJoin').addClass('hidden'); // Hide join menu
+    $('.group .group-close').addClass('hidden'); // Hide x
   }
 }
 
@@ -121,4 +135,12 @@ function addSearchJS(group)
   var groupNum = group.id.replace("add_search_link_", "");
   addSearch(groupNum);
   return false;
-}
\ No newline at end of file
+}
+
+$(document).ready(function() {
+  $('.clear-btn').click(function() {
+    $('input[type="text"]').val('');
+    $("option:selected").removeAttr("selected");
+    $("#illustrated_-1").click();
+  });
+});
\ No newline at end of file
diff --git a/themes/bootstrap3/js/advanced_search_eds.js b/themes/bootstrap3/js/advanced_search_eds.js
deleted file mode 100644
index a6cc4f6ac70e86e922dbca9e6bfd1e1124f4877e..0000000000000000000000000000000000000000
--- a/themes/bootstrap3/js/advanced_search_eds.js
+++ /dev/null
@@ -1,130 +0,0 @@
-/*global addSearchString, searchFields, searchFieldLabel, searchLabel, searchMatch */
-
-var nextGroup = 0;
-var groupSearches = [];
-var booleanSearchOperators = ["AND", "OR", "NOT"];
-
-function addSearch(group, term, field, op)
-{
-  // Does anyone use this???
-  if (typeof term  == "undefined") {term  = '';}
-  if (typeof field == "undefined") {field = '';}
-  if (typeof op    == "undefined") {op = 'AND';}
-
-  // Build the new search
-  var inputIndex = $('#group'+group+' input').length;
-  var inputID = group+'_'+inputIndex;
-  var newSearch ='<div class="search row" id="search'+inputID+'"><div class="col-sm-3">';
-  if (typeof groupSearches[group] == "undefined") {
-    groupSearches[group] = 0;
-    newSearch += '<input type="hidden" name="op' + group + '[]" value="AND" class="form-control"/><label for="search_lookfor' + group + '_' + groupSearches[group] + '" class="help-block">' + searchLabel + ':</label>';
-  } else {
-    newSearch += '<select id="search_op' + group + '_' + groupSearches[group] + '" name="op' + group + '[]" class="col-sm-9 form-control">';
-    for(var i=0, len= booleanSearchOperators.length; i < len; i++) {
-      var searchOp = booleanSearchOperators[i];
-      var sel = '';
-      if(op == searchOp) {
-        sel = ' selected=selected ';
-      }
-      newSearch += '<option value="' + searchOp + '" ' + sel + ">" + searchOp +"</option>";
-    }
-    newSearch += '</select>';
-  }
-  newSearch += '</div><div class="col-sm-9"><div class="col-sm-6"><input class="form-control"" id="search_lookfor'+inputID+'" type="text" name="lookfor'+group+'[]" value="'+term+'"></div>'
-    + '<span class="col-sm-1 help-block">'+searchFieldLabel+'</span> '
-    + '<div class="col-sm-4"><select class="form-control" id="search_type'+inputID+'" name="type'+group+'[]">';
-  for (var key in searchFields) {
-    newSearch += '<option value="' + key + '"';
-    if (key == field) {
-      newSearch += ' selected="selected"';
-    }
-    newSearch += ">" + searchFields[key] + "</option>";
-  }
-  newSearch += '</select></div> <a href="#" onClick="deleteSearch('+group+','+inputIndex+')" class="col-sm-1 help-block delete';
-  if(inputIndex == 0) {
-    newSearch += ' hidden';
-  }
-  newSearch += '">&times;</a></div>';
-
-  // Insert it
-  $("#group" + group + "Holder").before(newSearch);
-  // Show x
-  if(inputIndex > 0) {
-    $('#group'+group+' .search .delete').removeClass('hidden');
-  }
-  groupSearches[group]++;
-}
-
-function deleteSearch(group, eq)
-{
-  var searches = $('#group'+group+' .search');
-  for(var i=eq;i<searches.length-1;i++) {
-    $(searches[i]).find('input').val($(searches[i+1]).find('input').val());
-    var select0 = $(searches[i]).find('select')[0];
-    var select1 = $(searches[i+1]).find('select')[0];
-    select0.selectedIndex = select1.selectedIndex;
-  }
-  if(groupSearches[group] > 1) {
-    $('#group'+group+' .search:last').remove();
-    groupSearches[group]--;
-  }
-  // Hide x
-  if(groupSearches[group] == 1) {
-    $('#group'+group+' .search .delete').hide();
-  }
-}
-
-function addGroup(firstTerm, firstField, join)
-{
-  if (firstTerm  == undefined) {firstTerm  = '';}
-  if (firstField == undefined) {firstField = '';}
-  if (join       == undefined) {join       = '';}
-
-  var newGroup = '<div id="group'+nextGroup+'" class="group well clearfix">'
-    + '<input type="hidden" name="bool'+nextGroup+'[]" value="AND"/>'
-    + '<div id="group'+nextGroup+'Holder"><i class="col-sm-offset-3 fa fa-plus-circle"></i> <a href="#" onClick="addSearch('+nextGroup+')">'+addSearchString+'</a></div>';
-
-  $('#groupPlaceHolder').before(newGroup);
-  addSearch(nextGroup, firstTerm, firstField);
-  // Show join menu
-  if($('.group').length > 1) {
-    $('#groupJoin').removeClass('hidden');
-    // Show x
-    $('.group .close').removeClass('hidden');
-  }
-  return nextGroup++;
-}
-
-function deleteGroup(group)
-{
-  // Find the group and remove it
-  $("#group" + group).remove();
-  // If the last group was removed, add an empty group
-  if($('.group').length == 0) {
-    addGroup();
-  } else if($('.group').length == 1) { // Hide join menu
-    $('#groupJoin').addClass('hidden');
-    // Hide x
-    $('.group .close').hide();
-  }
-}
-
-// Fired by onclick event
-function deleteGroupJS(group)
-{
-  var groupNum = group.id.replace("delete_link_", "");
-  deleteGroup(groupNum);
-  return false;
-}
-
-// Fired by onclick event
-function addSearchJS(group)
-{
-  var groupNum = group.id.replace("add_search_link_", "");
-  addSearch(groupNum);
-  return false;
-}
-
-$(document).ready(function() {
-  $('#groupPlaceHolder').hide();
-});
\ No newline at end of file
diff --git a/themes/bootstrap3/js/common.js b/themes/bootstrap3/js/common.js
index 4e3cc3b27af7e28e80f107a53696e64823eced4e..c4d9915a27a7f0d647f44ce657b01806dd847bd2 100644
--- a/themes/bootstrap3/js/common.js
+++ b/themes/bootstrap3/js/common.js
@@ -1,4 +1,4 @@
-/*global ajaxLoadTab, btoa, checkSaveStatuses, console, extractSource, hexEncode, Lightbox, path, rc4Encrypt, refreshCommentList, unescape, vufindString */
+/*global ajaxLoadTab, btoa, checkSaveStatuses, console, extractSource, hexEncode, isPhoneNumberValid, Lightbox, path, rc4Encrypt, refreshCommentList, refreshTagList, unescape, vufindString */
 
 /* --- GLOBAL FUNCTIONS --- */
 function htmlEncode(value){
@@ -81,6 +81,32 @@ function lessFacets(id) {
   $('#more-'+id).removeClass('hidden');
 }
 
+// Phone number validation
+var libphoneTranslateCodes = ["libphonenumber_invalid", "libphonenumber_invalidcountry", "libphonenumber_invalidregion", "libphonenumber_notanumber", "libphonenumber_toolong", "libphonenumber_tooshort", "libphonenumber_tooshortidd"];
+var libphoneErrorStrings = ["Phone number invalid", "Invalid country calling code", "Invalid region code", "The string supplied did not seem to be a phone number", "The string supplied is too long to be a phone number", "The string supplied is too short to be a phone number", "Phone number too short after IDD"];
+function phoneNumberFormHandler(numID, regionCode) {
+  var phoneInput = document.getElementById(numID);
+  var number = phoneInput.value;
+  var valid = isPhoneNumberValid(number, regionCode);
+  if(valid != true) {
+    if(typeof valid === 'string') {
+      for(var i=libphoneErrorStrings.length;i--;) {
+        if(valid.match(libphoneErrorStrings[i])) {
+          valid = vufindString[libphoneTranslateCodes[i]];
+        }
+      }
+    } else {
+      valid = vufindString['libphonenumber_invalid'];
+    }
+    $(phoneInput).siblings('.help-block.with-errors').html(valid);
+    $(phoneInput).closest('.form-group').addClass('sms-error');
+  } else {
+    $(phoneInput).closest('.form-group').removeClass('sms-error');
+    $(phoneInput).siblings('.help-block.with-errors').html('');
+  }
+  return valid == true;
+}
+
 // Lightbox
 /*
  * This function adds jQuery events to elements in the lightbox
@@ -89,7 +115,7 @@ function lessFacets(id) {
  * is called and the 'shown' lightbox event is triggered
  */
 function bulkActionSubmit($form) {
-  var submit = $form.find('input[type="submit"][clicked=true]').attr('name');
+  var submit = $form.find('[type="submit"][clicked=true]').attr('name');
   var checks = $form.find('input.checkbox-select-item:checked');
   if(checks.length == 0 && submit != 'empty') {
     return Lightbox.displayError(vufindString['bulk_noitems_advice']);
@@ -133,15 +159,17 @@ function registerLightboxEvents() {
     $(this).closest('.modal-body').find('.checkbox-select-all').prop('checked', false);
   });
   // Highlight which submit button clicked
-  $(modal).find("form input[type=submit]").click(function() {
+  $(modal).find("form [type=submit]").click(function() {
     // Abort requests triggered by the lightbox
     $('#modal .fa-spinner').remove();
     // Remove other clicks
-    $(modal).find('input[type="submit"][clicked=true]').attr('clicked', false);
+    $(modal).find('[type="submit"][clicked=true]').attr('clicked', false);
     // Add useful information
     $(this).attr("clicked", "true");
     // Add prettiness
-    $(this).after(' <i class="fa fa-spinner fa-spin"></i> ');
+    if($(modal).find('.has-error,.sms-error').length == 0 && !$(this).hasClass('dropdown-toggle')) {
+      $(this).after(' <i class="fa fa-spinner fa-spin"></i> ');
+    }
   });
   /**
    * Hide the header in the lightbox content
@@ -191,6 +219,11 @@ function updatePageForLogin() {
     var tab = recordTabs.find('.active a').attr('id');
     ajaxLoadTab(tab);
   }
+
+  // Refresh tag list
+  if(typeof refreshTagList === "function") {
+    refreshTagList(true);
+  }
 }
 function newAccountHandler(html) {
   updatePageForLogin();
@@ -265,6 +298,23 @@ function ajaxLogin(form) {
 }
 
 $(document).ready(function() {
+  // Off canvas
+  if($('.sidebar').length > 0) {
+    $('[data-toggle="offcanvas"]').click(function () {
+      $('body.offcanvas').toggleClass('active');
+      var active = $('body.offcanvas').hasClass('active');
+      var right = $('body.offcanvas').hasClass('offcanvas-right');
+      if((active && !right) || (!active && right)) {
+        $('.offcanvas-toggle .fa').removeClass('fa-chevron-right').addClass('fa-chevron-left');
+      } else {
+        $('.offcanvas-toggle .fa').removeClass('fa-chevron-left').addClass('fa-chevron-right');
+      }
+    });
+    $('[data-toggle="offcanvas"]').click().click();
+  } else {
+    $('[data-toggle="offcanvas"]').addClass('hidden');
+  }
+
   // support "jump menu" dropdown boxes
   $('select.jumpMenu').change(function(){ $(this).parent('form').submit(); });
 
@@ -386,11 +436,11 @@ $(document).ready(function() {
   $('[name=bulkActionForm]').submit(function() {
     return bulkActionSubmit($(this));
   });
-  $('[name=bulkActionForm]').find("input[type=submit]").click(function() {
+  $('[name=bulkActionForm]').find("[type=submit]").click(function() {
     // Abort requests triggered by the lightbox
     $('#modal .fa-spinner').remove();
     // Remove other clicks
-    $(this).closest('form').find('input[type="submit"][clicked=true]').attr('clicked', false);
+    $(this).closest('form').find('[type="submit"][clicked=true]').attr('clicked', false);
     // Add useful information
     $(this).attr("clicked", "true");
   });
diff --git a/themes/bootstrap3/js/facets.js b/themes/bootstrap3/js/facets.js
index 1451eff2fcbfb4d51d16340359287e3da184f8fc..852b5cb0a3e495e6b0648b4c78423652d48a3017 100644
--- a/themes/bootstrap3/js/facets.js
+++ b/themes/bootstrap3/js/facets.js
@@ -1,4 +1,4 @@
-/*global htmlEncode, path */
+/*global htmlEncode, path, vufindString */
 function buildFacetNodes(data, currentPath, allowExclude, excludeTitle, counts)
 {
   var json = [];
@@ -6,7 +6,7 @@ function buildFacetNodes(data, currentPath, allowExclude, excludeTitle, counts)
   $(data).each(function() {
     var html = '';
     if (!this.isApplied && counts) {
-      html = '<span class="badge" style="float: right">' + this.count;
+      html = '<span class="badge" style="float: right">' + this.count.toString().replace(/\B(?=(\d{3})+\b)/g, vufindString.number_thousands_separator);
       if (allowExclude) {
         var excludeURL = currentPath + this.exclude;
         excludeURL.replace("'", "\\'");
diff --git a/themes/bootstrap3/js/lightbox.js b/themes/bootstrap3/js/lightbox.js
index ddc3687dd1b1ca0dd06d05bb3d00f31cbae4c4a8..ebb551ab47d2b02d00b7e2d23f94821cd7b01445 100644
--- a/themes/bootstrap3/js/lightbox.js
+++ b/themes/bootstrap3/js/lightbox.js
@@ -364,10 +364,10 @@ var Lightbox = {
    * The default, automatic form submission
    *
    * This function gleans all the information in a form from the function above
-   * Then it uses the action="" attribute of the form to figure out where to send the data
+   * Then it uses the action="..." attribute of the form to figure out where to send the data
    * and the method="" attribute to send it the proper way
    *
-   * In the wild, forms without an action="" are submitted to the current URL.
+   * Forms without an action="..." are submitted to the current URL.
    * In the case where we have a form with no action in the lightbox,
    * we emulate that behaviour by submitting the last URL loaded through
    * .getByUrl, stored in lastURL in the Lightbox object.
diff --git a/themes/bootstrap3/js/pubdate_vis.js b/themes/bootstrap3/js/pubdate_vis.js
index 7fb5271ec5d397e8cce5ef824f0cf1e44d818fd3..370aa39e3120380d118ef7f49833ad71fd53d415 100644
--- a/themes/bootstrap3/js/pubdate_vis.js
+++ b/themes/bootstrap3/js/pubdate_vis.js
@@ -18,6 +18,22 @@ function PadDigits(n, totalDigits)
 }
 
 function loadVis(facetFields, searchParams, baseURL, zooming) {
+  // Get colors from CSS
+  var cssColorSettings = {
+    'background-color': '#fff', // background of box
+    'fill': '#eee',             // box fill color
+    'stroke': '#265680',        // box outline color
+    'outline-color': '#e8cfac'  // selection color
+  };
+  var $dateVisColorSettings = $('#dateVisColorSettings');
+  for(var rule in cssColorSettings) {
+    if($dateVisColorSettings.css(rule)) {
+      var match = $dateVisColorSettings.css(rule).match(/rgb[a]?\([^\)]+\)|#[a-fA-F0-9]+/);
+      if(null != match) {
+        cssColorSettings[rule] = match[0];
+      }
+    }
+  }
   // options for the graph, TODO: make configurable
   var options = {
     series: {
@@ -25,15 +41,15 @@ function loadVis(facetFields, searchParams, baseURL, zooming) {
         show: true,
         align: "center",
         fill: true,
-        fillColor: "rgb(234,234,234)"
+        fillColor: cssColorSettings['fill']
       }
     },
-    colors: ["#265680"],
+    colors: [cssColorSettings['stroke']],
     legend: { noColumns: 2 },
     xaxis: { tickDecimals: 0 },
     yaxis: { min: 0, ticks: [] },
-    selection: {mode: "x"},
-    grid: { backgroundColor: null /*"#ffffff"*/ }
+    selection: {mode: "x", color: cssColorSettings['outline-color']},
+    grid: { backgroundColor: cssColorSettings['background-color'] }
   };
 
   // AJAX call
diff --git a/themes/bootstrap3/js/record.js b/themes/bootstrap3/js/record.js
index 5d4af0e653f7286d19cd7b4f56435914db027693..4f25e70794b75d81dd9bb36c58793a39a17f87c7 100644
--- a/themes/bootstrap3/js/record.js
+++ b/themes/bootstrap3/js/record.js
@@ -1,4 +1,4 @@
-/*global checkSaveStatuses, deparam, extractClassParams, htmlEncode, Lightbox, path, syn_get_widget, vufindString */
+/*global checkSaveStatuses, deparam, extractClassParams, htmlEncode, Lightbox, path, syn_get_widget, userIsLoggedIn, vufindString */
 
 /**
  * Functions and event handlers specific to record pages.
@@ -127,7 +127,6 @@ function registerAjaxCommentRecord() {
 }
 
 function registerTabEvents() {
-
   // register the record comment form to be submitted via AJAX
   registerAjaxCommentRecord();
 
@@ -174,6 +173,50 @@ function ajaxLoadTab(tabid) {
   return false;
 }
 
+function refreshTagList(loggedin) {
+  loggedin = !!loggedin || userIsLoggedIn;
+  var recordId = $('#record_id').val();
+  var recordSource = $('.hiddenSource').val();
+  var tagList = $('#tagList');
+  if (tagList.length > 0) {
+    tagList.empty();
+    var url = path + '/AJAX/JSON?' + $.param({method:'getRecordTags',id:recordId,'source':recordSource});
+    $.ajax({
+      dataType: 'json',
+      url: url,
+      complete: function(response) {
+        if(response.status == 200) {
+          tagList.html(response.responseText);
+          if(loggedin) {
+            $('#tagList').addClass('loggedin');
+          } else {
+            $('#tagList').removeClass('loggedin');
+          }
+        }
+      }
+    });
+  }
+}
+
+function ajaxTagUpdate(tag, remove) {
+  if(typeof remove === "undefined") {
+    remove = false;
+  }
+  var recordId = $('#record_id').val();
+  var recordSource = $('.hiddenSource').val();
+  $.ajax({
+    url:path+'/AJAX/JSON?method=tagRecord',
+    method:'POST',
+    data:{
+      tag:'"'+tag.replace(/\+/g, ' ')+'"',
+      id:recordId,
+      source:recordSource,
+      remove:remove
+    },
+    complete:refreshTagList
+  });
+}
+
 $(document).ready(function(){
   var id = $('.hiddenId')[0].value;
   registerTabEvents();
@@ -189,7 +232,7 @@ $(document).ready(function(){
       $('#'+tabid).tab('show');
       return false;
     } else {
-      $('#record-tabs').append('<div class="tab-pane" id="'+tabid+'-tab"><i class="fa fa-spinner fa-spin"></i> '+vufindString.loading+'...</div>');
+      $('#record-tabs').append('<div class="tab-pane" id="'+tabid+'-tab"><i class="fa fa-spinner fa-spin"></i> '+vufindString['loading']+'...</div>');
       $('#record-tabs .tab-pane.active').removeClass('active');
       $('#'+tabid+'-tab').addClass('active');
       return ajaxLoadTab(tabid);
@@ -217,47 +260,15 @@ $(document).ready(function(){
     var params = extractClassParams(this);
     return Lightbox.get(params['controller'], 'SMS', {id:id});
   });
-  // Tag lightbox
   $('#tagRecord').click(function() {
     var id = $('.hiddenId')[0].value;
     var parts = this.href.split('/');
-    Lightbox.addCloseAction(function() {
-      var recordId = $('#record_id').val();
-      var recordSource = $('.hiddenSource').val();
-
-      // Update tag list (add tag)
-      var tagList = $('#tagList');
-      if (tagList.length > 0) {
-        tagList.empty();
-        var url = path + '/AJAX/JSON?' + $.param({method:'getRecordTags',id:recordId,'source':recordSource});
-        $.ajax({
-          dataType: 'json',
-          url: url,
-          success: function(response) {
-            if (response.status == 'OK') {
-              $.each(response.data, function(i, tag) {
-                var href = path + '/Tag?' + $.param({lookfor:tag.tag});
-                var html = (i>0 ? ', ' : ' ') + '<a href="' + htmlEncode(href) + '">' + htmlEncode(tag.tag) +'</a> (' + htmlEncode(tag.cnt) + ')';
-                tagList.append(html);
-              });
-            } else if (response.data && response.data.length > 0) {
-              tagList.append(response.data);
-            }
-          }
-        });
-      }
-    });
     return Lightbox.get(parts[parts.length-3],'AddTag',{id:id});
   });
   // Form handlers
-  Lightbox.addFormCallback('smsRecord', function(){Lightbox.confirm(vufindString['sms_success']);});
   Lightbox.addFormCallback('emailRecord', function(){
     Lightbox.confirm(vufindString['bulk_email_success']);
   });
-  Lightbox.addFormCallback('saveRecord', function(){
-    checkSaveStatuses();
-    Lightbox.confirm(vufindString['bulk_save_success']);
-  });
   Lightbox.addFormCallback('placeHold', function(html) {
     Lightbox.checkForError(html, function(html) {
       var divPattern = '<div class="alert alert-info">';
@@ -266,10 +277,23 @@ $(document).ready(function(){
       Lightbox.confirm(html.substring(fi+divPattern.length, li).replace(/^[\s<>]+|[\s<>]+$/g, ''));
     });
   });
+  Lightbox.addFormCallback('placeILLRequest', function() {
+    document.location.href = path+'/MyResearch/ILLRequests';
+  });
   Lightbox.addFormCallback('placeStorageRetrievalRequest', function() {
     document.location.href = path+'/MyResearch/StorageRetrievalRequests';
   });
-  Lightbox.addFormCallback('placeILLRequest', function() {
-    document.location.href = path+'/MyResearch/ILLRequests';
+  Lightbox.addFormCallback('saveRecord', function() {
+    checkSaveStatuses();
+    refreshTagList();
+    Lightbox.confirm(vufindString['bulk_save_success']);
+  });
+  Lightbox.addFormCallback('smsRecord', function() {
+    Lightbox.confirm(vufindString['sms_success']);
+  });
+  // Tag lightbox
+  Lightbox.addFormCallback('tagRecord', function(html) {
+    refreshTagList(true);
+    Lightbox.confirm(vufindString['add_tag_success']);
   });
 });
diff --git a/themes/bootstrap3/js/vendor/bootstrap.min.js b/themes/bootstrap3/js/vendor/bootstrap.min.js
index d839865900c1ab1245618347dcb0a0d4bb01b893..c8f82e592a181afd01014546f58218e213429f6c 100644
--- a/themes/bootstrap3/js/vendor/bootstrap.min.js
+++ b/themes/bootstrap3/js/vendor/bootstrap.min.js
@@ -1,7 +1,7 @@
 /*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})
-})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
+var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/themes/bootstrap3/js/vendor/libphonenumber.js b/themes/bootstrap3/js/vendor/libphonenumber.js
new file mode 100644
index 0000000000000000000000000000000000000000..03a224cf371223c592b4c6d5281e6d7908a6ab80
--- /dev/null
+++ b/themes/bootstrap3/js/vendor/libphonenumber.js
@@ -0,0 +1,486 @@
+(function(){var l,n=this;
+function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==
+b&&"undefined"==typeof a.call)return"object";return b}function p(a,b){function c(){}c.prototype=b.prototype;a.ca=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.ia=function(a,c,e){return b.prototype[c].apply(a,Array.prototype.slice.call(arguments,2))}};var ea=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function q(a,b){return a<b?-1:a>b?1:0};function fa(a,b){a.sort(b||ga)}function ga(a,b){return a>b?1:a<b?-1:0};var s;a:{var ha=n.navigator;if(ha){var ia=ha.userAgent;if(ia){s=ia;break a}}s=""};function ja(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};var ka=-1!=s.indexOf("Opera")||-1!=s.indexOf("OPR"),t=-1!=s.indexOf("Trident")||-1!=s.indexOf("MSIE"),u=-1!=s.indexOf("Gecko")&&-1==s.toLowerCase().indexOf("webkit")&&!(-1!=s.indexOf("Trident")||-1!=s.indexOf("MSIE")),la=-1!=s.toLowerCase().indexOf("webkit");function ma(){var a=n.document;return a?a.documentMode:void 0}
+var na=function(){var a="",b;if(ka&&n.opera)return a=n.opera.version,"function"==da(a)?a():a;u?b=/rv\:([^\);]+)(\)|;)/:t?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:la&&(b=/WebKit\/(\S+)/);b&&(a=(a=b.exec(s))?a[1]:"");return t&&(b=ma(),b>parseFloat(a))?String(b):a}(),oa={};
+function pa(a){if(!oa[a]){for(var b=0,c=ea(String(na)).split("."),d=ea(String(a)).split("."),f=Math.max(c.length,d.length),e=0;0==b&&e<f;e++){var g=c[e]||"",h=d[e]||"",k=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var r=k.exec(g)||["","",""],C=m.exec(h)||["","",""];if(0==r[0].length&&0==C[0].length)break;b=q(0==r[1].length?0:parseInt(r[1],10),0==C[1].length?0:parseInt(C[1],10))||q(0==r[2].length,0==C[2].length)||q(r[2],C[2])}while(0==b)}oa[a]=0<=b}}
+var qa=n.document,ra=qa&&t?ma()||("CSS1Compat"==qa.compatMode?parseInt(na,10):5):void 0;var v;if(!(v=!u&&!t)){var w;if(w=t)w=t&&9<=ra;v=w}v||u&&pa("1.9.1");t&&pa("9");function sa(a,b,c){this.d=b;this.s=c.name;this.o=!!c.p;this.g=c.a;this.t=c.type;this.q=!1;switch(this.g){case ta:case ua:case va:case wa:case xa:case ya:case za:this.q=!0}this.j=c.defaultValue}var za=1,ya=2,ta=3,ua=4,va=6,wa=16,xa=18;sa.prototype.getName=function(){return this.s};function Aa(a,b,c){this.w=a;this.s=b.name||null;this.f={};for(a=0;a<c.length;a++)b=c[a],this.f[b.d]=b}Aa.prototype.getName=function(){return this.s};function Ba(a){a=ja(a.f);fa(a,function(a,c){return a.d-c.d});return a};function x(){this.b={};this.f=this.i().f;this.c=this.r=null}l=x.prototype;l.i=function(){var a=this.constructor,b;if(!(b=a.u)){var c;b=a.aa;var d=[],f=b[0];for(c in b)0!=c&&d.push(new sa(0,c,b[c]));c=new Aa(a,f,d);b=a.u=c}return b};l.has=function(a){return null!=this.b[a.d]};l.get=function(a,b){return y(this,a.d,b)};l.set=function(a,b){z(this,a.d,b)};l.add=function(a,b){Ca(this,a.d,b)};l.clear=function(a){Da(this,a.d)};
+function Ia(a,b){for(var c=Ba(a.i()),d=0;d<c.length;d++){var f=c[d],e=f.d;if(null!=b.b[e]){a.c&&delete a.c[f.d];var g=11==f.g||10==f.g;if(f.o)for(var f=A(b,e)||[],h=0;h<f.length;h++)Ca(a,e,g?f[h].clone():f[h]);else f=A(b,e),g?(g=A(a,e))?Ia(g,f):z(a,e,f.clone()):z(a,e,f)}}}l.clone=function(){var a=new this.constructor;a!=this&&(a.b={},a.c&&(a.c={}),Ia(a,this));return a};
+function A(a,b){var c=a.b[b];if(null==c)return null;if(a.r){if(!(b in a.c)){var d=a.r,f=a.f[b];if(null!=c)if(f.o){for(var e=[],g=0;g<c.length;g++)e[g]=d.n(f,c[g]);c=e}else c=d.n(f,c);return a.c[b]=c}return a.c[b]}return c}function y(a,b,c){var d=A(a,b);return a.f[b].o?d[c||0]:d}function B(a,b){var c;if(null!=a.b[b])c=y(a,b,void 0);else a:{c=a.f[b];if(void 0===c.j){var d=c.t;if(d===Boolean)c.j=!1;else if(d===Number)c.j=0;else if(d===String)c.j=c.q?"0":"";else{c=new d;break a}}c=c.j}return c}
+function z(a,b,c){a.b[b]=c;a.c&&(a.c[b]=c)}function Ca(a,b,c){a.b[b]||(a.b[b]=[]);a.b[b].push(c);a.c&&delete a.c[b]}function Da(a,b){delete a.b[b];a.c&&delete a.c[b]}function D(a,b){a.aa=b;a.i=function(){return a.u||(new a).i()}};function E(){}E.prototype.k=function(a){new a.w;throw Error("Unimplemented");};E.prototype.n=function(a,b){if(11==a.g||10==a.g)return b instanceof x?b:this.k(a.t.i(),b);if(14==a.g||!a.q)return b;var c=a.t;if(c===String){if("number"==typeof b)return String(b)}else if(c===Number&&"string"==typeof b&&("Infinity"===b||"-Infinity"===b||"NaN"===b||/^-?[0-9]+$/.test(b)))return Number(b);return b};function F(a,b){null!=a&&this.append.apply(this,arguments)}l=F.prototype;l.e="";l.set=function(a){this.e=""+a};l.append=function(a,b,c){this.e+=a;if(null!=b)for(var d=1;d<arguments.length;d++)this.e+=arguments[d];return this};l.clear=function(){this.e=""};l.toString=function(){return this.e};/*
+
+ Protocol Buffer 2 Copyright 2008 Google Inc.
+ All other code copyright its respective owners.
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function G(){x.apply(this)}p(G,x);function H(){x.apply(this)}p(H,x);function I(){x.apply(this)}p(I,x);I.prototype.h=function(){return B(this,10)};I.prototype.l=function(a){z(this,10,a)};function J(){x.apply(this)}p(J,x);J.prototype.getMetadata=function(a){return y(this,1,a)};
+D(G,{0:{name:"NumberFormat",m:"i18n.phonenumbers.NumberFormat"},1:{name:"pattern",required:!0,a:9,type:String},2:{name:"format",required:!0,a:9,type:String},3:{name:"leading_digits_pattern",p:!0,a:9,type:String},4:{name:"national_prefix_formatting_rule",a:9,type:String},6:{name:"national_prefix_optional_when_formatting",a:8,type:Boolean},5:{name:"domestic_carrier_code_formatting_rule",a:9,type:String}});
+D(H,{0:{name:"PhoneNumberDesc",m:"i18n.phonenumbers.PhoneNumberDesc"},2:{name:"national_number_pattern",a:9,type:String},3:{name:"possible_number_pattern",a:9,type:String},6:{name:"example_number",a:9,type:String}});
+D(I,{0:{name:"PhoneMetadata",m:"i18n.phonenumbers.PhoneMetadata"},1:{name:"general_desc",required:!0,a:11,type:H},2:{name:"fixed_line",required:!0,a:11,type:H},3:{name:"mobile",required:!0,a:11,type:H},4:{name:"toll_free",required:!0,a:11,type:H},5:{name:"premium_rate",required:!0,a:11,type:H},6:{name:"shared_cost",required:!0,a:11,type:H},7:{name:"personal_number",required:!0,a:11,type:H},8:{name:"voip",required:!0,a:11,type:H},21:{name:"pager",required:!0,a:11,type:H},25:{name:"uan",required:!0,
+a:11,type:H},27:{name:"emergency",required:!0,a:11,type:H},28:{name:"voicemail",required:!0,a:11,type:H},24:{name:"no_international_dialling",required:!0,a:11,type:H},9:{name:"id",required:!0,a:9,type:String},10:{name:"country_code",required:!0,a:5,type:Number},11:{name:"international_prefix",required:!0,a:9,type:String},17:{name:"preferred_international_prefix",a:9,type:String},12:{name:"national_prefix",a:9,type:String},13:{name:"preferred_extn_prefix",a:9,type:String},15:{name:"national_prefix_for_parsing",
+a:9,type:String},16:{name:"national_prefix_transform_rule",a:9,type:String},18:{name:"same_mobile_and_fixed_line_pattern",a:8,defaultValue:!1,type:Boolean},19:{name:"number_format",p:!0,a:11,type:G},20:{name:"intl_number_format",p:!0,a:11,type:G},22:{name:"main_country_for_code",a:8,defaultValue:!1,type:Boolean},23:{name:"leading_digits",a:9,type:String},26:{name:"leading_zero_possible",a:8,defaultValue:!1,type:Boolean}});
+D(J,{0:{name:"PhoneMetadataCollection",m:"i18n.phonenumbers.PhoneMetadataCollection"},1:{name:"metadata",p:!0,a:11,type:I}});/*
+
+ Protocol Buffer 2 Copyright 2008 Google Inc.
+ All other code copyright its respective owners.
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function K(){x.apply(this)}p(K,x);K.prototype.h=function(){return B(this,1)};K.prototype.l=function(a){z(this,1,a)};K.prototype.getExtension=function(){return y(this,3)};
+D(K,{0:{name:"PhoneNumber",m:"i18n.phonenumbers.PhoneNumber"},1:{name:"country_code",required:!0,a:5,type:Number},2:{name:"national_number",required:!0,a:4,type:Number},3:{name:"extension",a:9,type:String},4:{name:"italian_leading_zero",a:8,type:Boolean},8:{name:"number_of_leading_zeros",a:5,defaultValue:1,type:Number},5:{name:"raw_input",a:9,type:String},6:{name:"country_code_source",a:14,defaultValue:1,type:{ha:1,ga:5,fa:10,ea:20}},7:{name:"preferred_domestic_carrier_code",a:9,type:String}});function L(){}p(L,E);L.prototype.k=function(a,b){var c=new a.w;c.r=this;c.b=b;c.c={};return c};function M(){}p(M,L);M.prototype.da=!1;M.prototype.n=function(a,b){return 8==a.g?!!b:E.prototype.n.apply(this,arguments)};M.prototype.k=function(a,b){var c=b;if(this.da){var c=[],d;for(d in b)c[parseInt(d,10)+1]=b[d]}return M.ca.k.call(this,a,c)};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var N={1:"US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI".split(" "),7:["RU","KZ"],20:["EG"],27:["ZA"],30:["GR"],31:["NL"],32:["BE"],33:["FR"],34:["ES"],36:["HU"],39:["IT"],40:["RO"],41:["CH"],43:["AT"],44:["GB","GG","IM","JE"],45:["DK"],46:["SE"],47:["NO","SJ"],48:["PL"],49:["DE"],51:["PE"],52:["MX"],53:["CU"],54:["AR"],55:["BR"],56:["CL"],57:["CO"],58:["VE"],60:["MY"],61:["AU","CC","CX"],62:["ID"],63:["PH"],64:["NZ"],65:["SG"],66:["TH"],81:["JP"],82:["KR"],84:["VN"],
+86:["CN"],90:["TR"],91:["IN"],92:["PK"],93:["AF"],94:["LK"],95:["MM"],98:["IR"],211:["SS"],212:["MA","EH"],213:["DZ"],216:["TN"],218:["LY"],220:["GM"],221:["SN"],222:["MR"],223:["ML"],224:["GN"],225:["CI"],226:["BF"],227:["NE"],228:["TG"],229:["BJ"],230:["MU"],231:["LR"],232:["SL"],233:["GH"],234:["NG"],235:["TD"],236:["CF"],237:["CM"],238:["CV"],239:["ST"],240:["GQ"],241:["GA"],242:["CG"],243:["CD"],244:["AO"],245:["GW"],246:["IO"],247:["AC"],248:["SC"],249:["SD"],250:["RW"],251:["ET"],252:["SO"],
+253:["DJ"],254:["KE"],255:["TZ"],256:["UG"],257:["BI"],258:["MZ"],260:["ZM"],261:["MG"],262:["RE","YT"],263:["ZW"],264:["NA"],265:["MW"],266:["LS"],267:["BW"],268:["SZ"],269:["KM"],290:["SH","TA"],291:["ER"],297:["AW"],298:["FO"],299:["GL"],350:["GI"],351:["PT"],352:["LU"],353:["IE"],354:["IS"],355:["AL"],356:["MT"],357:["CY"],358:["FI","AX"],359:["BG"],370:["LT"],371:["LV"],372:["EE"],373:["MD"],374:["AM"],375:["BY"],376:["AD"],377:["MC"],378:["SM"],379:["VA"],380:["UA"],381:["RS"],382:["ME"],385:["HR"],
+386:["SI"],387:["BA"],389:["MK"],420:["CZ"],421:["SK"],423:["LI"],500:["FK"],501:["BZ"],502:["GT"],503:["SV"],504:["HN"],505:["NI"],506:["CR"],507:["PA"],508:["PM"],509:["HT"],590:["GP","BL","MF"],591:["BO"],592:["GY"],593:["EC"],594:["GF"],595:["PY"],596:["MQ"],597:["SR"],598:["UY"],599:["CW","BQ"],670:["TL"],672:["NF"],673:["BN"],674:["NR"],675:["PG"],676:["TO"],677:["SB"],678:["VU"],679:["FJ"],680:["PW"],681:["WF"],682:["CK"],683:["NU"],685:["WS"],686:["KI"],687:["NC"],688:["TV"],689:["PF"],690:["TK"],
+691:["FM"],692:["MH"],800:["001"],808:["001"],850:["KP"],852:["HK"],853:["MO"],855:["KH"],856:["LA"],870:["001"],878:["001"],880:["BD"],881:["001"],882:["001"],883:["001"],886:["TW"],888:["001"],960:["MV"],961:["LB"],962:["JO"],963:["SY"],964:["IQ"],965:["KW"],966:["SA"],967:["YE"],968:["OM"],970:["PS"],971:["AE"],972:["IL"],973:["BH"],974:["QA"],975:["BT"],976:["MN"],977:["NP"],979:["001"],992:["TJ"],993:["TM"],994:["AZ"],995:["GE"],996:["KG"],998:["UZ"]},O={AC:[,[,,"[2-7]\\d{3,5}","\\d{4,6}"],[,
+,"(?:[267]\\d|3[0-5]|4[4-69])\\d{2}","\\d{4}",,,"6889"],[,,"5\\d{5}","\\d{6}",,,"501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AC",247,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AD:[,[,,"(?:[346-9]|180)\\d{5}","\\d{6,8}"],[,,"[78]\\d{5}","\\d{6}",,,"712345"],[,,"[346]\\d{5}","\\d{6}",,,"312345"],[,,"180[02]\\d{4}","\\d{8}",,,"18001234"],[,,"9\\d{5}","\\d{6}",,,"912345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AD",376,"00",,,,,,,
+,[[,"(\\d{3})(\\d{3})","$1 $2",["[346-9]"],"","",0],[,"(180[02])(\\d{4})","$1 $2",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AE:[,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"],[,,"[2-4679][2-8]\\d{6}","\\d{7,8}",,,"22345678"],[,,"5[0256]\\d{7}","\\d{9}",,,"501234567"],[,,"400\\d{6}|800\\d{2,9}","\\d{5,12}",,,"800123456"],[,,"900[02]\\d{5}","\\d{9}",,,"900234567"],[,,"700[05]\\d{5}","\\d{9}",,,"700012345"],[,,"NA","NA"],[,,"NA","NA"],"AE",971,"00","0",,,"0",,,,[[,
+"([2-4679])(\\d{3})(\\d{4})","$1 $2 $3",["[2-4679][2-8]"],"0$1","",0],[,"(5[0256])(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1","",0],[,"([479]00)(\\d)(\\d{5})","$1 $2 $3",["[479]0"],"$1","",0],[,"([68]00)(\\d{2,9})","$1 $2",["60|8"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"600[25]\\d{5}","\\d{9}",,,"600212345"],,,[,,"NA","NA"]],AF:[,[,,"[2-7]\\d{8}","\\d{7,9}"],[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{7,9}",,,"234567890"],[,,"7(?:[05-9]\\d{7}|29\\d{6})","\\d{9}",,,"701234567"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AF",93,"00","0",,,"0",,,,[[,"([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-6]|7[013-9]"],"0$1","",0],[,"(729)(\\d{3})(\\d{3})","$1 $2 $3",["729"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AG:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"268(?:4(?:6[0-38]|84)|56[0-2])\\d{4}","\\d{7}(?:\\d{3})?",,,"2684601234"],[,,"268(?:464|7(?:2[0-9]|64|7[0-689]|8[02-68]))\\d{4}","\\d{10}",,,"2684641234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"26848[01]\\d{4}","\\d{10}",,,"2684801234"],"AG",1,"011","1",,,"1",,,,,,[,,"26840[69]\\d{4}","\\d{10}",,,"2684061234"],,"268",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AI:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7}(?:\\d{3})?",,,"2644612345"],[,,"264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}","\\d{10}",,,
+"2642351234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"AI",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"264",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AL:[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"],[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}",
+"\\d{5,8}",,,"22345678"],[,,"6[6-9]\\d{7}","\\d{9}",,,"661234567"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"900\\d{3}","\\d{6}",,,"900123"],[,,"808\\d{3}","\\d{6}",,,"808123"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"AL",355,"00","0",,,"0",,,,[[,"(4)(\\d{3})(\\d{4})","$1 $2 $3",["4[0-6]"],"0$1","",0],[,"(6[6-9])(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4[7-9]"],"0$1","",0],[,"(\\d{3})(\\d{3,5})","$1 $2",["[235][16-9]|8[016-9]|[79]"],
+"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AM:[,[,,"[1-9]\\d{7}","\\d{5,8}"],[,,"(?:1[01]\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2|47\\d)\\d{5}","\\d{5,8}",,,"10123456"],[,,"(?:4[139]|55|77|9[1-9])\\d{6}","\\d{8}",,,"77123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[016]\\d{5}","\\d{8}",,,"90012345"],[,,"80[1-4]\\d{5}","\\d{8}",,,"80112345"],[,,"NA","NA"],[,,"60[2-6]\\d{5}","\\d{8}",,,"60271234"],"AM",374,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})",
+"$1 $2",["1|47"],"(0$1)","",0],[,"(\\d{2})(\\d{6})","$1 $2",["4[139]|[5-7]|9[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{5})","$1 $2",["[23]"],"(0$1)","",0],[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8|90"],"0 $1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AO:[,[,,"[29]\\d{8}","\\d{9}"],[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"],[,,"9[1-49]\\d{7}","\\d{9}",,,"923123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AO",244,"00",,,,,,,,
+[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AR:[,[,,"11\\d{8}|[2368]\\d{9}|9\\d{10}","\\d{6,11}"],[,,"11\\d{8}|(?:2(?:2(?:[013]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|4(?:7[3-8]|9\\d)|6(?:[01346]\\d|2[24-6]|5[15-8])|80\\d|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-46]))|3(?:3(?:2[79]|6\\d|8[2578])|4(?:[78]\\d|0[0124-9]|[1-35]\\d|4[24-7]|6[02-9]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|6[24]\\d|7(?:[0469]\\d|1[1568]|2[013-9]|3[145]|5[14-8]|7[2-57]|8[0-24-9])|8(?:[013578]\\d|2[15-7]|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}",
+"\\d{6,10}",,,"1123456789"],[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}",,,"91123456789"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"60[04579]\\d{7}","\\d{10}",,,"6001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AR",54,"00","0",,,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:1[1568]|2[15]|3[145]|4[13]|5[14-8]|[069]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?",
+"9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1","",0],[,"(\\d{2})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(\\d{3})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(\\d{4})(\\d{4})","$1-$2",["[2-9]"],"$1","",0],[,"(9)(11)(\\d{4})(\\d{4})","$2 15-$3-$4",["911"],"0$1","",0],[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[234689]|3[3-8])","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[014-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49])))"],
+"0$1","",0],[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9[23]"],"0$1","",0],[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578])","2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[0-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49]))"],"0$1","",1],[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"],"0$1","",1],
+[,"(\\d{3})","$1",["1[012]|911"],"$1","",0]],[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1","",0],[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3-$4",["911"]],[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[234689]|3[3-8])","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578]))","9(?:2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[014-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49])))"]],[,
+"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9[23]"]],[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[12358]|5[138]|6[24]|7[069]|8[013578])","2(?:2[013]|3[067]|49|6[01346]|80|9(?:[179]|4[13479]|8[014-9]))|3(?:36|4[12358]|5(?:[18]|3[0-689])|6[24]|7[069]|8(?:[01]|3[013469]|5[0-39]|7[0-2459]|8[0-49]))"],"0$1","",1],[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"],"0$1","",1]],[,,"NA","NA"],,,[,,"810\\d{7}",
+"\\d{10}",,,"8101234567"],[,,"810\\d{7}","\\d{10}",,,"8101234567"],,,[,,"NA","NA"]],AS:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7}(?:\\d{3})?",,,"6846221234"],[,,"684(?:25[2468]|7(?:3[13]|70))\\d{4}","\\d{10}",,,"6847331234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"AS",1,"011","1",,,"1",,,,
+,,[,,"NA","NA"],,"684",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AT:[,[,,"[1-9]\\d{3,12}","\\d{3,13}"],[,,"1\\d{3,12}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:12|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}","\\d{3,13}",,,"1234567890"],[,,"6(?:44|5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}","\\d{7,13}",
+,,"644123456"],[,,"80[02]\\d{6,10}","\\d{9,13}",,,"800123456"],[,,"(?:711|9(?:0[01]|3[019]))\\d{6,10}","\\d{9,13}",,,"900123456"],[,,"8(?:10|2[018])\\d{6,10}","\\d{9,13}",,,"810123456"],[,,"NA","NA"],[,,"780\\d{6,10}","\\d{9,13}",,,"780123456"],"AT",43,"00","0",,,"0",,,,[[,"(1)(\\d{3,12})","$1 $2",["1"],"0$1","",0],[,"(5\\d)(\\d{3,5})","$1 $2",["5[079]"],"0$1","",0],[,"(5\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["5[079]"],"0$1","",0],[,"(5\\d)(\\d{4})(\\d{4,7})","$1 $2 $3",["5[079]"],"0$1","",0],[,"(\\d{3})(\\d{3,10})",
+"$1 $2",["316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]"],"0$1","",0],[,"(\\d{4})(\\d{3,9})","$1 $2",["2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[5-79])"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"5(?:(?:0[1-9]|17)\\d{2,10}|[79]\\d{3,11})|720\\d{6,10}","\\d{5,13}",,,"50123"],,,[,,"NA","NA"]],AU:[,[,,"[1-578]\\d{5,9}","\\d{6,10}"],[,,"[237]\\d{8}|8(?:[68]\\d{3}|7[0-69]\\d{2}|9(?:[02-9]\\d{2}|1(?:[0-57-9]\\d|6[0135-9])))\\d{4}","\\d{8,9}",,
+,"212345678"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}","\\d{9}",,,"412345678"],[,,"180(?:0\\d{3}|2)\\d{3}","\\d{7,10}",,,"1800123456"],[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"13(?:00\\d{2})?\\d{4}","\\d{6,10}",,,"1300123456"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"AU",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,[[,"([2378])(\\d{4})(\\d{4})","$1 $2 $3",
+["[2378]"],"(0$1)","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[45]|14"],"0$1","",0],[,"(16)(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1","",0],[,"(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[38]0|90)","1(?:[38]00|90)"],"$1","",0],[,"(180)(2\\d{3})","$1 $2",["180","1802"],"$1","",0],[,"(19\\d)(\\d{3})","$1 $2",["19[13]"],"$1","",0],[,"(19\\d{2})(\\d{4})","$1 $2",["19[67]"],"$1","",0],[,"(13)(\\d{2})(\\d{2})","$1 $2 $3",["13[1-9]"],"$1","",0]],,[,,"16\\d{3,7}","\\d{5,9}",,,"1612345"],1,,[,,
+"1(?:3(?:\\d{4}|00\\d{6})|80(?:0\\d{6}|2\\d{3}))","\\d{6,10}",,,"1300123456"],[,,"NA","NA"],,,[,,"NA","NA"]],AW:[,[,,"[25-9]\\d{6}","\\d{7}"],[,,"5(?:2\\d|8[1-9])\\d{4}","\\d{7}",,,"5212345"],[,,"(?:5(?:6\\d|9[2-478])|6(?:[039]0|22|4[01]|6[0-2])|7[34]\\d|9(?:6[45]|9[4-8]))\\d{4}","\\d{7}",,,"5601234"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"900\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"28\\d{5}|501\\d{4}","\\d{7}",,,"5011234"],"AW",297,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",
+,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],AX:[,[,,"[135]\\d{5,9}|[27]\\d{4,9}|4\\d{5,10}|6\\d{7,8}|8\\d{6,9}","\\d{5,12}"],[,,"18[1-8]\\d{3,9}","\\d{6,12}",,,"1812345678"],[,,"4\\d{5,10}|50\\d{4,8}","\\d{6,11}",,,"412345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"[67]00\\d{5,6}","\\d{8,9}",,,"600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"AX",358,"00|99[049]","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"[13]00\\d{3,7}|2(?:0(?:0\\d{3,7}|2[023]\\d{1,6}|9[89]\\d{1,6}))|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})",
+"\\d{5,10}",,,"100123"],[,,"[13]0\\d{4,8}|2(?:0(?:[016-8]\\d{3,7}|[2-59]\\d{2,7})|9\\d{4,8})|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"],,,[,,"NA","NA"]],AZ:[,[,,"[1-9]\\d{8}","\\d{7,9}"],[,,"(?:1[28]\\d|2(?:02|1[24]|2[2-4]|33|[45]2|6[23])|365)\\d{6}","\\d{7,9}",,,"123123456"],[,,"(?:4[04]|5[015]|60|7[07])\\d{7}","\\d{9}",,,"401234567"],[,,"88\\d{7}","\\d{9}",,,"881234567"],[,,"900200\\d{3}","\\d{9}",,,"900200123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],"AZ",994,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["(?:1[28]|2(?:[45]2|[0-36])|365)"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[4-8]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BA:[,[,,"[3-9]\\d{7,8}","\\d{6,9}"],[,,"(?:[35]\\d|49)\\d{6}","\\d{6,8}",,,"30123456"],[,,"6(?:03|44|71|[1-356])\\d{6}","\\d{8,9}",,,"61123456"],[,,"8[08]\\d{6}",
+"\\d{8}",,,"80123456"],[,,"9[0246]\\d{6}","\\d{8}",,,"90123456"],[,,"8[12]\\d{6}","\\d{8}",,,"82123456"],[,,"NA","NA"],[,,"NA","NA"],"BA",387,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-356]|[7-9]"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6[047]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70[23]\\d{5}","\\d{8}",,,"70223456"],,,[,,"NA","NA"]],BB:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"246[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2462345678"],[,,"246(?:(?:2[346]|45|82)\\d|25[0-4])\\d{4}","\\d{10}",,,"2462501234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BB",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"246",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BD:[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"],[,,"2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:12?[5-7]\\d{2}|0(?:2(?:[025-79]\\d|[348]\\d{1,2})|3(?:[2-4]\\d|[56]\\d?))|2(?:1\\d{2}|2(?:[12]\\d|[35]\\d{1,2}|4\\d?))|3(?:1\\d{2}|2(?:[2356]\\d|4\\d{1,2}))|4(?:1\\d{2}|2(?:2\\d{1,2}|[47]|5\\d{2}))|5(?:1\\d{2}|29)|[67]1\\d{2}|8(?:1\\d{2}|2(?:2\\d{2}|3|4\\d)))\\d{3}|4(?:0(?:2(?:[09]\\d|7)|33\\d{2})|1\\d{3}|2(?:1\\d{2}|2(?:[25]\\d?|[348]\\d|[67]\\d{1,2}))|3(?:1\\d{2}(?:\\d{2})?|2(?:[045]\\d|[236-9]\\d{1,2})|32\\d{2})|4(?:[18]\\d{2}|2(?:[2-46]\\d{2}|3)|5[25]\\d{2})|5(?:1\\d{2}|2(?:3\\d|5))|6(?:[18]\\d{2}|2(?:3(?:\\d{2})?|[46]\\d{1,2}|5\\d{2}|7\\d)|5(?:3\\d?|4\\d|[57]\\d{1,2}|6\\d{2}|8))|71\\d{2}|8(?:[18]\\d{2}|23\\d{2}|54\\d{2})|9(?:[18]\\d{2}|2[2-5]\\d{2}|53\\d{1,2}))\\d{3}|5(?:02[03489]\\d{2}|1\\d{2}|2(?:1\\d{2}|2(?:2(?:\\d{2})?|[457]\\d{2}))|3(?:1\\d{2}|2(?:[37](?:\\d{2})?|[569]\\d{2}))|4(?:1\\d{2}|2[46]\\d{2})|5(?:1\\d{2}|26\\d{1,2})|6(?:[18]\\d{2}|2|53\\d{2})|7(?:1|24)\\d{2}|8(?:1|26)\\d{2}|91\\d{2})\\d{3}|6(?:0(?:1\\d{2}|2(?:3\\d{2}|4\\d{1,2}))|2(?:2[2-5]\\d{2}|5(?:[3-5]\\d{2}|7)|8\\d{2})|3(?:1|2[3478])\\d{2}|4(?:1|2[34])\\d{2}|5(?:1|2[47])\\d{2}|6(?:[18]\\d{2}|6(?:2(?:2\\d|[34]\\d{2})|5(?:[24]\\d{2}|3\\d|5\\d{1,2})))|72[2-5]\\d{2}|8(?:1\\d{2}|2[2-5]\\d{2})|9(?:1\\d{2}|2[2-6]\\d{2}))\\d{3}|7(?:(?:02|[3-589]1|6[12]|72[24])\\d{2}|21\\d{3}|32)\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}",
+"\\d{6,9}",,,"27111234"],[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}",,,"1812345678"],[,,"80[03]\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"96(?:0[49]|1[0-4]|6[69])\\d{6}","\\d{10}",,,"9604123456"],"BD",880,"00[12]?","0",,,"0",,"00",,[[,"(2)(\\d{7})","$1-$2",["2"],"0$1","",0],[,"(\\d{2})(\\d{4,6})","$1-$2",["[3-79]1"],"0$1","",0],[,"(\\d{4})(\\d{3,6})","$1-$2",["1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])"],
+"0$1","",0],[,"(\\d{3})(\\d{3,7})","$1-$2",["[3-79][2-9]|8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BE:[,[,,"[1-9]\\d{7,8}","\\d{8,9}"],[,,"(?:1[0-69]|[49][23]|5\\d|6[013-57-9]|71|8[0-79])[1-9]\\d{5}|[23][2-8]\\d{6}","\\d{8}",,,"12345678"],[,,"4(?:[679]\\d|8[03-9])\\d{6}","\\d{9}",,,"470123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"(?:70[2-7]|90\\d)\\d{5}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BE",32,"00","0",,,"0",,,,[[,"(4[6-9]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["4[6-9]"],"0$1","",0],[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"],"0$1","",0],[,"([15-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[156]|7[018]|8(?:0[1-9]|[1-79])"],"0$1","",0],[,"([89]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"78\\d{6}","\\d{8}",,,"78123456"],,,[,,"NA","NA"]],BF:[,[,,"[24-7]\\d{7}","\\d{8}"],[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|5[4-6]|7[0179])|50(?:[34]\\d|50))\\d{4}","\\d{8}",
+,,"20491234"],[,,"6(?:[0-689]\\d|7[0-5])\\d{5}|7\\d{7}","\\d{8}",,,"70123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BF",226,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BG:[,[,,"[23567]\\d{5,7}|[489]\\d{6,8}","\\d{5,9}"],[,,"2(?:[0-8]\\d{5,6}|9\\d{4,6})|(?:[36]\\d|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|(?:4(?:[124-7]\\d|3[1-6])|7(?:0[1-9]|[1-9]\\d))\\d{4,5}","\\d{5,8}",,,"2123456"],
+[,,"(?:8[7-9]|98)\\d{7}|4(?:3[0789]|8\\d)\\d{5}","\\d{8,9}",,,"48123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"700\\d{5}","\\d{5,9}",,,"70012345"],[,,"NA","NA"],"BG",359,"00","0",,,"0",,,,[[,"(2)(\\d{5})","$1 $2",["29"],"0$1","",0],[,"(2)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1","",0],[,"(\\d{3})(\\d{4})","$1 $2",["43[124-7]|70[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[124-7]|70[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{3})",
+"$1 $2 $3",["[78]00"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["48|8[7-9]|9[08]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BH:[,[,,"[136-9]\\d{7}","\\d{8}"],[,,"(?:1(?:3[13-6]|6[0156]|7\\d)\\d|6(?:1[16]\\d|500|6(?:0\\d|3[12]|44|88)|9[69][69])|7(?:7\\d{2}|178))\\d{4}","\\d{8}",,,"17001234"],[,,"(?:3(?:[1-4679]\\d|5[0135]|8[0-48])\\d|6(?:3(?:00|33|6[16])|6(?:[69]\\d|3[03-9])))\\d{4}",
+"\\d{8}",,,"36001234"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"(?:87|9[014578])\\d{6}","\\d{8}",,,"90123456"],[,,"84\\d{6}","\\d{8}",,,"84123456"],[,,"NA","NA"],[,,"NA","NA"],"BH",973,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BI:[,[,,"[27]\\d{7}","\\d{8}"],[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}",,,"22201234"],[,,"(?:29|7[14-9])\\d{6}","\\d{8}",,,"79561234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+"BI",257,"00",,,,,,,,[[,"([27]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BJ:[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"],[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}",,,"20211234"],[,,"(?:6[146-8]|9[03-9])\\d{6}","\\d{8}",,,"90011234"],[,,"7[3-5]\\d{2}","\\d{4}",,,"7312"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"857[58]\\d{4}","\\d{8}",,,"85751234"],"BJ",229,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,
+"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"81\\d{6}","\\d{8}",,,"81123456"],,,[,,"NA","NA"]],BL:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}",,,"590271234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BL",590,"00","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BM:[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"441(?:2(?:02|23|61|[3479]\\d)|[46]\\d{2}|5(?:4\\d|60|89)|824)\\d{4}",
+"\\d{7}(?:\\d{3})?",,,"4412345678"],[,,"441(?:[37]\\d|5[0-39])\\d{5}","\\d{10}",,,"4413701234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BM",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"441",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BN:[,[,,"[2-578]\\d{6}","\\d{7}"],[,,"2(?:[013-9]\\d|2[0-7])\\d{4}|[3-5]\\d{6}","\\d{7}",,,"2345678"],[,,"22[89]\\d{4}|[78]\\d{6}",
+"\\d{7}",,,"7123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BN",673,"00",,,,,,,,[[,"([2-578]\\d{2})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BO:[,[,,"[23467]\\d{7}","\\d{7,8}"],[,,"(?:2(?:2\\d{2}|5(?:11|[258]\\d|9[67])|6(?:12|2\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\d{2}|4(?:6\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:2\\d|3[234]|4[248]|5[24]|6[2-6]|7\\d))|4(?:4\\d{2}|6(?:11|[24689]\\d|72)))\\d{4}","\\d{7,8}",,,"22123456"],
+[,,"[67]\\d{7}","\\d{8}",,,"71234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BO",591,"00(1\\d)?","0",,,"0(1\\d)?",,,,[[,"([234])(\\d{7})","$1 $2",["[234]"],"","0$CC $1",0],[,"([67]\\d{7})","$1",["[67]"],"","0$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BQ:[,[,,"[347]\\d{6}","\\d{7}"],[,,"(?:318[023]|416[023]|7(?:1[578]|50)\\d)\\d{3}","\\d{7}",,,"7151234"],[,,"(?:318[14-68]|416[15-9]|7(?:0[01]|7[07]|[89]\\d)\\d)\\d{3}","\\d{7}",,,"3181234"],
+[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BQ",599,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BR:[,[,,"[1-46-9]\\d{7,10}|5\\d{8,9}","\\d{8,11}"],[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,11}",,,"1123456789"],[,,"1[1-9](?:7|9\\d)\\d{7}|(?:2[12478]|9[1-9])9?[6-9]\\d{7}|(?:3[1-578]|[468][1-9]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10,11}",,,"11961234567"],[,,"800\\d{6,7}","\\d{8,11}",,,"800123456"],
+[,,"[359]00\\d{6,7}","\\d{8,11}",,,"300123456"],[,,"[34]00\\d{5}","\\d{8}",,,"40041234"],[,,"NA","NA"],[,,"NA","NA"],"BR",55,"00(?:1[45]|2[135]|31|4[13])","0",,,"0(?:(1[245]|2[135]|31|4[13])(\\d{10,11}))?","$2",,,[[,"(\\d{4})(\\d{4})","$1-$2",["[2-9](?:[1-9]|0[1-9])"],"$1","",0],[,"(\\d{5})(\\d{4})","$1-$2",["9(?:[1-9]|0[1-9])"],"$1","",0],[,"(\\d{3,5})","$1",["1[125689]"],"$1","",0],[,"(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["(?:1[1-9]|2[12478]|9[1-9])9"],"($1)","0 $CC ($1)",0],[,"(\\d{2})(\\d{4})(\\d{4})",
+"$1 $2-$3",["[1-9][1-9]"],"($1)","0 $CC ($1)",0],[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00"],"","",0],[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"],"0$1","",0]],[[,"(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["(?:1[1-9]|2[12478]|9[1-9])9"],"($1)","0 $CC ($1)",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["[1-9][1-9]"],"($1)","0 $CC ($1)",0],[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00"],"","",0],[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"],"0$1","",0]],[,,"NA","NA"],,,[,,"[34]00\\d{5}",
+"\\d{8}",,,"40041234"],[,,"NA","NA"],,,[,,"NA","NA"]],BS:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:0[12]|12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7}(?:\\d{3})?",,,"2423456789"],[,,"242(?:3(?:5[79]|[79]5)|4(?:[2-4][1-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[45]|3[35]|44|5[1-9]|65|77)|6[34]6|727)\\d{4}","\\d{10}",,,"2423591234"],[,,"242300\\d{4}|8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",
+,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"BS",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"242",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BT:[,[,,"[1-8]\\d{6,7}","\\d{6,8}"],[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}",,,"2345678"],[,,"[17]7\\d{6}","\\d{8}",,,"17123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BT",975,"00",,,,,,,,[[,"([17]7)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",
+["1|77"],"","",0],[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BW:[,[,,"[2-79]\\d{6,7}","\\d{7,8}"],[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}",,,"2401234"],[,,"7(?:[1-356]\\d|4[0-7]|7[014-7])\\d{5}","\\d{8}",,,"71123456"],[,,"NA","NA"],[,,"90\\d{5}","\\d{7}",,,"9012345"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"79[12][01]\\d{4}","\\d{8}",,,"79101234"],"BW",267,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-6]"],"","",0],[,"(7\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7"],"","",0],[,"(90)(\\d{5})","$1 $2",["9"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],BY:[,[,,"[1-4]\\d{8}|[89]\\d{9,10}","\\d{7,11}"],[,,"(?:1(?:5(?:1[1-5]|[24]\\d|6[2-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:[26]\\d|3[02-79]|4[024-7]|5[03-7])))\\d{5}",
+"\\d{7,9}",,,"152450911"],[,,"(?:2(?:5[5679]|9[1-9])|33\\d|44\\d)\\d{6}","\\d{9}",,,"294911911"],[,,"8(?:0[13]|20\\d)\\d{7}","\\d{10,11}",,,"8011234567"],[,,"(?:810|902)\\d{7}","\\d{10}",,,"9021234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BY",375,"810","8",,,"8?0?",,"8~10",,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["17[0-3589]|2[4-9]|[34]","17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]"],"8 0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])",
+"1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])"],"8 0$1","",0],[,"(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8[01]|9"],"8 $1","",0],[,"(8\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["82"],"8 $1","",0]],,[,,"NA","NA"],,,[,,"8(?:[013]|[12]0)\\d{8}|902\\d{7}","\\d{10,11}",,,"82012345678"],
+[,,"NA","NA"],,,[,,"NA","NA"]],BZ:[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"],[,,"[234578][02]\\d{5}","\\d{7}",,,"2221234"],[,,"6[0-367]\\d{5}","\\d{7}",,,"6221234"],[,,"0800\\d{7}","\\d{11}",,,"08001234123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"BZ",501,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1-$2",["[2-8]"],"","",0],[,"(0)(800)(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CA:[,[,,"[2-9]\\d{9}|3\\d{6}","\\d{7}(?:\\d{3})?"],
+[,,"(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|79|8[17])|6(?:0[04]|13|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|73)|90[25])[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?",,,"2042345678"],[,,"(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|79|8[17])|6(?:0[04]|13|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|73)|90[25])[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2042345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?",,,"8002123456"],
+[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"CA",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CC:[,[,,"[1458]\\d{5,9}","\\d{6,10}"],[,,"89162\\d{4}","\\d{8,9}",,,"891621234"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}","\\d{9}",,,"412345678"],[,,"1(?:80(?:0\\d{2})?|3(?:00\\d{2})?)\\d{4}","\\d{6,10}",,,"1800123456"],
+[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"CC",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CD:[,[,,"[2-6]\\d{6}|[18]\\d{6,8}|9\\d{8}","\\d{7,9}"],[,,"1(?:2\\d{7}|\\d{6})|[2-6]\\d{6}","\\d{7,9}",,,"1234567"],[,,"8(?:[0-2459]\\d{2}|8)\\d{5}|9[7-9]\\d{7}","\\d{7,9}",,,"991234567"],[,,"NA","NA"],[,,"NA","NA"],[,
+,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CD",243,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["12"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[0-2459]|9"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1","",0],[,"(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CF:[,[,,"[278]\\d{7}","\\d{8}"],[,,"2[12]\\d{6}","\\d{8}",,,"21612345"],[,,"7[0257]\\d{6}","\\d{8}",,,"70012345"],[,,"NA","NA"],[,
+,"8776\\d{4}","\\d{8}",,,"87761234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CF",236,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CG:[,[,,"[028]\\d{8}","\\d{9}"],[,,"222[1-589]\\d{5}","\\d{9}",,,"222123456"],[,,"0[14-6]\\d{7}","\\d{9}",,,"061234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CG",242,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",
+["[02]"],"","",0],[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CH:[,[,,"[2-9]\\d{8}|860\\d{9}","\\d{9}(?:\\d{3})?"],[,,"(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\d{7}","\\d{9}",,,"212345678"],[,,"7[5-9]\\d{7}","\\d{9}",,,"781234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"90[016]\\d{6}","\\d{9}",,,"900123456"],[,,"84[0248]\\d{6}","\\d{9}",,,"840123456"],[,,"878\\d{6}","\\d{9}",,,"878123456"],[,,"NA","NA"],"CH",41,"00",
+"0",,,"0",,,,[[,"([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]|[89]1"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["860"],"0$1","",0]],,[,,"74[0248]\\d{6}","\\d{9}",,,"740123456"],,,[,,"NA","NA"],[,,"5[18]\\d{7}","\\d{9}",,,"581234567"],,,[,,"860\\d{9}","\\d{12}",,,"860123456789"]],CI:[,[,,"[02-7]\\d{7}","\\d{8}"],[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}",
+"\\d{8}",,,"21234567"],[,,"(?:0[1-9]|4[0-24-9]|5[4-9]|6[015-79]|7[57])\\d{6}","\\d{8}",,,"01234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CI",225,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],CK:[,[,,"[2-57]\\d{4}","\\d{5}"],[,,"(?:2\\d|3[13-7]|4[1-5])\\d{3}","\\d{5}",,,"21234"],[,,"(?:5[0-68]|7\\d)\\d{3}","\\d{5}",,,"71234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"CK",682,"00",,,,,,,,[[,"(\\d{2})(\\d{3})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CL:[,[,,"(?:[2-9]|600|123)\\d{7,8}","\\d{7,11}"],[,,"2(?:2\\d{7}|1962\\d{4})|(?:3[2-5]|[47][1-35]|5[1-3578]|6[13-57])\\d{7}","\\d{7,9}",,,"221234567"],[,,"9[4-9]\\d{7}","\\d{8,9}",,,"961234567"],[,,"800\\d{6}|1230\\d{7}","\\d{9,11}",,,"800123456"],[,,"NA","NA"],[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"],[,,"NA","NA"],[,,"44\\d{7}","\\d{9}",,,"441234567"],
+"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["22"],"($1)","$CC ($1)",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"],"($1)","$CC ($1)",0],[,"(9)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"],"0$1","",0],[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"],"$1","",0],[,"(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"],
+"$1","",0],[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"$1","",0],[,"(\\d{5})(\\d{4})","$1 $2",["219"],"($1)","$CC ($1)",0],[,"(\\d{4,5})","$1",["[1-9]"],"$1","",0]],[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["22"],"($1)","$CC ($1)",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"],"($1)","$CC ($1)",0],[,"(9)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"],"0$1","",0],[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"],"$1","",0],[,"(600)(\\d{3})(\\d{2})(\\d{3})",
+"$1 $2 $3 $4",["60"],"$1","",0],[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"$1","",0],[,"(\\d{5})(\\d{4})","$1 $2",["219"],"($1)","$CC ($1)",0]],[,,"NA","NA"],,,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"],[,,"NA","NA"],,,[,,"NA","NA"]],CM:[,[,,"[2357-9]\\d{7}","\\d{8}"],[,,"(?:22|33)\\d{6}","\\d{8}",,,"22123456"],[,,"[579]\\d{7}","\\d{8}",,,"71234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"88\\d{6}","\\d{8}",,,"88012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CM",237,"00",,,,,,,,[[,"([2357-9]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["[23579]|88"],"","",0],[,"(800)(\\d{2})(\\d{3})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CN:[,[,,"[1-7]\\d{6,11}|8[0-357-9]\\d{6,9}|9\\d{7,9}","\\d{4,12}"],[,,"21(?:100\\d{2}|95\\d{3,4}|\\d{8,10})|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98))(?:100\\d{2}|95\\d{3,4}|\\d{8})|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\d|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100\\d{2}|95\\d{3,4}|\\d{7})|80(?:29|6[03578]|7[018]|81)\\d{4}",
+"\\d{4,12}",,,"1012345678"],[,,"1(?:[38]\\d|4[57]|5[0-35-9]|7[06-8])\\d{8}","\\d{11}",,,"13123456789"],[,,"(?:10)?800\\d{7}","\\d{10,12}",,,"8001234567"],[,,"16[08]\\d{5}","\\d{8}",,,"16812345"],[,,"400\\d{7}|(?:10|2[0-57-9]|3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[4789]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))96\\d{3,4}",
+"\\d{7,10}",,,"4001234567"],[,,"NA","NA"],[,,"NA","NA"],"CN",86,"(1[1279]\\d{3})?00","0",,,"(1[1279]\\d{3})|0",,"00",,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"],"0$1","$CC $1",1],[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"],"","",0],[,"(\\d{5,6})","$1",["100|95"],"","",0],[,"(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2\\d)[19]","(?:10|2\\d)(?:10|9[56])","(?:10|2\\d)(?:100|9[56])"],"0$1","$CC $1",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["[3-9]","[3-9]\\d{2}[19]","[3-9]\\d{2}(?:10|9[56])"],"0$1","$CC $1",
+0],[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"],"","",0],[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"],"0$1","$CC $1",1],[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98)"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"],
+"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-578]"],"","$CC $1",0],[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"],"","",0]],[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"],"0$1","$CC $1",1],[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"],"","",0],[,"(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2\\d)[19]","(?:10|2\\d)(?:10|9[56])","(?:10|2\\d)(?:100|9[56])"],"0$1","$CC $1",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["[3-9]","[3-9]\\d{2}[19]","[3-9]\\d{2}(?:10|9[56])"],"0$1","$CC $1",
+0],[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"],"0$1","$CC $1",1],[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:71|98)"],"0$1","$CC $1",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"],
+"0$1","$CC $1",1],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-578]"],"","$CC $1",0],[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"],"","",0]],[,,"NA","NA"],,,[,,"(?:4|(?:10)?8)00\\d{7}","\\d{10,12}",,,"4001234567"],[,,"NA","NA"],,,[,,"NA","NA"]],CO:[,[,,"(?:[13]\\d{0,3}|[24-8])\\d{7}","\\d{7,11}"],[,,"[124-8][2-9]\\d{6}","\\d{8}",,,"12345678"],[,,"3(?:0[0-5]|1\\d|2[0-2]|5[01])\\d{7}","\\d{10}",,,"3211234567"],[,,"1800\\d{7}","\\d{11}",,,"18001234567"],[,,"19(?:0[01]|4[78])\\d{7}",
+"\\d{11}",,,"19001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CO",57,"00(?:4(?:[14]4|56)|[579])","0",,,"0([3579]|4(?:44|56))?",,,,[[,"(\\d)(\\d{7})","$1 $2",["1(?:8[2-9]|9[0-3]|[2-7])|[24-8]","1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]"],"($1)","0$CC $1",0],[,"(\\d{3})(\\d{7})","$1 $2",["3"],"","0$CC $1",0],[,"(1)(\\d{3})(\\d{7})","$1-$2-$3",["1(?:80|9[04])","1(?:800|9(?:0[01]|4[78]))"],"0$1","",0]],[[,"(\\d)(\\d{7})","$1 $2",["1(?:8[2-9]|9[0-3]|[2-7])|[24-8]","1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]"],
+"($1)","0$CC $1",0],[,"(\\d{3})(\\d{7})","$1 $2",["3"],"","0$CC $1",0],[,"(1)(\\d{3})(\\d{7})","$1 $2 $3",["1(?:80|9[04])","1(?:800|9(?:0[01]|4[78]))"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CR:[,[,,"[24-9]\\d{7,9}","\\d{8,10}"],[,,"2[24-7]\\d{6}","\\d{8}",,,"22123456"],[,,"5(?:0[01]|7[0-3])\\d{5}|6(?:[0-2]\\d|30)\\d{5}|7[0-3]\\d{6}|8[3-9]\\d{6}","\\d{8}",,,"83123456"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"90[059]\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"210[0-6]\\d{4}|4(?:0(?:0[01]\\d{4}|10[0-3]\\d{3}|2(?:00\\d{3}|900\\d{2})|3[01]\\d{4}|40\\d{4}|5\\d{5}|60\\d{4}|70[01]\\d{3}|8[0-2]\\d{4})|1[01]\\d{5}|20[0-3]\\d{4}|400\\d{4}|70[0-2]\\d{4})|5100\\d{4}","\\d{8}",,,"40001234"],"CR",506,"00",,,,"(19(?:0[012468]|1[09]|20|66|77|99))",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[24-7]|8[3-9]"],"","$CC $1",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]0"],"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CU:[,[,,"[2-57]\\d{5,7}",
+"\\d{4,8}"],[,,"2[1-4]\\d{5,6}|3(?:1\\d{6}|[23]\\d{4,6})|4(?:[125]\\d{5,6}|[36]\\d{6}|[78]\\d{4,6})|7\\d{6,7}","\\d{4,8}",,,"71234567"],[,,"5\\d{7}","\\d{8}",,,"51234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CU",53,"119","0",,,"0",,,,[[,"(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)","",0],[,"(\\d{2})(\\d{4,6})","$1 $2",["[2-4]"],"(0$1)","",0],[,"(\\d)(\\d{7})","$1 $2",["5"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CV:[,[,,"[259]\\d{6}",
+"\\d{7}"],[,,"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}","\\d{7}",,,"2211234"],[,,"(?:9\\d|59)\\d{5}","\\d{7}",,,"9911234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"CV",238,"0",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CW:[,[,,"[169]\\d{6,7}","\\d{7,8}"],[,,"9(?:[48]\\d{2}|50\\d|7(?:2[0-24]|[34]\\d|6[35-7]|77|8[7-9]))\\d{4}","\\d{7,8}",,,"94151234"],[,,"9(?:5(?:[1246]\\d|3[01])|6(?:[16-9]\\d|3[01]))\\d{4}",
+"\\d{7,8}",,,"95181234"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:10|69)\\d{5}","\\d{7}",,,"1011234"],[,,"NA","NA"],[,,"NA","NA"],"CW",599,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-7]"],"","",0],[,"(9)(\\d{3})(\\d{4})","$1 $2 $3",["9"],"","",0]],,[,,"955\\d{5}","\\d{7,8}",,,"95581234"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CX:[,[,,"[1458]\\d{5,9}","\\d{6,10}"],[,,"89164\\d{4}","\\d{8,9}",,,"891641234"],[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[03-9]|8[17-9]|9[017-9])\\d{6}",
+"\\d{9}",,,"412345678"],[,,"1(?:80(?:0\\d{2})?|3(?:00\\d{2})?)\\d{4}","\\d{6,10}",,,"1800123456"],[,,"190[0126]\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"500\\d{6}","\\d{9}",,,"500123456"],[,,"550\\d{6}","\\d{9}",,,"550123456"],"CX",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],CY:[,[,,"[257-9]\\d{7}","\\d{8}"],[,,"2[2-6]\\d{6}","\\d{8}",,,"22345678"],[,,"9[5-79]\\d{6}","\\d{8}",,,"96123456"],[,,
+"800\\d{5}","\\d{8}",,,"80001234"],[,,"90[09]\\d{5}","\\d{8}",,,"90012345"],[,,"80[1-9]\\d{5}","\\d{8}",,,"80112345"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"CY",357,"00",,,,,,,,[[,"(\\d{2})(\\d{6})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"(?:50|77)\\d{6}","\\d{8}",,,"77123456"],,,[,,"NA","NA"]],CZ:[,[,,"[2-8]\\d{8}|9\\d{8,11}","\\d{9,12}"],[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9,12}",,,"212345678"],[,,"(?:60[1-8]|7(?:0[2-5]|[2379]\\d))\\d{6}","\\d{9,12}",
+,,"601123456"],[,,"800\\d{6}","\\d{9,12}",,,"800123456"],[,,"9(?:0[05689]|76)\\d{6}","\\d{9,12}",,,"900123456"],[,,"8[134]\\d{7}","\\d{9,12}",,,"811234567"],[,,"70[01]\\d{6}","\\d{9,12}",,,"700123456"],[,,"9[17]0\\d{6}","\\d{9,12}",,,"910123456"],"CZ",420,"00",,,,,,,,[[,"([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"],"","",0],[,"(96\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["96"],"","",0],[,"(9\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9[36]"],"","",0]],,[,,"NA","NA"],,,[,,"NA",
+"NA"],[,,"9(?:5\\d|7[234])\\d{6}","\\d{9,12}",,,"972123456"],,,[,,"9(?:3\\d{9}|6\\d{7,10})","\\d{9,12}",,,"93123456789"]],DE:[,[,,"[1-35-9]\\d{3,14}|4(?:[0-8]\\d{4,12}|9(?:[0-37]\\d|4(?:[1-35-8]|4\\d?)|5\\d{1,2}|6[1-8]\\d?)\\d{2,8})","\\d{2,15}"],[,,"[246]\\d{5,13}|3(?:0\\d{3,13}|2\\d{9}|[3-9]\\d{4,13})|5(?:0[2-8]|[1256]\\d|[38][0-8]|4\\d{0,2}|[79][0-7])\\d{3,11}|7(?:0[2-8]|[1-9]\\d)\\d{3,10}|8(?:0[2-9]|[1-9]\\d)\\d{3,10}|9(?:0[6-9]\\d{3,10}|1\\d{4,12}|[2-9]\\d{4,11})","\\d{2,15}",,,"30123456"],[,
+,"1(?:5[0-2579]\\d{8}|6[023]\\d{7,8}|7(?:[0-57-9]\\d?|6\\d)\\d{7})","\\d{10,11}",,,"15123456789"],[,,"800\\d{7,12}","\\d{10,15}",,,"8001234567890"],[,,"137[7-9]\\d{6}|900(?:[135]\\d{6}|9\\d{7})","\\d{10,11}",,,"9001234567"],[,,"1(?:3(?:7[1-6]\\d{6}|8\\d{4})|80\\d{5,11})","\\d{7,14}",,,"18012345"],[,,"700\\d{8}","\\d{11}",,,"70012345678"],[,,"NA","NA"],"DE",49,"00","0",,,"0",,,,[[,"(1\\d{2})(\\d{7,8})","$1 $2",["1[67]"],"0$1","",0],[,"(1\\d{3})(\\d{7})","$1 $2",["15"],"0$1","",0],[,"(\\d{2})(\\d{3,11})",
+"$1 $2",["3[02]|40|[68]9"],"0$1","",0],[,"(\\d{3})(\\d{3,11})","$1 $2",["2(?:\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)"],"0$1","",0],[,"(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))"],
+"0$1","",0],[,"(3\\d{4})(\\d{1,10})","$1 $2",["3"],"0$1","",0],[,"(800)(\\d{7,12})","$1 $2",["800"],"0$1","",0],[,"(177)(99)(\\d{7,8})","$1 $2 $3",["177","1779","17799"],"0$1","",0],[,"(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["(?:18|90)0|137","1(?:37|80)|900[1359]"],"0$1","",0],[,"(1\\d{2})(\\d{5,11})","$1 $2",["181"],"0$1","",0],[,"(18\\d{3})(\\d{6})","$1 $2",["185","1850","18500"],"0$1","",0],[,"(18\\d{2})(\\d{7})","$1 $2",["18[68]"],"0$1","",0],[,"(18\\d)(\\d{8})","$1 $2",["18[2-579]"],"0$1","",0],
+[,"(700)(\\d{4})(\\d{4})","$1 $2 $3",["700"],"0$1","",0],[,"(138)(\\d{4})","$1 $2",["138"],"0$1","",0]],,[,,"16(?:4\\d{1,10}|[89]\\d{1,11})","\\d{4,14}",,,"16412345"],,,[,,"NA","NA"],[,,"18(?:1\\d{5,11}|[2-9]\\d{8})","\\d{8,14}",,,"18500123456"],,,[,,"17799\\d{7,8}","\\d{12,13}",,,"177991234567"]],DJ:[,[,,"[27]\\d{7}","\\d{8}"],[,,"2(?:1[2-5]|7[45])\\d{5}","\\d{8}",,,"21360003"],[,,"77[6-8]\\d{5}","\\d{8}",,,"77831001"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"DJ",253,
+"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DK:[,[,,"[2-9]\\d{7}","\\d{8}"],[,,"(?:[2-7]\\d|8[126-9]|9[1-36-9])\\d{6}","\\d{8}",,,"32123456"],[,,"(?:[2-7]\\d|8[126-9]|9[1-36-9])\\d{6}","\\d{8}",,,"20123456"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"DK",45,"00",,,,,,,1,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DM:[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4]|70[1-3])\\d{4}","\\d{7}(?:\\d{3})?",,,"7674201234"],[,,"767(?:2(?:[234689]5|7[5-7])|31[5-7]|61[2-7])\\d{4}","\\d{10}",,,"7672251234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"DM",1,"011",
+"1",,,"1",,,,,,[,,"NA","NA"],,"767",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DO:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"8(?:[04]9[2-9]\\d{6}|29(?:2(?:[0-59]\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\d|4[7-9])|[45]\\d{2}|6(?:[0-27-9]\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9]))\\d{4})","\\d{7}(?:\\d{3})?",
+,,"8092345678"],[,,"8[024]9[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"8092345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"DO",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"8[024]9",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],DZ:[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"],[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}",,,"12345678"],
+[,,"(?:5[4-6]|7[7-9])\\d{7}|6(?:[569]\\d|7[0-4])\\d{6}","\\d{9}",,,"551234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"80[3-689]1\\d{5}","\\d{9}",,,"808123456"],[,,"80[12]1\\d{5}","\\d{9}",,,"801123456"],[,,"NA","NA"],[,,"98[23]\\d{6}","\\d{9}",,,"983123456"],"DZ",213,"00","0",,,"0",,,,[[,"([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1","",0],[,"([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1","",0],[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1",
+"",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EC:[,[,,"1\\d{9,10}|[2-8]\\d{7}|9\\d{8}","\\d{7,11}"],[,,"[2-7][2-7]\\d{6}","\\d{7,8}",,,"22123456"],[,,"9(?:39|[45][89]|[67][7-9]|[89]\\d)\\d{6}","\\d{9}",,,"991234567"],[,,"1800\\d{6,7}","\\d{10,11}",,,"18001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"[2-7]890\\d{4}","\\d{8}",,,"28901234"],"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[247]|[356][2-8]"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{4})",
+"$1 $2 $3",["9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"],"$1","",0]],[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[247]|[356][2-8]"]],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"],"$1","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EE:[,[,,"1\\d{3,4}|[3-9]\\d{6,7}|800\\d{6,7}","\\d{4,10}"],[,,"(?:3[23589]|4[3-8]|6\\d|7[1-9]|88)\\d{5}","\\d{7}",,,"3212345"],[,,"(?:5\\d|8[1-5])\\d{6}|5(?:[02]\\d{2}|1(?:[0-8]\\d|95)|5[0-478]\\d|64[0-4]|65[1-589])\\d{3}",
+"\\d{7,8}",,,"51234567"],[,,"800(?:0\\d{3}|1\\d|[2-9])\\d{3}","\\d{7,10}",,,"80012345"],[,,"(?:40\\d{2}|900)\\d{4}","\\d{7,8}",,,"9001234"],[,,"NA","NA"],[,,"70[0-2]\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"EE",372,"00",,,,,,,,[[,"([3-79]\\d{2})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]"],"","",0],[,"(70)(\\d{2})(\\d{4})","$1 $2 $3",["70"],"","",0],[,"(8000)(\\d{3})(\\d{3})","$1 $2 $3",["800","8000"],
+"","",0],[,"([458]\\d{3})(\\d{3,4})","$1 $2",["40|5|8(?:00|[1-5])","40|5|8(?:00[1-9]|[1-5])"],"","",0]],,[,,"NA","NA"],,,[,,"1\\d{3,4}|800[2-9]\\d{3}","\\d{4,7}",,,"8002123"],[,,"1(?:2[01245]|3[0-6]|4[1-489]|5[0-59]|6[1-46-9]|7[0-27-9]|8[189]|9[012])\\d{1,2}","\\d{4,5}",,,"12123"],,,[,,"NA","NA"]],EG:[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"],[,,"(?:1(?:3[23]\\d|5(?:[23]|9\\d))|2[2-4]\\d{2}|3\\d{2}|4(?:0[2-5]|[578][23]|64)\\d|5(?:0[2-7]|[57][23])\\d|6[24-689]3\\d|8(?:2[2-57]|4[26]|6[237]|8[2-4])\\d|9(?:2[27]|3[24]|52|6[2356]|7[2-4])\\d)\\d{5}|1[69]\\d{3}",
+"\\d{5,9}",,,"234567890"],[,,"1(?:0[0-269]|1[0-245]|2[0-278])\\d{7}","\\d{10}",,,"1001234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1[012]|[89]00"],"0$1","",0],[,"(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|[89][2-9]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],EH:[,
+[,,"[5689]\\d{8}","\\d{9}"],[,,"528[89]\\d{5}","\\d{9}",,,"528812345"],[,,"6(?:0[0-8]|[12-7]\\d|8[01]|9[2457-9])\\d{6}","\\d{9}",,,"650123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89\\d{7}","\\d{9}",,,"891234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"EH",212,"00","0",,,"0",,,,,,[,,"NA","NA"],,"528[89]",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ER:[,[,,"[178]\\d{6}","\\d{6,7}"],[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}",,,"8370362"],[,,"17[1-3]\\d{4}|7\\d{6}","\\d{7}",
+,,"7123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ER",291,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ES:[,[,,"[5-9]\\d{8}","\\d{9}"],[,,"8(?:[13]0|[28][0-8]|[47][1-9]|5[01346-9]|6[0457-9])\\d{6}|9(?:[1238][0-8]\\d{6}|4[1-9]\\d{6}|5\\d{7}|6(?:[0-8]\\d{6}|9(?:0(?:[0-57-9]\\d{4}|6(?:0[0-8]|1[1-9]|[2-9]\\d)\\d{2})|[1-9]\\d{5}))|7(?:[124-9]\\d{2}|3(?:[0-8]\\d|9[1-9]))\\d{4})","\\d{9}",
+,,"810123456"],[,,"(?:6\\d{6}|7[1-4]\\d{5}|9(?:6906(?:09|10)|7390\\d{2}))\\d{2}","\\d{9}",,,"612345678"],[,,"[89]00\\d{6}","\\d{9}",,,"800123456"],[,,"80[367]\\d{6}","\\d{9}",,,"803123456"],[,,"90[12]\\d{6}","\\d{9}",,,"901123456"],[,,"70\\d{7}","\\d{9}",,,"701234567"],[,,"NA","NA"],"ES",34,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[568]|[79][0-8]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"51\\d{7}","\\d{9}",,,"511234567"],,,[,,"NA","NA"]],ET:[,[,,"[1-59]\\d{8}","\\d{7,9}"],
+[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-3]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}",
+"\\d{7,9}",,,"111112345"],[,,"9(?:[1-3]\\d|5[89])\\d{6}","\\d{9}",,,"911234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ET",251,"00","0",,,"0",,,,[[,"([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FI:[,[,,"1\\d{4,11}|[2-9]\\d{4,10}","\\d{5,12}"],[,,"1(?:[3569][1-8]\\d{3,9}|[47]\\d{5,10})|2[1-8]\\d{3,9}|3(?:[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}","\\d{5,12}",,,"1312345678"],[,,"4\\d{5,10}|50\\d{4,8}",
+"\\d{6,11}",,,"412345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"[67]00\\d{5,6}","\\d{8,9}",,,"600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FI",358,"00|99[049]","0",,,"0",,,,[[,"(\\d{3})(\\d{3,7})","$1 $2",["(?:[1-3]00|[6-8]0)"],"0$1","",0],[,"(\\d{2})(\\d{4,10})","$1 $2",["[14]|2[09]|50|7[135]"],"0$1","",0],[,"(\\d)(\\d{4,11})","$1 $2",["[25689][1-8]|3"],"0$1","",0]],,[,,"NA","NA"],1,,[,,"[13]00\\d{3,7}|2(?:0(?:0\\d{3,7}|2[023]\\d{1,6}|9[89]\\d{1,6}))|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})",
+"\\d{5,10}",,,"100123"],[,,"[13]0\\d{4,8}|2(?:0(?:[016-8]\\d{3,7}|[2-59]\\d{2,7})|9\\d{4,8})|60(?:[12]\\d{5,6}|6\\d{7})|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"],,,[,,"NA","NA"]],FJ:[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"],[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}",,,"3212345"],[,,"(?:7[0-8]|8[034679]|9\\d)\\d{5}","\\d{7}",,,"7012345"],[,,"0800\\d{7}","\\d{11}",,,"08001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FJ",679,"0(?:0|52)",,,,,,"00",
+,[[,"(\\d{3})(\\d{4})","$1 $2",["[36-9]"],"","",0],[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],FK:[,[,,"[2-7]\\d{4}","\\d{5}"],[,,"[2-47]\\d{4}","\\d{5}",,,"31234"],[,,"[56]\\d{4}","\\d{5}",,,"51234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FK",500,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FM:[,[,,"[39]\\d{6}","\\d{7}"],[,,"3[2357]0[1-9]\\d{3}|9[2-6]\\d{5}","\\d{7}",
+,,"3201234"],[,,"3[2357]0[1-9]\\d{3}|9[2-7]\\d{5}","\\d{7}",,,"3501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"FM",691,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FO:[,[,,"[2-9]\\d{5}","\\d{6}"],[,,"(?:20|[3-4]\\d|8[19])\\d{4}","\\d{6}",,,"201234"],[,,"(?:2[1-9]|5\\d|7[1-79])\\d{4}","\\d{6}",,,"211234"],[,,"80[257-9]\\d{3}","\\d{6}",,,"802123"],[,,"90(?:[1345][15-7]|2[125-7]|99)\\d{2}","\\d{6}",
+,,"901123"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:6[0-36]|88)\\d{4}","\\d{6}",,,"601234"],"FO",298,"00",,,,"(10(?:01|[12]0|88))",,,,[[,"(\\d{6})","$1",,"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],FR:[,[,,"[1-9]\\d{8}","\\d{9}"],[,,"[1-5]\\d{8}","\\d{9}",,,"123456789"],[,,"6\\d{8}|7[5-9]\\d{7}","\\d{9}",,,"612345678"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"],[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"],[,,"NA",
+"NA"],[,,"9\\d{8}","\\d{9}",,,"912345678"],"FR",33,"00","0",,,"0",,,,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1","",0],[,"(1\\d{2})(\\d{3})","$1 $2",["11"],"$1","",0],[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1","",0]],[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1","",0],[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GA:[,[,
+,"0?\\d{7}","\\d{7,8}"],[,,"01\\d{6}","\\d{8}",,,"01441234"],[,,"0?[2-7]\\d{6}","\\d{7,8}",,,"06031234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GA",241,"00",,,,,,,,[[,"(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],GB:[,[,,"\\d{7,10}","\\d{4,10}"],[,,"2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-49]|8[01349])|21[0-7]|31[0-8]|[459]1\\d|61[0-46-9]))\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\\d)|3(?:0\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|[28][02-5789]|[37]\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\\d|9[2-57]))\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\d)|276\\d|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[567]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}|176888[234678]\\d{2}|16977[23]\\d{3}",
+"\\d{4,10}",,,"1212345678"],[,,"7(?:[1-4]\\d\\d|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[04-9]\\d|1[02-9]|2[0-35-9]|3[0-689]))\\d{6}","\\d{10}",,,"7400123456"],[,,"80(?:0(?:1111|\\d{6,7})|8\\d{7})|500\\d{6}","\\d{7}(?:\\d{2,3})?",,,"8001234567"],[,,"(?:87[123]|9(?:[01]\\d|8[2349]))\\d{7}","\\d{10}",,,"9012345678"],[,,"8(?:4(?:5464\\d|[2-5]\\d{7})|70\\d{7})","\\d{7}(?:\\d{3})?",,,"8431234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}",
+"\\d{10}",,,"5612345678"],"GB",44,"00","0"," x",,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2|5[56]|7(?:0|6[013-9])","2|5[56]|7(?:0|6(?:[013-9]|2[0-35-9]))"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:1|\\d1)|3|9[018]"],"0$1","",0],[,"(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:387|5(?:24|39)|697|768|946)","1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)"],"0$1","",0],[,"(1\\d{3})(\\d{5,6})","$1 $2",["1"],"0$1","",0],[,"(7\\d{3})(\\d{6})","$1 $2",["7(?:[1-5789]|62)",
+"7(?:[1-5789]|624)"],"0$1","",0],[,"(800)(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1","",0],[,"(845)(46)(4\\d)","$1 $2 $3",["845","8454","84546","845464"],"0$1","",0],[,"(8\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:4[2-5]|7[0-3])"],"0$1","",0],[,"(80\\d)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1","",0],[,"([58]00)(\\d{6})","$1 $2",["[58]00"],"0$1","",0]],,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],1,,[,,"NA","NA"],[,,"(?:3[0347]|55)\\d{8}",
+"\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],GD:[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|800|938)\\d{4}","\\d{7}(?:\\d{3})?",,,"4732691234"],[,,"473(?:4(?:0[2-79]|1[04-9]|20|58)|5(?:2[01]|3[3-8])|901)\\d{4}","\\d{10}",,,"4734031234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",
+,,"5002345678"],[,,"NA","NA"],"GD",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"473",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GE:[,[,,"[34578]\\d{8}","\\d{6,9}"],[,,"(?:3(?:[256]\\d|4[124-9]|7[0-4])|4(?:1\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\d{6}","\\d{6,9}",,,"322123456"],[,,"5(?:14|5[01578]|68|7[0147-9]|9[0-35-9])\\d{6}","\\d{9}",,,"555123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"706\\d{6}","\\d{9}",,,"706123456"],"GE",995,"00","0",,,"0",,,,[[,
+"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5"],"$1","",0]],,[,,"NA","NA"],,,[,,"706\\d{6}","\\d{9}",,,"706123456"],[,,"NA","NA"],,,[,,"NA","NA"]],GF:[,[,,"[56]\\d{8}","\\d{9}"],[,,"594(?:10|2[012457-9]|3[0-57-9]|4[3-9]|5[7-9]|6[0-3]|9[014])\\d{4}","\\d{9}",,,"594101234"],[,,"694(?:[04][0-7]|1[0-5]|3[018]|[29]\\d)\\d{4}","\\d{9}",,,"694201234"],[,,"NA","NA"],[,
+,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GF",594,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GG:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1481\\d{6}","\\d{6,10}",,,"1481456789"],[,,"7(?:781|839|911)\\d{6}","\\d{10}",,,"7781123456"],[,,"80(?:0(?:1111|\\d{6,7})|8\\d{7})|500\\d{6}","\\d{7}(?:\\d{2,3})?",,,"8001234567"],[,,"(?:87[123]|9(?:[01]\\d|8[0-3]))\\d{7}","\\d{10}",,,"9012345678"],
+[,,"8(?:4(?:5464\\d|[2-5]\\d{7})|70\\d{7})","\\d{7}(?:\\d{3})?",,,"8431234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"GG",44,"00","0"," x",,"0",,,,,,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],,,[,,"NA","NA"],[,,"(?:3[0347]|55)\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],GH:[,[,,"[235]\\d{8}|8\\d{7}","\\d{7,9}"],[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-3]|7\\d)|4(?:2[013-9]|3[01]|7\\d)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}",
+"\\d{7,9}",,,"302345678"],[,,"(?:2[034678]\\d|5(?:[047]\\d|54))\\d{6}","\\d{9}",,,"231234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GH",233,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1","",0],[,"(\\d{3})(\\d{5})","$1 $2",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],,,[,,"NA","NA"]],GI:[,[,,"[2568]\\d{7}","\\d{8}"],[,,"2(?:00\\d|1(?:6[24-7]|9\\d)|2(?:00|2[2457]))\\d{4}",
+"\\d{8}",,,"20012345"],[,,"(?:5[46-8]|62)\\d{6}","\\d{8}",,,"57123456"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"8[1-689]\\d{6}","\\d{8}",,,"88123456"],[,,"87\\d{6}","\\d{8}",,,"87123456"],[,,"NA","NA"],[,,"NA","NA"],"GI",350,"00",,,,,,,,[[,"(\\d{3})(\\d{5})","$1 $2",["2"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GL:[,[,,"[1-689]\\d{5}","\\d{6}"],[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}",,,"321000"],[,,"[245][2-9]\\d{4}","\\d{6}",,,"221234"],[,,"80\\d{4}",
+"\\d{6}",,,"801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"3[89]\\d{4}","\\d{6}",,,"381234"],"GL",299,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GM:[,[,,"[2-9]\\d{6}","\\d{7}"],[,,"(?:4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}",,,"5661234"],[,,"(?:2[0-6]|[3679]\\d)\\d{5}","\\d{7}",,,"3012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],[,,"NA","NA"],"GM",220,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GN:[,[,,"[367]\\d{7,8}","\\d{8,9}"],[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}",,,"30241234"],[,,"6[02356]\\d{7}","\\d{9}",,,"601123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"722\\d{6}","\\d{9}",,,"722123456"],"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"],"","",0],
+[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GP:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:0[13468]|1[012]|2[0-68]|3[28]|4[0-8]|5[579]|6[0189]|70|8[0-689]|9\\d)\\d{4}","\\d{9}",,,"590201234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GP",590,"00","0",,,"0",,,,[[,"([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,"0$1","",0]],,[,,"NA","NA"],1,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GQ:[,[,,"[23589]\\d{8}","\\d{9}"],[,,"3(?:3(?:3\\d[7-9]|[0-24-9]\\d[46])|5\\d{2}[7-9])\\d{4}","\\d{9}",,,"333091234"],[,,"(?:222|551)\\d{6}","\\d{9}",,,"222123456"],[,,"80\\d[1-9]\\d{5}","\\d{9}",,,"800123456"],[,,"90\\d[1-9]\\d{5}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GQ",240,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"],"","",0],[,"(\\d{3})(\\d{6})","$1 $2",["[89]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],
+[,,"NA","NA"],,,[,,"NA","NA"]],GR:[,[,,"[26-9]\\d{9}","\\d{10}"],[,,"2(?:1\\d{2}|2(?:2[1-46-9]|3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[89][1-9])|3(?:1\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\d|3[1245]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-57]))\\d{6}","\\d{10}",,,"2123456789"],[,,"69\\d{8}","\\d{10}",,,"6912345678"],
+[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"90[19]\\d{7}","\\d{10}",,,"9091234567"],[,,"8(?:0[16]|12|25)\\d{7}","\\d{10}",,,"8011234567"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"NA","NA"],"GR",30,"00",,,,,,,,[[,"([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["21|7"],"","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2[2-9]1|[689]"],"","",0],[,"(2\\d{3})(\\d{6})","$1 $2",["2[2-9][02-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GT:[,[,,"[2-7]\\d{7}|1[89]\\d{9}","\\d{8}(?:\\d{3})?"],
+[,,"[267][2-9]\\d{6}","\\d{8}",,,"22456789"],[,,"[345]\\d{7}","\\d{8}",,,"51234567"],[,,"18[01]\\d{8}","\\d{11}",,,"18001112222"],[,,"19\\d{9}","\\d{11}",,,"19001112222"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GT",502,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[2-7]"],"","",0],[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GU:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}",
+"\\d{7}(?:\\d{3})?",,,"6713001234"],[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}","\\d{7}(?:\\d{3})?",,,"6713001234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"GU",1,"011",
+"1",,,"1",,,1,,,[,,"NA","NA"],,"671",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GW:[,[,,"[3-79]\\d{6}","\\d{7}"],[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}",,,"3201234"],[,,"(?:[5-7]\\d|9[012])\\d{5}","\\d{7}",,,"5012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"40\\d{5}","\\d{7}",,,"4012345"],"GW",245,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],GY:[,[,,"[2-4679]\\d{6}","\\d{7}"],[,,
+"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-24-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|77[1-57])\\d{4}","\\d{7}",,,"2201234"],[,,"6\\d{6}","\\d{7}",,,"6091234"],[,,"(?:289|862)\\d{4}","\\d{7}",,,"2891234"],[,,"9008\\d{3}","\\d{7}",,,"9008123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"GY",592,"001",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HK:[,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{4,10}","\\d{5,11}"],[,,"(?:[23]\\d|5[78])\\d{6}",
+"\\d{8}",,,"21234567"],[,,"(?:5[1-69]\\d|6\\d{2}|9(?:0[1-9]|[1-8]\\d))\\d{5}","\\d{8}",,,"51234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900(?:[0-24-9]\\d{7}|3\\d{1,4})","\\d{5,11}",,,"90012345678"],[,,"NA","NA"],[,,"8[1-3]\\d{6}","\\d{8}",,,"81123456"],[,,"NA","NA"],"HK",852,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[235-7]|[89](?:0[1-9]|[1-9])"],"","",0],[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["800"],"","",0],[,"(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["900"],"","",0],[,"(900)(\\d{2,5})",
+"$1 $2",["900"],"","",0]],,[,,"7\\d{7}","\\d{8}",,,"71234567"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HN:[,[,,"[237-9]\\d{7}","\\d{8}"],[,,"2(?:2(?:0[019]|1[1-36]|[23]\\d|4[056]|5[57]|7[01389]|8[0146-9]|9[012])|4(?:2[3-59]|3[13-689]|4[0-68]|5[1-35])|5(?:4[3-5]|5\\d|6[56]|74)|6(?:[056]\\d|4[0-378]|[78][0-8]|9[01])|7(?:6[46-9]|7[02-9]|8[34])|8(?:79|8[0-35789]|9[1-57-9]))\\d{4}","\\d{8}",,,"22123456"],[,,"[37-9]\\d{7}","\\d{8}",,,"91234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"HN",504,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1-$2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HR:[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"],[,,"1\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,8}",,,"12345678"],[,,"9[1257-9]\\d{6,10}","\\d{8,12}",,,"912345678"],[,,"80[01]\\d{4,7}","\\d{7,10}",,,"8001234567"],[,,"6(?:[09]\\d{7}|[145]\\d{4,7})","\\d{6,9}",,,"611234"],[,,"NA","NA"],[,,"7[45]\\d{4,7}","\\d{6,9}",,,"741234567"],[,,"NA","NA"],
+"HR",385,"00","0",,,"0",,,,[[,"(1)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1","",0],[,"(6[09])(\\d{4})(\\d{3})","$1 $2 $3",["6[09]"],"0$1","",0],[,"(62)(\\d{3})(\\d{3,4})","$1 $2 $3",["62"],"0$1","",0],[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"],"0$1","",0],[,"(9\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1","",0],[,"(9\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9"],"0$1","",0],[,"(9\\d)(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"],
+"0$1","",0],[,"(\\d{2})(\\d{3,4})(\\d{3})","$1 $2 $3",["6[145]|7"],"0$1","",0],[,"(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1","",0],[,"(80[01])(\\d{3,4})(\\d{3})","$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"62\\d{6,7}","\\d{8,9}",,,"62123456"],,,[,,"NA","NA"]],HT:[,[,,"[2-489]\\d{7}","\\d{8}"],[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}",,,"22453300"],[,,"(?:3[1-9]|4\\d)\\d{6}","\\d{8}",,,"34101234"],[,,"8\\d{7}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"98[89]\\d{5}","\\d{8}",,,"98901234"],"HT",509,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],HU:[,[,,"[1-9]\\d{7,8}","\\d{6,9}"],[,,"(?:1\\d|2(?:1\\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\\d|[2-9])|8[2-57-9]|9[2-69])\\d{6}","\\d{6,9}",,,"12345678"],[,,"(?:[27]0|3[01])\\d{7}","\\d{9}",,,"201234567"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"9[01]\\d{6}","\\d{8}",,,"90123456"],[,,"40\\d{6}","\\d{8}",,,"40123456"],
+[,,"NA","NA"],[,,"NA","NA"],"HU",36,"00","06",,,"06",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"($1)","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"($1)","",0]],,[,,"NA","NA"],,,[,,"[48]0\\d{6}","\\d{8}",,,"80123456"],[,,"NA","NA"],,,[,,"NA","NA"]],ID:[,[,,"[1-9]\\d{6,10}","\\d{5,11}"],[,,"2(?:1(?:14\\d{3}|[0-8]\\d{6,7}|500\\d{3}|9\\d{6})|[24]\\d{7,8})|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}",
+"\\d{5,10}",,,"612345678"],[,,"(?:2(?:1(?:3[145]|4[01]|5[1-469]|60|8[0359]|9\\d)|2(?:88|9[1256])|3[1-4]9|4(?:36|91)|5(?:1[349]|[2-4]9)|6[0-7]9|7(?:[1-36]9|4[39])|8[1-5]9|9[1-48]9)|3(?:19[1-3]|2[12]9|3[13]9|4(?:1[69]|39)|5[14]9|6(?:1[69]|2[89])|709)|4[13]19|5(?:1(?:19|8[39])|4[129]9|6[12]9)|6(?:19[12]|2(?:[23]9|77))|7(?:1[13]9|2[15]9|419|5(?:1[89]|29)|6[15]9|7[178]9))\\d{5,6}|8[1-35-9]\\d{7,9}","\\d{9,11}",,,"812345678"],[,,"177\\d{6,8}|800\\d{5,7}","\\d{8,11}",,,"8001234567"],[,,"809\\d{7}","\\d{10}",
+,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ID",62,"0(?:0[1789]|10(?:00|1[67]))","0",,,"0",,,,[[,"(\\d{2})(\\d{5,8})","$1 $2",["2[124]|[36]1"],"(0$1)","",0],[,"(\\d{3})(\\d{5,7})","$1 $2",["[4579]|2[035-9]|[36][02-9]"],"(0$1)","",0],[,"(8\\d{2})(\\d{3,4})(\\d{3,4})","$1-$2-$3",["8[1-35-9]"],"0$1","",0],[,"(177)(\\d{6,8})","$1 $2",["1"],"0$1","",0],[,"(800)(\\d{5,7})","$1 $2",["800"],"0$1","",0],[,"(80\\d)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80[79]"],"0$1","",0]],,[,,"NA","NA"],,,
+[,,"8071\\d{6}","\\d{10}",,,"8071123456"],[,,"8071\\d{6}","\\d{10}",,,"8071123456"],,,[,,"NA","NA"]],IE:[,[,,"[124-9]\\d{6,9}","\\d{5,10}"],[,,"1\\d{7,8}|2(?:1\\d{6,7}|3\\d{7}|[24-9]\\d{5})|4(?:0[24]\\d{5}|[1-469]\\d{7}|5\\d{6}|7\\d{5}|8[0-46-9]\\d{7})|5(?:0[45]\\d{5}|1\\d{6}|[23679]\\d{7}|8\\d{5})|6(?:1\\d{6}|[237-9]\\d{5}|[4-6]\\d{7})|7[14]\\d{7}|9(?:1\\d{6}|[04]\\d{7}|[35-9]\\d{5})","\\d{5,10}",,,"2212345"],[,,"8(?:22\\d{6}|[35-9]\\d{7})","\\d{9}",,,"850123456"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],
+[,,"15(?:1[2-8]|[2-8]0|9[089])\\d{6}","\\d{10}",,,"1520123456"],[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"],[,,"700\\d{6}","\\d{9}",,,"700123456"],[,,"76\\d{7}","\\d{9}",,,"761234567"],"IE",353,"00","0",,,"0",,,,[[,"(1)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)","",0],[,"(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)","",0],[,"(\\d{3})(\\d{5})","$1 $2",["40[24]|50[45]"],"(0$1)","",0],[,"(48)(\\d{4})(\\d{4})","$1 $2 $3",["48"],"(0$1)","",0],[,"(818)(\\d{3})(\\d{3})","$1 $2 $3",
+["81"],"(0$1)","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[24-69]|7[14]"],"(0$1)","",0],[,"([78]\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["76|8[35-9]"],"0$1","",0],[,"(700)(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1","",0],[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:8[059]|5)","1(?:8[059]0|5)"],"$1","",0]],,[,,"NA","NA"],,,[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"],[,,"818\\d{6}","\\d{9}",,,"818123456"],,,[,,"8[35-9]\\d{8}","\\d{10}",,,"8501234567"]],IL:[,[,,"[17]\\d{6,9}|[2-589]\\d{3}(?:\\d{3,6})?|6\\d{3}",
+"\\d{4,10}"],[,,"[2-489]\\d{7}","\\d{7,8}",,,"21234567"],[,,"5(?:[02347-9]\\d{2}|5(?:01|2[23]|3[34]|4[45]|5[5689]|6[67]|7[78]|8[89]|9[7-9])|6[2-9]\\d)\\d{5}","\\d{9}",,,"501234567"],[,,"1(?:80[019]\\d{3}|255)\\d{3}","\\d{7,10}",,,"1800123456"],[,,"1(?:212|(?:9(?:0[01]|19)|200)\\d{2})\\d{4}","\\d{8,10}",,,"1919123456"],[,,"1700\\d{6}","\\d{10}",,,"1700123456"],[,,"NA","NA"],[,,"7(?:2[23]\\d|3[237]\\d|47\\d|6(?:5\\d|8[068])|7\\d{2}|8(?:33|55|77|81))\\d{5}","\\d{9}",,,"771234567"],"IL",972,"0(?:0|1[2-9])",
+"0",,,"0",,,,[[,"([2-489])(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1","",0],[,"([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1","",0],[,"(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"],"$1","",0],[,"(1255)(\\d{3})","$1-$2",["125"],"$1","",0],[,"(1200)(\\d{3})(\\d{3})","$1-$2-$3",["120"],"$1","",0],[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"],"$1","",0],[,"(1599)(\\d{6})","$1-$2",["15"],"$1","",0],[,"(\\d{4})","*$1",["[2-689]"],"$1","",0]],,[,,"NA","NA"],,,[,,"1700\\d{6}|[2-689]\\d{3}",
+"\\d{4,10}",,,"1700123456"],[,,"[2-689]\\d{3}|1599\\d{6}","\\d{4}(?:\\d{6})?",,,"1599123456"],,,[,,"NA","NA"]],IM:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1624\\d{6}","\\d{6,10}",,,"1624456789"],[,,"7[569]24\\d{6}","\\d{10}",,,"7924123456"],[,,"808162\\d{4}","\\d{10}",,,"8081624567"],[,,"(?:872299|90[0167]624)\\d{4}","\\d{10}",,,"9016247890"],[,,"8(?:4(?:40[49]06|5624\\d)|70624\\d)\\d{3}","\\d{10}",,,"8456247890"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"IM",
+44,"00","0"," x",,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"3(?:08162\\d|3\\d{5}|4(?:40[49]06|5624\\d)|7(?:0624\\d|2299\\d))\\d{3}|55\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],IN:[,[,,"1\\d{7,12}|[2-9]\\d{9,10}","\\d{6,13}"],[,,"(?:11|2[02]|33|4[04]|79)[2-7]\\d{7}|80[2-467]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|[57][2-689]|6[24-578]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-7]\\d{5}",
+"\\d{6,10}",,,"1123456789"],[,,"(?:7(?:0(?:2[2-9]|[3-8]\\d|9[0-4])|2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[1-9]|[58]\\d|7[3679]|9[689])|4(?:0[1-9]|1[15-9]|[29][89]|39|8[389])|5(?:[034678]\\d|2[03-9]|5[017-9]|9[7-9])|6(?:0[0127]|1[0-257-9]|2[0-4]|3[19]|5[4589]|[6-9]\\d)|7(?:0[2-9]|[1-79]\\d|8[1-9])|8(?:[0-7]\\d|9[013-9]))|8(?:0(?:[01589]\\d|6[67])|1(?:[02-589]\\d|1[0135-9]|7[0-79])|2(?:[236-9]\\d|5[1-9])|3(?:[0357-9]\\d|4[1-9])|[45]\\d{2}|6[02457-9]\\d|7[1-69]\\d|8(?:[0-26-9]\\d|44|5[2-9])|9(?:[035-9]\\d|2[2-9]|4[0-8]))|9\\d{3})\\d{6}",
+"\\d{10}",,,"9123456789"],[,,"1(?:600\\d{6}|80(?:0\\d{4,8}|3\\d{9}))","\\d{8,13}",,,"1800123456"],[,,"186[12]\\d{9}","\\d{13}",,,"1861123456789"],[,,"1860\\d{7}","\\d{11}",,,"18603451234"],[,,"NA","NA"],[,,"NA","NA"],"IN",91,"00","0",,,"0",,,,[[,"(\\d{5})(\\d{5})","$1 $2",["7(?:0[2-9]|2[0579]|3[057-9]|4[0-389]|6[0-35-9]|[57]|8[0-79])|8(?:0[015689]|1[0-57-9]|2[2356-9]|3[0-57-9]|[45]|6[02457-9]|7[1-69]|8[0124-9]|9[02-9])|9","7(?:0(?:2[2-9]|[3-8]|9[0-4])|2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[1-9]|[58]|7[3679]|9[689])|4(?:0[1-9]|1[15-9]|[29][89]|39|8[389])|5(?:[034678]|2[03-9]|5[017-9]|9[7-9])|6(?:0[0-27]|1[0-257-9]|2[0-4]|3[19]|5[4589]|[6-9])|7(?:0[2-9]|[1-79]|8[1-9])|8(?:[0-7]|9[013-9]))|8(?:0(?:[01589]|6[67])|1(?:[02-589]|1[0135-9]|7[0-79])|2(?:[236-9]|5[1-9])|3(?:[0357-9]|4[1-9])|[45]|6[02457-9]|7[1-69]|8(?:[0-26-9]|44|5[2-9])|9(?:[035-9]|2[2-9]|4[0-8]))|9"],
+"0$1","",1],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-46]"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[569][14]|7[1257]|8[1346]|[68][1-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",
+["7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)","7(?:12|2[14]|3[134]|4[47]|5(?:1|5[2-6])|[67]1|88)"],"0$1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)"],"0$1","",1],[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[23579]|[468][1-9])|[2-8]"],"0$1","",1],[,"(1600)(\\d{2})(\\d{4})","$1 $2 $3",["160","1600"],"$1","",1],[,"(1800)(\\d{4,5})","$1 $2",["180","1800"],"$1","",1],[,"(18[06]0)(\\d{2,4})(\\d{4})","$1 $2 $3",["18[06]","18[06]0"],"$1","",1],[,"(140)(\\d{3})(\\d{4})",
+"$1 $2 $3",["140"],"$1","",1],[,"(\\d{4})(\\d{3})(\\d{4})(\\d{2})","$1 $2 $3 $4",["18[06]","18(?:03|6[12])"],"$1","",1]],,[,,"NA","NA"],,,[,,"1(?:600\\d{6}|8(?:0(?:0\\d{4,8}|3\\d{9})|6(?:0\\d{7}|[12]\\d{9})))","\\d{8,13}",,,"1800123456"],[,,"140\\d{7}","\\d{10}",,,"1409305260"],,,[,,"NA","NA"]],IO:[,[,,"3\\d{6}","\\d{7}"],[,,"37\\d{5}","\\d{7}",,,"3709100"],[,,"38\\d{5}","\\d{7}",,,"3801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"IO",246,"00",,,,,,,,[[,"(\\d{3})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],IQ:[,[,,"[1-7]\\d{7,9}","\\d{6,10}"],[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}",,,"12345678"],[,,"7[3-9]\\d{8}","\\d{10}",,,"7912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"IQ",964,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1","",0],[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1","",0],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",
+["7"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],IR:[,[,,"[14-8]\\d{6,9}|[23]\\d{4,9}|9(?:[0-4]\\d{8}|9\\d{2,8})","\\d{4,10}"],[,,"1(?:[13-589][12]|[27][1-4])\\d{7}|2(?:1\\d{3,8}|3[12]\\d{7}|4(?:1\\d{4,7}|2\\d{7})|53\\d{7}|6\\d{8}|7[34]\\d{7}|[89][12]\\d{7})|3(?:1[2-5]\\d{7}|2[1-4]\\d{7}|3(?:[125]\\d{7}|4\\d{6,7})|4(?:1\\d{6,7}[24-9]\\d{7})|5(?:1\\d{4,7}|[23]\\d{7})|[6-9][12]\\d{7})|4(?:[135-9][12]\\d{7}|2[1-467]\\d{7}|4(?:1\\d{4,7}|[2-4]\\d{7}))|5(?:1[2-5]\\d{7}|2[89]\\d{7}|3[1-5]\\d{7}|4(?:1\\d{4,7}|[2-8]\\d{7})|[5-7][12]\\d{7}|8[1245]\\d{7})|6(?:1(?:1\\d{6,7}|2\\d{7})|[347-9][12]\\d{7}|5(?:1\\d{7}|2\\d{6,7})|6[1-6]\\d{7})|7(?:1[2-5]|2[1289]|[3589][12]|4[1-4]|6[1-6]|7[1-3])\\d{7}|8(?:[145][12]|3[124578]|6[2-6]|7[1245])\\d{7}",
+"\\d{5,10}",,,"2123456789"],[,,"9(?:0[12]|[1-3]\\d)\\d{7}","\\d{10}",,,"9123456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:[2-6]0\\d|993)\\d{7}","\\d{10}",,,"9932123456"],"IR",98,"00","0",,,"0",,,,[[,"(21)(\\d{3,5})","$1 $2",["21"],"0$1","",0],[,"(2[15])(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1|5[0-47-9])"],"0$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[156]|31|51|71|86"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]|2[02-47-9]"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2,3})",
+"$1 $2 $3",["[13-9]|2[02-47-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})","$1 $2",["[13-9]|2[02-47-9]"],"0$1","",0]],,[,,"943\\d{7}","\\d{10}",,,"9432123456"],,,[,,"NA","NA"],[,,"9990\\d{0,6}","\\d{4,10}",,,"9990123456"],,,[,,"NA","NA"]],IS:[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"],[,,"(?:4(?:1[0-24-6]|2[0-7]|[37][0-8]|4[0-245]|5[0-3568]|6\\d|8[0-36-8])|5(?:05|[156]\\d|2[02578]|3[013-7]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|87[23])\\d{4}","\\d{7}",,,"4101234"],[,,"38[589]\\d{6}|(?:6(?:1[1-8]|3[089]|4[0167]|5[019]|[67][0-69]|9\\d)|7(?:5[057]|7\\d|8[0-36-8])|8(?:2[0-5]|3[0-4]|[469]\\d|5[1-9]))\\d{4}",
+"\\d{7,9}",,,"6111234"],[,,"800\\d{4}","\\d{7}",,,"8001234"],[,,"90\\d{5}","\\d{7}",,,"9011234"],[,,"NA","NA"],[,,"NA","NA"],[,,"49\\d{5}","\\d{7}",,,"4921234"],"IS",354,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[4-9]"],"","",0],[,"(3\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"(?:6(?:2[0-8]|49|8\\d)|87[0189]|95[48])\\d{4}","\\d{7}",,,"6201234"]],IT:[,[,,"[01589]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9})","\\d{6,11}"],[,,"0(?:[26]\\d{4,9}|(?:1(?:[0159]\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\d{2,7})",
+"\\d{6,11}",,,"0212345678"],[,,"3(?:[12457-9]\\d{8}|6\\d{7,8}|3\\d{7,9})","\\d{9,11}",,,"3123456789"],[,,"80(?:0\\d{6}|3\\d{3})","\\d{6,9}",,,"800123456"],[,,"0878\\d{5}|1(?:44|6[346])\\d{6}|89(?:2\\d{3}|4(?:[0-4]\\d{2}|[5-9]\\d{4})|5(?:[0-4]\\d{2}|[5-9]\\d{6})|9\\d{6})","\\d{6,10}",,,"899123456"],[,,"84(?:[08]\\d{6}|[17]\\d{3})","\\d{6,9}",,,"848123456"],[,,"1(?:78\\d|99)\\d{6}","\\d{9,10}",,,"1781234567"],[,,"55\\d{8}","\\d{10}",,,"5512345678"],"IT",39,"00",,,,,,,,[[,"(\\d{2})(\\d{3,4})(\\d{4})",
+"$1 $2 $3",["0[26]|55"],"","",0],[,"(0[26])(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"],"","",0],[,"(0[26])(\\d{4,6})","$1 $2",["0[26]"],"","",0],[,"(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]"],"","",0],[,"(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[245])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))"],"","",0],[,"(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["0[13-57-9][2-46-8]"],"","",0],[,"(0\\d{3})(\\d{2,6})","$1 $2",["0[13-57-9][2-46-8]"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["[13]|8(?:00|4[08]|9[59])","[13]|8(?:00|4[08]|9(?:5[5-9]|9))"],"","",0],[,"(\\d{4})(\\d{4})","$1 $2",["894","894[5-9]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3"],"","",0]],,[,,"NA","NA"],,,[,,"848\\d{6}","\\d{9}",,,"848123456"],[,,"NA","NA"],1,,[,,"NA","NA"]],JE:[,[,,"[135789]\\d{6,9}","\\d{6,10}"],[,,"1534\\d{6}","\\d{6,10}",,,"1534456789"],[,,"7(?:509|7(?:00|97)|829|937)\\d{6}","\\d{10}",,,"7797123456"],[,,"80(?:07(?:35|81)|8901)\\d{4}","\\d{10}",,,"8007354567"],[,,"(?:871206|90(?:066[59]|1810|71(?:07|55)))\\d{4}",
+"\\d{10}",,,"9018105678"],[,,"8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\d{4}","\\d{10}",,,"8447034567"],[,,"701511\\d{4}","\\d{10}",,,"7015115678"],[,,"56\\d{8}","\\d{10}",,,"5612345678"],"JE",44,"00","0"," x",,"0",,,,,,[,,"76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\d{6}","\\d{10}",,,"7640123456"],,,[,,"NA","NA"],[,,"3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\d{4}|55\\d{8}","\\d{10}",,,"5512345678"],,,[,,"NA","NA"]],JM:[,[,,
+"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027-9]|[23]\\d|40|5[06]|6[2-589]|7[05]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?",,,"8765123456"],[,,"876(?:2[1789]\\d|[348]\\d{2}|5(?:08|27|6[0-24-9]|[3-578]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}",,,"8762101234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}",
+"\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"JM",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"876",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],JO:[,[,,"[235-9]\\d{7,8}","\\d{7,9}"],[,,"(?:2(?:6(?:2[0-35-9]|3[0-57-8]|4[24-7]|5[0-24-8]|[6-8][02]|9[0-2])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\d|4[0-2]|[57][02]|60)|53(?:0[0-2]|[13][02]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2[50]0|300|4(?:0[0125]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[17-8]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[02-39]))|87(?:[02]0|7[08]|9[09]))\\d{4}",
+"\\d{7,8}",,,"62001234"],[,,"7(?:55|7[25-9]|8[05-9]|9[015-9])\\d{6}","\\d{9}",,,"790123456"],[,,"80\\d{6}","\\d{8}",,,"80012345"],[,,"900\\d{5}","\\d{8}",,,"90012345"],[,,"85\\d{6}","\\d{8}",,,"85012345"],[,,"70\\d{7}","\\d{9}",,,"700123456"],[,,"NA","NA"],"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)","",0],[,"(7)(\\d{4})(\\d{4})","$1 $2 $3",["7[457-9]"],"0$1","",0],[,"(\\d{3})(\\d{5,6})","$1 $2",["70|8[0158]|9"],"0$1","",0]],,[,,"74(?:66|77)\\d{5}","\\d{9}",
+,,"746612345"],,,[,,"NA","NA"],[,,"8(?:10|8\\d)\\d{5}","\\d{8}",,,"88101234"],,,[,,"NA","NA"]],JP:[,[,,"[1-9]\\d{8,9}|00(?:[36]\\d{7,14}|7\\d{5,7}|8\\d{7})","\\d{8,17}"],[,,"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|2[2-9]\\d|[36][1-9]\\d|4(?:6[02-8]|[2-578]\\d|9[2-59])|5(?:6[1-9]|7[2-8]|[2-589]\\d)|7(?:3[4-9]|4[02-9]|[25-9]\\d)|8(?:3[2-9]|4[5-9]|5[1-9]|8[03-9]|[2679]\\d)|9(?:[679][1-9]|[2-58]\\d))\\d{6}","\\d{9}",,,"312345678"],[,,"[7-9]0[1-9]\\d{7}","\\d{10}",,,"7012345678"],
+[,,"120\\d{6}|800\\d{7}|00(?:37\\d{6,13}|66\\d{6,13}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{8,17}",,,"120123456"],[,,"990\\d{6}","\\d{9}",,,"990123456"],[,,"NA","NA"],[,,"60\\d{7}","\\d{9}",,,"601234567"],[,,"50[1-9]\\d{7}","\\d{10}",,,"5012345678"],"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1","",0],[,"(\\d{4})(\\d{4})","$1-$2",["0077"],"$1","",0],[,"(\\d{4})(\\d{2})(\\d{3,4})",
+"$1-$2-$3",["0077"],"$1","",0],[,"(\\d{4})(\\d{2})(\\d{4})","$1-$2-$3",["0088"],"$1","",0],[,"(\\d{4})(\\d{3})(\\d{3,4})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{4})(\\d{4,5})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{5})(\\d{5,6})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{4})(\\d{6})(\\d{6,7})","$1-$2-$3",["00(?:37|66)"],"$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"],"0$1","",0],[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])",
+"1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"],
+"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"],"0$1","",0],[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[2479][1-9]"],"0$1","",0]],[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"],"0$1","",0],[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])",
+"1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))",
+"1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"],
+"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"],"0$1","",0],[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[2479][1-9]"],"0$1","",0]],[,,"20\\d{8}","\\d{10}",,,"2012345678"],,,[,,"00(?:37\\d{6,13}|66\\d{6,13}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{8,17}",,,"00777012"],[,,"570\\d{6}","\\d{9}",,,"570123456"],1,,[,,"NA","NA"]],KE:[,[,,"20\\d{6,7}|[4-9]\\d{6,9}","\\d{7,10}"],
+[,,"20\\d{6,7}|4(?:[0136]\\d{7}|[245]\\d{5,7})|5(?:[08]\\d{7}|[1-79]\\d{5,7})|6(?:[01457-9]\\d{5,7}|[26]\\d{7})","\\d{7,9}",,,"202012345"],[,,"7(?:[0-36]\\d|5[0-6]|7[0-5]|8[0-25-9])\\d{6}","\\d{9}",,,"712123456"],[,,"800[24-8]\\d{5,6}","\\d{9,10}",,,"800223456"],[,,"900[02-9]\\d{5}","\\d{9}",,,"900223456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1","",0],[,"(\\d{3})(\\d{6,7})","$1 $2",["7"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KG:[,[,,"[235-8]\\d{8,9}","\\d{5,10}"],[,,"(?:3(?:1(?:[256]\\d|3[1-9]|47)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\d)|5(?:22|3[4-7]|59|6\\d)|6(?:22|5[35-7]|6\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\d)|9(?:22|4[1-8]|6\\d))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}",,,"312123456"],[,,"(?:20[0-35]|5[124-7]\\d|7[07]\\d)\\d{6}","\\d{9}",,,"700123456"],[,,"800\\d{6,7}","\\d{9,10}",,,"800123456"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],"KG",996,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[25-7]|31[25]"],"0$1","",0],[,"(\\d{4})(\\d{5})","$1 $2",["3(?:1[36]|[2-9])"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d)(\\d{3})","$1 $2 $3 $4",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KH:[,[,,"[1-9]\\d{7,9}","\\d{6,10}"],[,,"(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:[237-9]|4[56]|5\\d|6\\d?)\\d{5}|23(?:4[234]|8\\d{2})\\d{4}","\\d{6,9}",,,"23756789"],[,,"(?:1(?:[013-9]|2\\d?)|3[18]\\d|6[016-9]|7(?:[07-9]|6\\d)|8(?:[013-79]|8\\d)|9(?:6\\d|7\\d?|[0-589]))\\d{6}",
+"\\d{8,9}",,,"91234567"],[,,"1800(?:1\\d|2[019])\\d{4}","\\d{10}",,,"1800123456"],[,,"1900(?:1\\d|2[09])\\d{4}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KH",855,"00[14-9]","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["1\\d[1-9]|[2-9]"],"0$1","",0],[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[89]0"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KI:[,[,,"[2458]\\d{4}|3\\d{4,7}|7\\d{7}","\\d{5,8}"],[,,"(?:[24]\\d|3[1-9]|50|8[0-5])\\d{3}",
+"\\d{5}",,,"31234"],[,,"7(?:[24]\\d|3[1-9]|8[0-5])\\d{5}","\\d{8}",,,"72012345"],[,,"NA","NA"],[,,"3001\\d{4}","\\d{5,8}",,,"30010000"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KI",686,"00",,,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KM:[,[,,"[379]\\d{6}","\\d{7}"],[,,"7(?:6[0-37-9]|7[0-57-9])\\d{4}","\\d{7}",,,"7712345"],[,,"3[234]\\d{5}","\\d{7}",,,"3212345"],[,,"NA","NA"],[,,"(?:39[01]|9[01]0)\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+"KM",269,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KN:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"869(?:2(?:29|36)|302|4(?:6[015-9]|70))\\d{4}","\\d{7}(?:\\d{3})?",,,"8692361234"],[,,"869(?:5(?:5[6-8]|6[5-7])|66\\d|76[02-6])\\d{4}","\\d{10}",,,"8697652917"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}",
+"\\d{10}",,,"5002345678"],[,,"NA","NA"],"KN",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"869",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KP:[,[,,"1\\d{9}|[28]\\d{7}","\\d{6,8}|\\d{10}"],[,,"2\\d{7}|85\\d{6}","\\d{6,8}",,,"21234567"],[,,"19[123]\\d{7}","\\d{10}",,,"1921234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KP",850,"00|99","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1","",0],[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}",,,"23821234"],[,,"NA","NA"],,,[,,"NA","NA"]],KR:[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"],[,,"(?:2|3[1-3]|[46][1-4]|5[1-5])(?:1\\d{2,3}|[1-9]\\d{6,7})","\\d{4,10}",,,"22123456"],[,,"1[0-26-9]\\d{7,8}","\\d{9,10}",,,"1023456789"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"60[2-9]\\d{6}","\\d{9}",,,"602345678"],[,,"NA","NA"],[,,"50\\d{8}","\\d{10}",,,"5012345678"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],
+"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-6][1-9][1-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-6][1-9][1-9]"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["131",
+"131[13-9]"],"0$1","0$CC-$1",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["13[2-9]"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4",["30"],"0$1","0$CC-$1",0],[,"(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2[1-9]"],"0$1","0$CC-$1",0],[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"],"0$1","0$CC-$1",0],[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1(?:[0-46-9])"],"0$1","0$CC-$1",0],[,"(\\d{4})(\\d{4})","$1-$2",["1(?:5[46-9]|6[04678])","1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))"],
+"$1","0$CC-$1",0]],,[,,"15\\d{7,8}","\\d{9,10}",,,"1523456789"],,,[,,"NA","NA"],[,,"1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))\\d{4}","\\d{8}",,,"15441234"],,,[,,"NA","NA"]],KW:[,[,,"[12569]\\d{6,7}","\\d{7,8}"],[,,"(?:18\\d|2(?:[23]\\d{2}|4(?:[1-35-9]\\d|44)|5(?:0[034]|[2-46]\\d|5[1-3]|7[1-7])))\\d{4}","\\d{7,8}",,,"22345678"],[,,"(?:5(?:[05]\\d|1[0-6])|6(?:0[034679]|5[015-9]|6\\d|7[067]|9[0369])|9(?:0[09]|4[049]|55|6[069]|[79]\\d|8[089]))\\d{5}","\\d{8}",,,"50012345"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"KW",965,"00",,,,,,,,[[,"(\\d{4})(\\d{3,4})","$1 $2",["[1269]"],"","",0],[,"(5[015]\\d)(\\d{5})","$1 $2",["5"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KY:[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:4[35-79]|6[6-9]|77)|8(?:00|1[45]|25|[48]8)|9(?:14|4[035-9]))\\d{4}","\\d{7}(?:\\d{3})?",,,"3452221234"],[,,"345(?:32[1-9]|5(?:1[67]|2[5-7]|4[6-8]|76)|9(?:1[67]|2[3-9]|3[689]))\\d{4}",
+"\\d{10}",,,"3453231234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}|345976\\d{4}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"KY",1,"011","1",,,"1",,,,,,[,,"345849\\d{4}","\\d{10}",,,"3458491234"],,"345",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],KZ:[,[,,"(?:33\\d|7\\d{2}|80[09])\\d{7}","\\d{10}"],[,,"33622\\d{5}|7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:[234]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[234]\\d|5[139])|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[237]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59)))\\d{5}",
+"\\d{10}",,,"7123456789"],[,,"7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\d{7}","\\d{10}",,,"7710009998"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"809\\d{7}","\\d{10}",,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"751\\d{7}","\\d{10}",,,"7511234567"],"KZ",7,"810","8",,,"8",,"8~10",,,,[,,"NA","NA"],,,[,,"751\\d{7}","\\d{10}",,,"7511234567"],[,,"NA","NA"],,,[,,"NA","NA"]],LA:[,[,,"[2-8]\\d{7,9}","\\d{6,10}"],[,,"(?:2[13]|3(?:0\\d|[14])|[5-7][14]|41|8[1468])\\d{6}","\\d{6,9}",,,"21212862"],[,,"20(?:2[2389]|5[4-689]|7[6-8]|9[57-9])\\d{6}",
+"\\d{10}",,,"2023123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LA",856,"00","0",,,"0",,,,[[,"(20)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["20"],"0$1","",0],[,"([2-8]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1","",0],[,"(30)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["30"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LB:[,[,,"[13-9]\\d{6,7}","\\d{7,8}"],[,,"(?:[14-6]\\d{2}|7(?:[2-579]\\d|62|8[0-7])|[89][2-9]\\d)\\d{4}","\\d{7}",
+,,"1123456"],[,,"(?:3\\d|7(?:[019]\\d|6[013-9]|8[89]))\\d{5}","\\d{7,8}",,,"71123456"],[,,"NA","NA"],[,,"9[01]\\d{6}","\\d{8}",,,"90123456"],[,,"8[01]\\d{6}","\\d{8}",,,"80123456"],[,,"NA","NA"],[,,"NA","NA"],"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-579]|62|8[0-7])|[89][2-9]"],"0$1","",0],[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[019]|6[013-9]|8[89])"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LC:[,[,,"[5789]\\d{9}",
+"\\d{7}(?:\\d{3})?"],[,,"758(?:4(?:30|5[0-9]|6[2-9]|8[0-2])|57[0-2]|638)\\d{4}","\\d{7}(?:\\d{3})?",,,"7584305678"],[,,"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2[0-8]))\\d{4}","\\d{10}",,,"7582845678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"LC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"758",[,,"NA","NA"],[,,"NA","NA"],
+,,[,,"NA","NA"]],LI:[,[,,"6\\d{8}|[23789]\\d{6}","\\d{7,9}"],[,,"(?:2(?:01|1[27]|3\\d|6[02-578]|96)|3(?:7[0135-7]|8[048]|9[0269]))\\d{4}","\\d{7}",,,"2345678"],[,,"6(?:51[01]|6(?:[01][0-4]|2[016-9]|88)|710)\\d{5}|7(?:36|4[25]|56|[7-9]\\d)\\d{4}","\\d{7,9}",,,"661234567"],[,,"80(?:0(?:2[238]|79)|9\\d{2})\\d{2}","\\d{7}",,,"8002222"],[,,"90(?:0(?:2[278]|79)|1(?:23|3[012])|6(?:4\\d|6[0126]))\\d{2}","\\d{7}",,,"9002222"],[,,"NA","NA"],[,,"701\\d{4}","\\d{7}",,,"7011234"],[,,"NA","NA"],"LI",423,"00","0",
+,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[23]|7[3-57-9]|87"],"","",0],[,"(6\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6"],"","",0],[,"(6[567]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6[567]"],"","",0],[,"(69)(7\\d{2})(\\d{4})","$1 $2 $3",["697"],"","",0],[,"([7-9]0\\d)(\\d{2})(\\d{2})","$1 $2 $3",["[7-9]0"],"","",0],[,"([89]0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"87(?:0[128]|7[0-4])\\d{3}","\\d{7}",,,"8770123"],,,[,,"697(?:[35]6|4[25]|[7-9]\\d)\\d{4}",
+"\\d{9}",,,"697361234"]],LK:[,[,,"[1-9]\\d{8}","\\d{7,9}"],[,,"(?:[189]1|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\d{6}","\\d{7,9}",,,"112345678"],[,,"7[125-8]\\d{7}","\\d{9}",,,"712345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LK",94,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{1})(\\d{6})","$1 $2 $3",["[1-689]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LR:[,[,,"2\\d{7}|[37-9]\\d{8}|[45]\\d{6}",
+"\\d{7,9}"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"(?:330\\d|4[67]|5\\d|77\\d{2}|88\\d{2}|994\\d)\\d{5}","\\d{7,9}",,,"770123456"],[,,"NA","NA"],[,,"90[03]\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"332(?:0[02]|5\\d)\\d{4}","\\d{9}",,,"332001234"],"LR",231,"00","0",,,"0",,,,[[,"(2\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1","",0],[,"([79]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[79]"],"0$1","",0],[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})",
+"$1 $2 $3",["[38]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LS:[,[,,"[2568]\\d{7}","\\d{8}"],[,,"2\\d{7}","\\d{8}",,,"22123456"],[,,"[56]\\d{7}","\\d{8}",,,"50123456"],[,,"800[256]\\d{4}","\\d{8}",,,"80021234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LS",266,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LT:[,[,,"[3-9]\\d{7}","\\d{8}"],[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}",
+,,"31234567"],[,,"6\\d{7}","\\d{8}",,,"61234567"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"9(?:0[0239]|10)\\d{5}","\\d{8}",,,"90012345"],[,,"808\\d{5}","\\d{8}",,,"80812345"],[,,"700\\d{5}","\\d{8}",,,"70012345"],[,,"NA","NA"],"LT",370,"00","8",,,"[08]",,,,[[,"([34]\\d)(\\d{6})","$1 $2",["37|4(?:1|5[45]|6[2-4])"],"(8-$1)","",1],[,"([3-6]\\d{2})(\\d{5})","$1 $2",["3[148]|4(?:[24]|6[09])|528|6"],"(8-$1)","",1],[,"([7-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"8 $1","",1],[,"(5)(2\\d{2})(\\d{4})",
+"$1 $2 $3",["52[0-79]"],"(8-$1)","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70[67]\\d{5}","\\d{8}",,,"70712345"],,,[,,"NA","NA"]],LU:[,[,,"[24-9]\\d{3,10}|3(?:[0-46-9]\\d{2,9}|5[013-9]\\d{1,8})","\\d{4,11}"],[,,"(?:2(?:2\\d{1,2}|3[2-9]|[67]\\d|4[1-8]\\d?|5[1-5]\\d?|9[0-24-9]\\d?)|3(?:[059][05-9]|[13]\\d|[26][015-9]|4[0-26-9]|7[0-389]|8[08])\\d?|4\\d{2,3}|5(?:[01458]\\d|[27][0-69]|3[0-3]|[69][0-7])\\d?|7(?:1[019]|2[05-9]|3[05]|[45][07-9]|[679][089]|8[06-9])\\d?|8(?:0[2-9]|1[0-36-9]|3[3-9]|[469]9|[58][7-9]|7[89])\\d?|9(?:0[89]|2[0-49]|37|49|5[0-27-9]|7[7-9]|9[0-478])\\d?)\\d{1,7}",
+"\\d{4,11}",,,"27123456"],[,,"6(?:[269][18]|71)\\d{6}","\\d{9}",,,"628123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[01]\\d{5}","\\d{8}",,,"90012345"],[,,"801\\d{5}","\\d{8}",,,"80112345"],[,,"70\\d{6}","\\d{8}",,,"70123456"],[,,"20(?:1\\d{5}|[2-689]\\d{1,7})","\\d{4,10}",,,"20201234"],"LU",352,"00",,,,"(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\d)",,,,[[,"(\\d{2})(\\d{3})","$1 $2",["[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],
+"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"],"","$CC $1",0],[,"(\\d{2})(\\d{2})(\\d{2})(\\d{1,4})","$1 $2 $3 $4",["2(?:[12589]|4[12])|[3-5]|7[1-9]|[89](?:[1-9]|0[2-9])"],"","$CC $1",0],[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",
+["[89]0[01]|70"],"","$CC $1",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"],"","$CC $1",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LV:[,[,,"[2689]\\d{7}","\\d{8}"],[,,"6[3-8]\\d{6}","\\d{8}",,,"63123456"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"80\\d{6}","\\d{8}",,,"80123456"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"81\\d{6}","\\d{8}",,,"81123456"],[,,"NA","NA"],[,,"NA","NA"],"LV",371,"00",,,,,,,,[[,"([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,
+"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],LY:[,[,,"[25679]\\d{8}","\\d{7,9}"],[,,"(?:2[1345]|5[1347]|6[123479]|71)\\d{7}","\\d{7,9}",,,"212345678"],[,,"9[1-6]\\d{7}","\\d{9}",,,"912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"LY",218,"00","0",,,"0",,,,[[,"([25679]\\d)(\\d{7})","$1-$2",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MA:[,[,,"[5689]\\d{8}","\\d{9}"],[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-7])\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}",
+"\\d{9}",,,"520123456"],[,,"6(?:0[0-8]|[12-7]\\d|8[01]|9[2457-9])\\d{6}","\\d{9}",,,"650123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89\\d{7}","\\d{9}",,,"891234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MA",212,"00","0",,,"0",,,,[[,"([56]\\d{2})(\\d{6})","$1-$2",["5(?:2[015-7]|3[0-4])|6"],"0$1","",0],[,"([58]\\d{3})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9])|892","5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892"],"0$1","",0],[,"(5\\d{4})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29|38)[89]"],"0$1","",
+0],[,"(8[09])(\\d{7})","$1-$2",["8(?:0|9[013-9])"],"0$1","",0]],,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MC:[,[,,"[4689]\\d{7,8}","\\d{8,9}"],[,,"870\\d{5}|9[2-47-9]\\d{6}","\\d{8}",,,"99123456"],[,,"6\\d{8}|4(?:4\\d|5[2-9])\\d{5}","\\d{8,9}",,,"612345678"],[,,"90\\d{6}","\\d{8}",,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MC",377,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+["4"],"0$1","",0],[,"(6)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["8"],"$1","",0]],,[,,"NA","NA"],,,[,,"8\\d{7}","\\d{8}"],[,,"NA","NA"],,,[,,"NA","NA"]],MD:[,[,,"[235-9]\\d{7}","\\d{8}"],[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{8}",,,"22212345"],[,,"(?:562\\d|6(?:[089]\\d{2}|1[01]\\d|21\\d|50\\d|7(?:[1-6]\\d|7[0-4]))|7(?:6[07]|7[457-9]|[89]\\d)\\d)\\d{4}","\\d{8}",
+,,"65012345"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"90[056]\\d{5}","\\d{8}",,,"90012345"],[,,"808\\d{5}","\\d{8}",,,"80812345"],[,,"NA","NA"],[,,"3[08]\\d{6}","\\d{8}",,,"30123456"],"MD",373,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1","",0],[,"([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["2[13-79]|[5-7]"],"0$1","",0],[,"([89]\\d{2})(\\d{5})","$1 $2",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"8(?:03|14)\\d{5}","\\d{8}",,,"80312345"],,,[,,"NA","NA"]],ME:[,
+[,,"[2-9]\\d{7,8}","\\d{6,9}"],[,,"(?:20[2-8]|3(?:0[2-7]|1[35-7]|2[3567]|3[4-7])|4(?:0[237]|1[27])|5(?:0[47]|1[27]|2[378]))\\d{5}","\\d{6,8}",,,"30234567"],[,,"6(?:32\\d|[89]\\d{2}|7(?:[0-8]\\d|9(?:[3-9]|[0-2]\\d)))\\d{4}","\\d{8,9}",,,"67622901"],[,,"800[28]\\d{4}","\\d{8}",,,"80080002"],[,,"(?:88\\d|9(?:4[13-8]|5[16-8]))\\d{5}","\\d{8}",,,"94515151"],[,,"NA","NA"],[,,"NA","NA"],[,,"78[1-9]\\d{5}","\\d{8}",,,"78108780"],"ME",382,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]|6[3789]",
+"[2-57-9]|6(?:[389]|7(?:[0-8]|9[3-9]))"],"0$1","",0],[,"(67)(9)(\\d{3})(\\d{3})","$1 $2 $3 $4",["679","679[0-2]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"77\\d{6}","\\d{8}",,,"77273012"],,,[,,"NA","NA"]],MF:[,[,,"[56]\\d{8}","\\d{9}"],[,,"590(?:[02][79]|13|5[0-268]|[78]7)\\d{4}","\\d{9}",,,"590271234"],[,,"690(?:0[0-7]|[1-9]\\d)\\d{4}","\\d{9}",,,"690301234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MF",590,"00","0",,,"0",,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,
+,"NA","NA"],,,[,,"NA","NA"]],MG:[,[,,"[23]\\d{8}","\\d{7,9}"],[,,"20(?:2\\d{2}|4[47]\\d|5[3467]\\d|6[279]\\d|7(?:2[29]|[35]\\d)|8[268]\\d|9[245]\\d)\\d{4}","\\d{7,9}",,,"202123456"],[,,"3[2-49]\\d{7}","\\d{9}",,,"321234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"22\\d{7}","\\d{9}",,,"221234567"],"MG",261,"00","0",,,"0",,,,[[,"([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MH:[,[,,"[2-6]\\d{6}","\\d{7}"],
+[,,"(?:247|528|625)\\d{4}","\\d{7}",,,"2471234"],[,,"(?:235|329|45[56]|545)\\d{4}","\\d{7}",,,"2351234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"635\\d{4}","\\d{7}",,,"6351234"],"MH",692,"011","1",,,"1",,,,[[,"(\\d{3})(\\d{4})","$1-$2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MK:[,[,,"[2-578]\\d{7}","\\d{8}"],[,,"(?:2(?:[23]\\d|5[124578]|6[01])|3(?:1[3-6]|[23][2-6]|4[2356])|4(?:[23][2-6]|4[3-6]|5[256]|6[25-8]|7[24-6]|8[4-6]))\\d{5}","\\d{6,8}",,
+,"22212345"],[,,"7(?:[0-25-8]\\d{2}|32\\d|421)\\d{4}","\\d{8}",,,"72345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"5[02-9]\\d{6}","\\d{8}",,,"50012345"],[,,"8(?:0[1-9]|[1-9]\\d)\\d{5}","\\d{8}",,,"80123456"],[,,"NA","NA"],[,,"NA","NA"],"MK",389,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1","",0],[,"([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],
+,,[,,"NA","NA"]],ML:[,[,,"[246-9]\\d{7}","\\d{8}"],[,,"(?:2(?:0(?:2[0-589]|7\\d)|1(?:2[5-7]|[3-689]\\d|7[2-4689]))|44[239]\\d)\\d{4}","\\d{8}",,,"20212345"],[,,"[67]\\d{7}|9[0-25-9]\\d{6}","\\d{8}",,,"65012345"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ML",223,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[246-9]"],"","",0],[,"(\\d{4})","$1",["67|74"],"","",0]],[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[246-9]"],
+"","",0]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MM:[,[,,"[14578]\\d{5,7}|[26]\\d{5,8}|9(?:2\\d{0,2}|[58]|3\\d|4\\d{1,2}|6\\d?|[79]\\d{0,2})\\d{6}","\\d{5,10}"],[,,"1(?:2\\d{1,2}|[3-5]\\d|6\\d?|[89][0-6]\\d)\\d{4}|2(?:[236-9]\\d{4}|4(?:0\\d{5}|\\d{4})|5(?:1\\d{3,6}|[02-9]\\d{3,5}))|4(?:2[245-8]|[346][2-6]|5[3-5])\\d{4}|5(?:2(?:20?|[3-8])|3[2-68]|4(?:21?|[4-8])|5[23]|6[2-4]|7[2-8]|8[24-7]|9[2-7])\\d{4}|6(?:0[23]|1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7(?:[2367]|4\\d|5\\d?|8[145]\\d)|8[245]|9[24])\\d{4}|7(?:[04][24-8]|[15][2-7]|22|3[2-4])\\d{4}|8(?:1(?:2\\d?|[3-689])|2[2-8]|3[24]|4[24-7]|5[245]|6[23])\\d{4}",
+"\\d{5,9}",,,"1234567"],[,,"17[01]\\d{4}|9(?:2(?:[0-4]|5\\d{2})|3[136]\\d|4(?:0[0-4]\\d|[1379]\\d|[24][0-589]\\d|5\\d{2}|88)|5[0-6]|61?\\d|7(?:3\\d|9\\d{2})|8\\d|9(?:1\\d|7\\d{2}|[089]))\\d{5}","\\d{7,10}",,,"92123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"1333\\d{4}","\\d{8}",,,"13331234"],"MM",95,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["1|2[45]"],"0$1","",0],[,"(2)(\\d{4})(\\d{4})","$1 $2 $3",["251"],"0$1","",0],[,"(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],
+"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["67|81"],"0$1","",0],[,"(\\d{2})(\\d{2})(\\d{3,4})","$1 $2 $3",["[4-8]"],"0$1","",0],[,"(9)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[13789])"],"0$1","",0],[,"(9)(4\\d{4})(\\d{4})","$1 $2 $3",["94[0245]"],"0$1","",0],[,"(9)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["925"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MN:[,[,,"[12]\\d{7,9}|[57-9]\\d{7}","\\d{6,10}"],[,,"[12](?:1\\d|2(?:[1-3]\\d?|7\\d)|3[2-8]\\d{1,2}|4[2-68]\\d{1,2}|5[1-4689]\\d{1,2})\\d{5}|5[0568]\\d{6}",
+"\\d{6,10}",,,"50123456"],[,,"(?:8[689]|9[013-9])\\d{6}","\\d{8}",,,"88123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"7[05-8]\\d{6}","\\d{8}",,,"75123456"],"MN",976,"001","0",,,"0",,,,[[,"([12]\\d)(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1","",0],[,"([12]2\\d)(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1","",0],[,"([12]\\d{3})(\\d{5})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)2"],"0$1","",0],[,"(\\d{4})(\\d{4})","$1 $2",["[57-9]"],"$1","",0],[,"([12]\\d{4})(\\d{4,5})","$1 $2",
+["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)[4-9]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MO:[,[,,"[268]\\d{7}","\\d{8}"],[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}",,,"28212345"],[,,"6[236]\\d{6}","\\d{8}",,,"66123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MO",853,"00",,,,,,,,[[,"([268]\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MP:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?",,,"6702345678"],[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?",,,"6702345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"MP",
+1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"670",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MQ:[,[,,"[56]\\d{8}","\\d{9}"],[,,"596(?:0[2-5]|[12]0|3[05-9]|4[024-8]|[5-7]\\d|89|9[4-8])\\d{4}","\\d{9}",,,"596301234"],[,,"696(?:[0-479]\\d|5[01]|8[0-689])\\d{4}","\\d{9}",,,"696201234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MQ",596,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],
+MR:[,[,,"[2-48]\\d{7}","\\d{8}"],[,,"25[08]\\d{5}|35\\d{6}|45[1-7]\\d{5}","\\d{8}",,,"35123456"],[,,"(?:2(?:2\\d|70)|3(?:3\\d|6[1-36]|7[1-3])|4(?:[49]\\d|6[0457-9]|7[4-9]|8[01346-8]))\\d{5}","\\d{8}",,,"22123456"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MR",222,"00",,,,,,,,[[,"([2-48]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MS:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],
+[,,"664491\\d{4}","\\d{7}(?:\\d{3})?",,,"6644912345"],[,,"66449[2-6]\\d{4}","\\d{10}",,,"6644923456"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"MS",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"664",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MT:[,[,,"[2357-9]\\d{7}","\\d{8}"],[,,"2(?:0(?:1[0-6]|3[1-4]|[69]\\d)|[1-357]\\d{2})\\d{4}","\\d{8}",,,"21001234"],
+[,,"(?:7(?:210|[79]\\d{2})|9(?:2(?:1[01]|31)|696|8(?:1[1-3]|89|97)|9\\d{2}))\\d{4}","\\d{8}",,,"96961234"],[,,"800[3467]\\d{4}","\\d{8}",,,"80071234"],[,,"5(?:0(?:0(?:37|43)|6\\d{2}|70\\d|9[0168])|[12]\\d0[1-5])\\d{3}","\\d{8}",,,"50037123"],[,,"NA","NA"],[,,"NA","NA"],[,,"3550\\d{4}","\\d{8}",,,"35501234"],"MT",356,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"7117\\d{4}","\\d{8}",,,"71171234"],,,[,,"NA","NA"],[,,"501\\d{5}","\\d{8}",,,"50112345"],,,[,,"NA","NA"]],MU:[,[,,"[2-9]\\d{6,7}",
+"\\d{7,8}"],[,,"(?:2(?:[03478]\\d|1[0-7]|6[1-69])|4(?:[013568]\\d|2[4-7])|5(?:44\\d|471)|6\\d{2}|8(?:14|3[129]))\\d{4}","\\d{7,8}",,,"2012345"],[,,"5(?:2[59]\\d|4(?:2[1-389]|4\\d|7[1-9]|9\\d)|7\\d{2}|8(?:[256]\\d|7[15-8])|9[0-8]\\d)\\d{4}","\\d{8}",,,"52512345"],[,,"80[012]\\d{4}","\\d{7}",,,"8001234"],[,,"30\\d{5}","\\d{7}",,,"3012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"3(?:20|9\\d)\\d{4}","\\d{7}",,,"3201234"],"MU",230,"0(?:0|[2-7]0|33)",,,,,,"020",,[[,"([2-46-9]\\d{2})(\\d{4})","$1 $2",["[2-46-9]"],
+"","",0],[,"(5\\d{3})(\\d{4})","$1 $2",["5"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MV:[,[,,"[3467]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"],[,,"(?:3(?:0[01]|3[0-59])|6(?:[567][02468]|8[024689]|90))\\d{4}","\\d{7}",,,"6701234"],[,,"(?:46[46]|7[3-9]\\d|9[16-9]\\d)\\d{4}","\\d{7}",,,"7712345"],[,,"NA","NA"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[3467]|9(?:[1-9]|0[1-9])"],
+"","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["900"],"","",0]],,[,,"781\\d{4}","\\d{7}",,,"7812345"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MW:[,[,,"(?:1(?:\\d{2})?|[2789]\\d{2})\\d{6}","\\d{7,9}"],[,,"(?:1[2-9]|21\\d{2})\\d{5}","\\d{7,9}",,,"1234567"],[,,"(?:111|77\\d|88\\d|99\\d)\\d{6}","\\d{9}",,,"991234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MW",265,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1"],"0$1","",0],[,"(2\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["2"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1789]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MX:[,[,,"[1-9]\\d{9,10}","\\d{7,11}"],[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}",
+"\\d{7,10}",,,"2221234567"],[,,"1(?:(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7})","\\d{11}",,,"12221234567"],[,,"800\\d{7}",
+"\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MX",52,"0[09]","01",,,"0[12]|04[45](\\d{10})","1$1",,,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"],"01 $1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"],"01 $1","",1],[,"(1)([358]\\d)(\\d{4})(\\d{4})","044 $2 $3 $4",["1(?:33|55|81)"],"$1","",1],[,"(1)(\\d{3})(\\d{3})(\\d{4})","044 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"],
+"$1","",1]],[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"],"01 $1","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"],"01 $1","",1],[,"(1)([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3 $4",["1(?:33|55|81)"]],[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],MY:[,[,,"[13-9]\\d{7,9}","\\d{6,10}"],[,,"(?:3[2-9]\\d|[4-9][2-9])\\d{6}","\\d{6,9}",,,"323456789"],
+[,,"1(?:1[1-3]\\d{2}|[02-4679][2-9]\\d|59\\d{2}|8(?:1[23]|[2-9]\\d))\\d{5}","\\d{9,10}",,,"123456789"],[,,"1[378]00\\d{6}","\\d{10}",,,"1300123456"],[,,"1600\\d{6}","\\d{10}",,,"1600123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"154\\d{7}","\\d{10}",,,"1541234567"],"MY",60,"00","0",,,"0",,,,[[,"([4-79])(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1","",0],[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1","",0],[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[02-46-9][1-9]|8"],"0$1","",0],[,"(1)([36-8]00)(\\d{2})(\\d{4})",
+"$1-$2-$3-$4",["1[36-8]0"],"","",0],[,"(11)(\\d{4})(\\d{4})","$1-$2 $3",["11"],"0$1","",0],[,"(15[49])(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],MZ:[,[,,"[28]\\d{7,8}","\\d{8,9}"],[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}",,,"21123456"],[,,"8[23467]\\d{7}","\\d{9}",,,"821234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})",
+"$1 $2 $3",["2|8[2-7]"],"","",0],[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NA:[,[,,"[68]\\d{7,8}","\\d{8,9}"],[,,"6(?:1(?:17|2(?:[0189]\\d|[2-6]|7\\d?)|3(?:[01378]|2\\d)|4[01]|69|7[014])|2(?:17|5(?:[0-36-8]|4\\d?)|69|70)|3(?:17|2(?:[0237]\\d?|[14-689])|34|6[29]|7[01]|81)|4(?:17|2(?:[012]|7?)|4(?:[06]|1\\d)|5(?:[01357]|[25]\\d?)|69|7[01])|5(?:17|2(?:[0459]|[23678]\\d?)|69|7[01])|6(?:17|2(?:5|6\\d?)|38|42|69|7[01])|7(?:17|2(?:[569]|[234]\\d?)|3(?:0\\d?|[13])|69|7[01]))\\d{4}",
+"\\d{8,9}",,,"61221234"],[,,"(?:60|8[125])\\d{7}","\\d{9}",,,"811234567"],[,,"NA","NA"],[,,"8701\\d{5}","\\d{9}",,,"870123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"8(?:3\\d{2}|86)\\d{5}","\\d{8,9}",,,"88612345"],"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[1235]"],"0$1","",0],[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6"],"0$1","",0],[,"(88)(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1","",0],[,"(870)(\\d{3})(\\d{3})","$1 $2 $3",["870"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,
+,"NA","NA"],,,[,,"NA","NA"]],NC:[,[,,"[2-57-9]\\d{5}","\\d{6}"],[,,"(?:2[03-9]|3[0-5]|4[1-7]|88)\\d{4}","\\d{6}",,,"201234"],[,,"(?:5[0-4]|[79]\\d|8[0-79])\\d{4}","\\d{6}",,,"751234"],[,,"NA","NA"],[,,"36\\d{4}","\\d{6}",,,"366711"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NC",687,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[2-46-9]|5[0-4]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NE:[,[,,"[0289]\\d{7}","\\d{8}"],[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}",
+"\\d{8}",,,"20201234"],[,,"(?:89|9\\d)\\d{6}","\\d{8}",,,"93123456"],[,,"08\\d{6}","\\d{8}",,,"08123456"],[,,"09\\d{6}","\\d{8}",,,"09123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NE",227,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[289]|09"],"","",0],[,"(08)(\\d{3})(\\d{3})","$1 $2 $3",["08"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],NF:[,[,,"[13]\\d{5}","\\d{5,6}"],[,,"(?:1(?:06|17|28|39)|3[012]\\d)\\d{3}","\\d{5,6}",,,"106609"],[,,"38\\d{4}",
+"\\d{5,6}",,,"381234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NF",672,"00",,,,,,,,[[,"(\\d{2})(\\d{4})","$1 $2",["1"],"","",0],[,"(\\d)(\\d{5})","$1 $2",["3"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NG:[,[,,"[1-6]\\d{5,8}|9\\d{5,9}|[78]\\d{5,13}","\\d{5,14}"],[,,"[12]\\d{6,7}|9(?:0[3-9]|[1-9]\\d)\\d{5}|(?:3\\d|4[023568]|5[02368]|6[02-469]|7[4-69]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}",,,
+"12345678"],[,,"(?:1(?:7[34]\\d|8(?:04|[124579]\\d|8[0-3])|95\\d)|287[0-7]|3(?:18[1-8]|88[0-7]|9(?:8[5-9]|6[1-5]))|4(?:28[0-2]|6(?:7[1-9]|8[02-47])|88[0-2])|5(?:2(?:7[7-9]|8\\d)|38[1-79]|48[0-7]|68[4-7])|6(?:2(?:7[7-9]|8\\d)|4(?:3[7-9]|[68][129]|7[04-69]|9[1-8])|58[0-2]|98[7-9])|7(?:38[0-7]|69[1-8]|78[2-4])|8(?:28[3-9]|38[0-2]|4(?:2[12]|3[147-9]|5[346]|7[4-9]|8[014-689]|90)|58[1-8]|78[2-9]|88[5-7])|98[07]\\d)\\d{4}|(?:70(?:[13-9]\\d|2[1-9])|8(?:0[2-9]|1\\d)\\d|90[239]\\d)\\d{6}","\\d{8,10}",,,"8021234567"],
+[,,"800\\d{7,11}","\\d{10,14}",,,"80017591759"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-6]|7(?:[1-79]|0[1-9])|8[2-9]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["70|8[01]|90[239]"],"0$1","",0],[,"([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]00"],"0$1","",0],[,"([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]00"],"0$1","",0],[,"(78)(\\d{2})(\\d{3})",
+"$1 $2 $3",["78"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"700\\d{7,11}","\\d{10,14}",,,"7001234567"],,,[,,"NA","NA"]],NI:[,[,,"[12578]\\d{7}","\\d{8}"],[,,"2\\d{7}","\\d{8}",,,"21234567"],[,,"5(?:5[0-7]\\d{5}|[78]\\d{6})|7[5-8]\\d{6}|8\\d{7}","\\d{8}",,,"81234567"],[,,"1800\\d{4}","\\d{8}",,,"18001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NI",505,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NL:[,[,,
+"1\\d{4,8}|[2-7]\\d{8}|[89]\\d{6,9}","\\d{5,10}"],[,,"(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\\d|8[478])\\d{7}","\\d{9}",,,"101234567"],[,,"6[1-58]\\d{7}","\\d{9}",,,"612345678"],[,,"800\\d{4,7}","\\d{7,10}",,,"8001234"],[,,"90[069]\\d{4,7}","\\d{7,10}",,,"9061234"],[,,"NA","NA"],[,,"NA","NA"],[,,"85\\d{7}","\\d{9}",,,"851234567"],"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]"],"0$1","",0],[,"([1-5]\\d{2})(\\d{3})(\\d{3})",
+"$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1","",0],[,"(6)(\\d{8})","$1 $2",["6[0-57-9]"],"0$1","",0],[,"(66)(\\d{7})","$1 $2",["66"],"0$1","",0],[,"(14)(\\d{3,4})","$1 $2",["14"],"$1","",0],[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"],"0$1","",0]],,[,,"66\\d{7}","\\d{9}",,,"662345678"],,,[,,"14\\d{3,4}","\\d{5,6}"],[,,"140(?:1(?:[035]|[16-8]\\d)|2(?:[0346]|[259]\\d)|3(?:[03568]|[124]\\d)|4(?:[0356]|[17-9]\\d)|5(?:[0358]|[124679]\\d)|7\\d|8[458])","\\d{5,6}",,,"14020"],,,[,,"NA","NA"]],
+NO:[,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"],[,,"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\d{6}","\\d{8}",,,"21234567"],[,,"(?:4[015-8]|5[89]|9\\d)\\d{6}","\\d{8}",,,"40612345"],[,,"80[01]\\d{5}","\\d{8}",,,"80012345"],[,,"82[09]\\d{5}","\\d{8}",,,"82012345"],[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}",,,"81021234"],[,,"880\\d{5}","\\d{8}",,,"88012345"],[,,"85[0-5]\\d{5}","\\d{8}",,,"85012345"],"NO",47,"00",,,,,,,,[[,"([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[489]"],"","",0],[,"([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["[235-7]"],"","",0]],,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"],1,,[,,"81[23]\\d{5}","\\d{8}",,,"81212345"]],NP:[,[,,"[1-8]\\d{7}|9(?:[1-69]\\d{6}|7[2-6]\\d{5,7}|8\\d{8})","\\d{6,10}"],[,,"(?:1[0124-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-79])\\d{6}","\\d{6,8}",,,"14567890"],[,,"9(?:7[45]|8[01456])\\d{7}","\\d{10}",,,"9841234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],"NP",977,"00","0",,,"0",,,,[[,"(1)(\\d{7})","$1-$2",["1[2-6]"],"0$1","",0],[,"(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-69]|7[15-9])"],"0$1","",0],[,"(9\\d{2})(\\d{7})","$1-$2",["9(?:7[45]|8)"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NR:[,[,,"[458]\\d{6}","\\d{7}"],[,,"(?:444|888)\\d{4}","\\d{7}",,,"4441234"],[,,"55[5-9]\\d{4}","\\d{7}",,,"5551234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NR",674,"00",,,,,,,,[[,"(\\d{3})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NU:[,[,,"[1-5]\\d{3}","\\d{4}"],[,,"[34]\\d{3}","\\d{4}",,,"4002"],[,,"[125]\\d{3}","\\d{4}",,,"1234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NU",683,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],NZ:[,[,,"6[235-9]\\d{6}|[2-57-9]\\d{7,10}","\\d{7,11}"],[,,"(?:3[2-79]|[49][2-689]|6[235-9]|7[2-5789])\\d{6}|24099\\d{3}","\\d{7,8}",,,"32345678"],[,,"2(?:[028]\\d{7,8}|1(?:[03]\\d{5,7}|[12457]\\d{5,6}|[689]\\d{5})|[79]\\d{7})",
+"\\d{8,10}",,,"211234567"],[,,"508\\d{6,7}|80\\d{6,8}","\\d{8,10}",,,"800123456"],[,,"90\\d{7,9}","\\d{9,11}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"NZ",64,"0(?:0|161)","0",,,"0",,"00",,[[,"([34679])(\\d{3})(\\d{4})","$1-$2 $3",["[3467]|9[1-9]"],"0$1","",0],[,"(24099)(\\d{3})","$1 $2",["240","2409","24099"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["21"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:1[1-9]|[69]|7[0-35-9])|86"],"0$1","",0],[,"(2\\d)(\\d{3,4})(\\d{4})",
+"$1 $2 $3",["2[028]"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|5|[89]0"],"0$1","",0]],,[,,"[28]6\\d{6,7}","\\d{8,9}",,,"26123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],OM:[,[,,"(?:2[2-6]|5|9[1-9])\\d{6}|800\\d{5,6}","\\d{7,9}"],[,,"2[2-6]\\d{6}","\\d{8}",,,"23123456"],[,,"9[1-9]\\d{6}","\\d{8}",,,"92123456"],[,,"8007\\d{4,5}|500\\d{4}","\\d{7,9}",,,"80071234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"OM",968,"00",,,,,,,,[[,"(2\\d)(\\d{6})","$1 $2",
+["2"],"","",0],[,"(9\\d{3})(\\d{4})","$1 $2",["9"],"","",0],[,"([58]00)(\\d{4,6})","$1 $2",["[58]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PA:[,[,,"[1-9]\\d{6,7}","\\d{7,8}"],[,,"(?:1(?:0[02-579]|19|2[37]|3[03]|4[479]|57|65|7[016-8]|8[58]|9[1349])|2(?:[0235679]\\d|1[0-7]|4[04-9]|8[028])|3(?:[09]\\d|1[14-7]|2[0-3]|3[03]|4[0457]|5[56]|6[068]|7[06-8]|8[089])|4(?:3[013-69]|4\\d|7[0-689])|5(?:[01]\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-267]|3[06]|[49]0|5[06-9]|7[0-24-7]|8[89])|8(?:[34]\\d|5[0-4]|8[02])|9(?:0[6-8]|1[016-8]|2[036-8]|3[3679]|40|5[0489]|6[06-9]|7[046-9]|8[36-8]|9[1-9]))\\d{4}",
+"\\d{7}",,,"2001234"],[,,"(?:1[16]1|21[89]|8(?:1[01]|7[23]))\\d{4}|6(?:[024-9]\\d|1[0-5]|3[0-24-9])\\d{5}","\\d{7,8}",,,"60012345"],[,,"80[09]\\d{4}","\\d{7}",,,"8001234"],[,,"(?:779|8(?:2[235]|55|60|7[578]|86|95)|9(?:0[0-2]|81))\\d{4}","\\d{7}",,,"8601234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PA",507,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"],"","",0],[,"(\\d{4})(\\d{4})","$1-$2",["6"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PE:[,[,,"[14-9]\\d{7,8}",
+"\\d{6,9}"],[,,"(?:1\\d|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\\d{6}","\\d{6,8}",,,"11234567"],[,,"9\\d{8}","\\d{9}",,,"912345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"805\\d{5}","\\d{8}",,,"80512345"],[,,"801\\d{5}","\\d{8}",,,"80112345"],[,,"80[24]\\d{5}","\\d{8}",,,"80212345"],[,,"NA","NA"],"PE",51,"19(?:1[124]|77|90)00","0"," Anexo ",,"0",,,,[[,"(1)(\\d{7})","$1 $2",["1"],"(0$1)","",0],[,"([4-8]\\d)(\\d{6})","$1 $2",["[4-7]|8[2-4]"],"(0$1)","",0],[,"(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)",
+"",0],[,"(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PF:[,[,,"4\\d{5,7}|8\\d{7}","\\d{6}(?:\\d{2})?"],[,,"4(?:[09][45689]\\d|4)\\d{4}","\\d{6}(?:\\d{2})?",,,"40412345"],[,,"8[79]\\d{6}","\\d{8}",,,"87123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PF",689,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[09]|8[79]"],"","",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"],"",
+"",0]],,[,,"NA","NA"],,,[,,"44\\d{4}","\\d{6}",,,"441234"],[,,"NA","NA"],,,[,,"NA","NA"]],PG:[,[,,"[1-9]\\d{6,7}","\\d{7,8}"],[,,"(?:3[0-2]\\d|4[25]\\d|5[34]\\d|64[1-9]|77(?:[0-24]\\d|30)|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}",,,"3123456"],[,,"(?:20150|68\\d{2}|7(?:[0-369]\\d|75)\\d{2})\\d{3}","\\d{7,8}",,,"6812345"],[,,"180\\d{4}","\\d{7}",,,"1801234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"275\\d{4}","\\d{7}",,,"2751234"],"PG",675,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-689]|27"],
+"","",0],[,"(\\d{4})(\\d{4})","$1 $2",["20|7"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PH:[,[,,"2\\d{5,7}|[3-9]\\d{7,9}|1800\\d{7,9}","\\d{5,13}"],[,,"2\\d{5}(?:\\d{2})?|(?:3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}|88(?:22\\d{6}|42\\d{4})","\\d{5,10}",,,"21234567"],[,,"(?:81[37]|9(?:0[5-9]|1[024-9]|2[0-35-9]|3[02-9]|4[236-9]|7[34-79]|89|9[4-9]))\\d{7}","\\d{10}",,,"9051234567"],[,,"1800\\d{7,9}","\\d{11,13}",,,"180012345678"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],[,,"NA","NA"],"PH",63,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"(0$1)","",0],[,"(2)(\\d{5})","$1 $2",["2"],"(0$1)","",0],[,"(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)","",0],[,"(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)","",0],[,"([3-8]\\d)(\\d{3})(\\d{4})",
+"$1 $2 $3",["[3-8]"],"(0$1)","",0],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["81|9"],"0$1","",0],[,"(1800)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"","",0],[,"(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PK:[,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"],[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}",
+"\\d{6,10}",,,"2123456789"],[,,"3(?:0\\d|[12][0-5]|3[1-7]|4[0-7]|55|64)\\d{7}","\\d{10}",,,"3012345678"],[,,"800\\d{5}","\\d{8}",,,"80012345"],[,,"900\\d{5}","\\d{8}",,,"90012345"],[,,"NA","NA"],[,,"122\\d{6}","\\d{9}",,,"122044444"],[,,"NA","NA"],"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"],"(0$1)",
+"",0],[,"(\\d{3})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d1","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d11","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d111"],"(0$1)","",0],[,"(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)","",0],[,"(\\d{3})(\\d{6,7})","$1 $2",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d[2-9]"],"(0$1)","",0],[,"(3\\d{2})(\\d{7})","$1 $2",
+["3"],"0$1","",0],[,"([15]\\d{3})(\\d{5,6})","$1 $2",["58[12]|1"],"(0$1)","",0],[,"(586\\d{2})(\\d{5})","$1 $2",["586"],"(0$1)","",0],[,"([89]00)(\\d{3})(\\d{2})","$1 $2 $3",["[89]00"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"],,,[,,"NA","NA"]],PL:[,[,,"[12]\\d{6,8}|[3-57-9]\\d{8}|6\\d{5,8}",
+"\\d{6,9}"],[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}|[12]2\\d{5}","\\d{6,9}",,,"123456789"],[,,"(?:5[0137]|6[069]|7[2389]|88)\\d{7}","\\d{9}",,,"512345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"70\\d{7}","\\d{9}",,,"701234567"],[,,"801\\d{6}","\\d{9}",,,"801234567"],[,,"NA","NA"],[,,"39\\d{7}","\\d{9}",,,"391234567"],"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"],
+"","",0],[,"(\\d{2})(\\d{1})(\\d{4})","$1 $2 $3",["[12]2"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[0137]|6[0469]|7[02389]|8[08]"],"","",0],[,"(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"],"","",0],[,"(\\d{3})(\\d{3})","$1 $2",["64"],"","",0]],,[,,"64\\d{4,7}","\\d{6,9}",,,"641234567"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PM:[,[,,"[45]\\d{5}","\\d{6}"],[,,"41\\d{4}","\\d{6}",,,"411234"],[,,"55\\d{4}","\\d{6}",,,"551234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],
+[,,"NA","NA"],"PM",508,"00","0",,,"0",,,,[[,"([45]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PR:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"7872345678"],[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"7872345678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",
+,,"5002345678"],[,,"NA","NA"],"PR",1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"787|939",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PS:[,[,,"[24589]\\d{7,8}|1(?:[78]\\d{8}|[49]\\d{2,3})","\\d{4,10}"],[,,"(?:22[234789]|42[45]|82[01458]|92[369])\\d{5}","\\d{7,8}",,,"22234567"],[,,"5[69]\\d{7}","\\d{9}",,,"599123456"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],[,,"1(?:4|9\\d)\\d{2}","\\d{4,5}",,,"19123"],[,,"1700\\d{6}","\\d{10}",,,"1700123456"],[,,"NA","NA"],[,,"NA","NA"],"PS",970,"00","0",,,"0",,,,[[,
+"([2489])(2\\d{2})(\\d{4})","$1 $2 $3",["[2489]"],"0$1","",0],[,"(5[69]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1","",0],[,"(1[78]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[78]"],"$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PT:[,[,,"[2-46-9]\\d{8}","\\d{9}"],[,,"2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}","\\d{9}",,,"212345678"],[,,"9(?:[136]\\d{2}|2[0-79]\\d|480)\\d{5}","\\d{9}",,,"912345678"],[,,"80[02]\\d{6}","\\d{9}",,,"800123456"],[,,"76(?:0[1-57]|1[2-47]|2[237])\\d{5}",
+"\\d{9}",,,"760123456"],[,,"80(?:8\\d|9[1579])\\d{5}","\\d{9}",,,"808123456"],[,,"884[128]\\d{5}","\\d{9}",,,"884123456"],[,,"30\\d{7}","\\d{9}",,,"301234567"],"PT",351,"00",,,,,,,,[[,"(2\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"],"","",0],[,"([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[3-9]|[346-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"70(?:7\\d|8[17])\\d{5}","\\d{9}",,,"707123456"],,,[,,"NA","NA"]],PW:[,[,,"[2-8]\\d{6}","\\d{7}"],[,,"2552255|(?:277|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76))\\d{4}",
+"\\d{7}",,,"2771234"],[,,"(?:6[234689]0|77[45789])\\d{4}","\\d{7}",,,"6201234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"PW",680,"01[12]",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],PY:[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"],[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}",
+"\\d{5,9}",,,"212345678"],[,,"9(?:6[12]|[78][1-6]|9[1-5])\\d{6}","\\d{9}",,,"961456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"8700[0-4]\\d{4}","\\d{9}",,,"870012345"],"PY",595,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{5,7})","$1 $2",["(?:[26]1|3[289]|4[124678]|7[123]|8[1236])"],"($1)","",0],[,"(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1","",0],[,"(\\d{3})(\\d{6})","$1 $2",["9[1-9]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8700"],"","",0],[,"(\\d{3})(\\d{4,6})","$1 $2",
+["[2-8][1-9]"],"($1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"[2-9]0\\d{4,7}","\\d{6,9}",,,"201234567"],,,[,,"NA","NA"]],QA:[,[,,"[2-8]\\d{6,7}","\\d{7,8}"],[,,"4[04]\\d{6}","\\d{7,8}",,,"44123456"],[,,"[3567]\\d{7}","\\d{7,8}",,,"33123456"],[,,"800\\d{4}","\\d{7,8}",,,"8001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"QA",974,"00",,,,,,,,[[,"([28]\\d{2})(\\d{4})","$1 $2",["[28]"],"","",0],[,"([3-7]\\d{3})(\\d{4})","$1 $2",["[3-7]"],"","",0]],,[,,"2(?:[12]\\d|61)\\d{4}","\\d{7}",
+,,"2123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],RE:[,[,,"[268]\\d{8}","\\d{9}"],[,,"262\\d{6}","\\d{9}",,,"262161234"],[,,"6(?:9[23]|47)\\d{6}","\\d{9}",,,"692123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"],[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"],[,,"NA","NA"],[,,"NA","NA"],"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1","",0]],,[,,"NA","NA"],1,"262|6[49]|8",[,,"NA","NA"],[,,"NA",
+"NA"],,,[,,"NA","NA"]],RO:[,[,,"2\\d{5,8}|[37-9]\\d{8}","\\d{6,9}"],[,,"2(?:1(?:\\d{7}|9\\d{3})|[3-6](?:\\d{7}|\\d9\\d{2}))|3[13-6]\\d{7}","\\d{6,9}",,,"211234567"],[,,"7(?:000|[1-8]\\d{2}|99\\d)\\d{5}","\\d{9}",,,"712345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"90[036]\\d{6}","\\d{9}",,,"900123456"],[,,"801\\d{6}","\\d{9}",,,"801123456"],[,,"802\\d{6}","\\d{9}",,,"802123456"],[,,"NA","NA"],"RO",40,"00","0"," int ",,"0",,,,[[,"([237]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1","",0],[,
+"(21)(\\d{4})","$1 $2",["21"],"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23][3-7]|[7-9]"],"0$1","",0],[,"(2\\d{2})(\\d{3})","$1 $2",["2[3-6]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"37\\d{7}","\\d{9}",,,"372123456"],,,[,,"NA","NA"]],RS:[,[,,"[126-9]\\d{4,11}|3(?:[0-79]\\d{3,10}|8[2-9]\\d{2,9})","\\d{5,12}"],[,,"(?:1(?:[02-9][2-9]|1[1-9])\\d|2(?:[0-24-7][2-9]\\d|[389](?:0[2-9]|[2-9]\\d))|3(?:[0-8][2-9]\\d|9(?:[2-9]\\d|0[2-9])))\\d{3,8}","\\d{5,12}",,,"10234567"],[,,"6(?:[0-689]|7\\d)\\d{6,7}",
+"\\d{8,10}",,,"601234567"],[,,"800\\d{3,9}","\\d{6,12}",,,"80012345"],[,,"(?:90[0169]|78\\d)\\d{3,7}","\\d{6,12}",,,"90012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RS",381,"00","0",,,"0",,,,[[,"([23]\\d{2})(\\d{4,9})","$1 $2",["(?:2[389]|39)0"],"0$1","",0],[,"([1-3]\\d)(\\d{5,10})","$1 $2",["1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])"],"0$1","",0],[,"(6\\d)(\\d{6,8})","$1 $2",["6"],"0$1","",0],[,"([89]\\d{2})(\\d{3,9})","$1 $2",["[89]"],"0$1","",0],[,"(7[26])(\\d{4,9})","$1 $2",["7[26]"],
+"0$1","",0],[,"(7[08]\\d)(\\d{4,9})","$1 $2",["7[08]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"7[06]\\d{4,10}","\\d{6,12}",,,"700123456"],,,[,,"NA","NA"]],RU:[,[,,"[3489]\\d{9}","\\d{10}"],[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}",,,"3011234567"],[,,"9\\d{9}","\\d{10}",,,"9123456789"],[,,"80[04]\\d{7}","\\d{10}",,,"8001234567"],[,,"80[39]\\d{7}","\\d{10}",
+,,"8091234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RU",7,"810","8",,,"8",,"8~10",,[[,"(\\d{3})(\\d{2})(\\d{2})","$1-$2-$3",["[1-79]"],"$1","",1],[,"([3489]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"],"8 ($1)","",1],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)","",1]],[[,"([3489]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"],"8 ($1)","",1],[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)","",1]],[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA",
+"NA"]],RW:[,[,,"[027-9]\\d{7,8}","\\d{8,9}"],[,,"2[258]\\d{7}|06\\d{6}","\\d{8,9}",,,"250123456"],[,,"7[238]\\d{7}","\\d{9}",,,"720123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"RW",250,"00","0",,,"0",,,,[[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"$1","",0],[,"([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1","",0],[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"],"","",0]],,[,,"NA","NA"],,,[,,"NA",
+"NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],SA:[,[,,"1\\d{7,8}|(?:[2-467]|92)\\d{7}|5\\d{8}|8\\d{9}","\\d{7,10}"],[,,"11\\d{7}|1?(?:2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,9}",,,"112345678"],[,,"(?:5(?:[013-689]\\d|7[0-26-8])|811\\d)\\d{6}","\\d{9,10}",,,"512345678"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"92[05]\\d{6}","\\d{9}",,,"920012345"],[,,"NA","NA"],[,,"NA","NA"],"SA",966,"00","0",,,"0",,,,[[,"([1-467])(\\d{3})(\\d{4})","$1 $2 $3",["[1-467]"],"0$1","",0],[,"(1\\d)(\\d{3})(\\d{4})",
+"$1 $2 $3",["1[1-467]"],"0$1","",0],[,"(5\\d)(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1","",0],[,"(92\\d{2})(\\d{5})","$1 $2",["92"],"$1","",0],[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"$1","",0],[,"(811)(\\d{3})(\\d{3,4})","$1 $2 $3",["81"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SB:[,[,,"[1-9]\\d{4,6}","\\d{5,7}"],[,,"(?:1[4-79]|[23]\\d|4[01]|5[03]|6[0-37])\\d{3}","\\d{5}",,,"40123"],[,,"48\\d{3}|7(?:[0146-8]\\d|5[025-9]|9[0124])\\d{4}|8[4-8]\\d{5}|9(?:[46]\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8])\\d{4}",
+"\\d{5,7}",,,"7421234"],[,,"1[38]\\d{3}","\\d{5}",,,"18123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"5[12]\\d{3}","\\d{5}",,,"51123"],"SB",677,"0[01]",,,,,,,,[[,"(\\d{2})(\\d{5})","$1 $2",["[7-9]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SC:[,[,,"[24689]\\d{5,6}","\\d{6,7}"],[,,"4[2-46]\\d{5}","\\d{7}",,,"4217123"],[,,"2[5-8]\\d{5}","\\d{7}",,,"2510123"],[,,"8000\\d{2}","\\d{6}",,,"800000"],[,,"98\\d{4}","\\d{6}",,,"981234"],[,,"NA","NA"],[,,"NA","NA"],[,,"64\\d{5}",
+"\\d{7}",,,"6412345"],"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[89]"],"","",0],[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SD:[,[,,"[19]\\d{8}","\\d{9}"],[,,"1(?:[125]\\d|8[3567])\\d{6}","\\d{9}",,,"121231234"],[,,"9[012569]\\d{7}","\\d{9}",,,"911231234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SD",249,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SE:[,[,,"[1-9]\\d{5,9}","\\d{5,10}"],[,,"1(?:0[1-8]\\d{6}|[136]\\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)\\d{5,6})|2(?:[136]\\d{5,7}|(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])\\d{5,6})|3(?:[356]\\d{5,7}|(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\\d{5,6})|4(?:0[1-9]\\d{4,6}|[246]\\d{5,7}|(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\\d{5,6})|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\d|6[03-5]|7[013]|8[0-79]|9[01])\\d{5,6}|6(?:0[1-9]\\d{4,6}|3\\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\\d{5,6})|8[1-9]\\d{5,7}|9(?:0[1-9]\\d{4,6}|(?:1[0-68]|2\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8])\\d{5,6})",
+"\\d{5,9}",,,"8123456"],[,,"7[0236]\\d{7}","\\d{9}",,,"701234567"],[,,"20(?:0(?:0\\d{2}|[1-9](?:0\\d{1,4}|[1-9]\\d{4}))|1(?:0\\d{4}|[1-9]\\d{4,5})|[2-9]\\d{5})","\\d{6,9}",,,"20123456"],[,,"9(?:00|39|44)(?:1(?:[0-26]\\d{5}|[3-57-9]\\d{2})|2(?:[0-2]\\d{5}|[3-9]\\d{2})|3(?:[0139]\\d{5}|[24-8]\\d{2})|4(?:[045]\\d{5}|[1-36-9]\\d{2})|5(?:5\\d{5}|[0-46-9]\\d{2})|6(?:[679]\\d{5}|[0-58]\\d{2})|7(?:[078]\\d{5}|[1-69]\\d{2})|8(?:[578]\\d{5}|[0-469]\\d{2}))","\\d{7}(?:\\d{3})?",,,"9001234567"],[,,"77(?:0(?:0\\d{2}|[1-9](?:0\\d|[1-9]\\d{4}))|[1-6][1-9]\\d{5})",
+"\\d{6}(?:\\d{3})?",,,"771234567"],[,,"75[1-8]\\d{6}","\\d{9}",,,"751234567"],[,,"NA","NA"],"SE",46,"00","0",,,"0",,,,[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1","",0],[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"],"0$1","",0],[,"([1-69]\\d)(\\d{3})(\\d{2})","$1-$2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"],"0$1","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"],
+"0$1","",0],[,"(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"],"0$1","",0],[,"(7\\d)(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["7"],"0$1","",0],[,"(77)(\\d{2})(\\d{2})","$1-$2$3",["7"],"0$1","",0],[,"(20)(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1","",0],[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9[034]"],"0$1","",0],[,"(9[034]\\d)(\\d{4})","$1-$2",["9[034]"],"0$1","",0]],[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})",
+"$1 $2 $3 $4",["8"]],[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"]],[,"([1-69]\\d)(\\d{3})(\\d{2})","$1 $2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"]],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]],[,"(\\d{3})(\\d{2,3})(\\d{2})","$1 $2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]],[,"(7\\d)(\\d{3})(\\d{2})(\\d{2})",
+"$1 $2 $3 $4",["7"]],[,"(77)(\\d{2})(\\d{2})","$1 $2 $3",["7"]],[,"(20)(\\d{2,3})(\\d{2})","$1 $2 $3",["20"]],[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["9[034]"]],[,"(9[034]\\d)(\\d{4})","$1 $2",["9[034]"]]],[,,"74[02-9]\\d{6}","\\d{9}",,,"740123456"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SG:[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"],[,,"6[1-9]\\d{6}","\\d{8}",,,"61234567"],[,,"(?:8[1-7]|9[0-8])\\d{6}","\\d{8}",,,"81234567"],[,,"1?800\\d{7}","\\d{10,11}",,,"18001234567"],
+[,,"1900\\d{7}","\\d{11}",,,"19001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"3[12]\\d{6}","\\d{8}",,,"31234567"],"SG",65,"0[0-3]\\d",,,,,,,,[[,"([3689]\\d{3})(\\d{4})","$1 $2",["[369]|8[1-9]"],"","",0],[,"(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"],"","",0],[,"(7000)(\\d{4})(\\d{3})","$1 $2 $3",["70"],"","",0],[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"7000\\d{7}","\\d{11}",,,"70001234567"],,,[,,"NA","NA"]],SH:[,[,,"[2-79]\\d{3,4}","\\d{4,5}"],[,,"2(?:[0-57-9]\\d|6[4-9])\\d{2}|(?:[2-46]\\d|7[01])\\d{2}",
+"\\d{4,5}",,,"2158"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:[59]\\d|7[2-9])\\d{2}","\\d{4,5}",,,"5012"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SH",290,"00",,,,,,,,,,[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SI:[,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"],[,,"(?:1\\d|[25][2-8]|3[4-8]|4[24-8]|7[3-8])\\d{6}","\\d{7,8}",,,"11234567"],[,,"(?:[37][01]|4[0139]|51|6[48])\\d{6}","\\d{8}",,,"31234567"],[,,"80\\d{4,6}","\\d{6,8}",,,"80123456"],[,,"90\\d{4,6}|89[1-3]\\d{2,5}","\\d{5,8}",
+,,"90123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"(?:59|8[1-3])\\d{6}","\\d{8}",,,"59012345"],"SI",386,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]|3[4-8]|4[24-8]|5[2-8]|7[3-8]"],"(0$1)","",0],[,"([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1","",0],[,"([89][09])(\\d{3,6})","$1 $2",["[89][09]"],"0$1","",0],[,"([58]\\d{2})(\\d{5})","$1 $2",["59|8[1-3]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SJ:[,[,,"0\\d{4}|[4789]\\d{7}",
+"\\d{5}(?:\\d{3})?"],[,,"79\\d{6}","\\d{8}",,,"79123456"],[,,"(?:4[015-8]|5[89]|9\\d)\\d{6}","\\d{8}",,,"41234567"],[,,"80[01]\\d{5}","\\d{8}",,,"80012345"],[,,"82[09]\\d{5}","\\d{8}",,,"82012345"],[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}",,,"81021234"],[,,"880\\d{5}","\\d{8}",,,"88012345"],[,,"85[0-5]\\d{5}","\\d{8}",,,"85012345"],"SJ",47,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"],1,,[,,"81[23]\\d{5}","\\d{8}",,,"81212345"]],
+SK:[,[,,"[2-689]\\d{8}","\\d{9}"],[,,"[2-5]\\d{8}","\\d{9}",,,"212345678"],[,,"9(?:0[1-8]|1[0-24-9]|4[0489])\\d{6}","\\d{9}",,,"912123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"9(?:[78]\\d{7}|00\\d{6})","\\d{9}",,,"900123456"],[,,"8[5-9]\\d{7}","\\d{9}",,,"850123456"],[,,"NA","NA"],[,,"6(?:5[0-4]|9[0-6])\\d{6}","\\d{9}",,,"690123456"],"SK",421,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1","",0],[,"([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1",
+"",0],[,"([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"(?:8(?:00|[5-9]\\d)|9(?:00|[78]\\d))\\d{6}","\\d{9}",,,"800123456"],[,,"96\\d{7}","\\d{9}",,,"961234567"],,,[,,"NA","NA"]],SL:[,[,,"[2-578]\\d{7}","\\d{6,8}"],[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}",,,"22221234"],[,,"(?:2[15]|3[034]|4[04]|5[05]|7[6-9]|88)\\d{6}","\\d{6,8}",,,"25123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SL",232,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})",
+"$1 $2",,"(0$1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SM:[,[,,"[05-7]\\d{7,9}","\\d{6,10}"],[,,"0549(?:8[0157-9]|9\\d)\\d{4}","\\d{6,10}",,,"0549886377"],[,,"6[16]\\d{6}","\\d{8}",,,"66661212"],[,,"NA","NA"],[,,"7[178]\\d{6}","\\d{8}",,,"71123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"5[158]\\d{6}","\\d{8}",,,"58001110"],"SM",378,"00",,,,"(?:0549)?([89]\\d{5})","0549$1",,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"],"","",0],[,"(0549)(\\d{6})","$1 $2",["0"],
+"","",0],[,"(\\d{6})","0549 $1",["[89]"],"","",0]],[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"],"","",0],[,"(0549)(\\d{6})","($1) $2",["0"]],[,"(\\d{6})","(0549) $1",["[89]"]]],[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],SN:[,[,,"[3789]\\d{8}","\\d{9}"],[,,"3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611|90[1-5])\\d{5}","\\d{9}",,,"301012345"],[,,"7(?:[067]\\d|21|8[0-26]|90)\\d{6}","\\d{9}",,,"701234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"88[4689]\\d{6}",
+"\\d{9}",,,"884123456"],[,,"81[02468]\\d{6}","\\d{9}",,,"810123456"],[,,"NA","NA"],[,,"3392\\d{5}|93330\\d{4}","\\d{9}",,,"933301234"],"SN",221,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"],"","",0],[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SO:[,[,,"[1-79]\\d{6,8}","\\d{7,9}"],[,,"(?:1\\d|2[0-79]|3[0-46-8]|4[0-7]|59)\\d{5}","\\d{7}",,,"4012345"],[,,"(?:15\\d|2(?:4\\d|8)|6[137-9]?\\d{2}|7[1-9]\\d|907\\d)\\d{5}",
+"\\d{7,9}",,,"71123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SO",252,"00","0",,,"0",,,,[[,"(\\d)(\\d{6})","$1 $2",["2[0-79]|[13-5]"],"","",0],[,"(\\d)(\\d{7})","$1 $2",["24|[67]"],"","",0],[,"(\\d{2})(\\d{5,7})","$1 $2",["15|28|6[1378]"],"","",0],[,"(69\\d)(\\d{6})","$1 $2",["69"],"","",0],[,"(90\\d)(\\d{3})(\\d{3})","$1 $2 $3",["90"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SR:[,[,,"[2-8]\\d{5,6}","\\d{6,7}"],[,,"(?:2[1-3]|3[0-7]|4\\d|5[2-58]|68\\d)\\d{4}",
+"\\d{6,7}",,,"211234"],[,,"(?:7[124-7]|8[1-9])\\d{5}","\\d{7}",,,"7412345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"5(?:6\\d{4}|90[0-4]\\d{3})","\\d{6,7}",,,"561234"],"SR",597,"00",,,,,,,,[[,"(\\d{3})(\\d{3})","$1-$2",["[2-4]|5[2-58]"],"","",0],[,"(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"],"","",0],[,"(\\d{3})(\\d{4})","$1-$2",["59|[6-8]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SS:[,[,,"[19]\\d{8}","\\d{9}"],[,,"18\\d{7}","\\d{9}",,,"181234567"],
+[,,"(?:12|9[1257])\\d{7}","\\d{9}",,,"977123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SS",211,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ST:[,[,,"[29]\\d{6}","\\d{7}"],[,,"22\\d{5}","\\d{7}",,,"2221234"],[,,"9[89]\\d{5}","\\d{7}",,,"9812345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ST",239,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SV:[,[,,"[267]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"],[,,"2[1-6]\\d{6}","\\d{8}",,,"21234567"],[,,"[67]\\d{7}","\\d{8}",,,"70123456"],[,,"800\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"8001234"],[,,"900\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[267]"],"","",0],[,"(\\d{3})(\\d{4})","$1 $2",["[89]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})",
+"$1 $2 $3",["[89]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SX:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"7215(?:4[2-8]|8[239]|9[056])\\d{4}","\\d{7}(?:\\d{3})?",,,"7215425678"],[,,"7215(?:1[02]|2\\d|5[034679]|8[014-8])\\d{4}","\\d{10}",,,"7215205678"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"SX",1,"011",
+"1",,,"1",,,,,,[,,"NA","NA"],,"721",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SY:[,[,,"[1-59]\\d{7,8}","\\d{6,9}"],[,,"(?:1(?:1\\d?|4\\d|[2356])|2(?:1\\d?|[235])|3(?:[13]\\d|4)|4[13]|5[1-3])\\d{6}","\\d{6,9}",,,"112345678"],[,,"9(?:22|[35][0-8]|4\\d|6[024-9]|88|9[0-489])\\d{6}","\\d{9}",,,"944567890"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SY",963,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"],"0$1","",1],[,"(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+["9"],"0$1","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],SZ:[,[,,"[027]\\d{7}","\\d{8}"],[,,"2(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{8}",,,"22171234"],[,,"7[6-8]\\d{6}","\\d{8}",,,"76123456"],[,,"0800\\d{4}","\\d{8}",,,"08001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"SZ",268,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[027]"],"","",0]],,[,,"NA","NA"],,,[,,"0800\\d{4}",
+"\\d{8}",,,"08001234"],[,,"NA","NA"],1,,[,,"NA","NA"]],TA:[,[,,"8\\d{3}","\\d{4}"],[,,"8\\d{3}","\\d{4}",,,"8999"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TA",290,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TC:[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7}(?:\\d{3})?",,,"6497121234"],[,,"649(?:2(?:3[129]|4[1-7])|3(?:3[1-389]|4[1-7])|4[34][1-3])\\d{4}","\\d{10}",,,"6492311234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"64971[01]\\d{4}","\\d{10}",,,"6497101234"],"TC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"649",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TD:[,[,,"[2679]\\d{7}","\\d{8}"],[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}",,,"22501234"],[,,"(?:6[02368]\\d|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}",,,"63012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,
+"NA","NA"],[,,"NA","NA"],"TD",235,"00|16",,,,,,"00",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TG:[,[,,"[29]\\d{7}","\\d{8}"],[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}",,,"22212345"],[,,"9[0-289]\\d{6}","\\d{8}",,,"90112345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TG",228,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],
+[,,"NA","NA"],,,[,,"NA","NA"]],TH:[,[,,"[2-9]\\d{7,8}|1\\d{3}(?:\\d{6})?","\\d{4}|\\d{8,10}"],[,,"(?:2\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"],[,,"(?:61|[89]\\d)\\d{7}","\\d{9}",,,"812345678"],[,,"1800\\d{6}","\\d{10}",,,"1800123456"],[,,"1900\\d{6}","\\d{10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"6[08]\\d{7}","\\d{9}",,,"601234567"],"TH",66,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1","",0],[,"([3-9]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-9]"],
+"0$1","",0],[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"],"$1","",0]],,[,,"NA","NA"],,,[,,"1\\d{3}","\\d{4}",,,"1100"],[,,"1\\d{3}","\\d{4}",,,"1100"],,,[,,"NA","NA"]],TJ:[,[,,"[3-59]\\d{8}","\\d{3,9}"],[,,"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}",,,"372123456"],[,,"(?:50[125]|9[0-35-9]\\d)\\d{6}","\\d{9}",,,"917123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TJ",992,"810","8",,,"8",,"8~10",,[[,"([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",
+["[34]7|91[78]"],"(8) $1","",1],[,"([459]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[48]|5|9(?:1[59]|[0235-9])"],"(8) $1","",1],[,"(331700)(\\d)(\\d{2})","$1 $2 $3",["331","3317","33170","331700"],"(8) $1","",1],[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]","3(?:[1245]|3(?:[02-9]|1[0-589]))"],"(8) $1","",1]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TK:[,[,,"[2-9]\\d{3}","\\d{4}"],[,,"[2-4]\\d{3}","\\d{4}",,,"3010"],[,,"[5-9]\\d{3}","\\d{4}",,,"5190"],[,,"NA","NA"],[,,"NA","NA"],[,,
+"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TK",690,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TL:[,[,,"[2-489]\\d{6}|7\\d{6,7}","\\d{7,8}"],[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}",,,"2112345"],[,,"7[3-8]\\d{6}","\\d{8}",,,"77212345"],[,,"80\\d{5}","\\d{7}",,,"8012345"],[,,"90\\d{5}","\\d{7}",,,"9012345"],[,,"NA","NA"],[,,"70\\d{5}","\\d{7}",,,"7012345"],[,,"NA","NA"],"TL",670,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-489]"],"","",0],[,"(\\d{4})(\\d{4})","$1 $2",
+["7"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TM:[,[,,"[1-6]\\d{7}","\\d{8}"],[,,"(?:1(?:2\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\d{5}","\\d{8}",,,"12345678"],[,,"6[2-8]\\d{6}","\\d{8}",,,"66123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TM",993,"810","8",,,"8",,"8~10",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)","",0],[,"(\\d{2})(\\d{6})","$1 $2",["6"],
+"8 $1","",0],[,"(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["13|[2-5]"],"(8 $1)","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TN:[,[,,"[2-57-9]\\d{7}","\\d{8}"],[,,"3[012]\\d{6}|7\\d{7}|81200\\d{3}","\\d{8}",,,"71234567"],[,,"(?:[259]\\d|4[0-24])\\d{6}","\\d{8}",,,"20123456"],[,,"8010\\d{4}","\\d{8}",,,"80101234"],[,,"88\\d{6}","\\d{8}",,,"88123456"],[,,"8[12]10\\d{4}","\\d{8}",,,"81101234"],[,,"NA","NA"],[,,"NA","NA"],"TN",216,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",
+,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TO:[,[,,"[02-8]\\d{4,6}","\\d{5,7}"],[,,"(?:2\\d|3[1-8]|4[1-4]|[56]0|7[0149]|8[05])\\d{3}","\\d{5}",,,"20123"],[,,"(?:7[578]|8[7-9])\\d{5}","\\d{7}",,,"7715123"],[,,"0800\\d{3}","\\d{7}",,,"0800222"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TO",676,"00",,,,,,,,[[,"(\\d{2})(\\d{3})","$1-$2",["[1-6]|7[0-4]|8[05]"],"","",0],[,"(\\d{3})(\\d{4})","$1 $2",["7[5-9]|8[7-9]"],"","",0],[,"(\\d{4})(\\d{3})","$1 $2",["0"],
+"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],TR:[,[,,"[2-589]\\d{9}|444\\d{4}","\\d{7,10}"],[,,"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\d{7}","\\d{10}",,,"2123456789"],[,,"5(?:0[1-7]|22|[34]\\d|5[1-59]|9[246])\\d{7}","\\d{10}",,,"5012345678"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TR",90,"00","0",,,
+"0",,,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[23]|4(?:[0-35-9]|4[0-35-9])"],"(0$1)","",1],[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[589]"],"0$1","",1],[,"(444)(\\d{1})(\\d{3})","$1 $2 $3",["444"],"","",0]],,[,,"512\\d{7}","\\d{10}",,,"5123456789"],,,[,,"444\\d{4}","\\d{7}",,,"4441444"],[,,"444\\d{4}|850\\d{7}","\\d{7,10}",,,"4441444"],,,[,,"NA","NA"]],TT:[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"868(?:2(?:01|2[1-5])|6(?:0[79]|1[02-9]|2[1-9]|[3-69]\\d|7[0-79])|82[124])\\d{4}","\\d{7}(?:\\d{3})?",
+,,"8682211234"],[,,"868(?:2(?:[89]\\d)|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4[6-9]\\d|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}","\\d{10}",,,"8682911234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"TT",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"868",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TV:[,[,,"[29]\\d{4,5}","\\d{5,6}"],[,,"2[02-9]\\d{3}",
+"\\d{5}",,,"20123"],[,,"90\\d{4}","\\d{6}",,,"901234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"TV",688,"00",,,,,,,,,,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TW:[,[,,"[2-689]\\d{7,8}|7\\d{7,9}","\\d{8,10}"],[,,"[2-8]\\d{7,8}","\\d{8,9}",,,"21234567"],[,,"9\\d{8}","\\d{9}",,,"912345678"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"70\\d{8}","\\d{10}",,,"7012345678"],"TW",886,"0(?:0[25679]|19)",
+"0","#",,"0",,,,[[,"([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3",["[2-6]|[78][1-9]"],"0$1","",0],[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["80|9"],"0$1","",0],[,"(70)(\\d{4})(\\d{4})","$1 $2 $3",["70"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],TZ:[,[,,"\\d{9}","\\d{7,9}"],[,,"2[2-8]\\d{7}","\\d{7,9}",,,"222345678"],[,,"(?:6[158]|7[1-9])\\d{7}","\\d{9}",,,"612345678"],[,,"80[08]\\d{6}","\\d{9}",,,"800123456"],[,,"90\\d{7}","\\d{9}",,,"900123456"],[,,"8(?:40|6[01])\\d{6}",
+"\\d{9}",,,"840123456"],[,,"NA","NA"],[,,"41\\d{7}","\\d{9}",,,"412345678"],"TZ",255,"00[056]","0",,,"0",,,,[[,"([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1","",0],[,"([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1","",0],[,"([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UA:[,[,,"[3-689]\\d{8}","\\d{5,9}"],[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}",,,"311234567"],[,,"(?:39|50|6[36-8]|9[1-9])\\d{7}",
+"\\d{9}",,,"391234567"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"900\\d{6}","\\d{9}",,,"900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"89\\d{7}","\\d{9}",,,"891234567"],"UA",380,"00","0",,,"0",,"0~0",,[[,"([3-689]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[38]9|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9]","[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9]"],"0$1","",0],[,"([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3[1-8]2|4[13678]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90",
+"3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90"],"0$1","",0],[,"([3-6]\\d{3})(\\d{5})","$1 $2",["3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])","3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6(?:[013-9]|22)|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])"],"0$1","",0]],,[,,"NA","NA"],,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UG:[,[,,"\\d{9}","\\d{5,9}"],[,,"20(?:[0147]\\d{2}|2(?:40|[5-9]\\d)|3[23]\\d|5[0-4]\\d|6[03]\\d|8[0-2]\\d)\\d{4}|[34]\\d{8}","\\d{5,9}",,,"312345678"],[,,"2030\\d{5}|7(?:0[0-7]|[15789]\\d|2[03]|30|[46][0-4])\\d{6}","\\d{9}",,,"712345678"],[,,"800[123]\\d{5}","\\d{9}",,,"800123456"],[,,"90[123]\\d{6}","\\d{9}",,,"901123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])"],
+"0$1","",0],[,"(\\d{2})(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"],"0$1","",0],[,"(2024)(\\d{5})","$1 $2",["2024"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],US:[,[,,"[2-9]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[56])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[01678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\d{6}",
+"\\d{7}(?:\\d{3})?",,,"2015555555"],[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[56])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[01678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\d{6}",
+"\\d{7}(?:\\d{3})?",,,"2015555555"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"US",1,"011","1",,,"1",,,1,[[,"(\\d{3})(\\d{4})","$1-$2",,"","",1],[,"(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,"","",1]],[[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3"]],[,,"NA","NA"],1,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UY:[,[,,"[2489]\\d{6,7}","\\d{7,8}"],[,
+,"2\\d{7}|4[2-7]\\d{6}","\\d{7,8}",,,"21231234"],[,,"9[1-9]\\d{6}","\\d{8}",,,"94231234"],[,,"80[05]\\d{4}","\\d{7}",,,"8001234"],[,,"90[0-8]\\d{4}","\\d{7}",,,"9001234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UY",598,"0(?:1[3-9]\\d|0)","0"," int. ",,"0",,"00",,[[,"(\\d{4})(\\d{4})","$1 $2",["[24]"],"","",0],[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9[1-9]"],"0$1","",0],[,"(\\d{3})(\\d{4})","$1 $2",["[89]0"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],UZ:[,[,,"[679]\\d{8}",
+"\\d{7,9}"],[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69])|9(?:22|4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|1[12]\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}",,,"662345678"],[,,"6(?:1(?:2(?:98|2[01])|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:11\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4])|7\\d{2})|5(?:19[01]|2(?:27|9[26])|30\\d|59\\d|7\\d{2})|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|3[79]\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79])|9[0-3]\\d)|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|5\\d|3[01]|7[0-4])|5[67]\\d|6(?:2[0-26]|8\\d)|7\\d{2}))\\d{4}|7(?:0\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|33\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078])|9[4-6]\\d)|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0127]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[05629]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07])))\\d{4}|9[0-57-9]\\d{7}",
+"\\d{7,9}",,,"912345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"UZ",998,"810","8",,,"8",,"8~10",,[[,"([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VA:[,[,,"06\\d{8}","\\d{10}"],[,,"06698\\d{5}","\\d{10}",,,"0669812345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VA",379,"00",,,,,,,,[[,"(06)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],
+,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],VC:[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\d{4}","\\d{7}(?:\\d{3})?",,,"7842661234"],[,,"784(?:4(?:3[0-4]|5[45]|89|9[0-5])|5(?:2[6-9]|3[0-4]))\\d{4}","\\d{10}",,,"7844301234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],
+[,,"NA","NA"],"VC",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"784",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VE:[,[,,"[24589]\\d{9}","\\d{7,10}"],[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}",,,"2121234567"],[,,"4(?:1[24-8]|2[46])\\d{7}","\\d{10}",,,"4121234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"900\\d{7}","\\d{10}",,,"9001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VE",58,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{7})","$1-$2",,"0$1","$CC $1",0]],,[,,"NA",
+"NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VG:[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"284(?:(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7}(?:\\d{3})?",,,"2842291234"],[,,"284(?:(?:3(?:0[0-3]|4[0-367])|4(?:4[0-6]|68|99)|54[0-57])\\d{4}|496[6-9]\\d{3})","\\d{10}",,,"2843001234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],
+[,,"NA","NA"],"VG",1,"011","1",,,"1",,,,,,[,,"NA","NA"],,"284",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VI:[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"],[,,"340(?:2(?:01|2[0678]|44|77)|3(?:32|44)|4(?:22|7[34])|5(?:1[34]|55)|6(?:26|4[23]|77|9[023])|7(?:1[2-589]|27|7\\d)|884|998)\\d{4}","\\d{7}(?:\\d{3})?",,,"3406421234"],[,,"340(?:2(?:01|2[0678]|44|77)|3(?:32|44)|4(?:22|7[34])|5(?:1[34]|55)|6(?:26|4[23]|77|9[023])|7(?:1[2-589]|27|7\\d)|884|998)\\d{4}","\\d{7}(?:\\d{3})?",,,"3406421234"],[,,"8(?:00|44|55|66|77|88)[2-9]\\d{6}",
+"\\d{10}",,,"8002345678"],[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"],[,,"NA","NA"],[,,"5(?:00|33|44|66|77)[2-9]\\d{6}","\\d{10}",,,"5002345678"],[,,"NA","NA"],"VI",1,"011","1",,,"1",,,1,,,[,,"NA","NA"],,"340",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],VN:[,[,,"[17]\\d{6,9}|[2-69]\\d{7,9}|8\\d{6,8}","\\d{7,10}"],[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|4\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01])|8[1-9])\\d{7}","\\d{9,10}",,,"2101234567"],[,,"(?:9\\d|1(?:2\\d|6[2-9]|8[68]|99))\\d{7}",
+"\\d{9,10}",,,"912345678"],[,,"1800\\d{4,6}","\\d{8,10}",,,"1800123456"],[,,"1900\\d{4,6}","\\d{8,10}",,,"1900123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VN",84,"00","0",,,"0",,,,[[,"([17]99)(\\d{4})","$1 $2",["[17]99"],"0$1","",1],[,"([48])(\\d{4})(\\d{4})","$1 $2 $3",["[48]"],"0$1","",1],[,"([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3",["2[025-79]|3[0136-9]|5[2-9]|6[0-46-8]|7[02-79]"],"0$1","",1],[,"(80)(\\d{5})","$1 $2",["80"],"0$1","",1],[,"(69\\d)(\\d{4,5})","$1 $2",["69"],"0$1","",1],[,"([235-7]\\d{2})(\\d{4})(\\d{3})",
+"$1 $2 $3",["2[1348]|3[25]|5[01]|65|7[18]"],"0$1","",1],[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1","",1],[,"(1[2689]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[26]|8[68]|99)"],"0$1","",1],[,"(1[89]00)(\\d{4,6})","$1 $2",["1[89]0"],"$1","",1]],,[,,"NA","NA"],,,[,,"[17]99\\d{4}|69\\d{5,6}","\\d{7,8}",,,"1992000"],[,,"[17]99\\d{4}|69\\d{5,6}|80\\d{5}","\\d{7,8}",,,"1992000"],,,[,,"NA","NA"]],VU:[,[,,"[2-57-9]\\d{4,6}","\\d{5,7}"],[,,"(?:2[02-9]\\d|3(?:[5-7]\\d|8[0-8])|48[4-9]|88\\d)\\d{2}",
+"\\d{5}",,,"22123"],[,,"(?:5(?:7[2-5]|[3-69]\\d)|7[013-7]\\d)\\d{4}","\\d{7}",,,"5912345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"VU",678,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[579]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"3[03]\\d{3}|900\\d{4}","\\d{5,7}",,,"30123"],,,[,,"NA","NA"]],WF:[,[,,"[5-7]\\d{5}","\\d{6}"],[,,"(?:50|68|72)\\d{4}","\\d{6}",,,"501234"],[,,"(?:50|68|72)\\d{4}","\\d{6}",,,"501234"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA",
+"NA"],[,,"NA","NA"],"WF",681,"00",,,,,,,1,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],WS:[,[,,"[2-8]\\d{4,6}","\\d{5,7}"],[,,"(?:[2-5]\\d|6[1-9]|84\\d{2})\\d{3}","\\d{5,7}",,,"22123"],[,,"(?:60|7[25-7]\\d)\\d{4}","\\d{6,7}",,,"601234"],[,,"800\\d{3}","\\d{6}",,,"800123"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"WS",685,"0",,,,,,,,[[,"(8\\d{2})(\\d{3,4})","$1 $2",["8"],"","",0],[,"(7\\d)(\\d{5})","$1 $2",["7"],"",
+"",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],YE:[,[,,"[1-7]\\d{6,8}","\\d{6,9}"],[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}",,,"1234567"],[,,"7[0137]\\d{7}","\\d{9}",,,"712345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"],"0$1","",0],[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7[0137]"],"0$1","",0]],,[,,"NA","NA"],
+,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],YT:[,[,,"[268]\\d{8}","\\d{9}"],[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"],[,,"639\\d{6}","\\d{9}",,,"639123456"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"YT",262,"00","0",,,"0",,,,,,[,,"NA","NA"],,"269|63",[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ZA:[,[,,"[1-79]\\d{8}|8(?:[067]\\d{7}|[1-4]\\d{3,7})","\\d{5,9}"],[,,"(?:1[0-8]|2[0-378]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{9}",,,"101234567"],[,
+,"(?:6[0-5]|7[0-46-9])\\d{7}|8[1-4]\\d{3,7}","\\d{5,9}",,,"711234567"],[,,"80\\d{7}","\\d{9}",,,"801234567"],[,,"86[2-9]\\d{6}|90\\d{7}","\\d{9}",,,"862345678"],[,,"860\\d{6}","\\d{9}",,,"860123456"],[,,"NA","NA"],[,,"87\\d{7}","\\d{9}",,,"871234567"],"ZA",27,"00","0",,,"0",,,,[[,"(860)(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-79]|8(?:[0-47]|6[1-9])"],"0$1","",0],[,"(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1","",0],[,"(\\d{2})(\\d{3})(\\d{2,3})",
+"$1 $2 $3",["8[1-4]"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"861\\d{6}","\\d{9}",,,"861123456"],,,[,,"NA","NA"]],ZM:[,[,,"[289]\\d{8}","\\d{9}"],[,,"21[1-8]\\d{6}","\\d{9}",,,"211234567"],[,,"9(?:5[05]|6\\d|7[1-9])\\d{6}","\\d{9}",,,"955123456"],[,,"800\\d{6}","\\d{9}",,,"800123456"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"ZM",260,"00","0",,,"0",,,,[[,"([29]\\d)(\\d{7})","$1 $2",["[29]"],"0$1","",0],[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1","",0]],,[,,"NA","NA"],,
+,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],ZW:[,[,,"2(?:[012457-9]\\d{3,8}|6\\d{3,6})|[13-79]\\d{4,8}|8[06]\\d{8}","\\d{3,10}"],[,,"(?:1[3-9]|2(?:0[45]|[16]|2[28]|[49]8?|58[23]|7[246]|8[1346-9])|3(?:08?|17?|3[78]|[2456]|7[1569]|8[379])|5(?:[07-9]|1[78]|483|5(?:7?|8))|6(?:0|28|37?|[45][68][78]|98?)|848)\\d{3,6}|(?:2(?:27|5|7[135789]|8[25])|3[39]|5[1-46]|6[126-8])\\d{4,6}|2(?:(?:0|70)\\d{5,6}|2[05]\\d{7})|(?:4\\d|9[2-8])\\d{4,7}","\\d{3,10}",,,"1312345"],[,,"7[1378]\\d{7}|86(?:22|44)\\d{6}","\\d{9,10}",
+,,"711234567"],[,,"800\\d{7}","\\d{10}",,,"8001234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"86(?:1[12]|30|55|77|8[367]|99)\\d{6}","\\d{10}",,,"8686123456"],"ZW",263,"00","0",,,"0",,,,[[,"([49])(\\d{3})(\\d{2,5})","$1 $2 $3",["4|9[2-9]"],"0$1","",0],[,"([179]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[19]1|7"],"0$1","",0],[,"(86\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["86[24]"],"0$1","",0],[,"([2356]\\d{2})(\\d{3,5})","$1 $2",["2(?:[278]|0[45]|[49]8)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"],
+"0$1","",0],[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])|80"],"0$1","",0],[,"([1-356]\\d)(\\d{3,5})","$1 $2",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"],"0$1","",0],[,"([1-356]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"],
+"0$1","",0],[,"([25]\\d{3})(\\d{3,5})","$1 $2",["(?:25|54)8","258[23]|5483"],"0$1","",0],[,"([25]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:25|54)8","258[23]|5483"],"0$1","",0],[,"(8\\d{3})(\\d{6})","$1 $2",["86"],"0$1","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],800:[,[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",800,"",,,,,,,1,[[,"(\\d{4})(\\d{4})",
+"$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],808:[,[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"\\d{8}","\\d{8}",,,"12345678"],[,,"NA","NA"],[,,"NA","NA"],"001",808,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]],870:[,[,,"[35-7]\\d{8}","\\d{9}",,,"301234567"],[,,"NA","NA",,,"301234567"],[,,"(?:[356]\\d|7[6-8])\\d{7}","\\d{9}",
+,,"301234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",870,"",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],878:[,[,,"1\\d{11}","\\d{12}",,,"101234567890"],[,,"NA","NA",,,"101234567890"],[,,"NA","NA",,,"101234567890"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"10\\d{10}","\\d{12}",,,"101234567890"],"001",878,"",,,,,,,1,[[,"(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",,"","",0]],
+,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],881:[,[,,"[67]\\d{8}","\\d{9}",,,"612345678"],[,,"NA","NA",,,"612345678"],[,,"[67]\\d{8}","\\d{9}",,,"612345678"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",881,"",,,,,,,,[[,"(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[67]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],882:[,[,,"[13]\\d{6,11}","\\d{7,12}",,,"3451234567"],[,,"NA","NA",,,"3451234567"],[,,"3(?:2\\d{3}|37\\d{2}|4(?:2|7\\d{3}))\\d{4}",
+"\\d{7,10}",,,"3451234567"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15678]|9[0689])\\d{4}|6\\d{5,10})|345\\d{7}","\\d{7,12}",,,"3451234567"],"001",882,"",,,,,,,,[[,"(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"],"","",0],[,"(\\d{2})(\\d{5})","$1 $2",["16|342"],"","",0],[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["34[57]"],"","",0],[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["348"],"","",0],[,"(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",
+["1"],"","",0],[,"(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"],"","",0],[,"(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["16"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"348[57]\\d{7}","\\d{11}",,,"3451234567"]],883:[,[,,"51\\d{7}(?:\\d{3})?","\\d{9}(?:\\d{3})?",,,"510012345"],[,,"NA","NA",,,"510012345"],[,,"NA","NA",,,"510012345"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"51(?:00\\d{5}(?:\\d{3})?|[13]0\\d{8})","\\d{9}(?:\\d{3})?",,,"510012345"],"001",883,"",,,,,,,1,
+[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"],"","",0],[,"(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["510"],"","",0],[,"(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"],"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],,,[,,"NA","NA"]],888:[,[,,"\\d{11}","\\d{11}",,,"12345678901"],[,,"NA","NA",,,"12345678901"],[,,"NA","NA",,,"12345678901"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",888,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",,"","",0]],,[,
+,"NA","NA"],,,[,,"NA","NA"],[,,"\\d{11}","\\d{11}",,,"12345678901"],1,,[,,"NA","NA"]],979:[,[,,"\\d{9}","\\d{9}",,,"123456789"],[,,"NA","NA",,,"123456789"],[,,"NA","NA",,,"123456789"],[,,"NA","NA"],[,,"\\d{9}","\\d{9}",,,"123456789"],[,,"NA","NA"],[,,"NA","NA"],[,,"NA","NA"],"001",979,"",,,,,,,1,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]],,[,,"NA","NA"],,,[,,"NA","NA"],[,,"NA","NA"],1,,[,,"NA","NA"]]};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function P(){this.$={}}P.ba=function(){return P.v?P.v:P.v=new P};
+var Ja={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","\uff10":"0","\uff11":"1","\uff12":"2","\uff13":"3","\uff14":"4","\uff15":"5","\uff16":"6","\uff17":"7","\uff18":"8","\uff19":"9","\u0660":"0","\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u06f0":"0","\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9"},Ka={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",
+7:"7",8:"8",9:"9","\uff10":"0","\uff11":"1","\uff12":"2","\uff13":"3","\uff14":"4","\uff15":"5","\uff16":"6","\uff17":"7","\uff18":"8","\uff19":"9","\u0660":"0","\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u06f0":"0","\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9",A:"2",B:"2",C:"2",D:"3",E:"3",F:"3",G:"4",H:"4",I:"4",J:"5",K:"5",L:"5",M:"6",N:"6",O:"6",P:"7",
+Q:"7",R:"7",S:"7",T:"8",U:"8",V:"8",W:"9",X:"9",Y:"9",Z:"9"},Q=RegExp("^[+\uff0b]+"),La=RegExp("([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9])"),Ma=RegExp("[+\uff0b0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]"),Na=/[\\\/] *x/,Oa=RegExp("[^0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9A-Za-z#]+$"),Pa=/(?:.*?[A-Za-z]){3}.*/,Qa=RegExp("(?:;ext=([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})|[ \u00a0\\t,]*(?:e?xt(?:ensi(?:o\u0301?|\u00f3))?n?|\uff45?\uff58\uff54\uff4e?|[,x\uff58#\uff03~\uff5e]|int|anexo|\uff49\uff4e\uff54)[:\\.\uff0e]?[ \u00a0\\t,-]*([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})#?|[- ]+([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,5})#)$",
+"i"),Ra=RegExp("^[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{2}$|^[+\uff0b]*(?:[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*]*[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]){3,}[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*A-Za-z0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]*(?:;ext=([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})|[ \u00a0\\t,]*(?:e?xt(?:ensi(?:o\u0301?|\u00f3))?n?|\uff45?\uff58\uff54\uff4e?|[,x\uff58#\uff03~\uff5e]|int|anexo|\uff49\uff4e\uff54)[:\\.\uff0e]?[ \u00a0\\t,-]*([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,7})#?|[- ]+([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,5})#)?$",
+"i"),Sa=/(\$\d)/;function Ta(a){var b=a.search(Ma);0<=b?(a=a.substring(b),a=a.replace(Oa,""),b=a.search(Na),0<=b&&(a=a.substring(0,b))):a="";return a}function Ua(a){return 2>a.length?!1:R(Ra,a)}function Va(a){return R(Pa,a)?S(a,Ka):S(a,Ja)}function Wa(a){var b=Va(a.toString());a.clear();a.append(b)}function S(a,b){for(var c=new F,d,f=a.length,e=0;e<f;++e)d=a.charAt(e),d=b[d.toUpperCase()],null!=d&&c.append(d);return c.toString()}
+P.prototype.format=function(a,b){if(0==y(a,2)&&null!=a.b[5]){var c=B(a,5);if(0<c.length)return c}var c=a.h(),d=T(a);if(0==b)return Xa(c,0,d,"");if(!(c in N))return d;var f=U(this,c,Ya(c)),e;e=null!=a.b[3]&&0!=a.getExtension().length?3==b?";ext="+a.getExtension():null!=f.b[13]?y(f,13)+B(a,3):" ext. "+B(a,3):"";a:{for(var f=0==(A(f,20)||[]).length||2==b?A(f,19)||[]:A(f,20)||[],g,h=f.length,k=0;k<h;++k){g=f[k];var m=g.f[3].o?null!=g.b[3]?g.b[3].length:0:null!=g.b[3]?1:0;if(0==m||0==d.search(y(g,3,m-
+1)))if(m=new RegExp(y(g,1)),R(m,d)){f=g;break a}}f=null}null!=f&&(h=f,f=B(h,2),g=new RegExp(y(h,1)),B(h,5),k="",h=B(h,4),k=2==b&&null!=h&&0<h.length?d.replace(g,f.replace(Sa,h)):d.replace(g,f),3==b&&(k=k.replace(RegExp("^[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+"),""),k=k.replace(RegExp("[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+",
+"g"),"-")),d=k);return Xa(c,b,d,e)};function U(a,b,c){return"001"==c?V(a,""+b):V(a,c)}function T(a){var b=""+y(a,2);return null!=a.b[4]&&y(a,4)?Array(B(a,8)+1).join("0")+b:b}function Xa(a,b,c,d){switch(b){case 0:return"+"+a+c+d;case 1:return"+"+a+" "+c+d;case 3:return"tel:+"+a+"-"+c+d;default:return c+d}}
+function Za(a,b){return W(a,y(b,1))?W(a,y(b,5))?4:W(a,y(b,4))?3:W(a,y(b,6))?5:W(a,y(b,8))?6:W(a,y(b,7))?7:W(a,y(b,21))?8:W(a,y(b,25))?9:W(a,y(b,28))?10:W(a,y(b,2))?y(b,18)||W(a,y(b,3))?2:0:!y(b,18)&&W(a,y(b,3))?1:-1:-1}function V(a,b){if(null==b)return null;b=b.toUpperCase();var c=a.$[b];if(null==c){c=O[b];if(null==c)return null;c=(new M).k(I.i(),c);a.$[b]=c}return c}function W(a,b){return R(B(b,3),a)&&R(B(b,2),a)}function Ya(a){a=N[a];return null==a?"ZZ":a[0]}
+function $a(a,b){return R(a,b)?0:0==b.search(a)?3:2}
+function ab(a,b,c,d,f){if(0==a.length)return 0;a=new F(a);var e;null!=b&&(e=y(b,11));null==e&&(e="NonMatch");var g=a.toString();if(0==g.length)e=20;else if(Q.test(g))g=g.replace(Q,""),a.clear(),a.append(Va(g)),e=1;else{g=new RegExp(e);Wa(a);e=a.toString();if(0==e.search(g)){var g=e.match(g)[0].length,h=e.substring(g).match(La);h&&null!=h[1]&&0<h[1].length&&"0"==S(h[1],Ja)?e=!1:(a.clear(),a.append(e.substring(g)),e=!0)}else e=!1;e=e?5:20}d&&z(f,6,e);if(20!=e){if(2>=a.e.length)throw"Phone number too short after IDD";
+a:{d=a.toString();if(0!=d.length&&"0"!=d.charAt(0))for(b=d.length,e=1;3>=e&&e<=b;++e)if(a=parseInt(d.substring(0,e),10),a in N){c.append(d.substring(e));c=a;break a}c=0}if(0!=c)return f.l(c),c;throw"Invalid country calling code";}if(null!=b&&(e=b.h(),g=""+e,h=a.toString(),0==h.lastIndexOf(g,0))){var k=new F(h.substring(g.length)),h=y(b,1),g=new RegExp(B(h,2));bb(k,b,null);b=k.toString();h=B(h,3);if(!R(g,a.toString())&&R(g,b)||3==$a(h,a.toString()))return c.append(b),d&&z(f,6,10),f.l(e),e}f.l(0);return 0}
+function bb(a,b,c){var d=a.toString(),f=d.length,e=y(b,15);if(0!=f&&null!=e&&0!=e.length&&(e=new RegExp("^(?:"+e+")"),f=e.exec(d))){var g=RegExp,h;h=y(b,1);h=B(h,2);g=new g(h);h=R(g,d);var k=f.length-1;b=y(b,16);if(null==b||0==b.length||null==f[k]||0==f[k].length){if(!h||R(g,d.substring(f[0].length)))null!=c&&0<k&&null!=f[k]&&c.append(f[1]),a.set(d.substring(f[0].length))}else if(d=d.replace(e,b),!h||R(g,d))null!=c&&0<k&&c.append(f[1]),a.set(d)}}
+P.prototype.parse=function(a,b){return cb(this,a,b,!1)};
+function cb(a,b,c,d){if(null==b)throw"The string supplied did not seem to be a phone number";if(250<b.length)throw"The string supplied is too long to be a phone number";var f=new F,e=b.indexOf(";phone-context=");if(0<e){var g=e+15;if("+"==b.charAt(g)){var h=b.indexOf(";",g);0<h?f.append(b.substring(g,h)):f.append(b.substring(g))}g=b.indexOf("tel:");f.append(b.substring(0<=g?g+4:0,e))}else f.append(Ta(b));e=f.toString();g=e.indexOf(";isub=");0<g&&(f.clear(),f.append(e.substring(0,g)));if(!Ua(f.toString()))throw"The string supplied did not seem to be a phone number";
+e=f.toString();if(!(null!=c&&isNaN(c)&&c.toUpperCase()in O||null!=e&&0<e.length&&Q.test(e)))throw"Invalid country calling code";e=new K;d&&z(e,5,b);a:{b=f.toString();g=b.search(Qa);if(0<=g&&Ua(b.substring(0,g)))for(var h=b.match(Qa),k=h.length,m=1;m<k;++m)if(null!=h[m]&&0<h[m].length){f.clear();f.append(b.substring(0,g));b=h[m];break a}b=""}0<b.length&&z(e,3,b);g=V(a,c);b=new F;h=0;k=f.toString();try{h=ab(k,g,b,d,e)}catch(r){if("Invalid country calling code"==r&&Q.test(k)){if(k=k.replace(Q,""),h=
+ab(k,g,b,d,e),0==h)throw r;}else throw r;}0!=h?(f=Ya(h),f!=c&&(g=U(a,h,f))):(Wa(f),b.append(f.toString()),null!=c?(h=g.h(),e.l(h)):d&&Da(e,6));if(2>b.e.length)throw"The string supplied is too short to be a phone number";null!=g&&(a=new F,c=new F(b.toString()),bb(c,g,a),f=c.toString(),g=y(g,1),g=B(g,3),2!=$a(g,f)&&(b=c,d&&z(e,7,a.toString())));d=b.toString();a=d.length;if(2>a)throw"The string supplied is too short to be a phone number";if(17<a)throw"The string supplied is too long to be a phone number";
+if(1<d.length&&"0"==d.charAt(0)){z(e,4,!0);for(a=1;a<d.length-1&&"0"==d.charAt(a);)a++;1!=a&&z(e,8,a)}z(e,2,parseInt(d,10));return e}function R(a,b){var c="string"==typeof a?b.match("^(?:"+a+")$"):b.match(a);return c&&c[0].length==b.length?!0:!1};/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var db=new I;z(db,11,"NA");/*
+
+ Copyright (C) 2010 The Libphonenumber Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+function eb(a,b){try{var c=P.ba();if(!(null!=b&&isNaN(b)&&b.toUpperCase()in O)&&0<a.length&&"+"!=a.charAt(0))throw"Invalid country calling code";var d=cb(c,a,b,!0),f;if(null==d)f=null;else{var e=d.h(),g=N[e],h;if(null==g)h=null;else{var k;if(1==g.length)k=g[0];else b:{for(var m=T(d),r,C=g.length,e=0;e<C;e++){r=g[e];var $=V(c,r);if(null!=$.b[23]){if(0==m.search(y($,23))){k=r;break b}}else if(-1!=Za(m,$)){k=r;break b}}k=null}h=k}f=h}var aa;var Ea=d.h(),Fa=U(c,Ea,f),ba;if(!(ba=null==Fa)){var ca;if(ca=
+"001"!=f){var Ga,Ha=V(c,f);if(null==Ha)throw"Invalid region code: "+f;Ga=Ha.h();ca=Ea!=Ga}ba=ca}if(ba)aa=!1;else{var gb=T(d);aa=-1!=Za(gb,Fa)}return aa}catch(hb){return hb}}var X=["isPhoneNumberValid"],Y=n;X[0]in Y||!Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());){var fb;if(fb=!X.length)fb=void 0!==eb;fb?Y[Z]=eb:Y=Y[Z]?Y[Z]:Y[Z]={}};})();
\ No newline at end of file
diff --git a/themes/bootstrap3/js/vudl/canvas-zoomy.js b/themes/bootstrap3/js/vudl/canvas-zoomy.js
index 045107de3cfb92f97ae0d3a5e7911c77305f6df4..2fde8e14b407e050257b82887b5a15248c859aa6 100644
--- a/themes/bootstrap3/js/vudl/canvas-zoomy.js
+++ b/themes/bootstrap3/js/vudl/canvas-zoomy.js
@@ -7,15 +7,6 @@ var Zoomy = {
     this.showMinimap = true;
     this.canvas.width  = Math.floor(this.canvas.clientWidth);
     this.canvas.height = Math.floor(this.canvas.clientHeight);
-
-
-
-
-
-
-
-
-
     addEventListener('mousemove', Zoomy.mouseHandle, false);
     addEventListener('touchmove', Zoomy.mouseHandle, false);
     addEventListener('mouseup', function(e) {
diff --git a/themes/bootstrap3/js/vudl/record.js b/themes/bootstrap3/js/vudl/record.js
index 8bb9a5a20db92ab34891a633a443aa4bb6fd59b2..9876f328912ae3ae710d199b3f89aeea4a4d538b 100644
--- a/themes/bootstrap3/js/vudl/record.js
+++ b/themes/bootstrap3/js/vudl/record.js
@@ -8,7 +8,6 @@ function ajaxGetView(pageObject) {
   pageObject['counts'] = counts;
   if (currentTab == 'master-tab' && currentID == pageObject['id']) {
     // Trigger file download
-    //alert('download');
     $('#file-download').submit();
   } else if (currentType != pageObject['filetype']) {
     if(viewLoadAjax) {
@@ -49,13 +48,6 @@ function updateTechInfo(record) {
       $('#techinfo').html(d.data.div);
       var downloadSrc = 'MASTER';
       if(typeof d.data.type !== "undefined") {
-        if(d.data.type.indexOf('image') > -1) {
-          downloadSrc = 'LARGE';
-          d.data.type = 'image/png';
-        } else if(d.data.type.indexOf('audio') > -1) {
-          downloadSrc = 'MP3';
-          d.data.type = 'audio/mp3';
-        }
         $('#download-button .details').html(d.data.type+' ~ '+d.data.size);
       }
       $('#file-download').attr('action', path+'/files/'+record.id+'/'+downloadSrc+'?download=true');
@@ -135,7 +127,6 @@ function scrollToSelected() {
   if($(listID).length > 0 && $(listID+' .selected').length > 0) {
     $(listID).finish();
     scrollAnimation = $(listID).animate({
-
       scrollTop: $(listID+' .selected').offset().top-$(listID).offset().top+$(listID).scrollTop()-12
     });
   }
diff --git a/themes/bootstrap3/less/bootstrap.less b/themes/bootstrap3/less/bootstrap.less
index 41aa9685e16f0269bd9b6f774e133fe7563aee62..a868b616a7a0e0e934b05a61d7df5ccab31f6160 100644
--- a/themes/bootstrap3/less/bootstrap.less
+++ b/themes/bootstrap3/less/bootstrap.less
@@ -1,251 +1,315 @@
 @import "bootstrap/bootstrap";
 @import "a11y";
 
-.alert.alert-info a {
-  text-decoration:underline;
-}
+.alert.alert-info a {text-decoration: underline;}
 .btn.disabled {
-  &:active,&:focus,&:hover {
-    color:#000;
-  }
+  &:active,
+  &:focus,
+  &:hover {color: #000;}
 }
-[data-toggle~=dropdown] {cursor:pointer}
-.fa {cursor:default}
+[data-toggle~="dropdown"] {cursor: pointer;}
+.fa {cursor: default;}
 .form-control {
-  @media(min-width:768px) {
-    max-width:400px;
-  }
+  @media(min-width: 768px) {max-width: 400px;}
 }
-.has-error {margin-bottom:0;}
+.has-error {margin-bottom: 0;}
+.sms-error {.has-error;}
 .help-block.with-errors {
-  padding:@padding-base-vertical 0;
-  &:empty {
-    padding:0;
-  }
-  &,.list-unstyled {
-    margin:0;
-  }
+  padding-top: @padding-base-vertical;
+  padding-bottom: @padding-base-vertical;
+  &:empty {padding: 0;}
 }
+.help-block.with-errors,
+.list-unstyled {margin: 0;}
 .highlight,mark {
   background: lighten(#FF0, 20%);
   padding: .1em .2em;
 }
-.icon-bar {background-color:#888}
-img {max-width:100%}
-label.list-group-item {border-radius:0;font-weight:normal;margin-top:0;padding-left:35px}
-.list-group-item.title {font-weight:bold}
-#modal .modal-body > h2:first-child {display:none}
-.popover {width:250px}
+.icon-bar {background-color: #888;}
+img {max-width: 100%;}
+label.list-group-item {
+  margin-top: 0;
+  padding-left: 35px;
+  font-weight: normal;
+  border-radius: 0;
+}
+.list-group-item.title {font-weight: bold;}
+#modal {background-color: rgba(0,0,0,.2);}
+#modal .modal-body > h2:first-child {display: none;}
+.popover {width: 250px;}
+p.lead {
+  @media (min-width: 768px) {
+    font-size: 23px;
+    font-weight: normal;
+  }
+  @media (max-width: 767px) {
+    font-size: 20px;
+  }
+}
+.recordcover {max-height: 300px;}
 .sub-breadcrumb {
-  padding:5px 10px;
-  white-space:nowrap;
-  li {
-    display:inline-block;
-    & + li:before {
-      content: "@{breadcrumb-separator}\00a0";
-      padding: 0 5px;
-      color: @breadcrumb-color;
-    }
+  padding: 5px 10px;
+  white-space: nowrap;
+  li {display: inline-block;}
+  li + li:before {
+    padding-left: 5px;
+    padding-right: 5px;
+    color: @breadcrumb-color;
+    content: "@{breadcrumb-separator}\00a0";
   }
 }
-.tab-content {padding:4px}
+.tab-content {padding: 4px;}
+@media (max-width: 991px) {
+  header .container.navbar {margin-bottom: 0;}
+  #searchForm {margin-top: 0;}
+}
+@media (max-width: 767px) {
+  #searchForm {padding-top: 0;}
+}
 
 /* --- Advanced Search --- */
 .group {
+  position: relative;
   background: @gray-lighter;
   border-radius: @border-radius-base;
   border: 1px solid darken(@gray-lighter, 15%);
-  margin: 0 0 6px;
-  padding: 10px 10px 10px 25px;
+  margin-top: 0;
+  margin-bottom: .5em !important;
   .add_search_link {
     display: inline-block;
     margin-top: 4px;
   }
-  [class^=col-] {
-    padding-left: 0;
+  & .group-close {
+    &:extend(.close);
+    position: absolute;
+    top: .3em;
+    right: .5em;
+    opacity: .4;
+    z-index: 2;
   }
   .search {
-    margin-bottom:2px;
+    margin-bottom: 2px;
+    .close {opacity: .8;}
+  }
+  @media (min-width: 768px) {
+    padding: 10px 10px 10px 25px;
+    [class^=col-] {padding-left: 0;}
+  }
+  @media (max-width: 767px) {
+    .search  .middle {
+      float: left;
+      width: 90%;
+    }
+    & .group-close {
+      top: .5em;
+      right: 1em;
+      opacity: .6;
+    }
+  }
+  @media (max-width: 991px) {
+    .form-control {max-width: none;}
   }
 }
 #groupPlaceHolder {
   display:block;
   padding:6px;
 }
+.template-dir-eds.template-name-advanced {
+  legend {margin-bottom: 0;}
+  .no-js .group:nth-child(n+3) {display: none;}
+  .search .close a {margin-left: -2em;}
+}
 
 /* --- Alphabrowse --- */
 .alphabrowse {
-  border-collapse:separate;
-  .lcc {width:20%;}
-  .titles {width:10%;text-align:center}
+  border-collapse: separate;
+  .lcc {width: 20%;}
+  .titles {
+    width: 10%;
+    text-align: center;
+  }
   /* highlighting the row makes ff bugs; operate on its children */
   tr.browse-match td {
-    border-top:.2em solid @brand-primary;
-    border-bottom:.2em solid @brand-primary;
-  }
-  tr.browse-match td:first-child {
-    border-left:.2em solid @brand-primary;
-  }
-  tr.browse-match td:last-child {
-    border-right:.2em solid @brand-primary;
+    border-top: .2em solid @brand-primary;
+    border-bottom: .2em solid @brand-primary;
+    &:first-child {border-left: .2em solid @brand-primary;}
+    &:last-child {border-right: .2em solid @brand-primary;}
   }
-
 }
 
 /* --- Autocomplete --- */
 .twitter-typeahead {
-  background:#FFF;
-  border-radius:@border-radius-base;
-  vertical-align:top;
-  .tt-hint {display:none}
-  @media (max-width:767px) {
-    width:100%;
-  }
+  vertical-align: top;
+  background-color: #fff;
+  border-radius: @border-radius-base;
+  @media (max-width: 767px) {width: 100%;}
 }
-.tt-dropdown-menu {.list-group;}
+.twitter-typeahead .tt-hint {display: none;}
+.tt-dropdown-menu {&:extend(.list-group);}
 .tt-suggestion {
-  .list-group-item;
-  cursor:pointer;
-  text-overflow:ellipsis;
-  white-space:nowrap;
-  &.active {
-    white-space:inherit;
-  }
+  &:extend(.list-group-item);
+  cursor: pointer;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  &.active {white-space: inherit;}
   &.tt-cursor {
-    background-color:@brand-primary;
-    color:#FFF;
+    background-color: @brand-primary;
+    color: #fff;
   }
-  p {margin:0}
+
+  p {margin: 0;}
 }
 
 /* --- Badges - blend the links in --- */
-.badge a {color:#FFF}
+.badge a {color: #fff;}
 
 /* --- Browse --- */
 .browse.list-group .list-group-item {
-  word-wrap:break-word;
+  word-wrap: break-word;
   &.view-record {
-    border-top:0;
-    font-size:85%;
-    padding:2px 4px;
-    text-align:right;
+    padding: 2px 4px;
+    font-size: 85%;
+    text-align: right;
+    border-top: 0;
   }
 }
 
+/* --- Cart --- */
+.cart-controls .checkbox {
+  line-height: 2.5em;
+  padding-right: 1em;
+}
+#modal .cart-controls .btn {margin-bottom: 4px;}
+#modal .cart-controls .checkbox {padding-bottom: 1em;}
+#modal .cart-controls ~ hr {margin-top: 0;}
+
 /* --- Icons --- */
 // Search Icons
-.fa-grid:before   {content:"\f00a"} // .fa-th
-.fa-visual:before {content:"\f008"} // .fa-film
-.fa-mobile:before {content:"\f10a"} // .fa-tablet
+.fa-grid:before   {content: "\f00a";} // .fa-th
+.fa-visual:before {content: "\f008";} // .fa-film
 // Type Icons
-.fa-x:before              {content:"\f0f6"} // .fa-file-text-o
-.fa-atlas:before          {content:"\f14e"} // .fa-compass
-.fa-book:before           {content:"\f02d"} // .fa-book
-.fa-braille:before        {content:"\f0a6"} // .fa-hand-o-up
-.fa-cdrom                 {content:"\f109"} // .fa-laptop
-.fa-chart:before          {content:"\f012"} // .fa-signal
-.fa-chipcartridge:before  {content:"\f109"} // .fa-laptop
-.fa-collage:before        {content:"\f03e"} // .fa-picture-o
-.fa-disccartridge:before  {content:"\f109"} // .fa-laptop
-.fa-drawing:before        {content:"\f03e"} // .fa-picture-o
-.fa-ebook:before          {content:"\f0f6"} // .fa-file-text-o
-.fa-electronic:before     {content:"\f1c6"} // .fa-file-archive-o
-.fa-filmstrip:before      {content:"\f008"} // .fa-film
-.fa-flashcard:before      {content:"\f0e7"} // .fa-bolt
-.fa-floppydisk:before     {content:"\f0c7"} // .fa-save
-.fa-globe:before          {content:"\f0ac"} // .fa-globe
-.fa-journal:before        {content:"\f0f6"} // .fa-file-text-o
-.fa-kit:before            {content:"\f0b1"} // .fa-briefcase
-.fa-manuscript:before     {content:"\f0f6"} // .fa-file-text-o
-.fa-map:before            {content:"\f14e"} // .fa-compass
-.fa-microfilm:before      {content:"\f008"} // .fa-film
-.fa.fa-mobile:before      {content:"\f10a"} // .fa-table
-.fa-motionpicture:before  {content:"\f03d"} // .fa-video-camera
-.fa-musicalscore:before   {content:"\f001"} // .fa-music
-.fa-musicrecording:before {content:"\f001"} // .fa-music
-.fa-newspaper:before      {content:"\f0f6"} // .fa-file-text-o
-.fa-online:before         {content:"\f109"} // .fa-laptop
-.fa-painting:before       {content:"\f03e"} // .fa-picture-o
-.fa-photo:before          {content:"\f03e"} // .fa-picture-o
-.fa-photonegative:before  {content:"\f03e"} // .fa-picture-o
-.fa-physicalobject:before {content:"\f187"} // .fa-archive
-.fa-print:before          {content:"\f03e"} // .fa-picture-o
-.fa-sensorimage:before    {content:"\f03e"} // .fa-picture-o
-.fa-serial:before         {content:"\f0f6"} // .fa-file-text-o
-.fa-slide:before          {content:"\f008"} // .fa-film
-.fa-software:before       {content:"\f109"} // .fa-laptop
-.fa-soundcassette:before  {content:"\f025"} // .fa-headphones
-.fa-sounddisc:before      {content:"\f109"} // .fa-laptop
-.fa-soundrecording:before {content:"\f025"} // .fa-headphones
-.fa-tapecartridge:before  {content:"\f109"} // .fa-laptop
-.fa-tapecassette:before   {content:"\f025"} // .fa-headphones
-.fa-tapereel:before       {content:"\f008"} // .fa-film
-.fa-transparency:before   {content:"\f008"} // .fa-film
-.fa-unknown:before        {content:"\f128"} // .fa-question
-.fa-video:before          {content:"\f03d"} // .fa-video-camera
-.fa-videocartridge:before {content:"\f03d"} // .fa-video-camera
-.fa-videocassette:before  {content:"\f03d"} // .fa-video-camera
-.fa-videodisc:before      {content:"\f109"} // .fa-laptop
-.fa-videoreel:before      {content:"\f03d"} // .fa-video-camera
+.fa-x:before              {content: "\f0f6";} // .fa-file-text-o
+.fa-atlas:before          {content: "\f14e";} // .fa-compass
+.fa-book:before           {content: "\f02d";} // .fa-book
+.fa-braille:before        {content: "\f0a6";} // .fa-hand-o-up
+.fa-cdrom:before          {content: "\f109";} // .fa-laptop
+.fa-chart:before          {content: "\f012";} // .fa-signal
+.fa-chipcartridge:before  {content: "\f109";} // .fa-laptop
+.fa-collage:before        {content: "\f03e";} // .fa-picture-o
+.fa-disccartridge:before  {content: "\f109";} // .fa-laptop
+.fa-drawing:before        {content: "\f03e";} // .fa-picture-o
+.fa-ebook:before          {content: "\f0f6";} // .fa-file-text-o
+.fa-electronic:before     {content: "\f1c6";} // .fa-file-archive-o
+.fa-filmstrip:before      {content: "\f008";} // .fa-film
+.fa-flashcard:before      {content: "\f0e7";} // .fa-bolt
+.fa-floppydisk:before     {content: "\f0c7";} // .fa-save
+.fa-globe:before          {content: "\f0ac";} // .fa-globe
+.fa-journal:before        {content: "\f0f6";} // .fa-file-text-o
+.fa-kit:before            {content: "\f0b1";} // .fa-briefcase
+.fa-manuscript:before     {content: "\f0f6";} // .fa-file-text-o
+.fa-map:before            {content: "\f14e";} // .fa-compass
+.fa-microfilm:before      {content: "\f008";} // .fa-film
+.fa-motionpicture:before  {content: "\f03d";} // .fa-video-camera
+.fa-musicalscore:before   {content: "\f001";} // .fa-music
+.fa-musicrecording:before {content: "\f001";} // .fa-music
+.fa-newspaper:before      {content: "\f0f6";} // .fa-file-text-o
+.fa-online:before         {content: "\f109";} // .fa-laptop
+.fa-painting:before       {content: "\f03e";} // .fa-picture-o
+.fa-photo:before          {content: "\f03e";} // .fa-picture-o
+.fa-photonegative:before  {content: "\f03e";} // .fa-picture-o
+.fa-physicalobject:before {content: "\f187";} // .fa-archive
+.fa-print:before          {content: "\f03e";} // .fa-picture-o
+.fa-sensorimage:before    {content: "\f03e";} // .fa-picture-o
+.fa-serial:before         {content: "\f0f6";} // .fa-file-text-o
+.fa-slide:before          {content: "\f008";} // .fa-film
+.fa-software:before       {content: "\f109";} // .fa-laptop
+.fa-soundcassette:before  {content: "\f025";} // .fa-headphones
+.fa-sounddisc:before      {content: "\f109";} // .fa-laptop
+.fa-soundrecording:before {content: "\f025";} // .fa-headphones
+.fa-tapecartridge:before  {content: "\f109";} // .fa-laptop
+.fa-tapecassette:before   {content: "\f025";} // .fa-headphones
+.fa-tapereel:before       {content: "\f008";} // .fa-film
+.fa-transparency:before   {content: "\f008";} // .fa-film
+.fa-unknown:before        {content: "\f128";} // .fa-question
+.fa-video:before          {content: "\f03d";} // .fa-video-camera
+.fa-videocartridge:before {content: "\f03d";} // .fa-video-camera
+.fa-videocassette:before  {content: "\f03d";} // .fa-video-camera
+.fa-videodisc:before      {content: "\f109";} // .fa-laptop
+.fa-videoreel:before      {content: "\f03d";} // .fa-video-camera
+
+/* --- PubDateVis --- */
+#dateVisColorSettings {
+  background-color: #fff; // background of box
+  fill: rgb(234,234,234); // fillColor
+  outline-color: #e8cfac; // selection color
+  stroke: @brand-primary; // color
+}
 
 /* --- Record --- */
-.citation {
-  .pace-car {
-    th,td {
-      border:0;
-      padding:0;
-    }
-  }
-  th {
-    text-align:right;
+.citation .pace-car {
+  th,
+  td {
+    border: 0;
+    padding: 0;
   }
 }
+.citation th {text-align: right;}
 #hierarchyTreeHolder {
-  border-right:1px solid @gray-lighter;
-  overflow-x:hidden;
+  overflow-x: hidden;
+  border-right: 1px solid @gray-lighter;
 }
 #hierarchyTree .currentHierarchy > a,
 #hierarchyTree .currentRecord a {
-  color:#000;
-  font-weight:bold;
+  font-weight: bold;
+  color: #000;
 }
-
-/* --- Search --- */
-.bulkActionButtons {
-  label {
-    display:inline-block;
-    input {
-      margin-top:2px;
+#tagList {
+  .tag {
+    display: inline-block;
+    margin: 0 1px 1px;
+    border-radius: 4px;
+    &.selected {
+      background-color: @btn-primary-bg;
+      a {color: #fff;}
+      .badge {
+        color: @gray-darker;
+        background-color: #fff;
+        &:hover {color: #a94442;}
+      }
     }
+
+    .button-size(@padding-base-vertical; @padding-base-vertical; @font-size-base; @line-height-base; @border-radius-base);
+    .badge .fa {width: 12px;}
   }
+  .tag-form {display: inline;}
+  .tag-form button {border: 0;}
 }
-.grid {
-  @media (max-width:767px) {
-    min-height:250px;
-  }
-}
+#tagList.loggedin .tag:not(.selected) .badge:hover {background-color: @brand-success;}
+
+/* --- Search --- */
+.bulkActionButtons label {display: inline-block;}
+.bulkActionButtons label input {margin-top: 2px;}
+.grid { @media (max-width: 767px) {min-height: 250px;} }
 .result {
-  a.title {font-weight:bold}
+  a.title {font-weight: bold;}
   .left {
-    text-align:center;
-    img {max-width:100%}
+    text-align: center;
+    img {max-width: 100%;}
   }
-  @media (max-width:767px) {
-    a {text-decoration:underline}
-    .middle,.right {padding:0}
+  @media (max-width: 767px) {
+    a {text-decoration: underline;}
+    .middle,
+    .right {padding: 0;}
   }
-  @media (max-width:530px) {
+  @media (max-width: 530px) {
     .checkbox {display: none !important;}
-    .left {width:40%}
-    .middle {width:60%}
-    .right {display:none}
-  }
-}
-.search-controls {
-  .alert {
-    margin-bottom:0;
+    .left {width: 40%;}
+    .middle {width: 60%;}
+    .right {display: none;}
   }
 }
+.search-controls .alert {margin-bottom: 0;}
+.searchtools a {padding: 0 .5em;}
 .title-in-heading {
   font-size: inherit;
   font-style: italic;
@@ -256,47 +320,39 @@ label.list-group-item {border-radius:0;font-weight:normal;margin-top:0;padding-l
 .sidebar {
   label:not(.list-group-item) {margin-left: 20px;}
   .list-group:not(.filters) .title {
-    cursor:pointer;
+    cursor: pointer;
     &.collapsed {
-      border-radius:@border-radius-base;
-      &:after {
-        content:'\25BC';
-      }
+      border-radius: @border-radius-base;
+      &:after {content: '\25BC';}
     }
     &:after {
-      content:'\25B2';
-      float:right;
+      content: '\25B2';
+      float: right;
     }
   }
   .collapse,.collapsing {
     .list-group-item {
-      border-top-left-radius:0px;
-      border-top-right-radius:0px;
+      border-top-left-radius: 0px;
+      border-top-right-radius: 0px;
       &[id^=more] {
-        border-bottom-left-radius:@border-radius-base;
-        border-bottom-right-radius:@border-radius-base;
+        border-bottom-left-radius: @border-radius-base;
+        border-bottom-right-radius: @border-radius-base;
       }
     }
   }
   #side-collapse-publishDate .list-group-item {
-    border-bottom-left-radius:@border-radius-base;
-    border-bottom-right-radius:@border-radius-base;
-  }
-}
-.list-group-item, .badge {
-  i.fa {
-    cursor:inherit;
+    border-bottom-left-radius: @border-radius-base;
+    border-bottom-right-radius: @border-radius-base;
   }
 }
-.sidebar .facet a {
-  text-decoration: none;
-}
+.list-group-item, .badge i.fa {cursor: inherit;}
+.sidebar .facet a {text-decoration: none;}
 .top-row .applied {
-  font-weight:bold;
+  font-weight: bold;
   &:hover {
-    color:@state-danger-text;
+    color: @state-danger-text;
     .fa.fa-check:before {
-      content:"\f00d";
+      content: "\f00d";
     }
   }
 }
@@ -331,181 +387,257 @@ label.list-group-item {border-radius:0;font-weight:normal;margin-top:0;padding-l
     background: #CCC;
     box-shadow:inset 0 -1px 0 rgba(0,0,0,0.3);
   }
+  input {display: none;}
 }
 
 /* --- Table wrapping to prevent horizontal overflow --- */
-.table {word-wrap:break-word;table-layout:fixed}
+.table {
+  table-layout: fixed;
+  word-wrap: break-word;
+}
 
 /* --- Visualization View --- */
 .node {
-  border:1px solid white;
-  box-sizing:content-box;
+  position: absolute;
+  box-sizing: content-box;
+  margin: -1px;
+  overflow: hidden;
   font: 10px sans-serif;
   line-height: 12px;
-  overflow: hidden;
-  position: absolute;
-  margin:-1px;
-}
-.node div {
-  margin-top: 0px;
-}
-.toplevel {
-  border: 2px solid black;
+  border: 1px solid white;
 }
+.node div {margin-top: 0px;}
+.toplevel {border: 2px solid black;}
 .node .label {
-  background:rgba(0,0,0,.5);
-  border-radius:0;
-  font-size:85%;
   position: absolute;
   bottom: 0;
   left: 0;
-  text-shadow:none;
-  min-height:1px;
-  padding:2px 4px;
-}
-.notalabel {
-  color: #000000;
-}
-#viz-instructions {
-  padding-top:600px;
-}
+  min-height: 1px;
+  padding: 2px 4px;
+  font-size: 85%;
+  background-color: rgba(0,0,0,.5);
+  border-radius: 0;
+  text-shadow: none;
+}
+.notalabel {color: #000;}
+#viz-instructions {padding-top: 600px;}
 
 /* ----- HOVER OVERLAY ------ */
 /* - similar items carousel - */
 #similar-items-carousel {
   .carousel-indicators {
-    bottom:0px;
+    bottom: 0px;
     li {
-      background:rgba(255,255,255,.3);
-      border-color:@gray-darker;
-      margin:2px;
-      width:8px;
-      height:8px;
+      width: 8px;
+      height: 8px;
+      margin: 2px;
+      background-color: rgba(255,255,255,.3);
+      border-color: @gray-darker;
     }
   }
   .hover-overlay {
-    display:block;
-    position:relative;
-    text-align:center;
-    margin:auto;
-    min-width:150px;
-    min-height:200px;
+    position: relative;
+    display: block;
+    min-width: 150px;
+    min-height: 200px;
+    margin: auto;
+    text-align: center;
     img {
-      margin:10px 0;
-      max-width:100%;
+      max-width: 100%;
+      margin: 10px 0;
     }
     .content {
-      display:none;
-      position:absolute;
-      top:0;
-      left:0;
-      width:100%;
-      height:100%;
-      background:rgba(0,0,0,.5);
-      color:#FFF;
-      padding:.5em .5em 0;
-    }
-    &:hover .content {
-      display:block;
+      position: absolute;
+      top: 0;
+      left: 0;
+      display: none;
+      width: 100%;
+      height: 100%;
+      padding: .5em .5em 0;
+      color: #fff;
+      background-color: rgba(0,0,0,.5);
     }
-  }
-  .item {
-    padding:0 4em;
+    &:hover .content {display: block;}
   }
 }
+#similar-items-carousel .item {padding: 0 4em;}
 
 /* --- Hierarchical facets --- */
 /* jsTree arrows */
 .facet .jstree-ocl:before {
-  font-family: 'FontAwesome';
   float: left;
-  speak: none;
+  width: 10px;
+  padding: 0;
+  margin-left: -10px;
+  font-family: 'FontAwesome';
   font-weight: normal;
   font-style: normal;
-  text-decoration:
-  inherit;
+  text-decoration:inherit;
   cursor: pointer;
-  padding: 0;
-  width: 10px;
-  margin-left: -10px;
-}
-.facet .jstree-default .jstree-open > .jstree-ocl:before {
-  content: "\f0d7";
-}
-.facet .jstree-default .jstree-closed > .jstree-ocl:before {
-  content: "\f0da";
+  speak: none;
 }
-.facet .jstree-default .jstree-leaf > .jstree-ocl:before {
-  content: " ";
+.facet .jstree-default {
+  & .jstree-open > .jstree-ocl:before {content: "\f0d7";}
+  & .jstree-closed > .jstree-ocl:before {content: "\f0da";}
+  & .jstree-leaf > .jstree-ocl:before {content: " ";}
 }
 /* facet list styling */
-li.jstree-facet ul {
-  padding-left: 20px;
-}
 .jstree-facet li span.main {
   display: block;
+  padding-left: 1px; /* Fix Firefox cutting the checkboxes */
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
-  padding-left: 1px; /* Fix Firefox cutting the checkboxes */
-}
-li.jstree-facet, li.jstree-node {
-  list-style: none;
 }
 .jstree-facet .jstree-container-ul {
   padding: 0;
+  & > li.active,
+  & > li.active a.jstree-anchor {
+    background-color: #265680;
+    color: #fff;
+  }
 }
-.jstree-facet .jstree-container-ul > li.active, .jstree-facet .jstree-container-ul > li.active a.jstree-anchor {
-  background-color: #265680;
-  color: #fff;
-}
-li.jstree-facet .badge {
-  cursor: text;
+li.jstree-facet,
+li.jstree-node {
+  list-style: none;
 }
+li.jstree-facet .badge {cursor: text;}
+li.jstree-facet ul {padding-left: 20px;}
 
 /* --- Hierarchy tree --- */
 /* jsTree arrows */
 .hierarchy-tree {
   .jstree-ocl:before {
-    font-family:'FontAwesome';
-    float:left;
-    speak:none;
-    font-weight:normal;
-    font-style:normal;
-    text-decoration:inherit;
-    cursor:pointer;
-    padding:0;
-    width:10px;
-    margin-left:-10px;
-  }
-  .jstree-open > .jstree-ocl:before {
-    content:"\f0d7";
-  }
-  .jstree-closed > .jstree-ocl:before {
-    content:"\f0da";
-  }
-  .jstree-leaf > .jstree-ocl:before {
-    content:" ";
-  }
+    float: left;
+    width: 10px;
+    padding: 0;
+    margin-left: -10px;
+    font-family: 'FontAwesome';
+    font-style: normal;
+    font-weight: normal;
+    cursor: pointer;
+    text-decoration: inherit;
+    speak: none;
+  }
+  .jstree-open > .jstree-ocl:before {content: "\f0d7";}
+  .jstree-closed > .jstree-ocl:before {content: "\f0da";}
+  .jstree-leaf > .jstree-ocl:before {content: " ";}
   .jstree-icon {
-    color:#000;
-    width:16px;
+    width: 16px;
+    color: #000;
   }
   .jstree-anchor {
-    white-space:nowrap;
-    padding:2px 5px;
-  }
-  .jstree-container-ul, .jstree-children {
-    padding-left:16px;
+    padding: 2px 5px;
+    white-space: nowrap;
   }
-  .jstree-initial-node {
-    display:none;
+  .jstree-container-ul,
+  .jstree-children {
+    padding-left: 16px;
   }
+  .jstree-initial-node {display: none;}
   .jstree-clicked {
-    color:@list-group-active-color;
-    background-color:@list-group-active-bg;
+    color: @list-group-active-color;
+    background-color: @list-group-active-bg;
     .jstree-icon {
-      color:#FFF;
+      color: #fff;
+    }
+  }
+}
+
+/* --- Offcanvas --- */
+@offcanvas-offset: 75%;
+@offcanvas-padding: 25px;
+
+.offcanvas-overlay,
+.offcanvas-toggle {display: none;}
+
+@media screen and (max-width: 767px) {
+  body.offcanvas {
+    overflow-x: hidden; /* Prevent scroll on narrow devices */
+    .sidebar {
+      position: fixed;
+      height: 100%;
+      top: 0;
+      width: @offcanvas-offset;
+      padding-left: 0;
+      padding-right: 0;
+      overflow-y: auto;
+      h4 {padding-left: @padding-base-horizontal;}
+      .checkbox {margin-left: 20px+@padding-base-horizontal;}
+      .list-group, .list-group-item {
+        border-left: 0;
+        border-right: 0;
+        border-radius: 0 !important;
+      }
+    }
+    &.active {overflow-y: hidden;}
+    &.offcanvas-left {
+      & > .container {
+        background: #FFF;
+        padding-left: @offcanvas-padding;
+      }
+      &.active {
+        margin-left: @offcanvas-offset;
+        margin-right: -@offcanvas-offset;
+        .sidebar {left: 0;}
+        .offcanvas-overlay {right: -@offcanvas-offset;}
+        .offcanvas-toggle {left: @offcanvas-offset;}
+      }
+      .sidebar {left: -@offcanvas-offset;}
+      .offcanvas-overlay {right: -100%;}
+      .offcanvas-toggle {
+        border-radius: 0 @border-radius-small @border-radius-small 0; // top right and bottom right
+        left: 0;
+      }
+    }
+    &.offcanvas-right {
+      & > .container {
+        background: #FFF;
+        padding-right: @offcanvas-padding;
+      }
+      &.active {
+        margin-left: -@offcanvas-offset;
+        margin-right: @offcanvas-offset;
+        .sidebar {right: 0;}
+        .offcanvas-overlay {left: -@offcanvas-offset;}
+        .offcanvas-toggle {right: @offcanvas-offset;}
+      }
+      .sidebar {right: -@offcanvas-offset;}
+      .offcanvas-overlay {left: -100%;}
+      .offcanvas-toggle {
+        border-radius: @border-radius-small 0 0 @border-radius-small; // top left and bottom left
+        right: 0;
+      }
+    }
+    .offcanvas-overlay {
+      display: block;
+      position: fixed;
+      top: 0;
+      width: 100%;
+      height: 100%;
+      background-color: rgba(0,0,0,.3);
+      z-index: 3;
+    }
+    .offcanvas-toggle {
+      display: block;
+      position: fixed;
+      top: 50%;
+      width: @offcanvas-padding;
+      padding: 20px 0;
+      background: @brand-primary;
+      color: #EEE;
+      text-align: center;
+      z-index: 5;
+    }
+    .offcanvas-overlay,
+    .offcanvas-toggle,
+    .offcanvas-toggle * {cursor: pointer;}
+    &,.sidebar,
+    .offcanvas-overlay,
+    .offcanvas-toggle {
+      -webkit-transition: all .25s ease-out;
+           -o-transition: all .25s ease-out;
+              transition: all .25s ease-out;
     }
   }
 }
diff --git a/themes/bootstrap3/less/bootstrap/alerts.less b/themes/bootstrap3/less/bootstrap/alerts.less
index df070b8ab23f99d51110ae903c773f5924aa2c77..c4199db927e795b6d7d35a39d475ef3087e2dfec 100644
--- a/themes/bootstrap3/less/bootstrap/alerts.less
+++ b/themes/bootstrap3/less/bootstrap/alerts.less
@@ -18,6 +18,7 @@
     // Specified for the h4 to prevent conflicts of changing @headings-color
     color: inherit;
   }
+
   // Provide class for links that match alerts
   .alert-link {
     font-weight: @alert-link-font-weight;
@@ -28,6 +29,7 @@
   > ul {
     margin-bottom: 0;
   }
+
   > p + p {
     margin-top: 5px;
   }
@@ -57,12 +59,15 @@
 .alert-success {
   .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
 }
+
 .alert-info {
   .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
 }
+
 .alert-warning {
   .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
 }
+
 .alert-danger {
   .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
 }
diff --git a/themes/bootstrap3/less/bootstrap/badges.less b/themes/bootstrap3/less/bootstrap/badges.less
index b27c405a300628f87e4f69cf7766ede0061bd2a7..c70bb939ebe253a17a39419d595d0038c7a683bc 100644
--- a/themes/bootstrap3/less/bootstrap/badges.less
+++ b/themes/bootstrap3/less/bootstrap/badges.less
@@ -28,7 +28,9 @@
     position: relative;
     top: -1px;
   }
-  .btn-xs & {
+
+  .btn-xs &,
+  .btn-group-xs > .btn & {
     top: 0;
     padding: 1px 5px;
   }
@@ -49,12 +51,15 @@
     color: @badge-active-color;
     background-color: @badge-active-bg;
   }
+
   .list-group-item > & {
     float: right;
   }
+
   .list-group-item > & + & {
     margin-right: 5px;
   }
+
   .nav-pills > li > a > & {
     margin-left: 3px;
   }
diff --git a/themes/bootstrap3/less/bootstrap/button-groups.less b/themes/bootstrap3/less/bootstrap/button-groups.less
index f84febbd56d5057c3d869b0bb7daa04103963484..13c1800deaaacf739cdb3a4eaba95ee986f656c4 100644
--- a/themes/bootstrap3/less/bootstrap/button-groups.less
+++ b/themes/bootstrap3/less/bootstrap/button-groups.less
@@ -71,13 +71,13 @@
 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
   border-radius: 0;
 }
-.btn-group > .btn-group:first-child {
+.btn-group > .btn-group:first-child:not(:last-child) {
   > .btn:last-child,
   > .dropdown-toggle {
     .border-right-radius(0);
   }
 }
-.btn-group > .btn-group:last-child > .btn:first-child {
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
   .border-left-radius(0);
 }
 
diff --git a/themes/bootstrap3/less/bootstrap/buttons.less b/themes/bootstrap3/less/bootstrap/buttons.less
index 40553c63861fd11bf51591abe0fed28948ca05e4..5a746049e3cea5c5f912144e11850d56a36cf0d2 100644
--- a/themes/bootstrap3/less/bootstrap/buttons.less
+++ b/themes/bootstrap3/less/bootstrap/buttons.less
@@ -107,7 +107,7 @@
   &:hover,
   &:focus {
     color: @link-hover-color;
-    text-decoration: underline;
+    text-decoration: @link-hover-decoration;
     background-color: transparent;
   }
   &[disabled],
diff --git a/themes/bootstrap3/less/bootstrap/carousel.less b/themes/bootstrap3/less/bootstrap/carousel.less
index 5724d8a56e2a0e4d38a214569d00ced2a57d65aa..4bbe946d3aa8f36a49c9dd77306e02888634be87 100644
--- a/themes/bootstrap3/less/bootstrap/carousel.less
+++ b/themes/bootstrap3/less/bootstrap/carousel.less
@@ -27,24 +27,24 @@
 
     // WebKit CSS3 transforms for supported devices
     @media all and (transform-3d), (-webkit-transform-3d) {
-      transition: transform .6s ease-in-out;
-      backface-visibility: hidden;
-      perspective: 1000;
+      .transition-transform(~'0.6s ease-in-out');
+      .backface-visibility(~'hidden');
+      .perspective(1000);
 
       &.next,
       &.active.right {
-        transform: translate3d(100%, 0, 0);
+        .translate3d(100%, 0, 0);
         left: 0;
       }
       &.prev,
       &.active.left {
-        transform: translate3d(-100%, 0, 0);
+        .translate3d(-100%, 0, 0);
         left: 0;
       }
       &.next.left,
       &.prev.right,
       &.active {
-        transform: translate3d(0, 0, 0);
+        .translate3d(0, 0, 0);
         left: 0;
       }
     }
@@ -148,6 +148,7 @@
     width:  20px;
     height: 20px;
     margin-top: -10px;
+    line-height: 1;
     font-family: serif;
   }
 
@@ -195,6 +196,7 @@
     // Internet Explorer 8-9 does not support clicks on elements without a set
     // `background-color`. We cannot use `filter` since that's not viewed as a
     // background color by the browser. Thus, a hack is needed.
+    // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
     //
     // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
     // set alpha transparency for the best results possible.
diff --git a/themes/bootstrap3/less/bootstrap/close.less b/themes/bootstrap3/less/bootstrap/close.less
index 9b4e74f2b82f8fb183bdd9a5a5ddae4ec29deb92..6d5bfe087aed3342270b1de9d70d034c474a3779 100644
--- a/themes/bootstrap3/less/bootstrap/close.less
+++ b/themes/bootstrap3/less/bootstrap/close.less
@@ -23,6 +23,7 @@
   // Additional properties for button version
   // iOS requires the button element instead of an anchor tag.
   // If you want the anchor version, it requires `href="#"`.
+  // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
   button& {
     padding: 0;
     cursor: pointer;
diff --git a/themes/bootstrap3/less/bootstrap/component-animations.less b/themes/bootstrap3/less/bootstrap/component-animations.less
index 967715d98b680b298573b22ba1a7a3448f81eff3..0bcee910ac5f2c249cd6280d1e69fd03d178b24e 100644
--- a/themes/bootstrap3/less/bootstrap/component-animations.less
+++ b/themes/bootstrap3/less/bootstrap/component-animations.less
@@ -17,9 +17,8 @@
 
 .collapse {
   display: none;
-  visibility: hidden;
 
-  &.in      { display: block; visibility: visible; }
+  &.in      { display: block; }
   tr&.in    { display: table-row; }
   tbody&.in { display: table-row-group; }
 }
diff --git a/themes/bootstrap3/less/bootstrap/dropdowns.less b/themes/bootstrap3/less/bootstrap/dropdowns.less
index 84a48c1413550259763e9a658980d2e13cb5df2f..af344607bd967350aab19a91d8f069eee20b4230 100644
--- a/themes/bootstrap3/less/bootstrap/dropdowns.less
+++ b/themes/bootstrap3/less/bootstrap/dropdowns.less
@@ -10,12 +10,13 @@
   height: 0;
   margin-left: 2px;
   vertical-align: middle;
-  border-top:   @caret-width-base solid;
+  border-top:   @caret-width-base dashed;
   border-right: @caret-width-base solid transparent;
   border-left:  @caret-width-base solid transparent;
 }
 
 // The dropdown wrapper (div)
+.dropup,
 .dropdown {
   position: relative;
 }
@@ -190,7 +191,7 @@
   .dropdown-menu {
     top: auto;
     bottom: 100%;
-    margin-bottom: 1px;
+    margin-bottom: 2px;
   }
 }
 
diff --git a/themes/bootstrap3/less/bootstrap/forms.less b/themes/bootstrap3/less/bootstrap/forms.less
index 1bcc2b6b97970dd040983479ad3764ad5fb92585..e4b50629e97cd9bbac46c4c2d9d36a55f3f9686d 100644
--- a/themes/bootstrap3/less/bootstrap/forms.less
+++ b/themes/bootstrap3/less/bootstrap/forms.less
@@ -123,7 +123,7 @@ output {
   background-color: @input-bg;
   background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
   border: 1px solid @input-border;
-  border-radius: @input-border-radius;
+  border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
   .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
   .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
 
@@ -141,9 +141,13 @@ output {
   &[disabled],
   &[readonly],
   fieldset[disabled] & {
-    cursor: @cursor-disabled;
     background-color: @input-bg-disabled;
-    opacity: 1; // iOS fix for unreadable disabled content
+    opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
+  }
+
+  &[disabled],
+  fieldset[disabled] & {
+    cursor: @cursor-disabled;
   }
 
   // Reset height for `textarea`s
@@ -170,7 +174,7 @@ input[type="search"] {
 // In Mobile Safari, setting `display: block` on temporal inputs causes the
 // text within the input to become vertically misaligned. As a workaround, we
 // set a pixel line-height that matches the given height of the input, but only
-// for Safari.
+// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
 
 @media screen and (-webkit-min-device-pixel-ratio: 0) {
   input[type="date"],
@@ -178,18 +182,16 @@ input[type="search"] {
   input[type="datetime-local"],
   input[type="month"] {
     line-height: @input-height-base;
-  }
-  input[type="date"].input-sm,
-  input[type="time"].input-sm,
-  input[type="datetime-local"].input-sm,
-  input[type="month"].input-sm {
-    line-height: @input-height-small;
-  }
-  input[type="date"].input-lg,
-  input[type="time"].input-lg,
-  input[type="datetime-local"].input-lg,
-  input[type="month"].input-lg {
-    line-height: @input-height-large;
+
+    &.input-sm,
+    .input-group-sm & {
+      line-height: @input-height-small;
+    }
+
+    &.input-lg,
+    .input-group-lg & {
+      line-height: @input-height-large;
+    }
   }
 }
 
@@ -200,7 +202,7 @@ input[type="search"] {
 // horizontal forms, use the predefined grid classes.
 
 .form-group {
-  margin-bottom: 15px;
+  margin-bottom: @form-group-margin-bottom;
 }
 
 
@@ -240,6 +242,7 @@ input[type="search"] {
 // Radios and checkboxes on same line
 .radio-inline,
 .checkbox-inline {
+  position: relative;
   display: inline-block;
   padding-left: 20px;
   margin-bottom: 0;
@@ -296,6 +299,7 @@ input[type="checkbox"] {
   padding-bottom: (@padding-base-vertical + 1);
   // Remove default margin from `p`
   margin-bottom: 0;
+  min-height: (@line-height-computed + @font-size-base);
 
   &.input-lg,
   &.input-sm {
@@ -309,16 +313,41 @@ input[type="checkbox"] {
 //
 // Build on `.form-control` with modifier classes to decrease or increase the
 // height and font-size of form controls.
+//
+// The `.form-group-* form-control` variations are sadly duplicated to avoid the
+// issue documented in https://github.com/twbs/bootstrap/issues/15074.
 
-.input-sm,
-.form-group-sm .form-control {
+.input-sm {
   .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
 }
+.form-group-sm {
+  .form-control {
+    .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
+  }
+  .form-control-static {
+    height: @input-height-small;
+    padding: @padding-small-vertical @padding-small-horizontal;
+    font-size: @font-size-small;
+    line-height: @line-height-small;
+    min-height: (@line-height-computed + @font-size-small);
+  }
+}
 
-.input-lg,
-.form-group-lg .form-control {
+.input-lg {
   .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
 }
+.form-group-lg {
+  .form-control {
+    .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
+  }
+  .form-control-static {
+    height: @input-height-large;
+    padding: @padding-large-vertical @padding-large-horizontal;
+    font-size: @font-size-large;
+    line-height: @line-height-large;
+    min-height: (@line-height-computed + @font-size-large);
+  }
+}
 
 
 // Form control feedback states
@@ -450,8 +479,7 @@ input[type="checkbox"] {
     }
 
     // Remove default margin on radios/checkboxes that were used for stacking, and
-    // then undo the floating of radios and checkboxes to match (which also avoids
-    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
+    // then undo the floating of radios and checkboxes to match.
     .radio,
     .checkbox {
       display: inline-block;
diff --git a/themes/bootstrap3/less/bootstrap/glyphicons.less b/themes/bootstrap3/less/bootstrap/glyphicons.less
index 6eab7f7c20be608b5aadf8771af75d594e92aedf..335d80aa6bfebfc5bd64b60f75a9d49ea79687be 100644
--- a/themes/bootstrap3/less/bootstrap/glyphicons.less
+++ b/themes/bootstrap3/less/bootstrap/glyphicons.less
@@ -12,6 +12,7 @@
   font-family: 'Glyphicons Halflings';
   src: url('@{icon-font-path}@{icon-font-name}.eot');
   src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
+       url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),
        url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
        url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
        url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
@@ -232,3 +233,73 @@
 .glyphicon-cloud-upload           { &:before { content: "\e198"; } }
 .glyphicon-tree-conifer           { &:before { content: "\e199"; } }
 .glyphicon-tree-deciduous         { &:before { content: "\e200"; } }
+.glyphicon-cd                     { &:before { content: "\e201"; } }
+.glyphicon-save-file              { &:before { content: "\e202"; } }
+.glyphicon-open-file              { &:before { content: "\e203"; } }
+.glyphicon-level-up               { &:before { content: "\e204"; } }
+.glyphicon-copy                   { &:before { content: "\e205"; } }
+.glyphicon-paste                  { &:before { content: "\e206"; } }
+// The following 2 Glyphicons are omitted for the time being because
+// they currently use Unicode codepoints that are outside the
+// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle
+// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.
+// Notably, the bug affects some older versions of the Android Browser.
+// More info: https://github.com/twbs/bootstrap/issues/10106
+// .glyphicon-door                   { &:before { content: "\1f6aa"; } }
+// .glyphicon-key                    { &:before { content: "\1f511"; } }
+.glyphicon-alert                  { &:before { content: "\e209"; } }
+.glyphicon-equalizer              { &:before { content: "\e210"; } }
+.glyphicon-king                   { &:before { content: "\e211"; } }
+.glyphicon-queen                  { &:before { content: "\e212"; } }
+.glyphicon-pawn                   { &:before { content: "\e213"; } }
+.glyphicon-bishop                 { &:before { content: "\e214"; } }
+.glyphicon-knight                 { &:before { content: "\e215"; } }
+.glyphicon-baby-formula           { &:before { content: "\e216"; } }
+.glyphicon-tent                   { &:before { content: "\26fa"; } }
+.glyphicon-blackboard             { &:before { content: "\e218"; } }
+.glyphicon-bed                    { &:before { content: "\e219"; } }
+.glyphicon-apple                  { &:before { content: "\f8ff"; } }
+.glyphicon-erase                  { &:before { content: "\e221"; } }
+.glyphicon-hourglass              { &:before { content: "\231b"; } }
+.glyphicon-lamp                   { &:before { content: "\e223"; } }
+.glyphicon-duplicate              { &:before { content: "\e224"; } }
+.glyphicon-piggy-bank             { &:before { content: "\e225"; } }
+.glyphicon-scissors               { &:before { content: "\e226"; } }
+.glyphicon-bitcoin                { &:before { content: "\e227"; } }
+.glyphicon-btc                    { &:before { content: "\e227"; } }
+.glyphicon-xbt                    { &:before { content: "\e227"; } }
+.glyphicon-yen                    { &:before { content: "\00a5"; } }
+.glyphicon-jpy                    { &:before { content: "\00a5"; } }
+.glyphicon-ruble                  { &:before { content: "\20bd"; } }
+.glyphicon-rub                    { &:before { content: "\20bd"; } }
+.glyphicon-scale                  { &:before { content: "\e230"; } }
+.glyphicon-ice-lolly              { &:before { content: "\e231"; } }
+.glyphicon-ice-lolly-tasted       { &:before { content: "\e232"; } }
+.glyphicon-education              { &:before { content: "\e233"; } }
+.glyphicon-option-horizontal      { &:before { content: "\e234"; } }
+.glyphicon-option-vertical        { &:before { content: "\e235"; } }
+.glyphicon-menu-hamburger         { &:before { content: "\e236"; } }
+.glyphicon-modal-window           { &:before { content: "\e237"; } }
+.glyphicon-oil                    { &:before { content: "\e238"; } }
+.glyphicon-grain                  { &:before { content: "\e239"; } }
+.glyphicon-sunglasses             { &:before { content: "\e240"; } }
+.glyphicon-text-size              { &:before { content: "\e241"; } }
+.glyphicon-text-color             { &:before { content: "\e242"; } }
+.glyphicon-text-background        { &:before { content: "\e243"; } }
+.glyphicon-object-align-top       { &:before { content: "\e244"; } }
+.glyphicon-object-align-bottom    { &:before { content: "\e245"; } }
+.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } }
+.glyphicon-object-align-left      { &:before { content: "\e247"; } }
+.glyphicon-object-align-vertical  { &:before { content: "\e248"; } }
+.glyphicon-object-align-right     { &:before { content: "\e249"; } }
+.glyphicon-triangle-right         { &:before { content: "\e250"; } }
+.glyphicon-triangle-left          { &:before { content: "\e251"; } }
+.glyphicon-triangle-bottom        { &:before { content: "\e252"; } }
+.glyphicon-triangle-top           { &:before { content: "\e253"; } }
+.glyphicon-console                { &:before { content: "\e254"; } }
+.glyphicon-superscript            { &:before { content: "\e255"; } }
+.glyphicon-subscript              { &:before { content: "\e256"; } }
+.glyphicon-menu-left              { &:before { content: "\e257"; } }
+.glyphicon-menu-right             { &:before { content: "\e258"; } }
+.glyphicon-menu-down              { &:before { content: "\e259"; } }
+.glyphicon-menu-up                { &:before { content: "\e260"; } }
diff --git a/themes/bootstrap3/less/bootstrap/jumbotron.less b/themes/bootstrap3/less/bootstrap/jumbotron.less
index 340d4a372a7c93a71c489684ac9582f7560fec46..93036d3c95005f318797618995f07f1932086d29 100644
--- a/themes/bootstrap3/less/bootstrap/jumbotron.less
+++ b/themes/bootstrap3/less/bootstrap/jumbotron.less
@@ -13,6 +13,7 @@
   .h1 {
     color: @jumbotron-heading-color;
   }
+
   p {
     margin-bottom: (@jumbotron-padding / 2);
     font-size: @jumbotron-font-size;
diff --git a/themes/bootstrap3/less/bootstrap/media.less b/themes/bootstrap3/less/bootstrap/media.less
index 292e98dbd7b2d777a14a598efeab1b45d5748a9b..a6bf78192469c48166b7ddcd494ba2cbec376233 100644
--- a/themes/bootstrap3/less/bootstrap/media.less
+++ b/themes/bootstrap3/less/bootstrap/media.less
@@ -7,6 +7,20 @@
   }
 }
 
+.media,
+.media-body {
+  zoom: 1;
+  overflow: hidden;
+}
+
+.media-body {
+  width: 10000px;
+}
+
+.media-object {
+  display: block;
+}
+
 .media-right,
 .media > .pull-right {
   padding-left: 10px;
diff --git a/themes/bootstrap3/less/bootstrap/mixins/vendor-prefixes.less b/themes/bootstrap3/less/bootstrap/mixins/vendor-prefixes.less
index 31f8e2f7ab1e1aa7cef64d60602dba8a54892d7c..afd3331c31da856f226b354916e21ebad9d3311a 100644
--- a/themes/bootstrap3/less/bootstrap/mixins/vendor-prefixes.less
+++ b/themes/bootstrap3/less/bootstrap/mixins/vendor-prefixes.less
@@ -102,7 +102,7 @@
   // Firefox
   &::-moz-placeholder {
     color: @color;
-    opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526
+    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
   }
   &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
   &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome
diff --git a/themes/bootstrap3/less/bootstrap/modals.less b/themes/bootstrap3/less/bootstrap/modals.less
index 032a497d6c1c50199bcf2150856e8a8e5762bd39..1de622050e5ae83742ed1cfa93751c8a39377de2 100644
--- a/themes/bootstrap3/less/bootstrap/modals.less
+++ b/themes/bootstrap3/less/bootstrap/modals.less
@@ -62,10 +62,12 @@
 
 // Modal background
 .modal-backdrop {
-  position: absolute;
+  position: fixed;
   top: 0;
   right: 0;
+  bottom: 0;
   left: 0;
+  z-index: @zindex-modal-background;
   background-color: @modal-backdrop-bg;
   // Fade for backdrop
   &.fade { .opacity(0); }
diff --git a/themes/bootstrap3/less/bootstrap/navbar.less b/themes/bootstrap3/less/bootstrap/navbar.less
index 67fd3528f070423965a8a165acca4742c5ab6fe4..6d751bb9ce0adfe6aac21bc69fbb9aa43880eae0 100644
--- a/themes/bootstrap3/less/bootstrap/navbar.less
+++ b/themes/bootstrap3/less/bootstrap/navbar.less
@@ -67,7 +67,6 @@
 
     &.collapse {
       display: block !important;
-      visibility: visible !important;
       height: auto !important;
       padding-bottom: 0; // Override default setting
       overflow: visible !important;
@@ -331,6 +330,7 @@
 }
 // Menu position and menu caret support for dropups via extra dropup class
 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  margin-bottom: 0;
   .border-top-radius(@navbar-border-radius);
   .border-bottom-radius(0);
 }
diff --git a/themes/bootstrap3/less/bootstrap/navs.less b/themes/bootstrap3/less/bootstrap/navs.less
index f26fec7a5c60437f1a0a72e3cab53707522f51e1..a3d11b136211f3ee4a4d3beeb19c5ffba203b15b 100644
--- a/themes/bootstrap3/less/bootstrap/navs.less
+++ b/themes/bootstrap3/less/bootstrap/navs.less
@@ -223,11 +223,9 @@
 .tab-content {
   > .tab-pane {
     display: none;
-    visibility: hidden;
   }
   > .active {
     display: block;
-    visibility: visible;
   }
 }
 
diff --git a/themes/bootstrap3/less/bootstrap/panels.less b/themes/bootstrap3/less/bootstrap/panels.less
index d0f8f95f44333062125f108f997140c18e9f8105..04eb2b39ca18d69945ed1e60e725fb30544bde3f 100644
--- a/themes/bootstrap3/less/bootstrap/panels.less
+++ b/themes/bootstrap3/less/bootstrap/panels.less
@@ -36,7 +36,11 @@
   font-size: ceil((@font-size-base * 1.125));
   color: inherit;
 
-  > a {
+  > a,
+  > small,
+  > .small,
+  > small > a,
+  > .small > a {
     color: inherit;
   }
 }
diff --git a/themes/bootstrap3/less/bootstrap/popovers.less b/themes/bootstrap3/less/bootstrap/popovers.less
index 53ee0ecd76d841edc2e4f2dcdeec4287b45afbcd..2748eead13fa69dc8e7d32a1f0f64e6edb71e6e5 100644
--- a/themes/bootstrap3/less/bootstrap/popovers.less
+++ b/themes/bootstrap3/less/bootstrap/popovers.less
@@ -11,7 +11,7 @@
   display: none;
   max-width: @popover-max-width;
   padding: 1px;
-  // Reset font and text propertes given new insertion method
+  // Reset font and text properties given new insertion method
   font-family: @font-family-base;
   font-size: @font-size-base;
   font-weight: normal;
diff --git a/themes/bootstrap3/less/bootstrap/responsive-embed.less b/themes/bootstrap3/less/bootstrap/responsive-embed.less
index c1fa8f8488b269e432e23442ea73aae348bddc02..080a5118fe9ab2af331e6b1444fff4be840ecc03 100644
--- a/themes/bootstrap3/less/bootstrap/responsive-embed.less
+++ b/themes/bootstrap3/less/bootstrap/responsive-embed.less
@@ -22,14 +22,14 @@
     width: 100%;
     border: 0;
   }
+}
 
-  // Modifier class for 16:9 aspect ratio
-  &.embed-responsive-16by9 {
-    padding-bottom: 56.25%;
-  }
+// Modifier class for 16:9 aspect ratio
+.embed-responsive-16by9 {
+  padding-bottom: 56.25%;
+}
 
-  // Modifier class for 4:3 aspect ratio
-  &.embed-responsive-4by3 {
-    padding-bottom: 75%;
-  }
+// Modifier class for 4:3 aspect ratio
+.embed-responsive-4by3 {
+  padding-bottom: 75%;
 }
diff --git a/themes/bootstrap3/less/bootstrap/scaffolding.less b/themes/bootstrap3/less/bootstrap/scaffolding.less
index 2a40fbcbe461423bbd411f0bb714db1b9a24de8e..47b1d5a1aab384e993b689aaaec4212a85260e88 100644
--- a/themes/bootstrap3/less/bootstrap/scaffolding.less
+++ b/themes/bootstrap3/less/bootstrap/scaffolding.less
@@ -148,3 +148,15 @@ hr {
     clip: auto;
   }
 }
+
+
+// iOS "clickable elements" fix for role="button"
+//
+// Fixes "clickability" issue (and more generally, the firing of events such as focus as well)
+// for traditionally non-focusable elements with role="button"
+// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
+// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged
+
+[role="button"] {
+  cursor: pointer;
+}
\ No newline at end of file
diff --git a/themes/bootstrap3/less/bootstrap/tables.less b/themes/bootstrap3/less/bootstrap/tables.less
index ba24498a3942e1d4f9c95fa28363aa9ee223b6fa..2242c036868d7358ad684313ccab2e4d4704ee94 100644
--- a/themes/bootstrap3/less/bootstrap/tables.less
+++ b/themes/bootstrap3/less/bootstrap/tables.less
@@ -111,7 +111,7 @@ th {
 // Default zebra-stripe styles (alternating gray and transparent backgrounds)
 
 .table-striped {
-  > tbody > tr:nth-child(odd) {
+  > tbody > tr:nth-of-type(odd) {
     background-color: @table-bg-accent;
   }
 }
@@ -133,7 +133,7 @@ th {
 // Reset default table behavior
 
 table col[class*="col-"] {
-  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+  position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
   float: none;
   display: table-column;
 }
@@ -141,7 +141,7 @@ table {
   td,
   th {
     &[class*="col-"] {
-      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
       float: none;
       display: table-cell;
     }
diff --git a/themes/bootstrap3/less/bootstrap/theme.less b/themes/bootstrap3/less/bootstrap/theme.less
index a15d16ecd2d2c1167c1027d6fa26485f3c592ad7..6f2eb62126f12b00cde15580964870c7c3e4eb4c 100644
--- a/themes/bootstrap3/less/bootstrap/theme.less
+++ b/themes/bootstrap3/less/bootstrap/theme.less
@@ -36,7 +36,7 @@
 // Mixin for generating new styles
 .btn-styles(@btn-color: #555) {
   #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));
-  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners
+  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620
   background-repeat: repeat-x;
   border-color: darken(@btn-color, 14%);
 
@@ -52,6 +52,7 @@
     border-color: darken(@btn-color, 14%);
   }
 
+  &.disabled,
   &:disabled,
   &[disabled] {
     background-color: darken(@btn-color, 12%);
@@ -130,7 +131,7 @@
 // Inverted navbar
 .navbar-inverse {
   #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);
-  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
+  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257
 
   .navbar-nav > .open > a,
   .navbar-nav > .active > a {
diff --git a/themes/bootstrap3/less/bootstrap/tooltip.less b/themes/bootstrap3/less/bootstrap/tooltip.less
index 9c2a37fd43d4ab5a8d3ae833439ce4f1071a2138..9d5684743309e74514cebc5e5a2e49d876f38c93 100644
--- a/themes/bootstrap3/less/bootstrap/tooltip.less
+++ b/themes/bootstrap3/less/bootstrap/tooltip.less
@@ -8,8 +8,7 @@
   position: absolute;
   z-index: @zindex-tooltip;
   display: block;
-  visibility: visible;
-  // Reset font and text propertes given new insertion method
+  // Reset font and text properties given new insertion method
   font-family: @font-family-base;
   font-size: @font-size-small;
   font-weight: normal;
diff --git a/themes/bootstrap3/less/bootstrap/type.less b/themes/bootstrap3/less/bootstrap/type.less
index 3ec976eefc0926c6c61ba797362d430fdca3bf06..68ba6017bf184d805a39530f0acd5cbb1495e522 100644
--- a/themes/bootstrap3/less/bootstrap/type.less
+++ b/themes/bootstrap3/less/bootstrap/type.less
@@ -238,7 +238,7 @@ abbr[data-original-title] {
 }
 .initialism {
   font-size: 90%;
-  text-transform: uppercase;
+  .text-uppercase();
 }
 
 // Blockquotes
diff --git a/themes/bootstrap3/less/bootstrap/utilities.less b/themes/bootstrap3/less/bootstrap/utilities.less
index a26031214bd9d8c4702222c68bebbd77e27e4775..7a8ca27a8ff54db1c439812d4b295d9a1c4f6f76 100644
--- a/themes/bootstrap3/less/bootstrap/utilities.less
+++ b/themes/bootstrap3/less/bootstrap/utilities.less
@@ -44,7 +44,6 @@
 
 .hidden {
   display: none !important;
-  visibility: hidden !important;
 }
 
 
diff --git a/themes/bootstrap3/less/bootstrap/variables.less b/themes/bootstrap3/less/bootstrap/variables.less
index b13be9d449a53b8c5845bb9ffd28fc98d9ffa50a..b5fb9d02cf5197e50517a60dae2e3447a032cfe5 100644
--- a/themes/bootstrap3/less/bootstrap/variables.less
+++ b/themes/bootstrap3/less/bootstrap/variables.less
@@ -14,7 +14,7 @@
 @gray-light:             lighten(@gray-base, 46.7%); // #777
 @gray-lighter:           lighten(@gray-base, 93.5%); // #eee
 
-@brand-primary:         darken(#428bca, 6.5%);
+@brand-primary:         darken(#428bca, 6.5%); // #337ab7
 @brand-success:         #5cb85c;
 @brand-info:            #5bc0de;
 @brand-warning:         #f0ad4e;
@@ -99,7 +99,7 @@
 @padding-xs-vertical:       1px;
 @padding-xs-horizontal:     5px;
 
-@line-height-large:         1.33;
+@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
 @line-height-small:         1.5;
 
 @border-radius-base:        4px;
@@ -187,6 +187,7 @@
 
 // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
 //** Default `.form-control` border radius
+// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
 @input-border-radius:            @border-radius-base;
 //** Large `.form-control` border radius
 @input-border-radius-large:      @border-radius-large;
@@ -206,6 +207,9 @@
 //** Small `.form-control` height
 @input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
 
+//** `.form-group` margin
+@form-group-margin-bottom:       15px;
+
 @legend-color:                   @gray-dark;
 @legend-border-color:            #e5e5e5;
 
@@ -265,7 +269,8 @@
 @zindex-popover:           1060;
 @zindex-tooltip:           1070;
 @zindex-navbar-fixed:      1030;
-@zindex-modal:             1040;
+@zindex-modal-background:  1040;
+@zindex-modal:             1050;
 
 
 //== Media queries breakpoints
diff --git a/themes/bootstrap3/less/just-custom.less b/themes/bootstrap3/less/just-custom.less
new file mode 100644
index 0000000000000000000000000000000000000000..d0ff10a8c7b163f248818a03455f2895456f78dd
--- /dev/null
+++ b/themes/bootstrap3/less/just-custom.less
@@ -0,0 +1,4 @@
+// Core variables and mixins to make the bootstrap-custom.css
+@import "bootstrap/variables.less";
+@import "bootstrap/mixins.less";
+@import "bootstrap/list-group.less";
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/Auth/Database/recovery.phtml b/themes/bootstrap3/templates/Auth/Database/recovery.phtml
index 8d7ffb78fcf838c070ba226d1f02f5fdba190933..c164f06388392ad5d9614d1f565f25efed312d27 100644
--- a/themes/bootstrap3/templates/Auth/Database/recovery.phtml
+++ b/themes/bootstrap3/templates/Auth/Database/recovery.phtml
@@ -10,7 +10,11 @@
     <input type="email" name="email" class="form-control"/>
   </div>
 </div>
-<?=$this->recaptcha()->html($this->useRecaptcha) ?>
+<div class="form-group">
+  <div class="col-sm-9 col-sm-offset-3">
+    <?=$this->recaptcha()->html($this->useRecaptcha) ?>
+  </div>
+</div>
 <div class="form-group">
   <div class="col-sm-9 col-sm-offset-3">
   <input class="btn btn-default" name="submit" type="submit" value="<?=$this->transEsc('Recover Account') ?>"/>
diff --git a/themes/bootstrap3/templates/Helpers/email-form-fields.phtml b/themes/bootstrap3/templates/Helpers/email-form-fields.phtml
index 8a982c42399ca501f86ed50094a719ee977faebb..27e6c5bde2ee5a3cfa50818e2594af9098885b59 100644
--- a/themes/bootstrap3/templates/Helpers/email-form-fields.phtml
+++ b/themes/bootstrap3/templates/Helpers/email-form-fields.phtml
@@ -44,7 +44,11 @@
     </div>
   </div>
 <? endif ?>
-<?=$this->recaptcha()->html($this->useRecaptcha) ?>
+<div class="form-group">
+  <div class="col-sm-9 col-sm-offset-3">
+    <?=$this->recaptcha()->html($this->useRecaptcha) ?>
+  </div>
+</div>
 <div class="form-group">
   <div class="col-sm-9 col-sm-offset-3">
     <input type="submit" class="btn btn-primary" name="submit" value="<?=$this->transEsc('Send')?>"/>
diff --git a/themes/bootstrap3/templates/admin/tags/pagination.phtml b/themes/bootstrap3/templates/Helpers/pagination.phtml
similarity index 100%
rename from themes/bootstrap3/templates/admin/tags/pagination.phtml
rename to themes/bootstrap3/templates/Helpers/pagination.phtml
diff --git a/themes/bootstrap3/templates/Recommend/AlphaBrowseLink.phtml b/themes/bootstrap3/templates/Recommend/AlphaBrowseLink.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..632a7f412d0708bd0281e23d8238a0acf906bf66
--- /dev/null
+++ b/themes/bootstrap3/templates/Recommend/AlphaBrowseLink.phtml
@@ -0,0 +1,14 @@
+<?
+  $index = $this->recommend->getIndex();
+  $from = $this->recommend->getQuery();
+  $link = $this->translate(
+    'alphabrowselink_html',
+    [
+      '%%index%%' => $this->transEsc('browse_' . $index),
+      '%%from%%' => $this->escapeHtml($from),
+      '%%url%%' => $this->url('alphabrowse-home')
+        . '?from=' . urlencode($from) . '&amp;source=' . urlencode($index) 
+    ]
+  );
+?>
+<div class="alert alert-info"><?=$link?></div>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/Recommend/CatalogResults.phtml b/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
index ef27b6794080a4270627f1c9034413c91885c432..6b1686999831b489480f759cdeba162fc0f8dc0d 100644
--- a/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
@@ -5,17 +5,7 @@
       <li class="list-group-item catalog-result">
         <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
         <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?>">
-          <?
-            $summHighlightedTitle = $driver->getHighlightedTitle();
-            $summTitle = $driver->getTitle();
-            if (!empty($summHighlightedTitle)) {
-                echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-            } else if (!empty($summTitle)) {
-                echo $this->escapeHtml($this->truncate($summTitle, 180));
-            } else {
-                echo $this->transEsc('Title not available');
-            }
-          ?>
+          <?=$this->record($driver)->getTitleHtml()?>
         </a>
         <? $summDate = $driver->getPublicationDates(); ?>
         <? $summAuthor = $driver->getPrimaryAuthor(); ?>
diff --git a/themes/bootstrap3/templates/Recommend/CollectionSideFacets.phtml b/themes/bootstrap3/templates/Recommend/CollectionSideFacets.phtml
index d800ffdec57e1223ddfa8ec7e9d61151cd8462f0..cc6d7f476819cb67bbbc44f6a5cc6c650ccfe5d1 100644
--- a/themes/bootstrap3/templates/Recommend/CollectionSideFacets.phtml
+++ b/themes/bootstrap3/templates/Recommend/CollectionSideFacets.phtml
@@ -25,7 +25,7 @@
       </h4>
     </div>
     <div class="panel-body">
-      <form class="form-inline" role="form" method="get" action="" name="keywordFilterForm" id="keywordFilterForm">
+      <form class="form-inline" role="form" method="get" name="keywordFilterForm" id="keywordFilterForm">
         <input id="keywordFilter_lookfor" type="text" name="lookfor" value="<?=$this->escapeHtmlAttr($keywordFilter)?>" class="form-control"/>
         <? foreach ($this->recommend->getResults()->getParams()->getFilterList(true) as $field => $filters): ?>
           <? foreach ($filters as $filter): ?>
diff --git a/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml b/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
index 1e3f4af4ec84500301db18f10fd8c3350f6479f8..de51091a6658fe5cf344c2d0d652764de9a83bbd 100644
--- a/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
+++ b/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
@@ -18,6 +18,7 @@
       </div>
     </div>
   <? endforeach; ?>
+  <div id="dateVisColorSettings"><!-- do not delete! used for passing CSS to Javascript --></div>
   <?
     $js = "loadVis('" . $this->recommend->getFacetFields() . "', '"
         . $this->recommend->getSearchParams() . "', path, "
diff --git a/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml b/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
index 9c83e95d80441db7dce458a4b32ef7ca7f414937..550b040d61aee4c38ec9927b2a7760fd6ef955d2 100644
--- a/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
+++ b/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
@@ -27,17 +27,7 @@
 
         <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
         <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?> clearfix">
-          <?
-            $summHighlightedTitle = $driver->getHighlightedTitle();
-            $summTitle = $driver->getTitle();
-            if (!empty($summHighlightedTitle)) {
-                echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-            } else if (!empty($summTitle)) {
-                echo $this->escapeHtml($this->truncate($summTitle, 180));
-            } else {
-                echo $this->transEsc('Title not available');
-            }
-          ?>
+          <?=$this->record($driver)->getTitleHtml()?>
           <? $summAuthor = $driver->getPrimaryAuthor(); ?>
           <span class="small<? if (!empty($summAuthor)): ?> pull-right<? endif; ?>">
             <? $summDate = $driver->getPublicationDates(); ?>
diff --git a/themes/bootstrap3/templates/Recommend/SideFacets.phtml b/themes/bootstrap3/templates/Recommend/SideFacets.phtml
index 9a830e33bafd77dd2d71f3179ce32437e502efc0..e9bba39e2a52393f5fd5c3f8fadf30b4b1d59a6f 100644
--- a/themes/bootstrap3/templates/Recommend/SideFacets.phtml
+++ b/themes/bootstrap3/templates/Recommend/SideFacets.phtml
@@ -63,7 +63,7 @@
       <div id="side-collapse-<?=$this->escapeHtmlAttr($title) ?>" class="collapse<? if(!in_array($title, $collapsedFacets)): ?> in<? endif ?>">
         <? if (isset($rangeFacets[$title])): ?>
           <div class="list-group-item">
-            <form action="" name="<?=$this->escapeHtmlAttr($title)?>Filter" id="<?=$this->escapeHtmlAttr($title)?>Filter">
+            <form name="<?=$this->escapeHtmlAttr($title)?>Filter" id="<?=$this->escapeHtmlAttr($title)?>Filter">
               <?=$results->getUrlQuery()->asHiddenFields(array('page' => "/./", 'filter' => "/^{$title}:.*/"))?>
               <input type="hidden" name="<?=$this->escapeHtmlAttr($rangeFacets[$title]['type'])?>range[]" value="<?=$this->escapeHtmlAttr($title)?>"/>
               <div class="row">
diff --git a/themes/bootstrap3/templates/Recommend/SummonResults.phtml b/themes/bootstrap3/templates/Recommend/SummonResults.phtml
index 1995f77ab7a8befb725b02a6f46b8b6625a35578..93918cd32d6e65c2493d9a236156d59b1b711e3d 100644
--- a/themes/bootstrap3/templates/Recommend/SummonResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/SummonResults.phtml
@@ -6,17 +6,7 @@
         <span>
           <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
           <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?>">
-            <?
-              $summHighlightedTitle = $driver->getHighlightedTitle();
-              $summTitle = $driver->getTitle();
-              if (!empty($summHighlightedTitle)) {
-                  echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-              } else if (!empty($summTitle)) {
-                  echo $this->escapeHtml($this->truncate($summTitle, 180));
-              } else {
-                  echo $this->transEsc('Title not available');
-              }
-            ?>
+            <?=$this->record($driver)->getTitleHtml()?>
           </a>
           <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
           <span class="small">
diff --git a/themes/bootstrap3/templates/Recommend/TopFacets.phtml b/themes/bootstrap3/templates/Recommend/TopFacets.phtml
index 2591bc526ac863fc3e98c40b39bf5fb87cb0e311..fe0e4232c0e0e28f110bca5a924888002aaf99cf 100644
--- a/themes/bootstrap3/templates/Recommend/TopFacets.phtml
+++ b/themes/bootstrap3/templates/Recommend/TopFacets.phtml
@@ -2,6 +2,7 @@
   // TODO: This file needs love
   $topFacetSet = $this->recommend->getTopFacetSet();
   $topFacetSettings = $this->recommend->getTopFacetSettings();
+  $results = $this->recommend->getResults();
 ?>
 <? if (isset($topFacetSet)): ?>
   <? $row=0; foreach($topFacetSet as $title => $cluster): ?>
@@ -29,7 +30,7 @@
             <?=$this->escapeHtml($thisFacet['displayText'])?> <i class="fa fa-check"></i>
           </a>
         <? else: ?>
-          <a href="<?=$this->currentPath().$this->recommend->getResults()->getUrlQuery()->addFacet($title, $thisFacet['value'], $thisFacet['operator'])?>"><?=$this->escapeHtml($thisFacet['displayText'])?></a> <span class="badge"><?=$this->localizedNumber($thisFacet['count']) ?>
+          <a href="<?=$this->currentPath().$results->getUrlQuery()->addFacet($title, $thisFacet['value'], $thisFacet['operator'])?>"><?=$this->escapeHtml($thisFacet['displayText'])?></a> <span class="badge"><?=$this->localizedNumber($thisFacet['count']) ?>
           <? if ($allowExclude): ?>
             <a href="<?=$this->currentPath().$results->getUrlQuery()->addFacet($title, $thisFacet['value'], 'NOT')?>" title="<?=$this->transEsc('exclude_facet')?>"><i class="fa fa-times"></i></a>
           <? endif; ?>
diff --git a/themes/bootstrap3/templates/Recommend/WebResults.phtml b/themes/bootstrap3/templates/Recommend/WebResults.phtml
index 701bd836951a71d9f0f87217c2e18072dab493bb..055b21a3617be2295913a250402992ca1e3b4a87 100644
--- a/themes/bootstrap3/templates/Recommend/WebResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/WebResults.phtml
@@ -5,17 +5,9 @@
   <ul class="similar">
     <? foreach ($results as $driver): ?>
     <li>
-      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       <? $snippet = $driver->getHighlightedSnippet(); ?>
       <? $summary = $driver->getSummary(); ?>
       <? if (!empty($snippet)): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/EDS/core.phtml b/themes/bootstrap3/templates/RecordDriver/EDS/core.phtml
index 9c3ec6964a07957ea5cf661724529c8db6a174f6..57dbccc66302251d6ab2ac550388c5331738f527 100644
--- a/themes/bootstrap3/templates/RecordDriver/EDS/core.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/EDS/core.phtml
@@ -97,7 +97,7 @@
             <?=$this->transEsc('Full text is not displayed to guests')?>
           </td>
           <td>
-            <a class="login" href="<?=$this->url('myresearch-home')?>">
+            <a class="login" href="<?=$this->url('myresearch-home')?>" rel="nofollow">
               <strong><?=$this->transEsc('Login for full access')?></strong>
             </a>
           </td>
diff --git a/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
index ebc8668071caf7c0b8a4e1d56da755dda8b69d0a..08c34d1c8e63f9ce14ced96c3b327e1a56ef8827 100644
--- a/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
@@ -83,7 +83,7 @@
           $this->jsTranslations()->addStrings(array('qrcode_hide' => 'qrcode_hide', 'qrcode_show' => 'qrcode_show'));
         ?>
         <span class="hidden-xs">
-          <i class="fa fa-qrcode"></i> <a href="<?=$this->escapeHtmlAttr($QRCode);?>" class="qrcodeLink"><?=$this->transEsc('qrcode_show')?></a>
+          <i class="fa fa-fw fa-qrcode"></i> <a href="<?=$this->escapeHtmlAttr($QRCode);?>" class="qrcodeLink"><?=$this->transEsc('qrcode_show')?></a>
           <div class="qrcode hidden">
             <script type="text/template" class="qrCodeImgTag">
               <img alt="<?=$this->transEsc('QR Code')?>" src="<?=$this->escapeHtmlAttr($QRCode);?>"/>
@@ -94,7 +94,7 @@
 
       <? if ($this->userlist()->getMode() !== 'disabled'): ?>
         <? /* Add to favorites */ ?>
-        <i class="fa fa-heart"></i> <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" class="save-record modal-link" id="<?=$this->driver->getUniqueId() ?>" title="<?=$this->transEsc('Add to favorites')?>"><?=$this->transEsc('Add to favorites')?></a><br/>
+        <i class="fa fa-fw fa-star"></i> <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" class="save-record modal-link" id="<?=$this->driver->getUniqueId() ?>" title="<?=$this->transEsc('Add to favorites')?>"><?=$this->transEsc('Add to favorites')?></a><br/>
 
         <? /* Saved lists */ ?>
         <div class="savedLists alert alert-info hidden">
@@ -107,7 +107,7 @@
         <? foreach ($trees as $hierarchyID => $hierarchyTitle): ?>
           <div class="hierarchyTreeLink">
             <input type="hidden" value="<?=$this->escapeHtmlAttr($hierarchyID)?>" class="hiddenHierarchyId" />
-            <i class="fa fa-sitemap"></i>
+            <i class="fa fa-fw fa-sitemap"></i>
             <a class="hierarchyTreeLinkText modal-link" href="<?=$this->recordLink()->getTabUrl($this->driver, 'HierarchyTree')?>?hierarchy=<?=urlencode($hierarchyID)?>#tabnav" title="<?=$this->transEsc('hierarchy_tree')?>">
               <?=$this->transEsc('hierarchy_view_context')?><? if (count($trees) > 1): ?>: <?=$this->escapeHtml($hierarchyTitle)?><? endif; ?>
             </a>
diff --git a/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
index 7e2fbc62fb07a5ae53e0af0187137573f9daa8cc..eda74148212a3ea029104ff21488f616df98aad8 100644
--- a/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,13 +3,8 @@
 ?>
 <div class="listentry col-xs-11">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 </div>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
index 986197b797192b1970e3393d6b04d4182485648b..101a4a69a2f2eb4e95d487e933b2df0060647253 100644
--- a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -10,17 +10,9 @@
     </div>
     <div class="col-sm-10 col-xs-9 middle">
       <div>
-        <b><?
-          $summHighlightedTitle = $this->driver->getHighlightedTitle();
-          $summTitle = $this->driver->getTitle();
-          if (!empty($summHighlightedTitle)) {
-              echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-          } else if (!empty($summTitle)) {
-              echo $this->escapeHtml($this->truncate($summTitle, 180));
-          } else {
-              echo $this->transEsc('Title not available');
-          }
-        ?></b>
+        <b>
+          <?=$this->record($this->driver)->getTitleHtml()?>
+        </b>
       </div>
 
       <div>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/collection-info.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/collection-info.phtml
index c6bebb493170be212f006b38ac5861a05c0ab198..aae5bdea45dc6eb03dd41c58870659ddf07a33f1 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/collection-info.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/collection-info.phtml
@@ -140,7 +140,7 @@
             <? $i = 0; foreach ($field as $subfield): ?>
               <?=($i++ == 0) ? '' : ' &gt; '?>
               <? $subject = trim($subject . ' ' . $subfield); ?>
-              <a title="<?=$this->escapeHtmlAttr($subject)?>" href="<?=$this->record($this->driver)->getLink('subject', $subject)?>" class="subjectHeading"><?=$this->escapeHtml($subfield)?></a>
+              <a title="<?=$this->escapeHtmlAttr($subject)?>" href="<?=$this->record($this->driver)->getLink('subject', $subject)?>" class="subjectHeading" rel="nofollow"><?=$this->escapeHtml($subfield)?></a>
             <? endforeach; ?>
           </div>
           <? endforeach; ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
index a855698b5cd7bf5ab8f04b86d87fd585517d3029..ea6a7b4f7078071dbb94fe678c414a22fbd74acb 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
@@ -1,3 +1,11 @@
+<?
+  if($loggedin = $this->auth()->isLoggedIn()) {
+    $user_id = $loggedin->id;
+    $loggedin = true;
+  } else {
+    $user_id = false;
+  }
+?>
 <div class="row" vocab="http://schema.org/" resource="#record" typeof="<?=$this->driver->getSchemaOrgFormats()?> Product">
   <div class="col-sm-3">
     <div class="text-center">
@@ -185,7 +193,7 @@
             <? $i = 0; foreach ($field as $subfield): ?>
               <?=($i++ == 0) ? '' : ' &gt; '?>
               <? $subject = trim($subject . ' ' . $subfield); ?>
-              <a class="backlink" title="<?=$this->escapeHtmlAttr($subject)?>" href="<?=$this->record($this->driver)->getLink('subject', $subject)?>"><?=trim($this->escapeHtml($subfield))?></a>
+              <a class="backlink" title="<?=$this->escapeHtmlAttr($subject)?>" href="<?=$this->record($this->driver)->getLink('subject', $subject)?>" rel="nofollow"><?=trim($this->escapeHtml($subfield))?></a>
             <? endforeach; ?>
           </div>
           <? endforeach; ?>
@@ -242,20 +250,14 @@
       <? endif; ?>
 
       <? if ($this->usertags()->getMode() !== 'disabled'): ?>
-        <? $tagList = $this->driver->getTags(); ?>
+        <? $tagList = $this->driver->getTags(null, null, 'count', $user_id); ?>
         <tr>
           <th><?=$this->transEsc('Tags')?>: </th>
           <td>
-            <span class="pull-right">
-              <i class="fa fa-plus"></i> <a id="tagRecord" class="modal-link" href="<?=$this->recordLink()->getActionUrl($this->driver, 'AddTag')?>" title="<?=$this->transEsc('Add Tag')?>"><?=$this->transEsc('Add Tag')?></a>
-            </span>
-            <div id="tagList">
-              <? if (count($tagList) > 0): ?>
-                <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a> (<?=$this->escapeHtml($tag->cnt)?>)<? endforeach; ?>
-              <? else: ?>
-                <?=$this->transEsc('No Tags')?>, <?=$this->transEsc('Be the first to tag this record')?>!
-              <? endif; ?>
-            </div>
+            <a id="tagRecord" class="btn btn-link modal-link pull-right" href="<?=$this->recordLink()->getActionUrl($this->driver, 'AddTag')?>" title="<?=$this->transEsc('Add Tag')?>">
+              <i class="fa fa-plus"></i> <?=$this->transEsc('Add Tag')?></a>
+            </a>
+            <?=$this->context($this)->renderInContext('record/taglist', array('tagList'=>$tagList, 'loggedin'=>$loggedin)) ?>
           </td>
         </tr>
       <? endif; ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
index 084863a386f20c92c75eac5a3645052417e0f46f..6db22f3fde9c7704106af6e1d65325891ea4b131 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -25,17 +25,8 @@
   <div class="col-xs-6 middle">
     <div class="resultItemLine1">
       <a href="<?=$this->recordLink()->getUrl($this->driver)?>">
-      <?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </a>
     </div>
 
     <div class="resultItemLine2">
@@ -82,13 +73,15 @@
       } ?>
 
     <? $listTags = ($this->usertags()->getMode() !== 'disabled') ? $this->driver->getTags(
-        $list_id, // get tags for all lists if no single list is selected
+        null === $list_id ? true : $list_id, // get tags for all lists if no single list is selected
         $user_id, 'tag'
        ) : array();
     ?>
     <? if (count($listTags) > 0): ?>
       <strong><?=$this->transEsc('Your Tags')?>:</strong>
-      <? $i = 0; foreach ($listTags as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->currentPath() . $results->getUrlQuery()->addFacet('tags', $tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a><? endforeach; ?>
+      <? foreach ($listTags as $tag): ?>
+        <a href="<?=$this->currentPath() . $results->getUrlQuery()->addFacet('tags', $tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a>
+      <? endforeach; ?>
       <br/>
     <? endif; ?>
     <? $listNotes = $this->driver->getListNotes($list_id, $user_id); ?>
@@ -164,9 +157,9 @@
   </div>
 
   <div class="col-xs-2 right">
-    <i class="fa fa-edit"></i> <a href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&amp;list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a><br/>
+    <i class="fa fa-fw fa-edit"></i> <a href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&amp;list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a><br/>
     <? /* Use a different delete URL if we're removing from a specific list or the overall favorites: */
-      $deleteUrl = is_null($list_id)
+      $deleteUrl = null === $list_id
           ? $this->url('myresearch-favorites')
           : $this->url('userList', array('id' => $list_id));
       $deleteUrlGet = $deleteUrl . '?delete=' . urlencode($id) . '&amp;source=' . urlencode($source);
@@ -174,7 +167,7 @@
       $dLabel = 'delete-label-' . preg_replace('[\W]','-',$id);
     ?>
     <div class="dropdown">
-      <i class="fa fa-trash-o"></i> <a class="dropdown-toggle" id="<?=$dLabel ?>" role="button" data-toggle="dropdown" data-target="#" href="<?=$deleteUrlGet ?>">
+      <i class="fa fa-fw fa-trash-o"></i> <a class="dropdown-toggle" id="<?=$dLabel ?>" role="button" data-toggle="dropdown" data-target="#" href="<?=$deleteUrlGet ?>">
         <?=$this->transEsc('Delete') ?>
       </a>
       <ul class="dropdown-menu" role="menu" aria-labelledby="<?=$dLabel ?>">
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
index 67c96dee649320f364787a8a4adf9f582d59db66..f0271bedabc867d84d71f234e0750bb2d6125cbd 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
@@ -31,17 +31,9 @@ $urls = $this->record($this->driver)->getLinkDetails();
     <? endif; ?>
   <? endif; ?>
   <div>
-    <a class="title" href="<?=$this->recordLink()->getUrl($this->driver)?>"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 80));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a class="title" href="<?=$this->recordLink()->getUrl($this->driver)?>">
+      <?=$this->record($this->driver)->getTitleHtml(80)?>
+    </a>
     <? if ($openUrlActive || !empty($urls)): ?>
       <br/><br/>
       <? if ($openUrlActive): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
index 33aaae3d624bcb3598bb7a5ec355c85b2855f151..4327aaeeab5865c2348a356cc3275d119a214578 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -14,17 +14,7 @@
     <div class="col-sm-7 col-xs-6 middle">
       <div>
         <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
-        <?
-          $summHighlightedTitle = $this->driver->getHighlightedTitle();
-          $summTitle = $this->driver->getTitle();
-          if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-          } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-          } else {
-            echo $this->transEsc('Title not available');
-          }
-        ?>
+          <?=$this->record($this->driver)->getTitleHtml()?>
         </a>
       </div>
 
@@ -159,7 +149,7 @@
           $this->jsTranslations()->addStrings(array('qrcode_hide' => 'qrcode_hide', 'qrcode_show' => 'qrcode_show'));
         ?>
         <span class="hidden-xs">
-          <i class="fa fa-qrcode"></i> <a href="<?=$this->escapeHtmlAttr($QRCode);?>" class="qrcodeLink"><?=$this->transEsc('qrcode_show')?></a>
+          <i class="fa fa-fw fa-qrcode"></i> <a href="<?=$this->escapeHtmlAttr($QRCode);?>" class="qrcodeLink"><?=$this->transEsc('qrcode_show')?></a>
           <div class="qrcode hidden">
             <script type="text/template" class="qrCodeImgTag">
               <img alt="<?=$this->transEsc('QR Code')?>" src="<?=$this->escapeHtmlAttr($QRCode);?>"/>
@@ -170,7 +160,7 @@
 
       <? if ($this->userlist()->getMode() !== 'disabled'): ?>
         <? /* Add to favorites */ ?>
-        <i class="fa fa-heart"></i> <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" class="save-record modal-link" id="<?=$this->driver->getUniqueId() ?>" title="<?=$this->transEsc('Add to favorites')?>"><?=$this->transEsc('Add to favorites')?></a><br/>
+        <i class="fa fa-fw fa-star"></i> <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" class="save-record modal-link" id="<?=$this->driver->getUniqueId() ?>" title="<?=$this->transEsc('Add to favorites')?>"><?=$this->transEsc('Add to favorites')?></a><br/>
 
         <? /* Saved lists */ ?>
         <div class="savedLists alert alert-info hidden">
@@ -183,7 +173,7 @@
         <? foreach ($trees as $hierarchyID => $hierarchyTitle): ?>
           <div class="hierarchyTreeLink">
             <input type="hidden" value="<?=$this->escapeHtmlAttr($hierarchyID)?>" class="hiddenHierarchyId" />
-            <i class="fa fa-sitemap"></i>
+            <i class="fa fa-fw fa-sitemap"></i>
             <a class="hierarchyTreeLinkText modal-link" href="<?=$this->recordLink()->getTabUrl($this->driver, 'HierarchyTree')?>?hierarchy=<?=urlencode($hierarchyID)?>#tabnav" title="<?=$this->transEsc('hierarchy_tree')?>">
               <?=$this->transEsc('hierarchy_view_context')?><? if (count($trees) > 1): ?>: <?=$this->escapeHtml($hierarchyTitle)?><? endif; ?>
             </a>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
index 8194442dd2c9d70f003b73553f61b33ec83910e4..5045ca477e5e36702821c47c56f80b9e99623e24 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
@@ -12,25 +12,25 @@
 ?>
 <ul class="nav nav-pills hidden-print">
   <? if (count($this->driver->getCitationFormats()) > 0): ?>
-    <li><a id="cite-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-cite', array('id'=>$id)) ?>" title="<?=$this->transEsc('Cite this')?>"><i class="fa fa-asterisk"></i> <?=$this->transEsc('Cite this')?></a></li>
+    <li><a id="cite-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-cite', array('id'=>$id)) ?>" title="<?=$this->transEsc('Cite this')?>" rel="nofollow"><i class="fa fa-asterisk"></i> <?=$this->transEsc('Cite this')?></a></li>
   <? endif; ?>
-  <li><a id="sms-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-sms', array('id'=>$id)) ?>" title="<?=$this->transEsc('Text this')?>"><i class="fa fa-mobile"></i> <?=$this->transEsc('Text this')?></a></li>
-  <li><a id="mail-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-email', array('id'=>$id)) ?>" title="<?=$this->transEsc('Email this')?>"><i class="fa fa-envelope"></i> <?=$this->transEsc('Email this')?></a></li>
+  <li><a id="sms-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-sms', array('id'=>$id)) ?>" title="<?=$this->transEsc('Text this')?>" rel="nofollow"><i class="fa fa-mobile"></i> <?=$this->transEsc('Text this')?></a></li>
+  <li><a id="mail-record" class="modal-link <?=$controllerClass?>" href="<?=$this->url('record-email', array('id'=>$id)) ?>" title="<?=$this->transEsc('Email this')?>" rel="nofollow"><i class="fa fa-envelope"></i> <?=$this->transEsc('Email this')?></a></li>
 
   <? $exportFormats = $this->export()->getFormatsForRecord($this->driver); ?>
   <? if(count($exportFormats) > 0): ?>
     <li class="dropdown">
-      <a class="export-toggle dropdown-toggle" data-toggle="dropdown" href="<?=$this->recordLink()->getActionUrl($this->driver, 'Export')?>"><i class="fa fa-list-alt"></i> <?=$this->transEsc('Export Record') ?></a>
+      <a class="export-toggle dropdown-toggle" data-toggle="dropdown" href="<?=$this->recordLink()->getActionUrl($this->driver, 'Export')?>" rel="nofollow"><i class="fa fa-list-alt"></i> <?=$this->transEsc('Export Record') ?></a>
       <ul class="dropdown-menu" role="menu">
         <? foreach ($exportFormats as $exportFormat): ?>
-          <li><a <? if ($this->export()->needsRedirect($exportFormat)): ?>target="<?=$this->escapeHtmlAttr($exportFormat)?>Main" <? endif; ?>href="<?=$this->recordLink()->getActionUrl($this->driver, 'Export')?>?style=<?=$this->escapeHtmlAttr($exportFormat)?>"><?=$this->transEsc('Export to')?> <?=$this->transEsc($this->export()->getLabelForFormat($exportFormat))?></a></li>
+          <li><a <? if ($this->export()->needsRedirect($exportFormat)): ?>target="<?=$this->escapeHtmlAttr($exportFormat)?>Main" <? endif; ?>href="<?=$this->recordLink()->getActionUrl($this->driver, 'Export')?>?style=<?=$this->escapeHtmlAttr($exportFormat)?>" rel="nofollow"><?=$this->transEsc('Export to')?> <?=$this->transEsc($this->export()->getLabelForFormat($exportFormat))?></a></li>
         <? endforeach; ?>
       </ul>
     </li>
   <? endif; ?>
 
   <? if ($this->userlist()->getMode() !== 'disabled'): ?>
-    <li><a id="save-record" class="modal-link <?=$controllerClass?>" href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" title="<?=$this->transEsc('Add to favorites')?>"><i class="fa fa-plus"></i> <?=$this->transEsc('Add to favorites')?></a></li>
+    <li><a id="save-record" class="modal-link <?=$controllerClass?>" href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" title="<?=$this->transEsc('Add to favorites')?>" rel="nofollow"><i class="fa fa-star"></i> <?=$this->transEsc('Add to favorites')?></a></li>
   <? endif; ?>
   <? if (!empty($addThis)): ?>
     <li><a class="addThis addthis_button" href="https://www.addthis.com/bookmark.php?v=250&amp;pub=<?=urlencode($addThis)?>"><i class="fa fa-bookmark"></i> <?=$this->transEsc('Bookmark')?></a></li>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
index b5a0ecd1342ed1dd944278898f257efd2269614d..0e7e5c518cf906dd5c0d48e925e41eabe9ea174e 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,9 @@
 ?>
 <div class="listentry col-xs-11">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 
   <div class="resultItemLine2">
diff --git a/themes/bootstrap3/templates/RecordTab/holdingsils.phtml b/themes/bootstrap3/templates/RecordTab/holdingsils.phtml
index 5cc87b375ce9c8dfe37f1b8fccfb0060085e66bb..b29f944b2667ae6024e385bcfec7c7e1490bcb7e 100644
--- a/themes/bootstrap3/templates/RecordTab/holdingsils.phtml
+++ b/themes/bootstrap3/templates/RecordTab/holdingsils.phtml
@@ -11,6 +11,9 @@
     // Set page title.
     $this->headTitle($this->translate('Holdings') . ': ' . $this->driver->getBreadcrumb());
 ?>
+
+<?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
 <? if ($offlineMode == "ils-offline"): ?>
   <div class="alert alert-warning">
     <h2><?=$this->transEsc('ils_offline_title')?></h2>
diff --git a/themes/bootstrap3/templates/Service/recaptcha.phtml b/themes/bootstrap3/templates/Service/recaptcha.phtml
deleted file mode 100644
index 1293d741fca2ea2a2328bae62fd745cda197d9df..0000000000000000000000000000000000000000
--- a/themes/bootstrap3/templates/Service/recaptcha.phtml
+++ /dev/null
@@ -1,38 +0,0 @@
-<? if(isset($this->useRecaptcha) && $this->useRecaptcha): ?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'vendor/recaptcha_ajax.js', 'SET') ?>
-  <div class="form-group">
-    <div class="col-sm-9 col-sm-offset-3">
-      <?=$this->reCaptchaOptions ?>
-
-      <div id="recaptcha_widget" style="display:none">
-      <? if ($this->theme == 'custom'): ?>
-        <div id="custom_recaptcha_widget">
-          <div id="recaptcha_image"></div>
-          <div class="recaptcha_only_if_incorrect_sol" class="text-danger"><?=$this->translate('recaptcha_incorrect_try_again') ?></div>
-
-          <span class="recaptcha_only_if_image"><?=$this->translate('recaptcha_instructions_visual') ?></span>
-          <span class="recaptcha_only_if_audio"><?=$this->translate('recaptcha_instructions_audio') ?></span>
-
-          <input type="text" id="<?=$this->responseField ?>" name="<?=$this->responseField ?>" />
-
-          <div><a href="javascript:Recaptcha.reload()"><?=$this->translate('recaptcha_refresh_btn') ?></a></div>
-          <div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')"><?=$this->translate('recaptcha_audio_challenge') ?></a></div>
-          <div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')"><?=$this->translate('recaptcha_visual_challenge') ?></a></div>
-
-          <div><a href="javascript:Recaptcha.showhelp()"><?=$this->translate('recaptcha_help_btn') ?></a></div>
-        </div>
-      <? endif; ?>
-      </div>
-
-      <noscript>
-        <iframe src="<?=$this->host ?>/noscript?k=<?=$this->publicKey ?><?=$this->errorPart ?>" height="300" width="500" frameborder="0"></iframe>
-        <textarea name="<?=$this->challengeField ?>" rows="3" cols="40"></textarea>
-        <input type="hidden" name="<?=$this->responseField ?>" value="manual_challenge"/>
-      </noscript>
-
-      <script type="text/javascript">
-        Recaptcha.create("<?=$this->publicKey ?>", 'recaptcha_widget', <?=$this->options ?>);
-      </script>
-    </div>
-  </div>
-<? endif; ?>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/admin/home.phtml b/themes/bootstrap3/templates/admin/home.phtml
index ff6c1da76d08b7f48c2d9604486200380480112a..797a6b19729dd554d8a44829b6791f5008b500b8 100644
--- a/themes/bootstrap3/templates/admin/home.phtml
+++ b/themes/bootstrap3/templates/admin/home.phtml
@@ -12,7 +12,7 @@
 
 <div class="row">
   <div class="<?=$this->layoutClass('mainbody')?>">
-    <h2><?=$this->transEsc('VuFind Administration')?></h2>
+    <p class="lead"><?=$this->transEsc('VuFind Administration')?></p>
     <? $cores = is_object($this->xml) ? $this->xml->xpath('/response/lst[@name="status"]/lst') : array(); ?>
     <? foreach ($cores as $core): ?>
       <? $coreName = (string)$core['name']; ?>
diff --git a/themes/bootstrap3/templates/admin/tags/list.phtml b/themes/bootstrap3/templates/admin/tags/list.phtml
index 3dea8a100b810c085dce0af71dbb02e4d7c64098..dac9f69aa2c79909cb4baeb22b07ddf11f81b69a 100644
--- a/themes/bootstrap3/templates/admin/tags/list.phtml
+++ b/themes/bootstrap3/templates/admin/tags/list.phtml
@@ -97,7 +97,7 @@
 
         </form>
       </div>
-      <?=$this->paginationControl($this->results, 'Sliding', 'admin/tags/pagination.phtml', array('params' => $this->params))?>
+      <?=$this->paginationControl($this->results, 'Sliding', 'Helpers/pagination.phtml', array('params' => $this->params))?>
     <? else:?>
       <p><?=$this->translate('tag_filter_empty')?></p>
     <? endif;?>
diff --git a/themes/bootstrap3/templates/ajax/resolverLinks.phtml b/themes/bootstrap3/templates/ajax/resolverLinks.phtml
index 45e4b8176aea91a331201d513cbebfda8040f92d..2964ecf6d8d785ffe26a3ae0d1c7154fbe30786e 100644
--- a/themes/bootstrap3/templates/ajax/resolverLinks.phtml
+++ b/themes/bootstrap3/templates/ajax/resolverLinks.phtml
@@ -5,8 +5,8 @@
       <ul>
         <? foreach ($this->electronic as $link): ?>
           <li>
-            <? if (isset($link['href']) && !empty($link['href'])): ?>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
+            <? if (!empty($link['href'])): ?>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? else: ?>
               <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? endif; ?>
@@ -21,8 +21,8 @@
       <ul>
         <? foreach ($this->print as $link): ?>
           <li>
-            <? if (isset($link['href']) && !empty($link['href'])): ?>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
+            <? if (!empty($link['href'])): ?>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? else: ?>
               <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?>
             <? endif; ?>
@@ -36,9 +36,9 @@
     <? if (!empty($this->services)): ?>
       <ul>
         <? foreach ($this->services as $link): ?>
-          <? if (isset($link['href']) && !empty($link['href'])): ?>
+          <? if (!empty($link['href'])): ?>
             <li>
-              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a>
+              <a href="<?=$this->escapeHtmlAttr($link['href'])?>" title="<?=isset($link['service_type'])?$this->escapeHtmlAttr($link['service_type']):''?>"<?=!empty($link['access'])?' class=access-"'.$link['access'].'"':''?>><?=isset($link['title'])?$this->escapeHtml($link['title']):''?></a>
             </li>
           <? endif; ?>
         <? endforeach; ?>
diff --git a/themes/bootstrap3/templates/browse/home.phtml b/themes/bootstrap3/templates/browse/home.phtml
index 4533145aa2da969d69b9d11297e72ac20d39bb38..3b6e974b46e3735501a0394a57365a6bfb597111 100644
--- a/themes/bootstrap3/templates/browse/home.phtml
+++ b/themes/bootstrap3/templates/browse/home.phtml
@@ -61,7 +61,7 @@
         <? endif; ?>
       </a>
       <? if($viewRecord): ?>
-        <a class="list-group-item view-record" href="<?=$SEARCH_BASE ?>?lookfor=<? if ($this->filter): ?>&filter[]=<?=urlencode($this->filter) ?>%3A<?=str_replace('+AND+','&filter[]=', urlencode($secondary['value'])) ?><? endif; ?>&filter[]=<?=$this->browse()->getSolrField($this->currentAction) ?>%3A[* TO *]"><?=$this->transEsc('View Records') ?></a>
+        <a class="list-group-item view-record" href="<?=$SEARCH_BASE ?>?lookfor=<? if ($this->filter): ?>&filter[]=<?=urlencode($this->filter) ?>%3A<?=str_replace('+AND+','&filter[]=', urlencode($secondary['value'])) ?><? endif; ?>&filter[]=<?=$this->browse()->getSolrField($this->currentAction) ?>%3A[* TO *]<? if($this->dewey_flag):?>&sort=dewey-sort<?endif;?>"><?=$this->transEsc('View Records') ?></a>
       <? endif; ?>
     <? endforeach; ?>
     </div>
diff --git a/themes/bootstrap3/templates/cart/cart.phtml b/themes/bootstrap3/templates/cart/cart.phtml
index 4e8335a688e13d865d61ad6fe7b30e369b5c7d1a..de25035b9197a725d0634f6ed7887170a51c6a99 100644
--- a/themes/bootstrap3/templates/cart/cart.phtml
+++ b/themes/bootstrap3/templates/cart/cart.phtml
@@ -9,33 +9,53 @@
 <?=$this->flashmessages()?>
 <form class="form-inline" action="<?=$this->url('cart-home')?>" method="post"  name="cartForm">
   <? if (!$this->cart()->isEmpty()): ?>
-    <div class="checkbox">
-      <label>
-        <input type="checkbox" name="selectAll" class="checkbox-select-all"/> <?=$this->transEsc('select_page')?>
-          | <?=$this->transEsc('with_selected')?>:
-      </label>
-    </div>
-    <? if ($this->userlist()->getMode() !== 'disabled'): ?>
-      <input class="btn btn-default" type="submit" name="saveCart" value="<?=$this->transEsc('bookbag_save_selected')?>" title="<?=$this->transEsc('bookbag_save')?>"/>
-    <? endif; ?>
-    <input class="btn btn-default" type="submit" name="email" value="<?=$this->transEsc('bookbag_email_selected')?>" title="<?=$this->transEsc('bookbag_email')?>"/>
-    <? $exportOptions = $this->export()->getBulkOptions(); if (count($exportOptions) > 0): ?>
-      <input class="btn btn-default" type="submit" name="export" value="<?=$this->transEsc('bookbag_export_selected')?>" title="<?=$this->transEsc('bookbag_export')?>"/>
-    <? endif; ?>
-    <input class="btn btn-default" type="submit" name="print" value="<?=$this->transEsc('bookbag_print_selected')?>" title="<?=$this->transEsc('print_selected')?>"/>
-    <div class="btn-group" id="cartDelete">
-      <button type="submit" name="delete" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="cart-delete-label"><?=$this->transEsc('bookbag_delete_selected')?></button>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="cart-delete-label">
-        <li><a onClick="submitFormWithIds(this, {'delete':'delete'})" title="<?=$this->transEsc('confirm_delete')?>"><?=$this->transEsc('confirm_dialog_yes')?></a></li>
-        <li><a><?=$this->transEsc('confirm_dialog_no')?></a></li>
-      </ul>
-    </div>
-    <div class="btn-group">
-      <input type="submit" name="empty" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="cart-empty-label" value="<?=$this->transEsc('Empty Book Bag')?>"/>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="cart-empty-label">
-        <li><a onClick="submitCartForm(this, {'empty':'empty'})" title="<?=$this->transEsc('bookbag_confirm_empty')?>"><?=$this->transEsc('confirm_dialog_yes')?></a></li>
-        <li><a onClick="$('.fa.fa-spinner').remove()"><?=$this->transEsc('confirm_dialog_no')?></a></li>
-      </ul>
+    <div class="cart-controls clearfix">
+      <div class="checkbox pull-left">
+        <label>
+          <input type="checkbox" name="selectAll" class="checkbox-select-all"/>
+          <?=$this->transEsc('select_page')?>
+        </label>
+      </div>
+      <? if ($this->userlist()->getMode() !== 'disabled'): ?>
+        <button type="submit" class="btn btn-default" name="saveCart" title="<?=$this->transEsc('bookbag_save')?>" value="1">
+          <i class="fa fa-save"></i>
+          <?=$this->transEsc('Save')?>
+        </button>
+      <? endif; ?>
+      <button type="submit" class="btn btn-default" name="email" title="<?=$this->transEsc('bookbag_email')?>" value="1">
+        <i class="fa fa-envelope-o"></i>
+        <?=$this->transEsc('Email')?>
+      </button>
+      <? $exportOptions = $this->export()->getBulkOptions(); if (count($exportOptions) > 0): ?>
+        <button type="submit" class="btn btn-default" name="export" title="<?=$this->transEsc('bookbag_export')?>" value="1">
+          <i class="fa fa-list-alt"></i>
+          <?=$this->transEsc('Export')?>
+        </button>
+      <? endif; ?>
+      <button type="submit" class="btn btn-default dropdown-toggle" name="print" title="<?=$this->transEsc('print_selected')?>" value="1">
+        <i class="fa fa-print"></i>
+        <?=$this->transEsc('Print')?>
+      </button>
+      <div class="btn-group" id="cartDelete">
+        <button type="submit" name="delete" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="cart-delete-label" value="1">
+          <i class="fa fa-trash"></i>
+          <?=$this->transEsc('Delete')?>
+        </button>
+        <ul class="dropdown-menu" role="menu" aria-labelledby="cart-delete-label">
+          <li><a id="cart-confirm-delete" onClick="submitFormWithIds(this, {'delete':'delete'})" title="<?=$this->transEsc('confirm_delete')?>"><?=$this->transEsc('confirm_dialog_yes')?></a></li>
+          <li><a><?=$this->transEsc('confirm_dialog_no')?></a></li>
+        </ul>
+      </div>
+      <div class="btn-group">
+        <button type="submit" class="btn btn-default dropdown-toggle" name="empty" data-toggle="dropdown" id="cart-empty-label" value="1">
+          <i class="fa fa-close"></i>
+          <?=$this->transEsc('Empty Book Bag')?>
+        </button>
+        <ul class="dropdown-menu" role="menu" aria-labelledby="cart-empty-label">
+          <li><a id="cart-confirm-empty" onClick="submitCartForm(this, {'empty':'empty'})" title="<?=$this->transEsc('bookbag_confirm_empty')?>"><?=$this->transEsc('confirm_dialog_yes')?></a></li>
+          <li><a onClick="$('.fa.fa-spinner').remove()"><?=$this->transEsc('confirm_dialog_no')?></a></li>
+        </ul>
+      </div>
     </div>
   <? endif; ?>
   <?=$this->render('cart/contents.phtml')?>
diff --git a/themes/bootstrap3/templates/combined/results-list.phtml b/themes/bootstrap3/templates/combined/results-list.phtml
index f0ced1b2dd941461f1e84026235cebbb545903c1..abbda2156e42494e83f0c652fffb070c5efcea79 100644
--- a/themes/bootstrap3/templates/combined/results-list.phtml
+++ b/themes/bootstrap3/templates/combined/results-list.phtml
@@ -25,6 +25,9 @@
 <div class="clearfix">
   <div class="pull-left help-block">
     <? if ($recordTotal > 0): ?>
+      <? foreach (($top = $results->getRecommendations('top')) as $current): ?>
+        <?=$this->recommend($current)?>
+      <? endforeach; ?>
       <?=$this->transEsc("Showing")?>
       <strong><?=$this->localizedNumber($results->getStartRecord())?></strong> - <strong><?=$this->localizedNumber($results->getEndRecord())?></strong>
       <? if (!isset($view->skipTotalCount)): ?>
diff --git a/themes/bootstrap3/templates/eds/advanced.phtml b/themes/bootstrap3/templates/eds/advanced.phtml
index 82aeff7c920dba2153a31bf78132342c9819b305..19177171e2928c74485cadf618bd7cc6877cc928 100644
--- a/themes/bootstrap3/templates/eds/advanced.phtml
+++ b/themes/bootstrap3/templates/eds/advanced.phtml
@@ -2,8 +2,58 @@
   // Load the EDS-specific advanced search controls and inject them into the
   // standard advanced search layout:
   $this->extraAdvancedControls = $this->render('search/advanced/eds.phtml');
-
   $this->buildPageOverride = '/search/advanced/build_page_eds.phtml';
-  $this->advancedSearchJsOverride = 'advanced_search_eds.js';
+
+  ob_start();
+?>
+<div id="new_group_template">
+  <div class="group well clearfix">
+    <input type="hidden" name="join" value="AND"/>
+    <input type="hidden" name="bool0[]" value="AND"/>
+    <? for ($search=0;$search<3;$search++): ?>
+      <? if ($search == 0): ?>
+        <div id="new_search_template">
+      <? endif; ?>
+      <div class="search row">
+        <div class="col-sm-3">
+          <input type="hidden" value="AND" class="first-op"/>
+          <label class="help-block<? if ($search > 0): ?> hidden<?endif;?>"><?=$this->transEsc("adv_search_label")?>:</label>
+          <select id="search_op0_<?=$search ?>" name="op0[]" class="op col-sm-9 form-control<? if ($search == 0): ?> hidden<?endif;?>">
+            <option value="AND"><?=$this->transEsc("AND")?></option>
+            <option value="OR"><?=$this->transEsc("OR")?></option>
+            <option value="NOT"><?=$this->transEsc("NOT")?></option>
+          </select>
+        </div>
+        <div class="col-sm-9">
+          <div class="row">
+            <div class="col-sm-6">
+              <input id="search_lookfor0_<?=$search ?>" name="lookfor0[]" class="form-control" type="text" value=""/>
+            </div>
+            <span class="col-sm-1 help-block hidden-xs"><?=$this->transEsc("in")?></span>
+            <div class="col-sm-4 middle">
+              <select id="search_type0_<?=$search ?>" name="type0[]" class="type form-control">
+                <? foreach ($this->options->getAdvancedHandlers() as $searchVal => $searchDesc): ?>
+                  <option value="<?=$this->escapeHtml($searchVal)?>"><?=$this->transEsc($searchDesc)?></option>
+                <? endforeach; ?>
+              </select>
+            </div>
+            <div class="close">
+              <a href="#" class="help-block">&times;</a>
+            </div>
+          </div>
+        </div>
+        <br class="hidden-lg"/>
+      </div>
+      <? if ($search == 0): ?>
+        </div>
+      <? endif; ?>
+    <? endfor; ?>
+    <i class="fa fa-plus-circle search_place_holder hidden"></i> <a href="#" class="add_search_link hidden"><?=$this->transEsc("add_search")?></a>
+  </div>
+</div>
+<?
+  $this->formOverride = ob_get_contents();
+  ob_end_clean();
+
   echo $this->render('search/advanced/layout.phtml');
 ?>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/header.phtml b/themes/bootstrap3/templates/header.phtml
index 54a2a2b90da2151c617aa2f15cc51cfaca191e3f..40571101c53e146aea0b14748ad9b1767e3b291a 100644
--- a/themes/bootstrap3/templates/header.phtml
+++ b/themes/bootstrap3/templates/header.phtml
@@ -42,7 +42,7 @@
 
       <? if (isset($this->layout()->themeOptions) && count($this->layout()->themeOptions) > 1): ?>
         <li class="dropdown">
-          <form method="post" name="themeForm" action="" id="themeForm">
+          <form method="post" name="themeForm" id="themeForm">
             <input type="hidden" name="ui"/>
           </form>
           <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?=$this->transEsc("Theme")?> <b class="caret"></b></a>
@@ -56,7 +56,7 @@
 
       <? if (isset($this->layout()->allLangs) && count($this->layout()->allLangs) > 1): ?>
         <li class="dropdown">
-          <form method="post" name="langForm" action="" id="langForm">
+          <form method="post" name="langForm" id="langForm">
             <input type="hidden" name="mylang"/>
           </form>
           <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?=$this->transEsc("Language")?> <b class="caret"></b></a>
diff --git a/themes/bootstrap3/templates/install/fixdatabase.phtml b/themes/bootstrap3/templates/install/fixdatabase.phtml
index 01b68c63d829c6af5083d8d6469e046e01ba4daf..dbbb5508cfe24d7e4b47a0ec50878b62e9384d79 100644
--- a/themes/bootstrap3/templates/install/fixdatabase.phtml
+++ b/themes/bootstrap3/templates/install/fixdatabase.phtml
@@ -11,7 +11,7 @@
 
 <p>To create a new database for VuFind, please fill in this form:</p>
 
-<form class="form-horizontal" action="" method="post">
+<form class="form-horizontal" method="post">
   <div class="form-group">
     <label class="col-sm-3 control-label" for="dbname">Select database type:</label>
     <div class="col-sm-9">
diff --git a/themes/bootstrap3/templates/install/fixils.phtml b/themes/bootstrap3/templates/install/fixils.phtml
index ec069595081d84a4144ee668937c60e1696d5189..f71ddd370bc38c7de34e4326fd662546284aff1a 100644
--- a/themes/bootstrap3/templates/install/fixils.phtml
+++ b/themes/bootstrap3/templates/install/fixils.phtml
@@ -12,7 +12,7 @@
   in order to demonstrate the capabilities of the system.  If you want real patron and status information to display,
   you should change your configuration to communicate with a real ILS.</p>
 
-  <form method="post" action="" class="form-horizontal" role="form">
+  <form method="post" class="form-horizontal" role="form">
     <div class="form-group">
       <label for="driver" class="col-sm-2 control-label">Pick a driver:</label>
       <div class="col-sm-10">
diff --git a/themes/bootstrap3/templates/layout/layout.phtml b/themes/bootstrap3/templates/layout/layout.phtml
index 8c985b6e75af2ca87fd0d4e16421a43694305e0d..2cc6cc6e76dc5fc2f624bc16ac3cb9eb56a909de 100644
--- a/themes/bootstrap3/templates/layout/layout.phtml
+++ b/themes/bootstrap3/templates/layout/layout.phtml
@@ -26,16 +26,25 @@
 
       // Deal with cart stuff:
       if (!isset($this->renderingError)) {
-        $cart = $this->cart();
         $this->jsTranslations()->addStrings(
           array(
+            'add_tag_success' => 'add_tag_success',
             'bulk_email_success' => 'bulk_email_success',
             'bulk_save_success' => 'bulk_save_success',
             'close' => 'close',
+            'libphonenumber_invalid' => 'libphonenumber_invalid',
+            'libphonenumber_invalidcountry' => 'libphonenumber_invalidcountry',
+            'libphonenumber_invalidregion' => 'libphonenumber_invalidregion',
+            'libphonenumber_notanumber' => 'libphonenumber_notanumber',
+            'libphonenumber_toolong' => 'libphonenumber_toolong',
+            'libphonenumber_tooshort' => 'libphonenumber_tooshort',
+            'libphonenumber_tooshortidd' => 'libphonenumber_tooshortidd',
             'loading' => 'Loading',
-            'sms_success' => 'sms_success'
+            'sms_success' => 'sms_success',
+            'number_thousands_separator' => ['number_thousands_separator', null, ',']
           )
         );
+        $cart = $this->cart();
         if ($cart->isActive()) {
           $this->headScript()->appendFile("vendor/cookies.js");
           $this->headScript()->appendFile("cart.js");
@@ -45,22 +54,24 @@
           );
           $this->jsTranslations()->addStrings(
             array(
+              'addBookBag' => 'Add to Book Bag',
+              'bookbagFull' => 'bookbag_full_msg',
+              'bookbagMax' => $cart->getMaxSize(),
+              'bookbagStatusFull' => 'bookbag_full',
               'bulk_noitems_advice' => 'bulk_noitems_advice',
               'confirmDelete' => 'confirm_delete',
               'confirmEmpty' => 'bookbag_confirm_empty',
-              'viewBookBag' => 'View Book Bag',
-              'addBookBag' => 'Add to Book Bag',
-              'removeBookBag' => 'Remove from Book Bag',
               'itemsAddBag' => 'items_added_to_bookbag',
               'itemsInBag' => 'items_already_in_bookbag',
-              'bookbagMax' => $cart->getMaxSize(),
-              'bookbagFull' => 'bookbag_full_msg',
-              'bookbagStatusFull' => 'bookbag_full',
-              'no_tags' => 'No Tags'
+              'removeBookBag' => 'Remove from Book Bag',
+              'viewBookBag' => 'View Book Bag'
             )
           );
         }
         $this->headScript()->appendScript($this->jsTranslations()->getScript());
+        $this->headScript()->appendScript(
+          'var userIsLoggedIn = ' . ($this->auth()->isLoggedIn() ? 'true' : 'false') . ';'
+        );
       }
 
       // Session keep-alive
@@ -72,7 +83,7 @@
     ?>
     <?=$this->headScript()?>
   </head>
-  <body>
+  <body class="<?=$this->layoutClass('offcanvas-row')?>">
     <? // Set up the search box -- there are three possible cases:
       // 1. No search box was set; we should default to the normal box
       // 2. It was set to false; we should display nothing
@@ -97,23 +108,22 @@
           && $this->layout()->breadcrumbs !== false
         ): ?>
           <ul class="breadcrumb hidden-print">
-          <? if(is_array($this->layout()->breadcrumbs)): ?>
-            <? if(count($this->layout()->breadcrumbs) > 1): ?>
-              <?=$this->render('breadcrumbs/multi.phtml', array(
-                  'parents' => $this->layout()->breadcrumbs,
-                  'title'   => $this->layout()->title,
-                  'end'     => $this->layout()->breadcrumbEnd,
-                  'from'    => $this->layout()->from
-                )) ?>
+            <? if(is_array($this->layout()->breadcrumbs)): ?>
+              <? if(count($this->layout()->breadcrumbs) > 1): ?>
+                <?=$this->render('breadcrumbs/multi.phtml', array(
+                    'parents' => $this->layout()->breadcrumbs,
+                    'title'   => $this->layout()->title,
+                    'from'    => $this->layout()->from
+                  )) ?>
+              <? else: ?>
+                <?=$this->render('breadcrumbs/default.phtml', array(
+                    'parents' => $this->layout()->breadcrumbs,
+                    'title'   => $this->layout()->title
+                  )) ?>
+              <? endif; ?>
             <? else: ?>
-              <?=$this->render('breadcrumbs/default.phtml', array(
-                  'parents' => $this->layout()->breadcrumbs,
-                  'title'   => $this->layout()->title
-                )) ?>
+              <?=$this->layout()->breadcrumbs ?>
             <? endif; ?>
-          <? else: ?>
-            <?=$this->layout()->breadcrumbs ?>
-          <? endif; ?>
           </ul>
         <? endif; ?>
       </div>
@@ -141,6 +151,8 @@
         </div>
       </div>
     </div>
+    <div class="offcanvas-toggle" data-toggle="offcanvas"><i class="fa"></i></div>
+    <div class="offcanvas-overlay" data-toggle="offcanvas"></div>
     <?=$this->googleanalytics()?>
     <?=$this->piwik()?>
   </body>
diff --git a/themes/bootstrap3/templates/librarycards/editcard.phtml b/themes/bootstrap3/templates/librarycards/editcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..beb61aa23e65bd30eaa2b92caf67a1cfcbac55d2
--- /dev/null
+++ b/themes/bootstrap3/templates/librarycards/editcard.phtml
@@ -0,0 +1,53 @@
+<?
+  // Set up page title:
+  $pageTitle = empty($this->card->id) ? 'Add a Library Card' : "Edit Library Card";
+  $this->headTitle($this->translate($pageTitle));
+
+  // Set up breadcrumbs:
+  $this->layout()->breadcrumbs = '<li><a href="' . $this->url('myresearch-home') . '">' . $this->transEsc('Your Account') . '</a></li>'
+    . '<li><a href="' . $this->url('librarycards-home') . '">' . $this->transEsc('Library Cards') . '</a></li>'
+    . '<li>' . $this->transEsc($pageTitle) . '</li>';
+?>
+
+<?=$this->flashmessages()?>
+
+<h2><?=$this->transEsc($pageTitle); ?></h2>
+
+<form class="form-horizontal edit-card-form" method="post" name="<?=empty($this->card->id) ? 'newCardForm' : 'editCardForm'?>">
+  <input type="hidden" name="id" value="<?=empty($this->card->id) ? 'NEW' : $this->card->id ?>"/>
+  <div class="form-group">
+    <label class="col-sm-3 control-label" for="card_name"><?=$this->transEsc('Library Card Name'); ?>:</label>
+    <div class="col-sm-9">
+      <input id="card_name" class="form-control" type="text" name="card_name" value="<?=$this->escapeHtmlAttr($this->cardName)?>"/>
+    </div>
+  </div>
+  <? if ($this->targets !== null): ?>
+  <div class="form-group">
+    <label class="col-sm-3 control-label" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+    <div class="col-sm-9">
+      <select id="login_target" name="target" class="form-control">
+      <? foreach ($this->targets as $target): ?>
+        <option value="<?=$this->escapeHtmlAttr($target)?>"<?=($target == $this->target ? ' selected="selected"' : '')?>><?=$this->transEsc("source_$target", null, $target)?></option>
+      <? endforeach; ?>
+      </select>
+    </div>
+  </div>
+  <? endif; ?>
+  <div class="form-group">
+    <label class="col-sm-3 control-label" for="login_username"><?=$this->transEsc('Username')?>:</label>
+    <div class="col-sm-9">
+      <input id="login_username" type="text" name="username" value="<?=$this->escapeHtmlAttr($this->username)?>" class="form-control"/>
+    </div>
+  </div>
+  <div class="form-group">
+    <label class="col-sm-3 control-label" for="login_password"><?=$this->transEsc('Password')?>:</label>
+    <div class="col-sm-9">
+      <input id="login_password" type="password" name="password" value="<?=$this->escapeHtmlAttr($this->password)?>" class="form-control"/>
+    </div>
+  </div>
+  <div class="form-group">
+    <div class="col-sm-9 col-sm-offset-3">
+      <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+    </div>
+  </div>
+</form>
diff --git a/themes/bootstrap3/templates/librarycards/home.phtml b/themes/bootstrap3/templates/librarycards/home.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..a8a4ab1094640488546c16efcf91c5bf7208990c
--- /dev/null
+++ b/themes/bootstrap3/templates/librarycards/home.phtml
@@ -0,0 +1,63 @@
+<?
+    // Set up page title:
+    $this->headTitle($this->translate('Library Cards'));
+
+    // Set up breadcrumbs:
+    $this->layout()->breadcrumbs = '<li><a href="' . $this->url('myresearch-home') . '">' . $this->transEsc('Your Account') . '</a></li> <li class="active">' . $this->transEsc('Library Cards') . '</li>';
+?>
+<div class="row">
+  <div class="<?=$this->layoutClass('mainbody')?>">
+
+    <?=$this->flashmessages()?>
+
+    <h2><?=$this->transEsc('Library Cards')?></h2>
+    <? if ($this->libraryCards->count() == 0): ?>
+      <div><?=$this->transEsc('You do not have any library cards')?></div>
+    <? else: ?>
+      <table class="table table-striped" summary="<?=$this->transEsc('Library Cards')?>">
+      <tr>
+        <th><?=$this->transEsc('Library Card Name')?></th>
+        <? if ($this->multipleTargets): ?>
+        <th><?=$this->transEsc('login_target')?></th>
+        <? endif; ?>
+        <th><?=$this->transEsc('Username')?></th>
+        <th>&nbsp;</th>
+      </tr>
+      <? foreach ($this->libraryCards as $record): ?>
+        <tr>
+          <td><?=$this->escapeHtml($record['card_name'])?></td>
+          <? $username = $record['cat_username']; if ($this->multipleTargets): ?>
+            <? $target = ''; ?>
+            <? if (strstr($username, '.')): ?>
+              <? list($target, $username) = explode('.', $username, 2); ?>
+            <? endif; ?>
+            <td><?=$target ? $this->transEsc("source_$target", null, $target) : '&nbsp;' ?></td>
+          <? endif; ?>
+          <td><?=$this->escapeHtml($username)?></td>
+          <td>
+            <div class="btn-group">
+              <a class="btn btn-link" href="<?=$this->url('editLibraryCard') . $this->escapeHtmlAttr($record['id']) ?>" title="<?=$this->transEsc('Edit Library Card')?>"><i class="fa fa-edit"></i> <?=$this->transEsc('Edit')?></a>
+              <a class="btn btn-link dropdown-toggle" data-toggle="dropdown" href="<?=$this->url('librarycards-deletecard') ?>?cardID=<?=urlencode($record['id'])?>">
+                <i class="fa fa-trash-o"></i> <?=$this->transEsc('Delete')?>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="<?=$this->url('librarycards-deletecard') ?>?cardID=<?=urlencode($record['id'])?>&amp;confirm=1"><?=$this->transEsc('confirm_dialog_yes') ?></a></li>
+                <li><a href="#"><?=$this->transEsc('confirm_dialog_no')?></a></li>
+              </ul>
+            </div>
+          </td>
+        </tr>
+      <? endforeach; ?>
+      </table>
+    <? endif; ?>
+
+    <div class="btn-group">
+      <a href="<?=$this->url('editLibraryCard') ?>NEW" class="btn btn-link" title="<?=$this->transEsc('Add a Library Card')?>"><i class="fa fa-edit"></i> <?=$this->transEsc('Add a Library Card')?></a>
+    </div>
+  </div>
+
+  <div class="<?=$this->layoutClass('sidebar')?>">
+    <?=$this->context($this)->renderInContext("myresearch/menu.phtml", array('active' => 'librarycards'))?>
+  </div>
+
+</div>
diff --git a/themes/bootstrap3/templates/librarycards/selectcard.phtml b/themes/bootstrap3/templates/librarycards/selectcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..1622d4410e40c4c78e869d1995f5d131ca4e83ad
--- /dev/null
+++ b/themes/bootstrap3/templates/librarycards/selectcard.phtml
@@ -0,0 +1,24 @@
+<? if ($this->user): ?>
+  <?$cards = $this->user->getLibraryCards(); if ($cards->count() > 1): ?>
+    <form class="form-inline" action="<?=$this->url('librarycards-selectcard')?>" method="get">
+      <label for="library_card"><?=$this->transEsc('Library Card')?></label>
+      <select id="library_card" name="cardID" class="jumpMenu form-control">
+        <? foreach ($cards as $card): ?>
+          <?
+            $target = '';
+            $username = $card->cat_username;
+            if (strstr($username, '.')) {
+              list($target, $username) = explode('.', $username, 2);
+            }
+            $display = $this->transEsc($card->card_name ? $card->card_name : $card->cat_username);
+            if ($target) {
+              $display .= ' (' . $this->transEsc("source_$target", null, $target) . ')';
+            }
+          ?>
+          <option value="<?=$this->escapeHtmlAttr($card->id)?>"<?=$card->cat_username == $this->user->cat_username ? ' selected="selected"' : ''?>><?=$display ?></option>
+        <? endforeach; ?>
+      </select>
+      <noscript><input type="submit" class="btn btn-default" value="<?=$this->transEsc("Set")?>" /></noscript>
+    </form>
+  <? endif; ?>
+<? endif; ?>
diff --git a/themes/bootstrap3/templates/myresearch/account.phtml b/themes/bootstrap3/templates/myresearch/account.phtml
index 2c92e06f72f514b4a77745d47d8aec614beae61e..22e742f9f2dc645ac81aac466b1c94d11b019a2a 100644
--- a/themes/bootstrap3/templates/myresearch/account.phtml
+++ b/themes/bootstrap3/templates/myresearch/account.phtml
@@ -8,7 +8,7 @@
 <h2><?=$this->transEsc('User Account')?></h2>
 <?=$this->flashmessages()?>
 
-<form method="post" action="" name="accountForm" id="accountForm" class="form-horizontal" data-toggle="validator" role="form">
+<form method="post" name="accountForm" id="accountForm" class="form-horizontal" data-toggle="validator" role="form">
   <?=$this->auth()->getCreateFields()?>
   <?=$this->recaptcha()->html($this->useRecaptcha) ?>
   <div class="form-group">
diff --git a/themes/bootstrap3/templates/myresearch/cataloglogin.phtml b/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
index dda95948a511b991405d9f1c0c3c6770bb839b46..166b765b04965e2a7c62d16d3cb2b2def62316ab 100644
--- a/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
+++ b/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
@@ -20,7 +20,19 @@
   <h3><?=$this->transEsc('Library Catalog Profile')?></h3>
   <?=$this->flashmessages()?>
   <p><?=$this->transEsc('cat_establish_account')?></p>
-  <form method="post" action="" class="form-horizontal">
+  <form method="post" class="form-horizontal">
+    <? if ($this->targets !== null): ?>
+    <div class="form-group">
+      <label class="col-sm-2 control-label" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+      <div class="col-sm-10">
+        <select id="login_target" name="target" class="form-control">
+        <? foreach ($this->targets as $target): ?>
+          <option value="<?=$this->escapeHtmlAttr($target)?>"><?=$this->transEsc("source_$target", null, $target)?></option>
+        <? endforeach; ?>
+        </select>
+      </div>
+    </div>
+    <? endif; ?>
     <div class="form-group">
       <label class="col-sm-2 control-label" for="profile_cat_username"><?=$this->transEsc('Library Catalog Username')?>:</label>
       <div class="col-sm-10">
@@ -30,7 +42,7 @@
     <div class="form-group">
       <label class="col-sm-2 control-label" for="profile_cat_password"><?=$this->transEsc('Library Catalog Password')?>:</label>
       <div class="col-sm-10">
-        <input id="profile_cat_username" type="text" name="cat_password" value="" class="form-control"/>
+        <input id="profile_cat_username" type="password" name="cat_password" value="" class="form-control"/>
       </div>
     </div>
     <div class="form-group">
diff --git a/themes/bootstrap3/templates/myresearch/checkedout.phtml b/themes/bootstrap3/templates/myresearch/checkedout.phtml
index 95362507c4df64ede39e6466803d6f51df34b3fd..338e039fb655f36e495b16c8042f15592559c806 100644
--- a/themes/bootstrap3/templates/myresearch/checkedout.phtml
+++ b/themes/bootstrap3/templates/myresearch/checkedout.phtml
@@ -11,15 +11,43 @@
     <h2><?=$this->transEsc('Your Checked Out Items')?></h2>
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->transactions)): ?>
       <? if ($this->renewForm): ?>
-      <form name="renewals" action="" method="post" id="renewals">
+      <form name="renewals" method="post" id="renewals">
         <div class="toolbar">
           <input type="submit" class="btn btn-default" name="renewSelected" value="<?=$this->transEsc("renew_selected")?>" />
           <input type="submit" class="btn btn-default" name="renewAll" value="<?=$this->transEsc('renew_all')?>" />
         </div>
       <? endif; ?>
 
+      <? if ($paginator): ?>
+        <?=$this->transEsc("Showing")?>
+        <? $start = $paginator->getAbsoluteItemNumber(1);
+           $end = $paginator->getAbsoluteItemNumber($paginator->getItemCountPerPage());
+           $total = $paginator->getTotalItemCount();
+        ?>
+        <strong><?=$this->localizedNumber($start)?></strong> - <strong><?=$this->localizedNumber($end > $total ? $total : $end)?></strong>
+        <?=$this->transEsc('of')?> <strong><?=$this->localizedNumber($total)?></strong>
+      <? endif; ?>
+
+      <? foreach ($hiddenTransactions as $ilsDetails): ?>
+        <? if (isset($this->renewResult[$ilsDetails['item_id']])): ?>
+          <? $renewDetails = $this->renewResult[$ilsDetails['item_id']]; ?>
+          <? $prefix = isset($ilsDetails['title']) ? $ilsDetails['title'] : $ilsDetails['item_id']; ?>
+          <? if (isset($renewDetails['success']) && $renewDetails['success']): ?>
+            <div class="alert alert-success"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_success')?></div>
+          <? else: ?>
+            <div class="alert alert-danger"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_fail')?><? if (isset($renewDetails['sysMessage'])): ?>: <?=$this->escapeHtml($renewDetails['sysMessage'])?><? endif; ?></div>
+          <? endif; ?>
+        <? endif; ?>
+        <? if (isset($ilsDetails['renewable']) && $ilsDetails['renewable'] && isset($ilsDetails['renew_details'])): ?>
+          <? $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $ilsDetails['renew_details']); ?>
+          <input class="pull-left" type="hidden" name="renewAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
+        <? endif; ?>
+      <? endforeach; ?>
+
       <? $i = 0; foreach ($this->transactions as $resource): ?>
         <hr/>
         <? $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
@@ -123,6 +151,7 @@
         </div>
       <? endforeach; ?>
       <? if ($this->renewForm): ?></form><? endif; ?>
+      <?=$paginator ? $this->paginationControl($paginator, 'Sliding', 'Helpers/pagination.phtml') : ''?>
     <? else: ?>
       <?=$this->transEsc('You do not have any items checked out')?>.
     <? endif; ?>
diff --git a/themes/bootstrap3/templates/myresearch/edit.phtml b/themes/bootstrap3/templates/myresearch/edit.phtml
index 8150edf197aa72be87fdcd3e60d0deec2da697f4..f6d703ae909eb9c026639b38ed80cc2c980123e5 100644
--- a/themes/bootstrap3/templates/myresearch/edit.phtml
+++ b/themes/bootstrap3/templates/myresearch/edit.phtml
@@ -11,7 +11,7 @@
 <div class="record">
   <h2><?=$this->escapeHtml($this->driver->getBreadcrumb())?></h2>
 
-  <form class="form-horizontal" method="post" name="editForm" action="">
+  <form class="form-horizontal" method="post" name="editForm">
   <? if (empty($this->savedData)): ?>
     <p class="alert alert-info">
       <? if (isset($listFilter)): ?>
diff --git a/themes/bootstrap3/templates/myresearch/editlist.phtml b/themes/bootstrap3/templates/myresearch/editlist.phtml
index aa6df2ca1b5c7dc0dafbb5d5d1da6d0acbe16e68..65c5c4c3e80f5d290c158938c553c39f1b4c8670 100644
--- a/themes/bootstrap3/templates/myresearch/editlist.phtml
+++ b/themes/bootstrap3/templates/myresearch/editlist.phtml
@@ -12,7 +12,7 @@
 
 <h2><?=$this->transEsc($pageTitle); ?></h2>
 
-<form class="form-horizontal edit-list-form" method="post" name="<?=empty($this->list->id) ? 'newList' : 'editListForm'?>" action="">
+<form class="form-horizontal edit-list-form" method="post" name="<?=empty($this->list->id) ? 'newList' : 'editListForm'?>">
   <input type="hidden" name="id" value="<?=empty($this->list->id) ? 'NEW' : $this->list->id ?>"/>
   <div class="form-group">
     <label class="col-sm-3 control-label" for="list_title"><?=$this->transEsc('List'); ?>:</label>
@@ -34,12 +34,16 @@
     <div class="form-group">
       <label class="col-sm-3 control-label"><?=$this->transEsc('Access') ?></label>
       <div class="col-sm-9">
-        <label class="radio inline">
-          <input id="list_public_1" type="radio" name="public" value="1"<? if ($this->list->isPublic()): ?> checked="checked"<? endif; ?>/> <?=$this->transEsc('Public') ?>
-        </label>
-        <label class="radio inline">
-          <input id="list_public_0" type="radio" name="public" value="0"<? if (!$this->list->isPublic()): ?> checked="checked"<? endif; ?>/> <?=$this->transEsc('Private') ?>
-        </label>
+        <div class="radio inline">
+          <label>
+            <input id="list_public_1" type="radio" name="public" value="1"<? if ($this->list->isPublic()): ?> checked="checked"<? endif; ?>/> <?=$this->transEsc('Public') ?>
+          </label>
+        </div>
+        <div class="radio inline">
+          <label>
+            <input id="list_public_0" type="radio" name="public" value="0"<? if (!$this->list->isPublic()): ?> checked="checked"<? endif; ?>/> <?=$this->transEsc('Private') ?>
+          </label>
+        </div>
       </div>
     </div>
   <? endif; ?>
diff --git a/themes/bootstrap3/templates/myresearch/fines.phtml b/themes/bootstrap3/templates/myresearch/fines.phtml
index 1499521e2a58be81453d15246bf0ef0a438639c5..873d8af78d48379aa2d7f1f65d8a7be4d07c88da 100644
--- a/themes/bootstrap3/templates/myresearch/fines.phtml
+++ b/themes/bootstrap3/templates/myresearch/fines.phtml
@@ -7,6 +7,9 @@
 ?>
 <div class="<?=$this->layoutClass('mainbody')?>">
   <h2><?=$this->transEsc('Your Fines')?></h2>
+
+  <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
   <? if (empty($this->fines)): ?>
     <?=$this->transEsc('You do not have any fines')?>
   <? else: ?>
@@ -25,7 +28,7 @@
         <td>
           <? if (empty($record['title'])): ?>
             <?=$this->transEsc('not_applicable')?>
-          <? elseif (!is_object($record['driver'])): ?>
+          <? elseif (!isset($record['driver']) || !is_object($record['driver'])): ?>
             <?=$this->escapeHtml(trim($record['title'], '/:'))?>
           <? else: ?>
             <a href="<?=$this->recordLink()->getUrl($record['driver'])?>"><?=$this->escapeHtml(trim($record['title'], '/:'))?></a>
diff --git a/themes/bootstrap3/templates/myresearch/holds.phtml b/themes/bootstrap3/templates/myresearch/holds.phtml
index 5f5472fa33711b9c28abbad15cc077c85a82cccd..5552ef1940207d19076fc78be1604deb2c2fa88a 100644
--- a/themes/bootstrap3/templates/myresearch/holds.phtml
+++ b/themes/bootstrap3/templates/myresearch/holds.phtml
@@ -12,9 +12,11 @@
 
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->recordList)): ?>
       <? if ($this->cancelForm): ?>
-        <form name="cancelForm" class="inline" action="" method="post" id="cancelHold">
+        <form name="cancelForm" class="inline" method="post" id="cancelHold">
           <input type="hidden" id="submitType" name="cancelSelected" value="1"/>
           <input type="hidden" id="cancelConfirm" name="confirm" value="0"/>
           <div class="btn-group">
@@ -44,18 +46,18 @@
           <? if ($this->cancelForm && isset($ilsDetails['cancel_details'])): ?>
             <? $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $resource->getUniqueId()); ?>
             <input type="hidden" name="cancelAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" />
-            <div class="pull-left">
+            <div class="col-xs-1">
               <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" />
             </div>
           <? endif; ?>
-          <div class="col-sm-2 text-center">
+          <div class="col-sm-2 col-xs-11 text-center">
             <? if ($summThumb = $this->record($resource)->getThumbnail()): ?>
               <img src="<?=$this->escapeHtmlAttr($summThumb)?>" class="recordcover" alt="<?=$this->transEsc('Cover Image')?>"/>
             <? else: ?>
               <img src="<?=$this->url('cover-unavailable')?>" class="recordcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
             <? endif; ?>
           </div>
-          <div class="col-sm-6">
+          <div class="col-sm-6 col-xs-12">
             <?
               // If this is a non-missing Solr record, we should display a link:
               if (is_a($resource, 'VuFind\\RecordDriver\\SolrDefault') && !is_a($resource, 'VuFind\\RecordDriver\\Missing')) {
diff --git a/themes/bootstrap3/templates/myresearch/illrequests.phtml b/themes/bootstrap3/templates/myresearch/illrequests.phtml
index d4e553991f025a008657f9b636b7022b91dd6e74..75d567d13c8d72feb58b6ffc5eadfb9aa1893fe9 100644
--- a/themes/bootstrap3/templates/myresearch/illrequests.phtml
+++ b/themes/bootstrap3/templates/myresearch/illrequests.phtml
@@ -13,9 +13,11 @@
 
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->recordList)): ?>
       <? if ($this->cancelForm): ?>
-        <form name="cancelForm" class="inline" action="" method="post" id="cancelILLRequest">
+        <form name="cancelForm" class="inline" method="post" id="cancelILLRequest">
           <input type="hidden" id="submitType" name="cancelSelected" value="1"/>
           <input type="hidden" id="cancelConfirm" name="confirm" value="0"/>
           <div class="btn-group">
diff --git a/themes/bootstrap3/templates/myresearch/menu.phtml b/themes/bootstrap3/templates/myresearch/menu.phtml
index 089db75f3bfcf8256b64e32ec5731da15ea61b68..7708de9b4cb2ca1fa08ef3ba11e28ef873c19376 100644
--- a/themes/bootstrap3/templates/myresearch/menu.phtml
+++ b/themes/bootstrap3/templates/myresearch/menu.phtml
@@ -3,55 +3,61 @@
   <? if ($this->userlist()->getMode() !== 'disabled'): ?>
     <a href="<?=$this->url('myresearch-favorites')?>" class="list-group-item<?=$this->active == 'favorites' ? ' active' : ''?>">
       <?=$this->transEsc('Favorites')?>
-      <span class="pull-right"><i class="fa fa-star"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-star"></i></span>
     </a>
   <? endif; ?>
   <? if ('ils-none' !== $this->ils()->getOfflineMode()): ?>
     <? if ($this->ils()->checkCapability('getMyTransactions')): ?>
       <a href="<?=$this->url('myresearch-checkedout')?>" class="list-group-item<?=$this->active == 'checkedout' ? ' active' : ''?>">
         <?=$this->transEsc('Checked Out Items')?>
-        <span class="pull-right"><i class="fa fa-book"></i></span>
+        <span class="pull-right"><i class="fa fa-fw fa-book"></i></span>
       </a>
     <? endif; ?>
     <? if ($this->ils()->checkCapability('getMyHolds')): ?>
       <a href="<?=$this->url('myresearch-holds')?>" class="list-group-item<?=$this->active == 'holds' ? ' active' : ''?>">
         <?=$this->transEsc('Holds and Recalls')?>
-        <span class="pull-right"><i class="fa fa-flag"></i></span>
+        <span class="pull-right"><i class="fa fa-fw fa-flag"></i></span>
       </a>
     <? endif; ?>
     <? if ($this->ils()->checkFunction('StorageRetrievalRequests')): ?>
       <a href="<?=$this->url('myresearch-storageretrievalrequests')?>" class="list-group-item<?=$this->active == 'storageRetrievalRequests' ? ' active' : ''?>">
         <?=$this->transEsc('Storage Retrieval Requests')?>
-        <span class="pull-right"><i class="fa fa-archive"></i></span>
+        <span class="pull-right"><i class="fa fa-fw fa-archive"></i></span>
       </a>
     <? endif; ?>
     <? if ($this->ils()->checkFunction('ILLRequests')): ?>
     <a href="<?=$this->url('myresearch-illrequests')?>" class="list-group-item<?=$this->active == 'ILLRequests' ? ' active' : ''?>">
       <?=$this->transEsc('Interlibrary Loan Requests')?>
-      <span class="pull-right"><i class="fa fa-exchange"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-exchange"></i></span>
     </a>
     <? endif; ?>
     <? if ($this->ils()->checkCapability('getMyFines')): ?>
       <a href="<?=$this->url('myresearch-fines')?>" class="list-group-item<?=$this->active == 'fines' ? ' active' : ''?>">
         <?=$this->transEsc('Fines')?>
-        <span class="pull-right"><i class="fa fa-usd"></i></span>
+        <span class="pull-right"><i class="fa fa-fw fa-usd"></i></span>
       </a>
     <? endif; ?>
     <? if ($this->ils()->checkCapability('getMyProfile')): ?>
       <a href="<?=$this->url('myresearch-profile')?>" class="list-group-item<?=$this->active == 'profile' ? ' active' : ''?>">
         <?=$this->transEsc('Profile')?>
-        <span class="pull-right"><i class="fa fa-user"></i></span>
+        <span class="pull-right"><i class="fa fa-fw fa-user"></i></span>
+      </a>
+    <? endif; ?>
+    <? $user = $this->auth()->isLoggedIn(); if ($user && $user->libraryCardsEnabled()): ?>
+      <a href="<?=$this->url('librarycards-home')?>" class="list-group-item<?=$this->active == 'librarycards' ? ' active' : ''?>">
+        <?=$this->transEsc('Library Cards')?>
+        <span class="pull-right"><i class="fa fa-fw fa-barcode"></i></span>
       </a>
     <? endif; ?>
   <? endif; ?>
   <a href="<?=$this->url('search-history')?>?require_login" class="list-group-item<?=$this->active == 'history' ? ' active' : ''?>">
     <?=$this->transEsc('history_saved_searches')?>
-    <span class="pull-right"><i class="fa fa-search"></i></span>
+    <span class="pull-right"><i class="fa fa-fw fa-search"></i></span>
   </a>
   <? if ($user = $this->auth()->isLoggedIn()): ?>
     <a href="<?=$this->url('myresearch-logout')?>" class="list-group-item">
       <?=$this->transEsc("Log Out")?>
-      <span class="pull-right"><i class="fa fa-sign-out"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-sign-out"></i></span>
     </a>
   <? endif; ?>
 </div>
@@ -60,7 +66,7 @@
   <div class="list-group">
     <a href="<?=$this->url('myresearch-changepassword') ?>" class="list-group-item<?=$this->active == 'newpassword' ? ' active' : ''?>">
       <?=$this->transEsc('Change Password') ?>
-      <span class="pull-right"><i class="fa fa-lock"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-lock"></i></span>
     </a>
   </div>
 <? endif; ?>
@@ -69,7 +75,7 @@
   <div class="list-group">
     <a href="<?=$this->url('myresearch-favorites')?>" class="list-group-item<?=$this->active == 'favorites' ? ' active' : ''?>">
       <?=$this->transEsc('Your Favorites')?>
-      <span class="pull-right"><i class="fa fa-star"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-star"></i></span>
     </a>
     <? $lists = $user->getLists() ?>
     <? foreach ($lists as $list): ?>
@@ -80,7 +86,7 @@
     <? endforeach; ?>
     <a href="<?=$this->url('editList', array('id'=>'NEW'))?>" title="<?=$this->transEsc('Create a List') ?>" class="list-group-item">
       <?=$this->transEsc('Create a List') ?>
-      <span class="pull-right"><i class="fa fa-plus"></i></span>
+      <span class="pull-right"><i class="fa fa-fw fa-plus"></i></span>
     </a>
   </div>
 <? endif ?>
diff --git a/themes/bootstrap3/templates/myresearch/newpassword.phtml b/themes/bootstrap3/templates/myresearch/newpassword.phtml
index 224c2ea0c7fc18388c80ad6c2286b090e25356c6..20a9e0f05e94503b5d07e2d5c7f7f160beb73e8c 100644
--- a/themes/bootstrap3/templates/myresearch/newpassword.phtml
+++ b/themes/bootstrap3/templates/myresearch/newpassword.phtml
@@ -13,6 +13,7 @@
 
 <h2><?=$this->transEsc('Create New Password') ?></h2>
 <?=$this->flashmessages() ?>
+
 <? if (!$this->auth()->getManager()->supportsPasswordChange($this->auth_method)): ?>
   <div class="error"><?=$this->transEsc('recovery_new_disabled') ?></div>
 <? elseif (!isset($this->hash)): ?>
@@ -23,7 +24,11 @@
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->username) ?>" name="username"/>
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->auth_method) ?>" name="auth_method"/>
     <?=$this->auth()->getNewPasswordForm() ?>
-    <?=$this->recaptcha()->html($this->useRecaptcha) ?>
+    <div class="form-group">
+      <div class="col-sm-9 col-sm-offset-3">
+        <?=$this->recaptcha()->html($this->useRecaptcha) ?>
+      </div>
+    </div>
     <div class="form-group">
       <div class="col-sm-9 col-sm-offset-3">
         <input class="btn btn-primary" name="submit" type="submit" value="<?=$this->transEsc('Submit')?>" />
diff --git a/themes/bootstrap3/templates/myresearch/profile.phtml b/themes/bootstrap3/templates/myresearch/profile.phtml
index 9ff77a1d02ba2ad3431042d3775024c6ad6ed4f3..a9e32b52793532dfa4641d2e8264282d4dd81ed7 100644
--- a/themes/bootstrap3/templates/myresearch/profile.phtml
+++ b/themes/bootstrap3/templates/myresearch/profile.phtml
@@ -16,6 +16,9 @@
   <div class="<?=$this->layoutClass('mainbody')?>">
     <h2><?=$this->transEsc('Your Profile')?></h2>
     <?=$this->flashmessages();?>
+
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <table class="table table-striped">
       <?
         echo $this->renderArray(
@@ -33,7 +36,7 @@
               ? $this->profile['home_library'] : $this->defaultPickupLocation
         ?>
         <td>
-          <form id="profile_form" class="form-inline" action="" method="post">
+          <form id="profile_form" class="form-inline" method="post">
             <select id="home_library" name="home_library" class="form-control">
               <? foreach ($this->pickup as $lib): ?>
                 <option value="<?=$this->escapeHtmlAttr($lib['locationID'])?>"<?=($selected == $lib['locationID'])?' selected="selected"':''?>><?=$this->escapeHtml($lib['locationDisplay'])?></option>
diff --git a/themes/bootstrap3/templates/myresearch/recover.phtml b/themes/bootstrap3/templates/myresearch/recover.phtml
index 0ecb7cec0f949714f13b47c76e6c624c58bc2c2b..225bf0642ba1cb7259771c8643f5c3ca8b3557fa 100644
--- a/themes/bootstrap3/templates/myresearch/recover.phtml
+++ b/themes/bootstrap3/templates/myresearch/recover.phtml
@@ -3,7 +3,7 @@
 <? if (!$this->auth()->getManager()->supportsRecovery()): ?>
   <div class="error"><?=$this->transEsc('recovery_disabled') ?></div>
 <? else: ?>
-  <form class="form-horizontal" action="" method="post">
+  <form class="form-horizontal" method="post">
     <?=$this->auth()->getPasswordRecoveryForm() ?>
   </form>
 <? endif; ?>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/myresearch/storageretrievalrequests.phtml b/themes/bootstrap3/templates/myresearch/storageretrievalrequests.phtml
index accbfa7066effc2b3c783c0e04c3c7ac034a91e0..08e140cfe3c958743a9be10577d19317d502cde7 100644
--- a/themes/bootstrap3/templates/myresearch/storageretrievalrequests.phtml
+++ b/themes/bootstrap3/templates/myresearch/storageretrievalrequests.phtml
@@ -11,9 +11,11 @@
 
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->recordList)): ?>
       <? if ($this->cancelForm): ?>
-        <form name="cancelForm" class="inline" action="" method="post" id="cancelStorageRetrievalRequest">
+        <form name="cancelForm" class="inline" method="post" id="cancelStorageRetrievalRequest">
           <input type="hidden" id="submitType" name="cancelSelected" value="1"/>
           <input type="hidden" id="cancelConfirm" name="confirm" value="0"/>
           <div class="btn-group">
diff --git a/themes/bootstrap3/templates/record/addtag.phtml b/themes/bootstrap3/templates/record/addtag.phtml
index 8be4b7ec24a4c28788103e8d450acad9c6975d0e..56f14d4a354b80e93fae30f335253b6787877061 100644
--- a/themes/bootstrap3/templates/record/addtag.phtml
+++ b/themes/bootstrap3/templates/record/addtag.phtml
@@ -8,7 +8,7 @@
       . '<li class="active">' . $this->transEsc('Add Tag') . '</li>';
 ?>
 <div class="record">
-  <form action="" method="post" name="tagRecord" class="form-horizontal">
+  <form method="post" name="tagRecord" class="form-horizontal">
     <input type="hidden" name="submit" value="1" />
     <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
     <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
diff --git a/themes/bootstrap3/templates/record/email.phtml b/themes/bootstrap3/templates/record/email.phtml
index ee0bfce24d596d3b6490465855b7a9c463aa7a68..0ac0386d31c8ad51e0bd3fe013085db82f4d4084 100644
--- a/themes/bootstrap3/templates/record/email.phtml
+++ b/themes/bootstrap3/templates/record/email.phtml
@@ -8,7 +8,7 @@
     . '<li class="active">' . $this->transEsc('Email Record') . '</li>';
 ?>
 <?=$this->flashmessages()?>
-<form class="form-horizontal" action="" method="post" name="emailRecord">
+<form class="form-horizontal" method="post" name="emailRecord">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
   <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
   <?=$this->render('Helpers/email-form-fields.phtml')?>
diff --git a/themes/bootstrap3/templates/record/hold.phtml b/themes/bootstrap3/templates/record/hold.phtml
index 44478b734d97494623856fb71cbb0dfb753d3bbd..77071b547084fbc48e09d77531b21aed2649626b 100644
--- a/themes/bootstrap3/templates/record/hold.phtml
+++ b/themes/bootstrap3/templates/record/hold.phtml
@@ -14,7 +14,7 @@
 
 <?=$this->flashmessages()?>
 <div class="hold-form">
-  <form action="" class="form-horizontal" method="post" name="placeHold">
+  <form class="form-horizontal" method="post" name="placeHold">
     <? if (in_array("comments", $this->extraHoldFields)): ?>
       <div class="form-group">
         <label class="col-sm-3 control-label"><?=$this->transEsc("Comments")?>:</label>
diff --git a/themes/bootstrap3/templates/record/illrequest.phtml b/themes/bootstrap3/templates/record/illrequest.phtml
index 6955ae0037c6cfafffd5d6378b54b71074a392fa..49e2074a521c7640f922963fae1cb750f3d661ae 100644
--- a/themes/bootstrap3/templates/record/illrequest.phtml
+++ b/themes/bootstrap3/templates/record/illrequest.phtml
@@ -14,7 +14,7 @@
 
 <?=$this->flashmessages()?>
 <div id="ILLRequestForm" class="storage-retrieval-request-form">
-  <form action="" name="placeILLRequest" class="form-horizontal" method="post">
+  <form name="placeILLRequest" class="form-horizontal" method="post">
 
     <? if (in_array("itemId", $this->extraFields)): ?>
       <div class="form-group">
@@ -31,27 +31,31 @@
       </div>
     <? endif; ?>
 
-    <? if (in_array("pickUpLibrary", $this->extraFields)): ?>
+    <? if (in_array("pickUpLibrary", $this->extraFields) && !empty($this->pickupLibraries)): ?>
       <div class="form-group">
-      <? if (count($this->pickupLibraries) > 1): ?>
-        <?
-          if (isset($this->gatheredDetails['pickUpLibrary']) && $this->gatheredDetails['pickUpLibrary'] !== "") {
-              $selected = $this->gatheredDetails['pickUpLibrary'];
-          } else {
-              $selected = false;
-          }
-        ?>
         <label class="col-sm-3 control-label"><?=$this->transEsc("ill_request_pick_up_library")?>:</label>
         <div class="col-sm-9">
-          <select id="pickupLibrary" name="gatheredDetails[pickUpLibrary]" class="form-control">
-          <? foreach ($this->pickupLibraries as $lib): ?>
-            <option value="<?=$this->escapeHtmlAttr($lib['id'])?>"<?=(($selected === false && isset($lib['isDefault']) && $lib['isDefault']) || $selected === $lib['id']) ? ' selected="selected"' : ''?>>
-              <?=$this->transEsc('library_' . $lib['name'], null, $lib['name'])?>
-            </option>
-          <? endforeach; ?>
-          </select>
+          <? if (count($this->pickupLibraries) > 1): ?>
+            <select id="pickupLibrary" name="gatheredDetails[pickUpLibrary]" class="form-control">
+            <?
+              if (isset($this->gatheredDetails['pickUpLibrary']) && $this->gatheredDetails['pickUpLibrary'] !== "") {
+                  $selected = $this->gatheredDetails['pickUpLibrary'];
+              } else {
+                  $selected = false;
+              }
+            ?>
+            <? foreach ($this->pickupLibraries as $lib): ?>
+              <option value="<?=$this->escapeHtmlAttr($lib['id'])?>"<?=(($selected === false && isset($lib['isDefault']) && $lib['isDefault']) || $selected === $lib['id']) ? ' selected="selected"' : ''?>>
+                <?=$this->transEsc('library_' . $lib['name'], null, $lib['name'])?>
+              </option>
+            <? endforeach; ?>
+            </select>
+          <? else: ?>
+            <? $lib = $this->pickupLibraries[0]; ?>
+            <input type="text" class="form-control" size="40" readonly="readonly" value="<?=$this->escapeHtmlAttr($this->translate('library_' . $lib['name'], null, $lib['name']))?>" />
+            <input type="hidden" id="pickupLibrary" name="gatheredDetails[pickUpLibrary]" value="<?=$this->escapeHtmlAttr($lib['id'])?>" />
+          <? endif; ?>
         </div>
-      <? endif; ?>
       </div>
     <? endif; ?>
 
diff --git a/themes/bootstrap3/templates/record/sms.phtml b/themes/bootstrap3/templates/record/sms.phtml
index 5ebbd895558a4a7e13e6ed23b2a0a2729bcf02e8..8ab364066190301170b8a36a4dff6c8ba9261a60 100644
--- a/themes/bootstrap3/templates/record/sms.phtml
+++ b/themes/bootstrap3/templates/record/sms.phtml
@@ -1,24 +1,22 @@
 <?
   // Set page title.
   $this->headTitle($this->translate('Text this'));
+  echo $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'vendor/libphonenumber.js', 'SET');
 
   // Set up breadcrumbs:
   $this->layout()->breadcrumbs = '<li>' . $this->getLastSearchLink($this->transEsc('Search'), '', '</li> ')
     . '<li>' . $this->recordLink()->getBreadcrumb($this->driver) . '</li> '
     . '<li class="active">' . $this->transEsc('Text this') . '</li>';
-
-  if ($this->validation == 'US') {
-    $phone_pattern = '^(\([2-9]\d{2}\)|[2-9]\d{2})[ -\.]?[2-9]\d{2}[-\.]?\d{4}$';
-  }
 ?>
 <?=$this->flashmessages()?>
-<form method="post" action="" name="smsRecord" class="form-horizontal">
+<form method="post" name="smsRecord" class="form-horizontal">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
   <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
   <div class="form-group">
     <label class="col-sm-3 control-label" for="sms_to"><?=$this->transEsc('Number')?>:</label>
     <div class="col-sm-9">
-      <input id="sms_to" type="tel"<? if(isset($phone_pattern)): ?> pattern="<?=$phone_pattern ?>"<? endif ?> name="to" placeholder="<?=$this->transEsc('sms_phone_number')?>" class="form-control" oninvalid="$('#modal .fa-spinner').remove()"/>
+      <input id="sms_to" type="tel" name="to" placeholder="<?=$this->transEsc('sms_phone_number')?>" class="form-control"/>
+      <div class="help-block with-errors"></div>
     </div>
   </div>
   <? if (is_array($this->carriers) && count($this->carriers) > 1): ?>
@@ -37,10 +35,14 @@
     <? $keys = is_array($this->carriers) ? array_keys($this->carriers) : array(); ?>
     <input type="hidden" name="provider" value="<?=isset($keys[0]) ? $keys[0] : ''?>" />
   <? endif; ?>
-  <?=$this->recaptcha()->html($this->useRecaptcha) ?>
   <div class="form-group">
     <div class="col-sm-9 col-sm-offset-3">
-      <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Send Text')?>"/>
+      <?=$this->recaptcha()->html($this->useRecaptcha) ?>
+    </div>
+  </div>
+  <div class="form-group">
+    <div class="col-sm-9 col-sm-offset-3">
+      <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Send Text')?>"<? if(isset($this->validation) && !empty($this->validation)):?> onClick="return phoneNumberFormHandler('sms_to', '<?=$this->validation ?>')"<? endif; ?>/>
     </div>
   </div>
 </form>
diff --git a/themes/bootstrap3/templates/record/storageretrievalrequest.phtml b/themes/bootstrap3/templates/record/storageretrievalrequest.phtml
index eae428356d59a6637d42f0ff04d6c0d988786baf..1d273bd608290393a68ff61e844d4a825b3e215e 100644
--- a/themes/bootstrap3/templates/record/storageretrievalrequest.phtml
+++ b/themes/bootstrap3/templates/record/storageretrievalrequest.phtml
@@ -14,7 +14,7 @@
 
 <?=$this->flashmessages()?>
 <div class="storage-retrieval-request-form">
-  <form name="placeStorageRetrievalRequest" action="" class="form-horizontal" method="post">
+  <form name="placeStorageRetrievalRequest" class="form-horizontal" method="post">
     <? if (in_array("item-issue", $this->extraFields)): ?>
       <div class="form-group">
         <div class="col-sm-3 controls">
diff --git a/themes/bootstrap3/templates/record/taglist.phtml b/themes/bootstrap3/templates/record/taglist.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..1999468d381e7db5e07109fa8284d2bf2abee9aa
--- /dev/null
+++ b/themes/bootstrap3/templates/record/taglist.phtml
@@ -0,0 +1,26 @@
+<div id="tagList"<?=$loggedin ? ' class="loggedin"' : ''?>>
+  <? if (count($tagList) > 0): ?>
+    <? foreach ($tagList as $tag): ?>
+      <? $is_me = isset($tag['is_me']) && !is_null($tag['is_me']) ? $tag['is_me'] : false; ?>
+      <div class="tag<?=$is_me ? ' selected' : ''?>">
+        <a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag['tag'])?>"><?=$this->escapeHtml($tag['tag'])?></a>
+        <? if($loggedin): ?>
+          <form method="POST" action="<?=$this->recordLink()->getActionUrl($this->driver, $is_me ? 'DeleteTag' : 'AddTag') ?>" class="tag-form">
+            <input type="hidden" name="tag" value="<?=$this->escapeHtmlAttr($tag['tag'])?>"/>
+            <button type="submit" class="badge" onClick="ajaxTagUpdate('<?=$this->escapeHtmlAttr($tag['tag'])?>', <?=$is_me ? 'true' : 'false' ?>);return false;"><?=$this->escapeHtml($tag['cnt']) ?>
+            <? if($is_me): ?>
+              <i class="fa fa-close"></i>
+            <? else: ?>
+              <i class="fa fa-plus"></i>
+            <? endif; ?>
+            </button>
+          </form>
+        <? else: ?>
+          <span class="badge"><?=$this->escapeHtml($tag['cnt'])?></span>
+        <? endif; ?>
+      </div>
+    <? endforeach; ?>
+  <? else: ?>
+    <?=$this->transEsc('No Tags')?>, <?=$this->transEsc('Be the first to tag this record')?>!
+  <? endif; ?>
+</div>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/record/view.phtml b/themes/bootstrap3/templates/record/view.phtml
index aca9e7e39810970bf36d02d20a73330e4a311fdd..5c51ca1750b95953ecf499f29f6afd03987926bd 100644
--- a/themes/bootstrap3/templates/record/view.phtml
+++ b/themes/bootstrap3/templates/record/view.phtml
@@ -22,7 +22,7 @@
   <ul class="pager hidden-print">
     <? if ($this->scrollData['previousRecord']): ?>
       <li>
-        <a href="<?=$this->recordLink()->getUrl($this->scrollData['previousRecord'])?>" title="<?=$this->transEsc('Previous Search Result')?>">&laquo; <?=$this->transEsc('Prev')?></a>
+        <a href="<?=$this->recordLink()->getUrl($this->scrollData['previousRecord'])?>" title="<?=$this->transEsc('Previous Search Result')?>" rel="nofollow">&laquo; <?=$this->transEsc('Prev')?></a>
       </li>
     <? else: ?>
       <li class="disabled"><a href="#">&laquo; <?=$this->transEsc('Prev')?></a></li>
@@ -30,7 +30,7 @@
     #<?=$this->localizedNumber($this->scrollData['currentPosition']) . ' ' . $this->transEsc('of') . ' ' . $this->localizedNumber($this->scrollData['resultTotal']) . ' ' . $this->transEsc('results') ?>
     <? if ($this->scrollData['nextRecord']): ?>
       <li>
-        <a href="<?=$this->recordLink()->getUrl($this->scrollData['nextRecord'])?>" title="<?=$this->transEsc('Next Search Result')?>"><?=$this->transEsc('Next')?> &raquo;</a>
+        <a href="<?=$this->recordLink()->getUrl($this->scrollData['nextRecord'])?>" title="<?=$this->transEsc('Next Search Result')?>" rel="nofollow"><?=$this->transEsc('Next')?> &raquo;</a>
       </li>
     <? else: ?>
       <li class="disabled"><a href="#"><?=$this->transEsc('Next')?> &raquo;</a></li>
diff --git a/themes/bootstrap3/templates/search/advanced/build_page.phtml b/themes/bootstrap3/templates/search/advanced/build_page.phtml
index bd51c3e30ca9ea9df0b21fdbb4096cb5fce132e6..35a717fe42aa0c0c632322a9270b2221ce609ca9 100644
--- a/themes/bootstrap3/templates/search/advanced/build_page.phtml
+++ b/themes/bootstrap3/templates/search/advanced/build_page.phtml
@@ -1,11 +1,23 @@
 $(document).ready(function() {
+  // Switch and prepare for JS mode
+  $('#groupJoin').addClass('hidden');
+  $('#groupPlaceHolder').removeClass('hidden');
+  $('#new_search_template').addClass('hidden').detach().appendTo('[role="main"]');
+  $('#new_search_template').find('.search').removeAttr('id');
+  $('#new_search_template').find('input').removeAttr('value');
+  $('#new_search_template').find('option').removeAttr('selected');
+  $('#new_group_template').addClass('hidden').detach().appendTo('[role="main"]');
+  $('#new_group_template').find('.group').removeAttr('id');
+  $('#new_group_template .search').remove();
+  $('#advSearchForm .no-js').remove();
+  // Build page
   <? if (isset($this->searchDetails) && is_object($this->searchDetails)): ?>
     <? foreach ($this->searchDetails->getQueries() as $searchGroup): ?>
       <? $i = 0; foreach ($searchGroup->getQueries() as $search): ?>
         <? if (++$i == 1): ?>
           var new_group = addGroup('<?=addslashes($search->getString())?>', '<?=addslashes($search->getHandler())?>', '<?=$searchGroup->isNegated() ? 'NOT' : $searchGroup->getOperator()?>');
         <? else: ?>
-          addSearch(new_group, '<?=addslashes($search->getString())?>', '<?=addslashes($search->getHandler())?>');
+          addSearch(new_group, {term:'<?=addslashes($search->getString())?>', field:'<?=addslashes($search->getHandler())?>'});
         <? endif; ?>
       <? endforeach; ?>
     <? endforeach; ?>
@@ -14,4 +26,4 @@ $(document).ready(function() {
     addSearch(group);
     addSearch(group);
   <? endif; ?>
-});
+});
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/search/advanced/build_page_eds.phtml b/themes/bootstrap3/templates/search/advanced/build_page_eds.phtml
index f9e50cf587a9d063d0cd5386f2203e851b8a8b30..0ebe141a4b27b01436d8f0681b0627c273755edd 100644
--- a/themes/bootstrap3/templates/search/advanced/build_page_eds.phtml
+++ b/themes/bootstrap3/templates/search/advanced/build_page_eds.phtml
@@ -1,4 +1,15 @@
 $(document).ready(function() {
+  // Switch and prepare for JS mode
+  $('#groupPlaceHolder').addClass('hidden');
+  $('#new_search_template').addClass('hidden').detach().appendTo('[role="main"]');
+  $('#new_search_template').find('.search').removeAttr('id');
+  $('#new_search_template').find('input').removeAttr('value');
+  $('#new_search_template').find('option').removeAttr('selected');
+  $('#new_group_template').addClass('hidden').detach().appendTo('[role="main"]');
+  $('#new_group_template .search').remove();
+  $('#advSearchForm .no-js').remove();
+  $('#groupJoin').remove();
+  // Build page
   <? if (isset($this->searchDetails) && is_object($this->searchDetails)): ?>
     <? foreach ($this->searchDetails->getQueries() as $searchGroup): ?>
       <? $i = 0; foreach ($searchGroup->getQueries() as $search): ?>
@@ -9,11 +20,11 @@ $(document).ready(function() {
             '<?=$searchGroup->isNegated() ? 'NOT' : $searchGroup->getOperator()?>'
           );
         <? else: ?>
-          addSearch(new_group,
-            '<?=addslashes($search->getString())?>',
-            '<?=addslashes($search->getHandler())?>',
-            '<?=addslashes($search->getOperator())?>'
-          );
+          addSearch(new_group, {
+            term :'<?=addslashes($search->getString())?>',
+            field:'<?=addslashes($search->getHandler())?>',
+            op   :'<?=addslashes($search->getOperator())?>'
+          });
         <? endif; ?>
       <? endforeach; ?>
     <? endforeach; ?>
@@ -22,5 +33,4 @@ $(document).ready(function() {
     addSearch(new_group);
     addSearch(new_group);
   <? endif; ?>
-
 });
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/search/advanced/globals.phtml b/themes/bootstrap3/templates/search/advanced/globals.phtml
deleted file mode 100644
index e880ce285355bd18c24ea0743eefcfd2a3fe7227..0000000000000000000000000000000000000000
--- a/themes/bootstrap3/templates/search/advanced/globals.phtml
+++ /dev/null
@@ -1,15 +0,0 @@
-var searchFields = new Array();
-<? foreach ($this->options->getAdvancedHandlers() as $searchVal => $searchDesc): ?>
-  searchFields["<?=$this->escapeHtml($searchVal)?>"] = "<?=$this->transEsc($searchDesc)?>";
-<? endforeach; ?>
-
-var searchJoins = new Array();
-searchJoins["AND"]  = "<?=$this->transEsc("search_AND")?>";
-searchJoins["OR"]   = "<?=$this->transEsc("search_OR")?>";
-searchJoins["NOT"]  = "<?=$this->transEsc("search_NOT")?>";
-
-var addSearchString = "<?=$this->transEsc("add_search")?>";
-var deleteSearchGroupString = "<?=$this->transEsc("del_search")?>";
-var searchFieldLabel = "<?=$this->transEsc("in")?>";
-var searchLabel      = "<?=$this->transEsc("adv_search_label")?>";
-var searchMatch      = "<?=$this->transEsc("search_match")?>";
diff --git a/themes/bootstrap3/templates/search/advanced/layout.phtml b/themes/bootstrap3/templates/search/advanced/layout.phtml
index 6e2520629b19c140499c4688079ea814eb45bdc2..563c1a1ab179708c127167e1672f9b35e512e114 100644
--- a/themes/bootstrap3/templates/search/advanced/layout.phtml
+++ b/themes/bootstrap3/templates/search/advanced/layout.phtml
@@ -27,20 +27,36 @@
     $hasDefaultsApplied = $searchDetails = $searchFilters = $groups = false;
   }
 
-  // Set up Javascript:
-  // Step 1: Define our search arrays so they are usuable in the javascript
-  $this->headScript()->appendScript($this->render('search/advanced/globals.phtml'));
-  // Step 2: Call the javascript to make use of the above
+  // Step 1: Load the javascript
   $this->headScript()->appendFile(
     isset($this->advancedSearchJsOverride) ? $this->advancedSearchJsOverride : 'advanced_search.js'
   );
-  // Step 3: Build the page
+  // Step 2: Build the page
   $this->headScript()->appendScript(
     $this->partial(
       isset($this->buildPageOverride) ? $this->buildPageOverride : 'search/advanced/build_page.phtml',
-      array('searchDetails' => $searchDetails)
+      ['options' => $this->options, 'searchDetails' => $searchDetails]
     )
   );
+
+  // Collect previous search queries
+  $setSearchGroups = [];
+  $setGroupCount = 0;
+  $setQueries = [];
+  if (isset($searchDetails) && is_object($searchDetails)) {
+    foreach ($searchDetails->getQueries() as $group=>$searchGroup) {
+      $setSearchGroups[$group] = $searchGroup->isNegated() ? 'NOT' : $searchGroup->getOperator();
+      if ($setGroupCount < $group) {
+        $setGroupCount = $group;
+      }
+      if (!isset($setQueries[$group])) {
+        $setQueries[$group] = [];
+      }
+      foreach ($searchGroup->getQueries() as $search) {
+        $setQueries[$group][] = $search;
+      }
+    }
+  }
 ?>
 
 <?=$this->flashmessages()?>
@@ -50,7 +66,7 @@
       <input type="hidden" name="sort" value="relevance">
       <div class="clearfix">
         <p class="lead pull-left"><?=$this->transEsc('Advanced Search')?></p>
-        <div id="groupJoin" class="form-inline pull-right hidden">
+        <div id="groupJoin" class="form-inline pull-right">
           <label for="groupJoinOptions"><?=$this->transEsc("search_match")?>:</label>
           <select id="groupJoinOptions" name="join" class="form-control">
             <option value="AND"<? if($searchDetails && $searchDetails->getOperator()=='ALL'):?> selected<?endif?>><?= $this->transEsc('group_AND') ?></option>
@@ -58,13 +74,81 @@
           </select>
         </div>
       </div>
-      <span id="groupPlaceHolder">
+      <? /* An empty div. This is the target for the javascript that builds this screen */ ?>
+      <span id="groupPlaceHolder" class="hidden">
         <i class="fa fa-plus-circle"></i> <a href="#" onClick="addGroup()"><?= $this->transEsc('add_search_group') ?></a>
       </span>
-      <input class="btn btn-primary pull-right" type="submit" value="<?= $this->transEsc('Find')?>">
+      <? /* fallback to a fixed set of search groups/fields if JavaScript is turned off */ ?>
+      <div class="no-js">
+        <? if(!empty($this->formOverride)): ?>
+          <?=$this->formOverride ?>
+        <? else: ?>
+          <? for($group=0 ; $group<3 || $group<=$setGroupCount ; $group++): ?>
+            <? if($group == 0): ?>
+              <div id="new_group_template">
+            <? endif; ?>
+            <div id="group<?=$group ?>" class="group row">
+              <a href="#" class="group-close hidden" title="<?=$this->transEsc("del_search")?>">&times;</a>
+              <div class="col-sm-9">
+                <div class="row">
+                  <div class="col-sm-3">
+                    <label class="help-block"><?=$this->transEsc("adv_search_label")?>:</label>
+                  </div>
+                  <div class="col-sm-9">
+                    <? for($search=0 ; $search<3 || (isset($setQueries[$group]) && $search<count($setQueries[$group])) ; $search++): ?>
+                      <? if($group == 0 && $search == 0): ?>
+                        <div id="new_search_template">
+                      <? endif; ?>
+                      <div id="search<?=$group.'_'.$search ?>" class="search">
+                        <div class="row">
+                          <div class="col-sm-7 left">
+                            <input name="lookfor<?=$group ?>[]" id="search_lookfor<?=$group.'_'.$search ?>" class="form-control" type="text"<?if(isset($setQueries[$group][$search])):?> value="<?=$this->escapeHtml($setQueries[$group][$search]->getString())?>"<?endif;?>>
+                          </div>
+                          <div class="col-sm-4 middle">
+                            <select class="type form-control" name="type<?=$group ?>[]">
+                              <? foreach ($this->options->getAdvancedHandlers() as $searchVal => $searchDesc): ?>
+                                <option value="<?=$this->escapeHtml($searchVal)?>"<?if(isset($setQueries[$group][$search]) && $searchVal == $setQueries[$group][$search]->getHandler()):?> selected<?endif;?>><?=$this->transEsc($searchDesc)?></option>
+                              <? endforeach; ?>
+                            </select>
+                          </div>
+                          <div class="col-sm-1 close hidden">
+                            <a class="help-block" href="#">&times;</a>
+                          </div>
+                        </div>
+                      </div>
+                      <? if($group == 0 && $search == 0): ?>
+                          </div>
+                        <i class="fa fa-plus-circle search_place_holder hidden"></i> <a href="#" class="add_search_link hidden"><?=$this->transEsc("add_search")?></a>
+                      <? endif; ?>
+                    <? endfor; ?>
+                  </div>
+                </div>
+              </div>
+              <div class="col-sm-3 match">
+                <label class="search_bool"><?=$this->transEsc("search_match")?>:&nbsp;</label>
+                <select name="bool<?=$group ?>[]" id="search_bool<?=$group ?>" class="form-control">
+                  <option value="AND"<? if(isset($setSearchGroups[$group]) && 'AND' == $setSearchGroups[$group]):?> selected<?endif;?>><?=$this->transEsc("search_AND")?></option>
+                  <option value="OR"<? if(isset($setSearchGroups[$group]) && 'OR' == $setSearchGroups[$group]):?> selected<?endif;?>><?=$this->transEsc("search_OR")?></option>
+                  <option value="NOT"<? if(isset($setSearchGroups[$group]) && 'NOT' == $setSearchGroups[$group]):?> selected<?endif;?>><?=$this->transEsc("search_NOT")?></option>
+                </select>
+              </div>
+            </div>
+            <? if($group == 0): ?>
+              </div>
+            <? endif; ?>
+          <? endfor; ?>
+        <? endif; ?>
+      </div>
+      <div class="clearfix">
+        <input class="btn btn-default clear-btn" type="button" value="<?= $this->transEsc('Clear')?>">
+        <input class="btn btn-primary pull-right" type="submit" value="<?= $this->transEsc('Find')?>">
+      </div>
       <? if (isset($this->extraAdvancedControls)): ?>
         <?=$this->extraAdvancedControls ?>
-        <input class="btn btn-primary pull-right" type="submit" value="<?= $this->transEsc('Find')?>"/>
+        <div class="clearfix">
+          <input class="btn btn-default clear-btn" type="button" value="<?= $this->transEsc('Clear')?>">
+          <input class="btn btn-primary pull-right" type="submit" value="<?= $this->transEsc('Find')?>">
+        </div>
       <? endif; ?>
     </div>
 
diff --git a/themes/bootstrap3/templates/search/advanced/solr.phtml b/themes/bootstrap3/templates/search/advanced/solr.phtml
index fa7c63a218e3d38748d44b7ca4e32e4ff10150b2..008881dc79d4df72fc470dde9e4b06e41f266d18 100644
--- a/themes/bootstrap3/templates/search/advanced/solr.phtml
+++ b/themes/bootstrap3/templates/search/advanced/solr.phtml
@@ -1,42 +1,44 @@
 <? if (!empty($this->facetList) || !empty($this->checkboxFacets)): ?>
-  <fieldset>
-    <legend><?=$this->transEsc('Limit To')?></legend>
-    <? if (!empty($this->checkboxFacets)): ?>
-      <?=$this->render('search/advanced/checkbox-filters.phtml')?>
-    <? endif; ?>
-    <div class="row">
-      <? foreach ($this->facetList as $field => $list): ?>
-        <div class="col-sm-<?=floor(12/count($this->facetList)) ?>">
-          <label for="limit_<?=$this->escapeHtmlAttr(str_replace(' ', '', $field))?>"><?=$this->transEsc($list['label'])?>:</label>
-          <select class="form-control" id="limit_<?=$this->escapeHtmlAttr(str_replace(' ', '', $field))?>" name="filter[]" multiple="multiple" size="10">
-            <? if (is_array($this->hierarchicalFacets) && in_array($field, $this->hierarchicalFacets)): ?>
-              <? foreach ($list['list'] as $value): ?>
-                <? $display = str_pad('', 4 * $value['level'] * 6, '&nbsp;', STR_PAD_LEFT) . $this->escapeHtml($value['displayText']); ?>
-                <option value="<?=$this->escapeHtmlAttr(($value['operator'] == 'OR' ? '~' : '') . $field . ':"' . $value['value'] . '"')?>"<?=(isset($value['selected']) && $value['selected'])?' selected="selected"':''?>><?=$display?></option>
-              <? endforeach; ?>
-            <? else: ?>
-              <?
-              // Sort the current facet list alphabetically; we'll use this data
-              // along with the foreach below to display facet options in the
-              // correct order.
-              $sorted = array();
-              foreach ($list['list'] as $i => $value) {
-                if (!empty($value['displayText'])) {
-                  $sorted[$i] = $value['displayText'];
+  <div class="row">
+    <fieldset class="col-sm-12">
+      <legend><?=$this->transEsc('Limit To')?></legend>
+      <? if (!empty($this->checkboxFacets)): ?>
+        <?=$this->render('search/advanced/checkbox-filters.phtml')?>
+      <? endif; ?>
+      <div class="row">
+        <? foreach ($this->facetList as $field => $list): ?>
+          <div class="col-sm-<?=floor(12/count($this->facetList)) ?>">
+            <label for="limit_<?=$this->escapeHtmlAttr(str_replace(' ', '', $field))?>"><?=$this->transEsc($list['label'])?>:</label>
+            <select class="form-control" id="limit_<?=$this->escapeHtmlAttr(str_replace(' ', '', $field))?>" name="filter[]" multiple="multiple" size="10">
+              <? if (is_array($this->hierarchicalFacets) && in_array($field, $this->hierarchicalFacets)): ?>
+                <? foreach ($list['list'] as $value): ?>
+                  <? $display = str_pad('', 4 * $value['level'] * 6, '&nbsp;', STR_PAD_LEFT) . $this->escapeHtml($value['displayText']); ?>
+                  <option value="<?=$this->escapeHtmlAttr(($value['operator'] == 'OR' ? '~' : '') . $field . ':"' . $value['value'] . '"')?>"<?=(isset($value['selected']) && $value['selected'])?' selected="selected"':''?>><?=$display?></option>
+                <? endforeach; ?>
+              <? else: ?>
+                <?
+                // Sort the current facet list alphabetically; we'll use this data
+                // along with the foreach below to display facet options in the
+                // correct order.
+                $sorted = array();
+                foreach ($list['list'] as $i => $value) {
+                  if (!empty($value['displayText'])) {
+                    $sorted[$i] = $value['displayText'];
+                  }
                 }
-              }
-              natcasesort($sorted);
-              ?>
-              <? foreach ($sorted as $i => $display): ?>
-                <? $value = $list['list'][$i]; ?>
-                <option value="<?=$this->escapeHtmlAttr(($value['operator'] == 'OR' ? '~' : '') . $field . ':"' . $value['value'] . '"')?>"<?=(isset($value['selected']) && $value['selected'])?' selected="selected"':''?>><?=$this->escapeHtml($display)?></option>
-              <? endforeach; ?>
-            <? endif; ?>
-          </select>
-        </div>
-      <? endforeach; ?>
-    </div>
-  </fieldset>
+                natcasesort($sorted);
+                ?>
+                <? foreach ($sorted as $i => $display): ?>
+                  <? $value = $list['list'][$i]; ?>
+                  <option value="<?=$this->escapeHtmlAttr(($value['operator'] == 'OR' ? '~' : '') . $field . ':"' . $value['value'] . '"')?>"<?=(isset($value['selected']) && $value['selected'])?' selected="selected"':''?>><?=$this->escapeHtml($display)?></option>
+                <? endforeach; ?>
+              <? endif; ?>
+            </select>
+          </div>
+        <? endforeach; ?>
+      </div>
+    </fieldset>
+  </div>
 <? endif; ?>
 <div class="row">
   <? if (isset($this->illustratedLimit)): ?>
diff --git a/themes/bootstrap3/templates/search/email.phtml b/themes/bootstrap3/templates/search/email.phtml
index 5366ddb993ee1527c22f9f303feda72a2949c6ff..5f4b5b194979c5563b849f6424af725506f1cb71 100644
--- a/themes/bootstrap3/templates/search/email.phtml
+++ b/themes/bootstrap3/templates/search/email.phtml
@@ -7,7 +7,7 @@
     '<li class="active">' . $this->transEsc('Email this Search') . '</li>';
 ?>
 <?=$this->flashmessages()?>
-<form class="form-horizontal" action="" method="post"  name="emailSearch">
+<form class="form-horizontal" method="post"  name="emailSearch">
   <input type="hidden" name="url" value="<?=$this->escapeHtmlAttr($this->url)?>" />
   <?=$this->render('Helpers/email-form-fields.phtml')?>
 </form>
diff --git a/themes/bootstrap3/templates/search/newitem.phtml b/themes/bootstrap3/templates/search/newitem.phtml
index 9b0eed97d10e2422ff7f9282852c9c6611e5b8ef..a1443f9948b3c6fa9c5bb39aed3cc0ce477c2b8a 100644
--- a/themes/bootstrap3/templates/search/newitem.phtml
+++ b/themes/bootstrap3/templates/search/newitem.phtml
@@ -6,7 +6,7 @@
     $this->layout()->breadcrumbs = '<li class="active">' . $this->transEsc('New Items') . '</li>';
 ?>
 <h2><?=$this->transEsc('Find New Items')?></h2>
-<form method="get" action="" class="form-horizontal">
+<form method="get" class="form-horizontal">
   <div class="form-group">
     <label class="col-sm-3 control-label"><?=$this->transEsc('Range')?>:</label>
     <div class="col-sm-9">
diff --git a/themes/bootstrap3/templates/search/reserves.phtml b/themes/bootstrap3/templates/search/reserves.phtml
index 803e04b15b85ebbb1feb252880c04f67f0b39023..8984ceca912fb750b252a2b4d9ddaa2f3a94f2e0 100644
--- a/themes/bootstrap3/templates/search/reserves.phtml
+++ b/themes/bootstrap3/templates/search/reserves.phtml
@@ -6,7 +6,7 @@
     $this->layout()->breadcrumbs = '<li class="active">' . $this->transEsc('Reserves') . '</li>';
 ?>
 <h2><?=$this->transEsc('Search For Items on Reserve')?></h2>
-<form method="get" action="" name="searchForm" class="form-horizontal">
+<form method="get" name="searchForm" class="form-horizontal">
   <? if (is_array($this->courseList)): ?>
     <div class="form-group">
       <label for="reserves_by_course" class="col-sm-2 control-label"><?=$this->transEsc('By Course')?>:</label>
diff --git a/themes/bootstrap3/templates/search/reservessearch.phtml b/themes/bootstrap3/templates/search/reservessearch.phtml
index 64f1713f555ab7432c7a4ba982427af72f521eb4..80ebaffb142fa3dc904ab0584c793a838b9b3a06 100644
--- a/themes/bootstrap3/templates/search/reservessearch.phtml
+++ b/themes/bootstrap3/templates/search/reservessearch.phtml
@@ -12,7 +12,7 @@
 <div class="row">
   <div class="<?=$this->layoutClass('mainbody')?>">
     <h3><?=$this->transEsc('Search For Items on Reserve')?></h3>
-    <form class="form-inline" method="get" action="" name="reservesSearchForm">
+    <form class="form-inline" method="get" name="reservesSearchForm">
       <label for="reservesSearchForm_lookfor"><?=$this->transEsc("Your search terms")?></label>
       <input id="reservesSearchForm_lookfor" type="text" name="lookfor" size="40" value="<?=$this->escapeHtmlAttr($reservesLookfor)?>" <?=$this->searchOptions('SolrReserves')->autocompleteEnabled() ? ' class="autocomplete searcher:SolrReserves type:Reserves"' : ''?> />
       <input class="btn btn-default" type="submit" name="submit" value="<?=$this->transEsc("Find")?>"/>
diff --git a/themes/bootstrap3/templates/search/results.phtml b/themes/bootstrap3/templates/search/results.phtml
index 5311847d6be27ca0b4a9f74be7c02afd7eb3b9f9..ceefb15f49bda913d1b04abe29e3fa0054d6b1cb 100644
--- a/themes/bootstrap3/templates/search/results.phtml
+++ b/themes/bootstrap3/templates/search/results.phtml
@@ -108,15 +108,17 @@
 
       <div class="searchtools hidden-print">
         <strong><?=$this->transEsc('Search Tools')?>:</strong>
-        <i class="fa fa-bell"></i> <a href="<?=$this->results->getUrlQuery()->setViewParam('rss')?>"><?=$this->transEsc('Get RSS Feed')?></a>
+        <a href="<?=$this->results->getUrlQuery()->setViewParam('rss')?>"><i class="fa fa-bell"></i> <?=$this->transEsc('Get RSS Feed')?></a>
         &mdash;
-        <i class="fa fa-envelope"></i> <a href="<?=$this->url('search-email')?>" class="mailSearch modal-link" id="mailSearch<?=$this->escapeHtmlAttr($this->results->getSearchId())?>" title="<?=$this->transEsc('Email this Search')?>"><?=$this->transEsc('Email this Search')?></a>
-        &mdash;
-        <? if (is_numeric($this->results->getSearchId())): ?>
-          <? if ($this->results->isSavedSearch()): ?>
-            <i class="fa fa-remove"></i> <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search_remove')?></a>
-          <? else: ?>
-            <i class="fa fa-save"></i> <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search')?></a>
+        <a href="<?=$this->url('search-email')?>" class="mailSearch modal-link" id="mailSearch<?=$this->escapeHtmlAttr($this->results->getSearchId())?>" title="<?=$this->transEsc('Email this Search')?>"><i class="fa fa-envelope"></i> <?=$this->transEsc('Email this Search')?></a>
+        <? if (($account = $this->auth()->getManager()) && $account->loginEnabled()): // hide save option if login disabled ?>
+          &mdash;
+          <? if (is_numeric($this->results->getSearchId())): ?>
+            <? if ($this->results->isSavedSearch()): ?>
+              <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>"><i class="fa fa-remove"></i> <?=$this->transEsc('save_search_remove')?></a>
+            <? else: ?>
+              <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>"><i class="fa fa-save"></i> <?=$this->transEsc('save_search')?></a>
+            <? endif; ?>
           <? endif; ?>
         <? endif; ?>
       </div>
diff --git a/themes/bootstrap3/templates/search/searchbox.phtml b/themes/bootstrap3/templates/search/searchbox.phtml
index 3415ae42fe55dfbccc35e4d0953f1db44c01b5f5..3bef0e32beb980c45a6086a584cf43ca3cb6b642 100644
--- a/themes/bootstrap3/templates/search/searchbox.phtml
+++ b/themes/bootstrap3/templates/search/searchbox.phtml
@@ -44,7 +44,7 @@
     <? endif; ?>
     <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i> <?=$this->transEsc("Find")?></button>
     <? if ($advSearch): ?>
-      <a href="<?=$this->url($advSearch)?>" class="btn btn-link"><?=$this->transEsc("Advanced")?></a>
+      <a href="<?=$this->url($advSearch)?>" class="btn btn-link" rel="nofollow"><?=$this->transEsc("Advanced")?></a>
     <? endif; ?>
 
     <? $shards = $options->getShards(); if ($options->showShardCheckboxes() && !empty($shards)): ?>
diff --git a/themes/bootstrap3/templates/vudl/grid.phtml b/themes/bootstrap3/templates/vudl/grid.phtml
index 9cf901d1984fb5b94fa741ed78ee3db601d1edba..46aad164f81e6552a416f177c2df4502b61059ba 100644
--- a/themes/bootstrap3/templates/vudl/grid.phtml
+++ b/themes/bootstrap3/templates/vudl/grid.phtml
@@ -4,7 +4,6 @@
   // Multiple breadcrumbs
   $this->layout()->breadcrumbs = $this->parents;
   $this->layout()->title = $this->details['title']['value'];
-  $this->layout()->breadcrumbEnd = $this->breadcrumbEnd;
   $this->layout()->from = $this->from;
 
   // Facebook image meta
diff --git a/themes/bootstrap3/templates/vudl/navigation.phtml b/themes/bootstrap3/templates/vudl/navigation.phtml
index 7e3d52a0ef2f6c82df9b1ceb58b2b28fdfba5d80..06a7d7f677918e92aefc0188e69d9eccf1d407c2 100644
--- a/themes/bootstrap3/templates/vudl/navigation.phtml
+++ b/themes/bootstrap3/templates/vudl/navigation.phtml
@@ -47,7 +47,10 @@
     <? endif; ?>
     <li class="btn-group">
       <a href="javascript:prevPage()" class="turn-button btn btn-default<? if($this->outline['counts'][$this->initList] <= 1): ?> hidden<? endif; ?>">Prev Page</a>
-      <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="grid-btn btn btn-default"><i class="fa fa-th"></i></a>
+      <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="grid-btn btn btn-default">
+        <i class="fa fa-th hidden-xs"></i>
+        <span class="visible-xs-inline"><?=$this->transEsc('grid_view') ?></span>
+      </a>
       <a href="javascript:nextPage()" class="turn-button btn btn-default<? if($this->outline['counts'][$this->initList] <= 1): ?> hidden<? endif; ?>">Next Page</a>
     </li>
     <? if(count($uniqueParents) > 1): ?>
diff --git a/themes/bootstrap3/templates/vudl/record.phtml b/themes/bootstrap3/templates/vudl/record.phtml
index 6eca09053d34e815153e620ef67ebac37d681493..c038ccc2bd287445c6c2bd187b33d0ac27e416bc 100644
--- a/themes/bootstrap3/templates/vudl/record.phtml
+++ b/themes/bootstrap3/templates/vudl/record.phtml
@@ -4,7 +4,6 @@
   // Multiple breadcrumbs
   $this->layout()->breadcrumbs = $this->parents;
   $this->layout()->title = $this->details['title']['value'];
-  $this->layout()->breadcrumbEnd = $this->breadcrumbEnd;
   $this->layout()->from = $this->from;
 
   // Get first list name
diff --git a/themes/bootstrap3/templates/vudl/views/audio.phtml b/themes/bootstrap3/templates/vudl/views/audio.phtml
index 79f5ff9be65d59782ea1fcce9bb7c67d8b87ab27..7749d354cdde00098e5a78135769f085fdbc268f 100644
--- a/themes/bootstrap3/templates/vudl/views/audio.phtml
+++ b/themes/bootstrap3/templates/vudl/views/audio.phtml
@@ -14,6 +14,7 @@
     }
   };
   $(document).ready(function() {
+    currentTab = "master-tab";
     $('#view .nav-tabs li.opener a').addClass('hidden');
   });
 </script>
diff --git a/themes/bootstrap3/templates/vudl/views/download.phtml b/themes/bootstrap3/templates/vudl/views/download.phtml
index efd3d9eddc617e1fd2b7f15182db46ca9da7331e..18ca9ca6f1afa4c02d53f0be1a78a9950bbe47e1 100644
--- a/themes/bootstrap3/templates/vudl/views/download.phtml
+++ b/themes/bootstrap3/templates/vudl/views/download.phtml
@@ -4,6 +4,7 @@
     $('#file-download').attr("action", data['master']);
   };
   $(document).ready(function() {
+    currentTab = "master-tab";
     $('#view .nav-tabs li.opener a').addClass('hidden');
   });
 </script>
diff --git a/themes/bootstrap3/templates/vudl/views/page.phtml b/themes/bootstrap3/templates/vudl/views/page.phtml
index 21c3b3497a2a2253a2eb3d19c10a42f3f6cf438a..c10122ef94b694154e1d499c3606e81841189bc8 100644
--- a/themes/bootstrap3/templates/vudl/views/page.phtml
+++ b/themes/bootstrap3/templates/vudl/views/page.phtml
@@ -60,7 +60,6 @@
     $(window).scroll(resizeZoom);
     $(window).resize(resizeZoom);
     resizeZoom();
-
     updateFunction({
       'id'       :'<?=$this->id ?>',
       'medium'   :'<?=$this->medium ?>',
diff --git a/themes/bootstrap3/templates/vudl/views/video.phtml b/themes/bootstrap3/templates/vudl/views/video.phtml
index 37f8f404dd5ac27c3035b34c82e756ec38721d80..0d1de9196a5b1fe830a3ef64ba6015a655a94aab 100644
--- a/themes/bootstrap3/templates/vudl/views/video.phtml
+++ b/themes/bootstrap3/templates/vudl/views/video.phtml
@@ -14,6 +14,7 @@
     }
   };
   $(document).ready(function() {
+    currentTab = "master-tab";
     $('#view .nav-tabs li.opener a').addClass('hidden');
   });
 </script>
diff --git a/themes/jquerymobile/css/styles.css b/themes/jquerymobile/css/styles.css
index 18d5439e0fae8ad06e7fb4f9488227050cb8da79..ca6a408acdf74474166d86735989d02108f5f3e7 100644
--- a/themes/jquerymobile/css/styles.css
+++ b/themes/jquerymobile/css/styles.css
@@ -5,7 +5,7 @@ ul.results,ul.filters,ul.mylists,ul.comments,ul.history,ul.bookbag {
 ul.results .ui-icon-check {
     background-color: green;
 }
-ul.results .ui-icon-plus {   
+ul.results .ui-icon-plus {
     background-color: white;
 }
 ul.results .ui-li-aside {
@@ -236,7 +236,7 @@ div.footer-text {
     margin: 0 auto;
     padding: 1em;
     background-color: #FFEF8F;
-    border: 2px solid #F9DD34;   
+    border: 2px solid #F9DD34;
     border-radius: 5px 5px 5px 5px;
 }
 
@@ -285,3 +285,11 @@ p.citationText {
     color: #000;
     font-weight: bold;
 }
+
+#tagList .tag.ui-btn-up-b a {color: #FFF;}
+#tagList .tag .text {
+  padding: 1em;
+  padding-right: 0;
+  vertical-align: super;
+}
+#tagList .tag .tag-form {display: inline;}
\ No newline at end of file
diff --git a/themes/jquerymobile/templates/Helpers/pagination.phtml b/themes/jquerymobile/templates/Helpers/pagination.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..242fc41abaf96f1bb1c51ce14f265b8a4f66983b
--- /dev/null
+++ b/themes/jquerymobile/templates/Helpers/pagination.phtml
@@ -0,0 +1,21 @@
+<? if ($this->pageCount): ?>
+<div data-role="controlgroup" data-type="horizontal" align="center">
+
+<!-- Previous page link -->
+<? if (isset($this->previous)): ?>
+  <? $newParams = $this->params; $newParams['page'] = $this->previous; ?>
+  <a rel="external" data-role="button" data-rel="back" href="<?= $this->currentPath() . '?' . http_build_query($newParams); ?>">
+    &laquo; <?=$this->transEsc('Prev')?>
+  </a>
+<? endif; ?>
+
+<!-- Next page link -->
+<? if (isset($this->next)): ?>
+  <? $newParams = $this->params; $newParams['page'] = $this->next; ?>
+  <a rel="external" data-role="button" href="<?= $this->currentPath() . '?' . http_build_query($newParams); ?>">
+    <?=$this->transEsc('Next');?> &raquo;
+  </a>
+<? endif; ?>
+
+</div>
+<? endif; ?>
\ No newline at end of file
diff --git a/themes/jquerymobile/templates/Recommend/AlphaBrowseLink.phtml b/themes/jquerymobile/templates/Recommend/AlphaBrowseLink.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..ff7aa235d05c00aded224a3ca119ba7c73bafeda
--- /dev/null
+++ b/themes/jquerymobile/templates/Recommend/AlphaBrowseLink.phtml
@@ -0,0 +1,14 @@
+<?
+  $index = $this->recommend->getIndex();
+  $from = $this->recommend->getQuery();
+  $link = $this->translate(
+    'alphabrowselink_html',
+    [
+      '%%index%%' => $this->transEsc('browse_' . $index),
+      '%%from%%' => $this->escapeHtml($from),
+      '%%url%%' => $this->url('alphabrowse-home')
+        . '?from=' . urlencode($from) . '&amp;source=' . urlencode($index) 
+    ]
+  );
+?>
+<div class="info"><?=$link?></div>
\ No newline at end of file
diff --git a/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
index 66ce9ddb2756dfa9b3fc96bd39152d603912e4be..df1627a06f51d642211867c5cb49467cf059d235 100644
--- a/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,13 +3,6 @@
 ?>
 <a rel="external" href="<?=$this->escapeHtmlAttr($url)?>">
   <div class="result">
-    <h3><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
   </div>
 </a>
diff --git a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
index 10a10b6b5689935bea78eae773b6ac9123454885..ca0a884fca358101e69433678b0145442bf39d97 100644
--- a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -1,17 +1,7 @@
 <b>
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?
       $summHighlightedAuthor = $this->driver->getHighlightedAuthor();
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
index 1be519b07da7ce84bb6ab667a4f42bb3cb381088..8e8c5750d6e803e2062a13c6c570461066010e13 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
@@ -1,3 +1,11 @@
+<?
+  if($loggedin = $this->auth()->isLoggedIn()) {
+    $user_id = $loggedin->id;
+    $loggedin = true;
+  } else {
+    $user_id = false;
+  }
+?>
 <? /* Display thumbnail if appropriate: */ ?>
 <? $mediumThumb = $this->record($this->driver)->getThumbnail('medium'); $largeThumb = $this->record($this->driver)->getThumbnail('large'); ?>
 <? if ($mediumThumb): ?>
@@ -167,16 +175,26 @@
     </dd>
   <? endif; ?>
 
-  <? $tagList = ($this->usertags()->getMode() !== 'disabled') ? $this->driver->getTags() : array(); ?>
+  <? $tagList = ($this->usertags()->getMode() !== 'disabled') ? $this->driver->getTags(null, null, 'count', $user_id) : array(); ?>
   <? if (count($tagList) > 0): ?>
     <dt><?=$this->transEsc('Tags')?>: </dt>
-    <dd>
-      <span style="float:right;">
-        <a rel="external" href="<?=$this->recordLink()->getActionUrl($this->driver, 'AddTag')?>" class="tool add tagRecord controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Add Tag')?>" id="tagRecord"><?=$this->transEsc('Add Tag')?></a>
-      </span>
-      <div id="tagList">
-        <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a rel="external" href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a> (<?=$this->escapeHtml($tag->cnt)?>)<? endforeach; ?>
-      </div>
+    <dd id="tagList">
+      <? $i=0; foreach ($tagList as $tag): ?>
+        <? if($loggedin): ?>
+          <? $is_me = isset($tag['is_me']) && !is_null($tag['is_me']) ? $tag['is_me'] : false; ?>
+          <span class="tag ui-btn ui-btn-inline ui-mini ui-btn-corner-all ui-btn-up-<?=$is_me ? 'b' : 'c' ?>">
+            <a rel="external" href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>" class="text ui-btn-text">
+              <?=$this->escapeHtml($tag->tag)?> (<?=$this->escapeHtml($tag->cnt)?>)
+            </a>
+            <form method="POST" action="<?=$this->recordLink()->getActionUrl($this->driver, $is_me ? 'DeleteTag' : 'AddTag') ?>" class="tag-form">
+              <input type="hidden" name="tag" value="<?=$this->escapeHtmlAttr($tag['tag'])?>"/>
+              <button type="submit" onClick="ajaxTagUpdate('<?=$this->escapeHtmlAttr($tag['tag'])?>', <?=$is_me ? 'true' : 'false' ?>);return false;" data-theme="<?=$is_me ? 'c' : 'b' ?>" data-icon="<?=$is_me ? 'minus' : 'plus' ?>" data-iconpos="notext" data-inline="true" data-mini="true">&nbsp;</button>
+            </form>
+          </span>
+        <? else: ?>
+          <a rel="external" href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a> (<?=$this->escapeHtml($tag->cnt)?>)<?=(++$i < count($tagList)) ? ', ' : '' ?>
+        <? endif; ?>
+      <? endforeach; ?>
     </dd>
   <? endif; ?>
 </dl>
\ No newline at end of file
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
index 056f5a0e3d0f39f60a3bed56e9f5daa5d24ca75c..bd2c8e7b4bd86464cd53df380649c38f9b8d0a0d 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -13,16 +13,7 @@
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3>
-      <?
-        $listTitle = $this->driver->getTitle();
-        if (!empty($listTitle)) {
-            echo $this->escapeHtml($this->truncate($listTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?>
-    </h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $listAuthor = $this->driver->getPrimaryAuthor(); if (!empty($listAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?=$this->escapeHtml($listAuthor)?></p>
     <? endif; ?>
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
index ce04278048f67bbdc05f1265ccfd9401b1ae0701..31c5f2e60a9da878d6aed0f728ceb8c04dd69e3e 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -1,17 +1,7 @@
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?
       $summHighlightedAuthor = $this->driver->getHighlightedAuthor();
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
index c1bcfddbdd90633c104f06aac05890ce8eeff36d..b205c9e871992dc0726e27edb1fe8323094606d1 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,7 @@
 ?>
 <a rel="external" href="<?=$this->escapeHtmlAttr($url)?>">
   <div class="result">
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
   </div>
   <? $snippet = $this->driver->getHighlightedSnippet(); ?>
   <? $summary = $this->driver->getSummary(); ?>
diff --git a/themes/jquerymobile/templates/RecordTab/holdingsils.phtml b/themes/jquerymobile/templates/RecordTab/holdingsils.phtml
index d1b74d13629c7ff456943594ec5409c7c1aaf418..2038159af6d1507a0f98b6b497dbe4f873eea986 100644
--- a/themes/jquerymobile/templates/RecordTab/holdingsils.phtml
+++ b/themes/jquerymobile/templates/RecordTab/holdingsils.phtml
@@ -8,6 +8,9 @@
     // Set page title.
     $this->headTitle($this->translate('Holdings') . ': ' . $this->driver->getBreadcrumb());
 ?>
+
+<?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
 <? if ($offlineMode == "ils-offline"): ?>
   <div class="sysInfo">
     <h2><?=$this->transEsc('ils_offline_title')?></h2>
diff --git a/themes/jquerymobile/templates/librarycards/editcard.phtml b/themes/jquerymobile/templates/librarycards/editcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..222360f807b7ca94007112732ab884632d47cdc6
--- /dev/null
+++ b/themes/jquerymobile/templates/librarycards/editcard.phtml
@@ -0,0 +1,50 @@
+<?
+    // Set up page title:
+    $pageTitle = empty($this->card->id) ? 'Add a Library Card' : "Edit Library Card";
+    $this->headTitle($this->translate($pageTitle));
+?>
+<div data-role="page" id="LibraryCards-editCard">
+  <?=$this->mobileMenu()->header()?>
+  <div data-role="content">
+    <h3><?=$this->transEsc($pageTitle); ?></h3>
+
+    <?=$this->flashmessages()?>
+
+    <form method="post" name="<?=empty($this->card->id) ? 'newCardForm' : 'editCardForm'?>" data-ajax="false">
+      <label class="displayBlock" for="card_name"><?=$this->transEsc('Library Card Name'); ?>:</label>
+      <input id="card_name" type="text" name="card_name" value="<?=$this->escapeHtmlAttr($this->cardName)?>" size="50"
+        class="mainFocus <?=$this->jqueryValidation(array('required'=>'This field is required')) ?>"/>
+      <br class="clear"/>
+
+      <? if ($this->targets !== null): ?>
+      <label class="displayBlock" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+      <select id="login_target" name="target">
+      <? foreach ($this->targets as $target): ?>
+        <option value="<?=$this->escapeHtmlAttr($target)?>"<?=($target == $this->target ? ' selected="selected"' : '')?>><?=$this->transEsc("source_$target", null, $target)?></option>
+      <? endforeach; ?>
+      </select>
+      <br class="clear"/>
+      <? endif; ?>
+
+      <label class="displayBlock" for="login_username"><?=$this->transEsc('Username')?>:</label>
+      <input id="login_username" type="text" name="username" value="<?=$this->escapeHtmlAttr($this->username)?>" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+      <br class="clear"/>
+      <label class="displayBlock" for="login_password"><?=$this->transEsc('Password')?>:</label>
+      <input id="login_password" type="password" name="password" value="<?=$this->escapeHtmlAttr($this->password)?>" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+      <br class="clear"/>
+
+      <div class="ui-body ui-body-b">
+        <fieldset class="ui-grid-a">
+            <div class="ui-block-a">
+                <input class="button" data-role="button" data-theme="b" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+            </div>
+            <? if (!empty($this->card->id)): ?>
+              <div class="ui-block-b">
+                <a data-role="button" data-theme="c" data-mini="true" href="<?=$this->url('librarycards-deletecard') ?>?cardID=<?=urlencode($this->card->id)?>" id="deleteCard<?=$this->card->id ?>" title="<?=$this->transEsc("Delete")?>"><?=$this->transEsc("Delete")?></a>
+              </div>
+            <? endif; ?>
+        </fieldset>
+      </div>
+    </div>
+  <?=$this->mobileMenu()->footer()?>
+</div>
diff --git a/themes/jquerymobile/templates/librarycards/home.phtml b/themes/jquerymobile/templates/librarycards/home.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..dbf4e9d66b65c3447f60759b9cad888bf8676dbc
--- /dev/null
+++ b/themes/jquerymobile/templates/librarycards/home.phtml
@@ -0,0 +1,45 @@
+<?
+    // Set up page title:
+    $this->headTitle($this->translate('Library Cards'));
+
+    // Set up extra button for header:
+    $extraButton = '<a rel="external" href="'
+            . $this->url('editLibraryCard', array('id' => 'NEW'))
+            . '" data-icon="gear" class="ui-btn-left">'
+            . $this->transEsc("Add a Library Card")
+            . '</a>';
+?>
+
+<div data-role="page" id="LibraryCards-home" class="results-page">
+  <?=$this->mobileMenu()->header(array('extraButtons'=>array($extraButton)))?>
+  <div data-role="content">
+
+    <?=$this->flashmessages();?>
+
+    <? if ($this->libraryCards->count() == 0): ?>
+      <?=$this->transEsc('You do not have any library cards')?>
+    <? else: ?>
+      <h3><?=$this->transEsc('Library Cards')?></h3>
+
+      <ul class="results librarycards" data-role="listview" data-split-theme="d" data-inset="false">
+      <? foreach ($this->libraryCards as $record): ?>
+        <li>
+          <a rel="external" href="<?=$this->url('editLibraryCard') . $this->escapeHtmlAttr($record['id']) ?>">
+
+          <?=$this->escapeHtml($record['card_name'])?><br />
+          <? $username = $record['cat_username']; if ($this->multipleTargets): ?>
+            <? $target = ''; ?>
+            <? if (strstr($username, '.')): ?>
+              <? list($target, $username) = explode('.', $username, 2); ?>
+            <? endif; ?>
+            <?=$this->transEsc('login_target')?>: <?=$target ? $this->transEsc("source_$target", null, $target) : '&nbsp;' ?><br />
+          <? endif; ?>
+          <?=$this->transEsc('Username')?>: <?=$this->escapeHtml($username)?>
+          </a>
+        </li>
+        <? endforeach; ?>
+      </ul>
+    <? endif; ?>
+  </div>
+  <?=$this->mobileMenu()->footer()?>
+</div>
diff --git a/themes/jquerymobile/templates/librarycards/selectcard.phtml b/themes/jquerymobile/templates/librarycards/selectcard.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..f58b5751bb6593381cb4412c9e8ba074523c620d
--- /dev/null
+++ b/themes/jquerymobile/templates/librarycards/selectcard.phtml
@@ -0,0 +1,30 @@
+<? if ($this->user): ?>
+  <?$cards = $this->user->getLibraryCards(); if ($cards->count() > 1): ?>
+    <form id="library_card_form" action="<?=$this->url('librarycards-selectcard')?>" method="get" data-ajax="false">
+      <label for="library_card"><?=$this->transEsc('Library Card')?></label>
+      <select id="library_card" name="cardID" class="jumpMenu">
+        <? foreach ($cards as $card): ?>
+          <?
+            $target = '';
+            $username = $card->cat_username;
+            if (strstr($username, '.')) {
+              list($target, $username) = explode('.', $username, 2);
+            }
+            $display = $this->transEsc($card->card_name ? $card->card_name : $card->cat_username);
+            if ($target) {
+              $display .= ' (' . $this->transEsc("source_$target", null, $target) . ')';
+            }
+          ?>
+          <option value="<?=$this->escapeHtmlAttr($card->id)?>"<?=$card->cat_username == $this->user->cat_username ? ' selected="selected"' : ''?>><?=$display ?></option>
+        <? endforeach; ?>
+      </select>
+      <noscript><input type="submit" class="btn btn-default" value="<?=$this->transEsc("Set")?>" /></noscript>
+    </form>
+    <script type="text/javascript">
+      $('#library_card').die('change');
+      $('#library_card').live('change', function() {
+        $('#library_card_form').submit();
+      });
+    </script>
+  <? endif; ?>
+<? endif; ?>
diff --git a/themes/jquerymobile/templates/myresearch/cataloglogin.phtml b/themes/jquerymobile/templates/myresearch/cataloglogin.phtml
index 11cb63cdca81129b5607f0d6d28789dfe335dd98..855822c90dda1a5567dc09d63d7bccd2fdddf819 100644
--- a/themes/jquerymobile/templates/myresearch/cataloglogin.phtml
+++ b/themes/jquerymobile/templates/myresearch/cataloglogin.phtml
@@ -21,13 +21,25 @@
       <?=$this->flashmessages()?>
       <p><?=$this->transEsc('cat_establish_account')?></p>
       <form method="post" data-ajax="false">
+
+        <? if ($this->targets !== null): ?>
+        <div data-role="fieldcontain">
+          <label class="displayBlock" for="login_target"><?=$this->transEsc('login_target')?>:</label>
+          <select id="login_target" name="target">
+          <? foreach ($this->targets as $target): ?>
+            <option value="<?=$this->escapeHtmlAttr($target)?>"><?=$this->transEsc("source_$target", null, $target)?></option>
+          <? endforeach; ?>
+          </select>
+        </div>
+        <? endif; ?>
+
         <div data-role="fieldcontain">
           <label class="displayBlock" for="profile_cat_username"><?=$this->transEsc('Library Catalog Username')?>:</label>
           <input id="profile_cat_username" type="text" name="cat_username" value="" size="25"/>
         </div>
         <div data-role="fieldcontain">
           <label class="displayBlock" for="profile_cat_password"><?=$this->transEsc('Library Catalog Password')?>:</label>
-          <input id="profile_cat_password" type="text" name="cat_password" value="" size="25"/>
+          <input id="profile_cat_password" type="password" name="cat_password" value="" size="25"/>
         </div>
         <div data-role="fieldcontain">
           <input type="submit" name="submit" value="<?=$this->transEsc('Save')?>"/>
diff --git a/themes/jquerymobile/templates/myresearch/checkedout.phtml b/themes/jquerymobile/templates/myresearch/checkedout.phtml
index fa7ecdb1b9cfe81cdce29637dc67653cd1c05c0a..addfc387aee5a002b37589afb4e02899fb49a4fe 100644
--- a/themes/jquerymobile/templates/myresearch/checkedout.phtml
+++ b/themes/jquerymobile/templates/myresearch/checkedout.phtml
@@ -8,6 +8,8 @@
     <h3><?=$this->transEsc('Your Checked Out Items')?></h3>
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->transactions)): ?>
       <? if ($this->renewForm): ?>
       <form name="renewals" method="post" id="renewals">
@@ -17,6 +19,32 @@
         </fieldset>
       <? endif; ?>
 
+      <? if ($paginator): ?>
+        <?=$this->transEsc("Showing")?>
+        <? $start = $paginator->getAbsoluteItemNumber(1);
+           $end = $paginator->getAbsoluteItemNumber($paginator->getItemCountPerPage());
+           $total = $paginator->getTotalItemCount();
+        ?>
+        <strong><?=$this->localizedNumber($start)?></strong> - <strong><?=$this->localizedNumber($end > $total ? $total : $end)?></strong>
+        <?=$this->transEsc('of')?> <strong><?=$this->localizedNumber($total)?></strong>
+      <? endif; ?>
+
+      <? foreach ($hiddenTransactions as $ilsDetails): ?>
+        <? if (isset($this->renewResult[$ilsDetails['item_id']])): ?>
+          <? $renewDetails = $this->renewResult[$ilsDetails['item_id']]; ?>
+          <? $prefix = isset($ilsDetails['title']) ? $ilsDetails['title'] : $ilsDetails['item_id']; ?>
+          <? if (isset($renewDetails['success']) && $renewDetails['success']): ?>
+            <div class="info"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_success')?></div>
+          <? else: ?>
+            <div class="error"><?=$this->escapeHtml($prefix . ': ') . $this->transEsc('renew_fail')?><? if (isset($renewDetails['sysMessage'])): ?>: <?=$this->escapeHtml($renewDetails['sysMessage'])?><? endif; ?></div>
+          <? endif; ?>
+        <? endif; ?>
+        <? if (isset($ilsDetails['renewable']) && $ilsDetails['renewable'] && isset($ilsDetails['renew_details'])): ?>
+          <? $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $ilsDetails['renew_details']); ?>
+          <input type="hidden" name="renewAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
+        <? endif; ?>
+      <? endforeach; ?>
+
       <ul class="results checkedout-list" data-role="listview">
       <? foreach ($this->transactions as $resource): ?>
         <? $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
@@ -112,6 +140,7 @@
         </fieldset>
       </form>
       <? endif; ?>
+      <?=$paginator ? $this->paginationControl($paginator, 'Sliding', 'Helpers/pagination.phtml') : ''?>
     <? else: ?>
       <p><?=$this->transEsc('You do not have any items checked out')?>.</p>
     <? endif; ?>
diff --git a/themes/jquerymobile/templates/myresearch/fines.phtml b/themes/jquerymobile/templates/myresearch/fines.phtml
index fb4f7200a9f1e14b9c588d27fc07c1dc7ff04d89..ded56d0742a9ce13a09968e9eac1468371b60597 100644
--- a/themes/jquerymobile/templates/myresearch/fines.phtml
+++ b/themes/jquerymobile/templates/myresearch/fines.phtml
@@ -6,6 +6,9 @@
   <?=$this->mobileMenu()->header()?>
   <div data-role="content">
     <h3><?=$this->transEsc('Your Fines')?></h3>
+
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (empty($this->fines)): ?>
       <p><?=$this->transEsc('You do not have any fines')?></p>
     <? else: ?>
diff --git a/themes/jquerymobile/templates/myresearch/footer-navbar.phtml b/themes/jquerymobile/templates/myresearch/footer-navbar.phtml
index 624e3b6788a5a3024eb42751c5c39749b073fe86..52bad29bdb93438df44019dcf6c66fe53bc841c3 100644
--- a/themes/jquerymobile/templates/myresearch/footer-navbar.phtml
+++ b/themes/jquerymobile/templates/myresearch/footer-navbar.phtml
@@ -1,14 +1,41 @@
-<? if ($this->auth()->isLoggedIn()): ?>
+<? $user = $this->auth()->isLoggedIn(); if ($user): ?>
+  <?
+    $rows = [];
+    if ($this->userlist()->getMode() !== 'disabled') {
+      $rows[] = '<li><a rel="external" '
+        . ($this->layout()->templateName=="mylist" ? ' class="ui-btn-active"' : '')
+        . ' href="' . $this->url('myresearch-favorites') . '">'
+        . $this->transEsc('Favorites') . '</a></li>';
+    }
+    $rows[] = '<li><a rel="external" '
+      . ($this->layout()->templateName=="history" ? ' class="ui-btn-active"' : '')
+      . ' href="' . $this->url('search-history') . '?require_login">'
+      . $this->transEsc('History') . '</a></li>';
+    if ($this->auth()->getManager()->supportsPasswordChange()) {
+      $rows[] = '<li><a rel="external" href="'
+        . $this->url('myresearch-changepassword') . '">'
+        . $this->transEsc("Change Password") . '</a></li>';
+    }
+    if ($user->libraryCardsEnabled()) {
+      $rows[] = '<li><a rel="external" href="'
+        . $this->url('librarycards-home') . '">'
+        . $this->transEsc('Library Cards') . '</a></li>';
+    }
+    $rows[] = '<li><a rel="external" href="'
+      . $this->url('myresearch-logout') . '">' . $this->transEsc("Log Out")
+      . '</a></li>';
+  ?>
   <div data-role="navbar">
     <ul>
-      <? if ($this->userlist()->getMode() !== 'disabled'): ?>
-        <li><a rel="external" <?=$this->layout()->templateName=="mylist" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('myresearch-favorites')?>"><?=$this->transEsc('Favorites')?></a></li>
-      <? endif; ?>
-      <li><a rel="external" <?=$this->layout()->templateName=="history" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('search-history')?>?require_login"><?=$this->transEsc('History')?></a></li>
-      <? if ($this->auth()->getManager()->supportsPasswordChange()): ?>
-        <li><a rel="external" href="<?=$this->url('myresearch-changepassword')?>"><?=$this->transEsc("Change Password")?></a></li>
-      <? endif; ?>
-      <li><a rel="external" href="<?=$this->url('myresearch-logout')?>"><?=$this->transEsc("Log Out")?></a></li>
+      <? foreach ($rows as $i => $row): ?>
+        <? if ($i > 0 && $i % 3 === 0): ?>
+    </ul>
+  </div>
+  <div data-role="navbar">
+    <ul>
+        <? endif; ?>
+        <?=$row?>
+      <? endforeach; ?>
     </ul>
   </div>
 <? else: ?>
diff --git a/themes/jquerymobile/templates/myresearch/holds.phtml b/themes/jquerymobile/templates/myresearch/holds.phtml
index 5d7051294005130bf9fb0a1e79e0c1093072e14b..ed6ae2e07418cf0ccf6821c5f13671c98529ea68 100644
--- a/themes/jquerymobile/templates/myresearch/holds.phtml
+++ b/themes/jquerymobile/templates/myresearch/holds.phtml
@@ -9,6 +9,8 @@
 
     <?=$this->flashmessages()?>
 
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <? if (!empty($this->recordList)): ?>
       <? if ($this->cancelForm): ?>
         <form name="cancelForm" method="post" id="cancelHold">
diff --git a/themes/jquerymobile/templates/myresearch/profile.phtml b/themes/jquerymobile/templates/myresearch/profile.phtml
index f8c403210fffd25e0a343ae53a60df106226da61..b5afd066898154158d1d3265fbcc124d4e20e73e 100644
--- a/themes/jquerymobile/templates/myresearch/profile.phtml
+++ b/themes/jquerymobile/templates/myresearch/profile.phtml
@@ -7,6 +7,9 @@
   <div data-role="content">
     <h3><?=$this->transEsc('Your Profile')?></h3>
     <?=$this->flashmessages();?>
+
+    <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', array('user' => $this->auth()->isLoggedIn())); ?>
+
     <dl class="biblio">
     <?
         echo $this->renderArray(
diff --git a/themes/jquerymobile/templates/search/header-navbar.phtml b/themes/jquerymobile/templates/search/header-navbar.phtml
index 58cf4d71d8ac6dd6811dce42ba637088228c1965..eb7daaad86cae7d632ce6264996102865101a52f 100644
--- a/themes/jquerymobile/templates/search/header-navbar.phtml
+++ b/themes/jquerymobile/templates/search/header-navbar.phtml
@@ -4,15 +4,17 @@
   <div data-role="navbar">
     <ul>
       <li><a href="#Search-narrow" data-rel="dialog" data-transition="flip"><?=$this->transEsc('Narrow Search')?></a></li>
-      <li>
-        <? if (isset($this->results) && is_numeric($this->results->getSearchId())): ?>
-          <? if ($this->results->isSavedSearch()): ?>
-            <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search_remove')?></a>
-          <? else: ?>
-            <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search')?></a>
+      <? if (($account = $this->auth()->getManager()) && $account->loginEnabled()): // hide save option if login disabled ?>
+        <li>
+          <? if (isset($this->results) && is_numeric($this->results->getSearchId())): ?>
+            <? if ($this->results->isSavedSearch()): ?>
+              <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search_remove')?></a>
+            <? else: ?>
+              <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search')?></a>
+            <? endif; ?>
           <? endif; ?>
-        <? endif; ?>
-      </li>
+        </li>
+      <? endif; ?>
     </ul>
   </div>
 <? endif; ?>
\ No newline at end of file
diff --git a/themes/root/templates/Service/recaptcha.phtml b/themes/root/templates/Service/recaptcha.phtml
deleted file mode 100644
index a8ec02429196fbea3a94f53977047abcacecd336..0000000000000000000000000000000000000000
--- a/themes/root/templates/Service/recaptcha.phtml
+++ /dev/null
@@ -1,35 +0,0 @@
-<? if(isset($this->useRecaptcha) && $this->useRecaptcha): ?>
-
-  <?=$this->reCaptchaOptions ?>
-
-  <div id="recaptcha_widget" style="display:none">
-  <? if ($this->theme == 'custom'): ?>
-    <div id="custom_recaptcha_widget">
-      <div id="recaptcha_image"></div>
-      <div class="recaptcha_only_if_incorrect_sol" class="text-error"><?=$this->translate('recaptcha_incorrect_try_again') ?></div>
-
-      <span class="recaptcha_only_if_image"><?=$this->translate('recaptcha_instructions_visual') ?></span>
-      <span class="recaptcha_only_if_audio"><?=$this->translate('recaptcha_instructions_audio') ?></span>
-
-      <input type="text" id="<?=$this->responseField ?>" name="<?=$this->responseField ?>" />
-
-      <div><a href="javascript:Recaptcha.reload()"><?=$this->translate('recaptcha_refresh_btn') ?></a></div>
-      <div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')"><?=$this->translate('recaptcha_audio_challenge') ?></a></div>
-      <div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')"><?=$this->translate('recaptcha_visual_challenge') ?></a></div>
-
-      <div><a href="javascript:Recaptcha.showhelp()"><?=$this->translate('recaptcha_help_btn') ?></a></div>
-    </div>
-  <? endif; ?>
-  </div>
-
-  <noscript>
-    <iframe src="<?=$this->host ?>/noscript?k=<?=$this->publicKey ?><?=$this->errorPart ?>" height="300" width="500" frameborder="0"></iframe>
-    <textarea name="<?=$this->challengeField ?>" rows="3" cols="40"></textarea>
-    <input type="hidden" name="<?=$this->responseField ?>" value="manual_challenge"/>
-  </noscript>
-
-  <script type="text/javascript">
-    Recaptcha.create("<?=$this->publicKey ?>", 'recaptcha_widget', <?=$this->options ?>);
-  </script>
-
-<? endif; ?>
\ No newline at end of file
diff --git a/util/commit.php b/util/commit.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f143e5ae2782322c9d42820ca0fbb22e5fae13b
--- /dev/null
+++ b/util/commit.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Command-line tool to commit the Solr index.
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2009.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Utilities
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/performance#index_optimization Wiki
+ */
+
+// Load the Zend framework -- this will automatically trigger the appropriate
+// controller action based on directory and file names
+define('CLI_DIR', __DIR__);     // save directory name of current script
+require_once __DIR__ . '/../public/index.php';
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 05f28f65e870c9d6f573550ec001bc1c05d785ee..2ab8de0d4d4e62e295864bb237b64cbc7d2a0d9c 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50::getLoader();
+return ComposerAutoloaderInit43b46e74f0afcd66689b3c67cdb801ef::getLoader();
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 978e3e4986301ba1be35fec443a7dce5dbd2e83b..065890bfa1d8cba6c47fc951a46deb6f372aafec 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -63,6 +63,12 @@ return array(
     'File_MARC_List' => $vendorDir . '/pear-pear.php.net/File_MARC/File/MARC/List.php',
     'File_MARC_Record' => $vendorDir . '/pear-pear.php.net/File_MARC/File/MARC/Record.php',
     'File_MARC_Subfield' => $vendorDir . '/pear-pear.php.net/File_MARC/File/MARC/Subfield.php',
+    'LosReCaptcha\\Captcha\\ReCaptcha' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Captcha/ReCaptcha.php',
+    'LosReCaptcha\\Form\\View\\Helper\\Captcha\\ReCaptcha' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Form/View/Helper/Captcha/ReCaptcha.php',
+    'LosReCaptcha\\Module' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Module.php',
+    'LosReCaptcha\\Service\\Exception' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Service/Exception.php',
+    'LosReCaptcha\\Service\\ReCaptcha' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Service/ReCaptcha.php',
+    'LosReCaptcha\\Service\\Response' => $vendorDir . '/los/losrecaptcha/src/LosReCaptcha/Service/Response.php',
     'OS_Guess' => $vendorDir . '/pear-pear.php.net/PEAR/OS/Guess.php',
     'PEAR' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR.php',
     'PEAR5' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR5.php',
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index b7ba447e90c7981dce7457020c5bb8510599f8f5..a168aef26e149f31b22cc9b2686a89c92d7a506d 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -10,7 +10,6 @@ return array(
     'Zend\\' => array($vendorDir . '/zendframework/zendframework/library'),
     'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'),
     'ZendService\\Amazon\\' => array($vendorDir . '/zendframework/zendservice-amazon/library'),
-    'ZendService' => array($vendorDir . '/zendframework/zendservice-recaptcha/library'),
     'ZendRest' => array($vendorDir . '/zendframework/zendrest/library'),
     'VuFindHttp\\' => array($vendorDir . '/vufind-org/vufindhttp/src'),
     'VuFindCode\\' => array($vendorDir . '/vufind-org/vufindcode/src'),
@@ -21,6 +20,7 @@ return array(
     'Rbac\\' => array($vendorDir . '/zfr/rbac/src'),
     'ProxyManager\\' => array($vendorDir . '/ocramius/proxy-manager/src'),
     'PHPQRCode' => array($vendorDir . '/aferrandini/phpqrcode/lib'),
+    'LosReCaptcha\\' => array($vendorDir . '/los/losrecaptcha/src'),
     'Less' => array($vendorDir . '/oyejorge/less.php/lib'),
     'Behat\\Mink\\Driver' => array($vendorDir . '/behat/mink-zombie-driver/src'),
 );
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 21c71158886a791d928b3bd242681fc375620a39..de750cd1d121b0ee32bc7abc2c9ba917f92b5965 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -6,5 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
+    'LosReCaptcha\\' => array($vendorDir . '/los/losrecaptcha/src'),
     'Behat\\Mink\\' => array($vendorDir . '/behat/mink/src'),
 );
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index c13b459e24153bbad7193eadaf2090d573c6fffc..b53d4eb3e86866ac113fcd67d66eb3d3c2f5021a 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50
+class ComposerAutoloaderInit43b46e74f0afcd66689b3c67cdb801ef
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit43b46e74f0afcd66689b3c67cdb801ef', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit43b46e74f0afcd66689b3c67cdb801ef', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         array_push($includePaths, get_include_path());
@@ -48,7 +48,7 @@ class ComposerAutoloaderInit92f7acc9a48874264e5f443ba6590f50
     }
 }
 
-function composerRequire92f7acc9a48874264e5f443ba6590f50($file)
+function composerRequire43b46e74f0afcd66689b3c67cdb801ef($file)
 {
     require $file;
 }
diff --git a/vendor/composer/include_paths.php b/vendor/composer/include_paths.php
index 190e4ed1162b1da1dacf157da0aad2e2c399e7eb..20869ac55f9549ec877ddfa9558a0fe17c3cfe55 100644
--- a/vendor/composer/include_paths.php
+++ b/vendor/composer/include_paths.php
@@ -7,11 +7,11 @@ $baseDir = dirname($vendorDir);
 
 return array(
     $vendorDir . '/pear-pear.php.net/File_MARC',
+    $vendorDir . '/pear-pear.php.net/XML_Util',
+    $vendorDir . '/pear-pear.php.net/Console_Getopt',
+    $vendorDir . '/pear-pear.php.net/Structures_Graph',
+    $vendorDir . '/pear-pear.php.net/Archive_Tar',
     $vendorDir . '/pear-pear.php.net/PEAR',
     $vendorDir . '/pear-pear.php.net/Validate',
     $vendorDir . '/pear-pear.php.net/Validate_ISPN',
-    $vendorDir . '/pear-pear.php.net/Archive_Tar',
-    $vendorDir . '/pear-pear.php.net/Console_Getopt',
-    $vendorDir . '/pear-pear.php.net/Structures_Graph',
-    $vendorDir . '/pear-pear.php.net/XML_Util',
 );
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 588624907d4bd701d15f7744d5b9c7c8d78dc0c9..6f4004a206b8c1f2c2d24ad34a66e8cffc2b0ef7 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -172,127 +172,229 @@
         "description": "Library for interacting with Serials Solutions' Summon API."
     },
     {
-        "name": "pear-pear.php.net/File_MARC",
-        "version": "1.1.1",
-        "version_normalized": "1.1.1.0",
+        "name": "symfony/process",
+        "version": "v2.6.7",
+        "version_normalized": "2.6.7.0",
+        "target-dir": "Symfony/Component/Process",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562"
+        },
         "dist": {
-            "type": "file",
-            "url": "http://pear.php.net/get/File_MARC-1.1.1.tgz",
-            "reference": null,
-            "shasum": null
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/9f3c4baaf840ed849e1b1f7bfd5ae246e8509562",
+            "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562",
+            "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0.0"
+            "php": ">=5.3.3"
         },
-        "replace": {
-            "pear-pear/file_marc": "== 1.1.1.0"
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
+        },
+        "time": "2015-05-02 15:18:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
         },
-        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                ""
-            ]
+            "psr-0": {
+                "Symfony\\Component\\Process\\": ""
+            }
         },
-        "include-path": [
-            "/"
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
         ],
-        "description": "The standard for machine-readable cataloging (MARC) records is documented at http://loc.gov/marc/. This package enables you to read existing MARC records from a file, string, or (using the YAZ extension), from a Z39.50 source. You can also use this package to create new MARC records.\n\nThis package is based on the PHP MARC package, originally called \"php-marc\", that is part of the Emilda Project (http://www.emilda.org).  Christoffer Landtman generously agreed to make the \"php-marc\" code available under the GNU LGPL so it could be used as the basis of this PEAR package."
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony Process Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "pear-pear.php.net/PEAR",
-        "version": "1.9.5",
-        "version_normalized": "1.9.5.0",
+        "name": "symfony/css-selector",
+        "version": "v2.6.7",
+        "version_normalized": "2.6.7.0",
+        "target-dir": "Symfony/Component/CssSelector",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "189cf0f7f56d7c4be3b778df15a7f16a29f3680d"
+        },
         "dist": {
-            "type": "file",
-            "url": "http://pear.php.net/get/PEAR-1.9.5.tgz",
-            "reference": null,
-            "shasum": null
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/189cf0f7f56d7c4be3b778df15a7f16a29f3680d",
+            "reference": "189cf0f7f56d7c4be3b778df15a7f16a29f3680d",
+            "shasum": ""
         },
         "require": {
-            "ext-pcre": "*",
-            "ext-xml": "*",
-            "pear-pear.php.net/archive_tar": ">=1.3.11.0",
-            "pear-pear.php.net/console_getopt": ">=1.2.0.0",
-            "pear-pear.php.net/structures_graph": ">=1.0.2.0",
-            "pear-pear.php.net/xml_util": ">=1.2.0.0",
-            "php": ">=4.4.0.0,!=5.0.0.0,!=5.1.0.0,!=5.1.1.0,!=5.1.2.0,!=5.1.3.0,!=5.1.4.0,!=5.1.5.0"
+            "php": ">=5.3.3"
         },
-        "conflict": {
-            "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
-            "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "replace": {
-            "pear-pear/pear": "== 1.9.5.0"
+        "time": "2015-05-02 15:18:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
         },
-        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                ""
-            ]
+            "psr-0": {
+                "Symfony\\Component\\CssSelector\\": ""
+            }
         },
-        "include-path": [
-            "/"
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
         ],
-        "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n   and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n   where PHP is running on\n * the System class for quick handling of common operations\n   with files and directories\n * the PEAR base class\n  Features in a nutshell:\n  * full support for channels\n  * pre-download dependency validation\n  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n  * support for optional dependency groups and limited support for sub-packaging\n  * robust dependency support\n  * full dependency validation on uninstall\n  * remote install for hosts with only ftp access - no more problems with\n    restricted host installation\n  * full support for mirroring\n  * support for bundling several packages into a single tarball\n  * support for static dependencies on a url-based package\n  * support for custom file roles and installation tasks"
+        "authors": [
+            {
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony CssSelector Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "pear-pear.php.net/Validate",
-        "version": "0.8.5",
-        "version_normalized": "0.8.5.0",
+        "name": "behat/mink",
+        "version": "v1.6.1",
+        "version_normalized": "1.6.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/minkphp/Mink.git",
+            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a"
+        },
         "dist": {
-            "type": "file",
-            "url": "http://pear.php.net/get/Validate-0.8.5.tgz",
-            "reference": null,
-            "shasum": null
+            "type": "zip",
+            "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a",
+            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a",
+            "shasum": ""
         },
         "require": {
-            "php": ">=4.2.0.0"
+            "php": ">=5.3.1",
+            "symfony/css-selector": "~2.0"
         },
-        "replace": {
-            "pear-pear/validate": "== 0.8.5.0"
+        "suggest": {
+            "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
+            "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
+            "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
+            "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
+        },
+        "time": "2015-02-04 17:02:06",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.6.x-dev"
+            }
         },
-        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                ""
-            ]
+            "psr-4": {
+                "Behat\\Mink\\": "src/"
+            }
         },
-        "include-path": [
-            "/"
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
         ],
-        "description": "Package to validate various datas. It includes :\n    - numbers (min/max, decimal or not)\n    - email (syntax, domain check, rfc822)\n    - string (predifined type alpha upper and/or lowercase, numeric,...)\n    - date (min, max, rfc822 compliant)\n    - uri (RFC2396)\n    - possibility valid multiple data with a single method call (::multiple)"
+        "authors": [
+            {
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
+            }
+        ],
+        "description": "Browser controller/emulator abstraction for PHP",
+        "homepage": "http://mink.behat.org/",
+        "keywords": [
+            "browser",
+            "testing",
+            "web"
+        ]
     },
     {
-        "name": "pear-pear.php.net/Validate_ISPN",
-        "version": "0.6.1",
-        "version_normalized": "0.6.1.0",
+        "name": "behat/mink-zombie-driver",
+        "version": "v1.2.0",
+        "version_normalized": "1.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/minkphp/MinkZombieDriver.git",
+            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1"
+        },
         "dist": {
-            "type": "file",
-            "url": "http://pear.php.net/get/Validate_ISPN-0.6.1.tgz",
-            "reference": null,
-            "shasum": null
+            "type": "zip",
+            "url": "https://api.github.com/repos/minkphp/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+            "shasum": ""
         },
         "require": {
-            "pear-pear.php.net/validate": ">=0.5.0.0",
-            "php": ">=4.1.0.0"
+            "behat/mink": "~1.6@dev",
+            "php": ">=5.3.1",
+            "symfony/process": "~2.1"
         },
-        "replace": {
-            "pear-pear/validate_ispn": "== 0.6.1.0"
+        "time": "2014-09-26 12:26:25",
+        "type": "mink-driver",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2.x-dev"
+            }
         },
-        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                ""
-            ]
+            "psr-0": {
+                "Behat\\Mink\\Driver": "src/"
+            }
         },
-        "include-path": [
-            "/"
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
         ],
-        "description": "Package containes ISPN (International Standard Product Numbers) validations such as:\n * ISSN\n * ISBN\n * ISMN\n * ISRC (International Standard Recording Code)\n * EAN8\n * EAN13\n * EAN14\n * UCC12\n * SSCC"
+        "authors": [
+            {
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
+            },
+            {
+                "name": "Pascal Cremer",
+                "email": "b00gizm@gmail.com",
+                "homepage": "http://github.com/b00gizm"
+            }
+        ],
+        "description": "Zombie.js driver for Mink framework",
+        "homepage": "http://mink.behat.org/",
+        "keywords": [
+            "ajax",
+            "browser",
+            "headless",
+            "javascript",
+            "testing",
+            "zombie"
+        ]
     },
     {
         "name": "zendframework/zendxml",
@@ -306,7 +408,7 @@
         "dist": {
             "type": "zip",
             "url": "https://packages.zendframework.com/composer/zendframework-zendxml-559b34f426d33a11c3db118e00ce14bb8dc64e5f-zip-6cf7a2.zip",
-            "reference": "1.0.0",
+            "reference": "559b34f426d33a11c3db118e00ce14bb8dc64e5f",
             "shasum": "39abc614b5c26bcbf8102e203c52dee73c4460a8"
         },
         "require": {
@@ -345,252 +447,193 @@
         }
     },
     {
-        "name": "zendframework/zendrest",
-        "version": "2.0.2",
-        "version_normalized": "2.0.2.0",
+        "name": "zendframework/zendframework",
+        "version": "2.3.7",
+        "version_normalized": "2.3.7.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/ZendRest.git",
-            "reference": "7427d242b4546e5aef1206d2c97e402109d8843e"
+            "url": "https://github.com/zendframework/zf2.git",
+            "reference": "a1aae5fdd27a422beb32c56ddf5a197654a0f94a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://packages.zendframework.com/composer/zendframework-zendrest-7427d242b4546e5aef1206d2c97e402109d8843e-zip-da96cc.zip",
-            "reference": "2.0.2",
-            "shasum": "cd304d9e2fccccbd98348bfbead7d42b102e565a"
+            "url": "https://packages.zendframework.com/composer/zendframework-zendframework-a1aae5fdd27a422beb32c56ddf5a197654a0f94a-zip-06d4c7.zip",
+            "reference": "a1aae5fdd27a422beb32c56ddf5a197654a0f94a",
+            "shasum": "7033dd58d94b0c75fae8a00001f8a7275c218209"
         },
         "require": {
-            "php": ">=5.3.3",
-            "zendframework/zend-http": "~2.0",
-            "zendframework/zend-uri": "~2.0",
+            "php": ">=5.3.23",
             "zendframework/zendxml": "~1.0-dev"
         },
-        "time": "2014-03-05 22:32:09",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "ZendRest": "library/"
-            }
-        },
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "description": " ",
-        "homepage": "http://packages.zendframework.com/",
-        "keywords": [
-            "rest",
-            "zf2"
-        ],
-        "support": {
-            "source": "https://github.com/zendframework/ZendRest/tree/release-2.0.2",
-            "issues": "https://github.com/zendframework/ZendRest/issues"
-        }
-    },
-    {
-        "name": "zendframework/zendservice-amazon",
-        "version": "2.0.3",
-        "version_normalized": "2.0.3.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/ZendService_Amazon.git",
-            "reference": "f3d44e3488908323c34bf040c045ee71e1196796"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://packages.zendframework.com/composer/zendframework-zendservice-amazon-f3d44e3488908323c34bf040c045ee71e1196796-zip-31bbc0.zip",
-            "reference": "2.0.3",
-            "shasum": "b7f77cced220f6738248fc827952ab2c6604a08f"
-        },
-        "require": {
-            "php": ">=5.3.3",
-            "zendframework/zend-crypt": "~2.0",
-            "zendframework/zend-http": "~2.0",
-            "zendframework/zend-json": "~2.0",
-            "zendframework/zendrest": "~2.0",
-            "zendframework/zendxml": "~1.0-dev"
+        "replace": {
+            "zendframework/zend-authentication": "self.version",
+            "zendframework/zend-barcode": "self.version",
+            "zendframework/zend-cache": "self.version",
+            "zendframework/zend-captcha": "self.version",
+            "zendframework/zend-code": "self.version",
+            "zendframework/zend-config": "self.version",
+            "zendframework/zend-console": "self.version",
+            "zendframework/zend-crypt": "self.version",
+            "zendframework/zend-db": "self.version",
+            "zendframework/zend-debug": "self.version",
+            "zendframework/zend-di": "self.version",
+            "zendframework/zend-dom": "self.version",
+            "zendframework/zend-escaper": "self.version",
+            "zendframework/zend-eventmanager": "self.version",
+            "zendframework/zend-feed": "self.version",
+            "zendframework/zend-file": "self.version",
+            "zendframework/zend-filter": "self.version",
+            "zendframework/zend-form": "self.version",
+            "zendframework/zend-http": "self.version",
+            "zendframework/zend-i18n": "self.version",
+            "zendframework/zend-inputfilter": "self.version",
+            "zendframework/zend-json": "self.version",
+            "zendframework/zend-ldap": "self.version",
+            "zendframework/zend-loader": "self.version",
+            "zendframework/zend-log": "self.version",
+            "zendframework/zend-mail": "self.version",
+            "zendframework/zend-math": "self.version",
+            "zendframework/zend-memory": "self.version",
+            "zendframework/zend-mime": "self.version",
+            "zendframework/zend-modulemanager": "self.version",
+            "zendframework/zend-mvc": "self.version",
+            "zendframework/zend-navigation": "self.version",
+            "zendframework/zend-paginator": "self.version",
+            "zendframework/zend-permissions-acl": "self.version",
+            "zendframework/zend-permissions-rbac": "self.version",
+            "zendframework/zend-progressbar": "self.version",
+            "zendframework/zend-resources": "self.version",
+            "zendframework/zend-serializer": "self.version",
+            "zendframework/zend-server": "self.version",
+            "zendframework/zend-servicemanager": "self.version",
+            "zendframework/zend-session": "self.version",
+            "zendframework/zend-soap": "self.version",
+            "zendframework/zend-stdlib": "self.version",
+            "zendframework/zend-tag": "self.version",
+            "zendframework/zend-test": "self.version",
+            "zendframework/zend-text": "self.version",
+            "zendframework/zend-uri": "self.version",
+            "zendframework/zend-validator": "self.version",
+            "zendframework/zend-version": "self.version",
+            "zendframework/zend-view": "self.version",
+            "zendframework/zend-xmlrpc": "self.version"
         },
         "require-dev": {
-            "zendframework/zend-i18n": "~2.0"
+            "doctrine/annotations": ">=1.0",
+            "fabpot/php-cs-fixer": "1.*",
+            "ircmaxell/random-lib": "dev-master",
+            "ircmaxell/security-lib": "dev-master",
+            "mikey179/vfsstream": "1.2.*",
+            "phpunit/phpunit": "3.7.*",
+            "satooshi/php-coveralls": "dev-master",
+            "sebastianbergmann/phpcov": "1.1.0"
         },
         "suggest": {
-            "zendframework/zend-uri": "Zend\\Uri component"
+            "doctrine/annotations": "Doctrine Annotations >=1.0 for annotation features",
+            "ext-intl": "ext/intl for i18n features (included in default builds of PHP)",
+            "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable",
+            "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
+            "zendframework/zendpdf": "ZendPdf for creating PDF representations of barcodes",
+            "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha for rendering ReCaptchas in Zend\\Captcha and/or Zend\\Form"
         },
-        "time": "2014-03-05 22:37:42",
+        "time": "2015-03-12 16:55:53",
+        "bin": [
+            "bin/classmap_generator.php",
+            "bin/pluginmap_generator.php",
+            "bin/templatemap_generator.php"
+        ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "ZendService\\Amazon\\": "library/"
-            }
-        },
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "description": "OOP wrapper for the Amazon web service",
-        "homepage": "http://packages.zendframework.com/",
-        "keywords": [
-            "amazon",
-            "ec2",
-            "s3",
-            "simpledb",
-            "sqs",
-            "zf2"
-        ],
-        "support": {
-            "source": "https://github.com/zendframework/ZendService_Amazon/tree/master",
-            "issues": "https://github.com/zendframework/ZendService_Amazon/issues"
-        }
-    },
-    {
-        "name": "zendframework/zendservice-recaptcha",
-        "version": "2.0.1",
-        "version_normalized": "2.0.1.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/ZendService_ReCaptcha.git",
-            "reference": "4324cca8502d9f47b3b43a18acdd3fdbeb965536"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://packages.zendframework.com/composer/zendframework-zendservice-recaptcha-4324cca8502d9f47b3b43a18acdd3fdbeb965536-zip-8c45bf.zip",
-            "reference": "2.0.1",
-            "shasum": "fab92465cda889ff975c1ec79bb378d7e3f39081"
-        },
-        "require": {
-            "php": ">=5.3.3",
-            "zendframework/zend-http": ">=2.0.0",
-            "zendframework/zend-uri": ">=2.0.0",
-            "zendframework/zend-version": ">=2.0.0"
-        },
-        "time": "2012-09-24 15:18:29",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "Zend\\": "library/"
             }
         },
-        "installation-source": "dist",
-        "autoload": {
+        "autoload-dev": {
             "psr-0": {
-                "ZendService": "library/"
+                "ZendTest\\": "tests/"
             }
         },
         "license": [
             "BSD-3-Clause"
         ],
-        "description": "OOP wrapper for the ReCaptcha web service",
-        "homepage": "http://packages.zendframework.com/",
+        "description": "Zend Framework 2",
+        "homepage": "http://framework.zend.com/",
         "keywords": [
-            "recaptcha",
+            "framework",
             "zf2"
         ],
         "support": {
-            "source": "https://github.com/zendframework/ZendService_ReCaptcha/tree/release-2.0.1",
-            "issues": "https://github.com/zendframework/ZendService_ReCaptcha/issues"
+            "source": "https://github.com/zendframework/zf2/tree/release-2.3.7",
+            "issues": "https://github.com/zendframework/zf2/issues"
         }
     },
     {
-        "name": "vufind-org/vufindcode",
-        "version": "v1.0.2",
-        "version_normalized": "1.0.2.0",
+        "name": "los/losrecaptcha",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/vufind-org/vufindcode.git",
-            "reference": "1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0"
+            "url": "https://github.com/Lansoweb/LosReCaptcha.git",
+            "reference": "2e18af8d57286c28c1951c7305f8379e7304b203"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/vufind-org/vufindcode/zipball/1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0",
-            "reference": "1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0",
+            "url": "https://api.github.com/repos/Lansoweb/LosReCaptcha/zipball/2e18af8d57286c28c1951c7305f8379e7304b203",
+            "reference": "2e18af8d57286c28c1951c7305f8379e7304b203",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0"
-        },
-        "time": "2014-09-17 15:48:11",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "VuFindCode\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0"
-        ],
-        "authors": [
-            {
-                "name": "Demian Katz",
-                "email": "demian.katz@villanova.edu"
-            }
-        ],
-        "description": "Class for representing ISBNs (a VuFind support library)"
-    },
-    {
-        "name": "behat/mink-zombie-driver",
-        "version": "v1.2.0",
-        "version_normalized": "1.2.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/Behat/MinkZombieDriver.git",
-            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/Behat/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
-            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
-            "shasum": ""
+            "php": ">=5.4.0",
+            "zendframework/zendframework": ">=2.3.2,<3.0.0"
         },
-        "require": {
-            "behat/mink": "~1.6@dev",
-            "php": ">=5.3.1",
-            "symfony/process": "~2.1"
+        "require-dev": {
+            "satooshi/php-coveralls": "dev-master"
         },
-        "time": "2014-09-26 12:26:25",
-        "type": "mink-driver",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.2.x-dev"
-            }
+        "suggest": {
+            "los/losbase": "los/losbase for some abstract classes to speed development ",
+            "los/loslog": "los/loslog for logging",
+            "los/losui": "los/losui for twitter bootstrap 3 styling, jquery, chosen and other libraries"
         },
+        "time": "2015-04-28 15:40:23",
+        "type": "library",
         "installation-source": "dist",
         "autoload": {
+            "psr-4": {
+                "LosReCaptcha\\": "src/"
+            },
             "psr-0": {
-                "Behat\\Mink\\Driver": "src/"
-            }
+                "LosReCaptcha\\": "src/"
+            },
+            "classmap": [
+                "./"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
-            },
-            {
-                "name": "Pascal Cremer",
-                "email": "b00gizm@gmail.com",
-                "homepage": "http://github.com/b00gizm"
+                "name": "Leandro Silva",
+                "email": "leandro@leandrosilva.info",
+                "homepage": "http://leandrosilva.info"
             }
         ],
-        "description": "Zombie.js driver for Mink framework",
-        "homepage": "http://mink.behat.org/",
+        "description": "ZF2 module for integration with new ReCaptcha service form Google",
+        "homepage": "http://github.com/Lansoweb/LosReCaptcha",
         "keywords": [
-            "ajax",
-            "browser",
-            "headless",
-            "javascript",
-            "testing",
-            "zombie"
+            "captcha",
+            "los",
+            "module",
+            "recaptcha",
+            "zf2"
         ]
     },
     {
@@ -659,398 +702,198 @@
         ]
     },
     {
-        "name": "symfony/yaml",
-        "version": "v2.6.4",
-        "version_normalized": "2.6.4.0",
-        "target-dir": "Symfony/Component/Yaml",
+        "name": "oyejorge/less.php",
+        "version": "v1.7.0.3",
+        "version_normalized": "1.7.0.3",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Yaml.git",
-            "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8"
+            "url": "https://github.com/oyejorge/less.php.git",
+            "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Yaml/zipball/60ed7751671113cf1ee7d7778e691642c2e9acd8",
-            "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8",
+            "url": "https://api.github.com/repos/oyejorge/less.php/zipball/6e08ecb07e6f6d9170c23e8744c58fdd822ad0de",
+            "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.2"
         },
-        "time": "2015-01-25 04:39:26",
+        "time": "2015-03-10 18:12:59",
+        "bin": [
+            "bin/lessc"
+        ],
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.6-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Yaml\\": ""
-            }
+                "Less": "lib/"
+            },
+            "classmap": [
+                "lessc.inc.php"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "Apache-2.0"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Matt Agar",
+                "homepage": "https://github.com/agar"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Martin Jantošovič",
+                "homepage": "https://github.com/Mordred"
+            },
+            {
+                "name": "Josh Schmidt",
+                "homepage": "https://github.com/oyejorge"
             }
         ],
-        "description": "Symfony Yaml Component",
-        "homepage": "http://symfony.com"
+        "description": "PHP port of the Javascript version of LESS http://lesscss.org",
+        "homepage": "http://lessphp.gpeasy.com",
+        "keywords": [
+            "css",
+            "less",
+            "less.js",
+            "lesscss",
+            "php",
+            "stylesheet"
+        ]
     },
     {
-        "name": "symfony/css-selector",
-        "version": "v2.6.4",
-        "version_normalized": "2.6.4.0",
-        "target-dir": "Symfony/Component/CssSelector",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony/CssSelector.git",
-            "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584"
-        },
+        "name": "pear-pear.php.net/File_MARC",
+        "version": "1.1.1",
+        "version_normalized": "1.1.1.0",
         "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/3f80ecc614fec68d5b4a84a0703db3fdf5ce8584",
-            "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584",
-            "shasum": ""
+            "type": "file",
+            "url": "http://pear.php.net/get/File_MARC-1.1.1.tgz",
+            "reference": null,
+            "shasum": null
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.0.0"
         },
-        "time": "2015-01-03 08:01:59",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.6-dev"
-            }
+        "replace": {
+            "pear-pear/file_marc": "== 1.1.1.0"
         },
+        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\CssSelector\\": ""
-            }
+            "classmap": [
+                ""
+            ]
         },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
+        "include-path": [
+            "/"
         ],
-        "authors": [
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Jean-François Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
+        "license": [
+            "GNU Lesser General Public License"
         ],
-        "description": "Symfony CssSelector Component",
-        "homepage": "http://symfony.com"
+        "description": "The standard for machine-readable cataloging (MARC) records is documented at http://loc.gov/marc/. This package enables you to read existing MARC records from a file, string, or (using the YAZ extension), from a Z39.50 source. You can also use this package to create new MARC records.\n\nThis package is based on the PHP MARC package, originally called \"php-marc\", that is part of the Emilda Project (http://www.emilda.org).  Christoffer Landtman generously agreed to make the \"php-marc\" code available under the GNU LGPL so it could be used as the basis of this PEAR package."
     },
     {
-        "name": "behat/mink",
-        "version": "v1.6.1",
-        "version_normalized": "1.6.1.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/minkphp/Mink.git",
-            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a"
-        },
+        "name": "pear-pear.php.net/XML_Util",
+        "version": "1.3.0",
+        "version_normalized": "1.3.0.0",
         "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a",
-            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a",
-            "shasum": ""
+            "type": "file",
+            "url": "http://pear.php.net/get/XML_Util-1.3.0.tgz",
+            "reference": null,
+            "shasum": null
         },
         "require": {
-            "php": ">=5.3.1",
-            "symfony/css-selector": "~2.0"
-        },
-        "suggest": {
-            "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
-            "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
-            "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
-            "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
+            "ext-pcre": "*",
+            "php": ">=5.3.0.0"
         },
-        "time": "2015-02-04 17:02:06",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.6.x-dev"
-            }
+        "replace": {
+            "pear-pear/xml_util": "== 1.3.0.0"
         },
+        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Behat\\Mink\\": "src/"
-            }
+            "classmap": [
+                ""
+            ]
         },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
+        "include-path": [
+            "/"
         ],
-        "authors": [
-            {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
-            }
+        "license": [
+            "BSD License"
         ],
-        "description": "Browser controller/emulator abstraction for PHP",
-        "homepage": "http://mink.behat.org/",
-        "keywords": [
-            "browser",
-            "testing",
-            "web"
-        ]
+        "description": "Selection of methods that are often needed when working with XML documents.  Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
     },
     {
-        "name": "symfony/process",
-        "version": "v2.6.4",
-        "version_normalized": "2.6.4.0",
-        "target-dir": "Symfony/Component/Process",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony/Process.git",
-            "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae"
-        },
+        "name": "pear-pear.php.net/Console_Getopt",
+        "version": "1.4.0",
+        "version_normalized": "1.4.0.0",
         "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
-            "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
-            "shasum": ""
+            "type": "file",
+            "url": "http://pear.php.net/get/Console_Getopt-1.4.0.tgz",
+            "reference": null,
+            "shasum": null
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.4.0.0"
         },
-        "time": "2015-01-25 04:39:26",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.6-dev"
-            }
+        "replace": {
+            "pear-pear/console_getopt": "== 1.4.0.0"
         },
+        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Process\\": ""
-            }
+            "classmap": [
+                ""
+            ]
         },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
+        "include-path": [
+            "/"
         ],
-        "authors": [
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
+        "license": [
+            "PHP License"
         ],
-        "description": "Symfony Process Component",
-        "homepage": "http://symfony.com"
+        "description": "This is a PHP implementation of &quot;getopt&quot; supporting both\nshort and long options."
     },
     {
-        "name": "zfr/rbac",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zf-fr/rbac.git",
-            "reference": "493711bfc2a637fd7c6f23b71b7b55a621c35d9d"
-        },
+        "name": "pear-pear.php.net/Structures_Graph",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
         "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zf-fr/rbac/zipball/493711bfc2a637fd7c6f23b71b7b55a621c35d9d",
-            "reference": "493711bfc2a637fd7c6f23b71b7b55a621c35d9d",
-            "shasum": ""
+            "type": "file",
+            "url": "http://pear.php.net/get/Structures_Graph-1.1.0.tgz",
+            "reference": null,
+            "shasum": null
         },
         "require": {
-            "php": ">=5.4"
+            "php": ">=5.3.0.0"
         },
-        "require-dev": {
-            "phpunit/phpunit": "~3.7",
-            "satooshi/php-coveralls": "~0.6",
-            "squizlabs/php_codesniffer": "1.4.*",
-            "zendframework/zend-servicemanager": "~2.2"
+        "replace": {
+            "pear-pear/structures_graph": "== 1.1.0.0"
         },
-        "time": "2014-02-06 14:18:34",
-        "type": "library",
+        "type": "pear-library",
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Rbac\\": "src/"
-            }
+            "classmap": [
+                ""
+            ]
         },
-        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "/"
+        ],
         "license": [
-            "MIT"
+            "LGPL License"
         ],
-        "authors": [
-            {
-                "name": "Michaël Gallego",
-                "email": "mic.gallego@gmail.com",
-                "homepage": "http://michaelgallego.fr"
-            }
-        ],
-        "description": "Zend Framework 3 prototype for Zend\\Permissions\\Rbac.",
-        "homepage": "https://github.com/zf-fr/rbac",
-        "keywords": [
-            "rbac",
-            "security",
-            "zf2",
-            "zf3"
-        ]
-    },
-    {
-        "name": "zf-commons/zfc-rbac",
-        "version": "2.4.2",
-        "version_normalized": "2.4.2.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/ZF-Commons/zfc-rbac.git",
-            "reference": "42f466656ad9730025a6bbbfd4144ac2f3abb64c"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/ZF-Commons/zfc-rbac/zipball/42f466656ad9730025a6bbbfd4144ac2f3abb64c",
-            "reference": "42f466656ad9730025a6bbbfd4144ac2f3abb64c",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4",
-            "zendframework/zend-mvc": "~2.2",
-            "zendframework/zend-servicemanager": "~2.2",
-            "zfr/rbac": "~1.2"
-        },
-        "require-dev": {
-            "doctrine/common": "~2.4",
-            "doctrine/doctrine-module": "~0.8",
-            "doctrine/doctrine-orm-module": "~0.8",
-            "phpunit/phpunit": "~3.7",
-            "satooshi/php-coveralls": "~0.6",
-            "squizlabs/php_codesniffer": "1.4.*",
-            "zendframework/zend-developer-tools": "dev-master",
-            "zendframework/zendframework": "~2.2"
-        },
-        "suggest": {
-            "doctrine/doctrine-module": "if you want to use Doctrine role provider",
-            "zendframework/zend-developer-tools": "if you want to show information about the roles"
-        },
-        "time": "2015-01-26 11:29:23",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.4-dev",
-                "dev-develop": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "ZfcRbac\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Kyle Spraggs",
-                "email": "theman@spiffyjr.me",
-                "homepage": "http://www.spiffyjr.me/"
-            },
-            {
-                "name": "Jean-Marie Leroux",
-                "email": "jmleroux.pro@gmail.com"
-            },
-            {
-                "name": "Michaël Gallego",
-                "email": "mic.gallego@gmail.com",
-                "homepage": "http://www.michaelgallego.fr"
-            }
-        ],
-        "description": "Zend Framework 2 Module that provides a layer of features of Zend\\Permissions\\Rbac",
-        "homepage": "http://www.github.com/ZF-Commons/zfc-rbac",
-        "keywords": [
-            "module",
-            "permissions",
-            "rbac",
-            "zf2"
-        ]
-    },
-    {
-        "name": "vufind-org/vufindhttp",
-        "version": "v1.0.4",
-        "version_normalized": "1.0.4.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/vufind-org/vufindhttp.git",
-            "reference": "1b03d31c914faa6e50b6fe811fe609328d1d287b"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/vufind-org/vufindhttp/zipball/1b03d31c914faa6e50b6fe811fe609328d1d287b",
-            "reference": "1b03d31c914faa6e50b6fe811fe609328d1d287b",
-            "shasum": ""
-        },
-        "require": {
-            "zendframework/zend-http": ">=2.2"
-        },
-        "require-dev": {
-            "zendframework/zend-uri": ">=2.2"
-        },
-        "time": "2015-03-10 16:22:47",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "VuFindHttp\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0"
-        ],
-        "authors": [
-            {
-                "name": "David Maus",
-                "email": "maus@hab.de",
-                "role": "Developer"
-            },
-            {
-                "name": "Demian Katz",
-                "email": "demian.katz@villanova.edu",
-                "role": "Maintainer"
-            }
-        ],
-        "description": "VuFind 2.x HTTP service library",
-        "homepage": "http://vufind.org/"
+        "description": "Structures_Graph is a package for creating and manipulating graph datastructures. It allows building of directed\nand undirected graphs, with data and metadata stored in nodes. The library provides functions for graph traversing\nas well as for characteristic extraction from the graph topology."
     },
     {
         "name": "pear-pear.php.net/Archive_Tar",
-        "version": "1.3.15",
-        "version_normalized": "1.3.15.0",
+        "version": "1.3.16",
+        "version_normalized": "1.3.16.0",
         "dist": {
             "type": "file",
-            "url": "http://pear.php.net/get/Archive_Tar-1.3.15.tgz",
+            "url": "http://pear.php.net/get/Archive_Tar-1.3.16.tgz",
             "reference": null,
             "shasum": null
         },
@@ -1058,7 +901,7 @@
             "php": ">=4.3.0.0"
         },
         "replace": {
-            "pear-pear/archive_tar": "== 1.3.15.0"
+            "pear-pear/archive_tar": "== 1.3.16.0"
         },
         "type": "pear-library",
         "installation-source": "dist",
@@ -1076,20 +919,30 @@
         "description": "This class provides handling of tar files in PHP.\nIt supports creating, listing, extracting and adding to tar files.\nGzip support is available if PHP has the zlib extension built-in or\nloaded. Bz2 compression is also supported with the bz2 extension loaded."
     },
     {
-        "name": "pear-pear.php.net/Console_Getopt",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
+        "name": "pear-pear.php.net/PEAR",
+        "version": "1.9.5",
+        "version_normalized": "1.9.5.0",
         "dist": {
             "type": "file",
-            "url": "http://pear.php.net/get/Console_Getopt-1.4.0.tgz",
+            "url": "http://pear.php.net/get/PEAR-1.9.5.tgz",
             "reference": null,
             "shasum": null
         },
         "require": {
-            "php": ">=5.4.0.0"
+            "ext-pcre": "*",
+            "ext-xml": "*",
+            "pear-pear.php.net/archive_tar": ">=1.3.11.0",
+            "pear-pear.php.net/console_getopt": ">=1.2.0.0",
+            "pear-pear.php.net/structures_graph": ">=1.0.2.0",
+            "pear-pear.php.net/xml_util": ">=1.2.0.0",
+            "php": ">=4.4.0.0,!=5.0.0.0,!=5.1.0.0,!=5.1.1.0,!=5.1.2.0,!=5.1.3.0,!=5.1.4.0,!=5.1.5.0"
+        },
+        "conflict": {
+            "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
+            "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
         },
         "replace": {
-            "pear-pear/console_getopt": "== 1.4.0.0"
+            "pear-pear/pear": "== 1.9.5.0"
         },
         "type": "pear-library",
         "installation-source": "dist",
@@ -1102,25 +955,25 @@
             "/"
         ],
         "license": [
-            "PHP License"
+            "New BSD License"
         ],
-        "description": "This is a PHP implementation of &quot;getopt&quot; supporting both\nshort and long options."
+        "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n   and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n   where PHP is running on\n * the System class for quick handling of common operations\n   with files and directories\n * the PEAR base class\n  Features in a nutshell:\n  * full support for channels\n  * pre-download dependency validation\n  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n  * support for optional dependency groups and limited support for sub-packaging\n  * robust dependency support\n  * full dependency validation on uninstall\n  * remote install for hosts with only ftp access - no more problems with\n    restricted host installation\n  * full support for mirroring\n  * support for bundling several packages into a single tarball\n  * support for static dependencies on a url-based package\n  * support for custom file roles and installation tasks"
     },
     {
-        "name": "pear-pear.php.net/Structures_Graph",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
+        "name": "pear-pear.php.net/Validate",
+        "version": "0.8.5",
+        "version_normalized": "0.8.5.0",
         "dist": {
             "type": "file",
-            "url": "http://pear.php.net/get/Structures_Graph-1.1.0.tgz",
+            "url": "http://pear.php.net/get/Validate-0.8.5.tgz",
             "reference": null,
             "shasum": null
         },
         "require": {
-            "php": ">=5.3.0.0"
+            "php": ">=4.2.0.0"
         },
         "replace": {
-            "pear-pear/structures_graph": "== 1.1.0.0"
+            "pear-pear/validate": "== 0.8.5.0"
         },
         "type": "pear-library",
         "installation-source": "dist",
@@ -1133,26 +986,26 @@
             "/"
         ],
         "license": [
-            "LGPL License"
+            "New BSD"
         ],
-        "description": "Structures_Graph is a package for creating and manipulating graph datastructures. It allows building of directed\nand undirected graphs, with data and metadata stored in nodes. The library provides functions for graph traversing\nas well as for characteristic extraction from the graph topology."
+        "description": "Package to validate various datas. It includes :\n    - numbers (min/max, decimal or not)\n    - email (syntax, domain check, rfc822)\n    - string (predifined type alpha upper and/or lowercase, numeric,...)\n    - date (min, max, rfc822 compliant)\n    - uri (RFC2396)\n    - possibility valid multiple data with a single method call (::multiple)"
     },
     {
-        "name": "pear-pear.php.net/XML_Util",
-        "version": "1.3.0",
-        "version_normalized": "1.3.0.0",
+        "name": "pear-pear.php.net/Validate_ISPN",
+        "version": "0.6.1",
+        "version_normalized": "0.6.1.0",
         "dist": {
             "type": "file",
-            "url": "http://pear.php.net/get/XML_Util-1.3.0.tgz",
+            "url": "http://pear.php.net/get/Validate_ISPN-0.6.1.tgz",
             "reference": null,
             "shasum": null
         },
         "require": {
-            "ext-pcre": "*",
-            "php": ">=5.3.0.0"
+            "pear-pear.php.net/validate": ">=0.5.0.0",
+            "php": ">=4.1.0.0"
         },
         "replace": {
-            "pear-pear/xml_util": "== 1.3.0.0"
+            "pear-pear/validate_ispn": "== 0.6.1.0"
         },
         "type": "pear-library",
         "installation-source": "dist",
@@ -1165,192 +1018,379 @@
             "/"
         ],
         "license": [
-            "BSD License"
+            "New BSD"
         ],
-        "description": "Selection of methods that are often needed when working with XML documents.  Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
+        "description": "Package containes ISPN (International Standard Product Numbers) validations such as:\n * ISSN\n * ISBN\n * ISMN\n * ISRC (International Standard Recording Code)\n * EAN8\n * EAN13\n * EAN14\n * UCC12\n * SSCC"
     },
     {
-        "name": "oyejorge/less.php",
-        "version": "v1.7.0.3",
-        "version_normalized": "1.7.0.3",
+        "name": "symfony/yaml",
+        "version": "v2.6.7",
+        "version_normalized": "2.6.7.0",
+        "target-dir": "Symfony/Component/Yaml",
         "source": {
             "type": "git",
-            "url": "https://github.com/oyejorge/less.php.git",
-            "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de"
+            "url": "https://github.com/symfony/Yaml.git",
+            "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/oyejorge/less.php/zipball/6e08ecb07e6f6d9170c23e8744c58fdd822ad0de",
-            "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de",
+            "url": "https://api.github.com/repos/symfony/Yaml/zipball/f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
+            "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.2"
+            "php": ">=5.3.3"
         },
-        "time": "2015-03-10 18:12:59",
-        "bin": [
-            "bin/lessc"
-        ],
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
+        },
+        "time": "2015-05-02 15:18:45",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Less": "lib/"
-            },
-            "classmap": [
-                "lessc.inc.php"
-            ]
+                "Symfony\\Component\\Yaml\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "Apache-2.0"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Matt Agar",
-                "homepage": "https://github.com/agar"
-            },
-            {
-                "name": "Martin Jantošovič",
-                "homepage": "https://github.com/Mordred"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Josh Schmidt",
-                "homepage": "https://github.com/oyejorge"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "PHP port of the Javascript version of LESS http://lesscss.org",
-        "homepage": "http://lessphp.gpeasy.com",
-        "keywords": [
-            "css",
-            "less",
-            "less.js",
-            "lesscss",
-            "php",
-            "stylesheet"
-        ]
+        "description": "Symfony Yaml Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "zendframework/zendframework",
-        "version": "2.3.7",
-        "version_normalized": "2.3.7.0",
+        "name": "vufind-org/vufindcode",
+        "version": "v1.0.2",
+        "version_normalized": "1.0.2.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zf2.git",
-            "reference": "a1aae5fdd27a422beb32c56ddf5a197654a0f94a"
+            "url": "https://github.com/vufind-org/vufindcode.git",
+            "reference": "1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0"
         },
         "dist": {
             "type": "zip",
-            "url": "https://packages.zendframework.com/composer/zendframework-zendframework-a1aae5fdd27a422beb32c56ddf5a197654a0f94a-zip-06d4c7.zip",
-            "reference": "2.3.7",
-            "shasum": "7033dd58d94b0c75fae8a00001f8a7275c218209"
+            "url": "https://api.github.com/repos/vufind-org/vufindcode/zipball/1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0",
+            "reference": "1c6a0ad73cdf24c363f0e0564ac29ef1ba323ec0",
+            "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23",
+            "php": ">=5.3.0"
+        },
+        "time": "2014-09-17 15:48:11",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "VuFindCode\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "GPL-2.0"
+        ],
+        "authors": [
+            {
+                "name": "Demian Katz",
+                "email": "demian.katz@villanova.edu"
+            }
+        ],
+        "description": "Class for representing ISBNs (a VuFind support library)"
+    },
+    {
+        "name": "vufind-org/vufindhttp",
+        "version": "v1.0.4",
+        "version_normalized": "1.0.4.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/vufind-org/vufindhttp.git",
+            "reference": "1b03d31c914faa6e50b6fe811fe609328d1d287b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/vufind-org/vufindhttp/zipball/1b03d31c914faa6e50b6fe811fe609328d1d287b",
+            "reference": "1b03d31c914faa6e50b6fe811fe609328d1d287b",
+            "shasum": ""
+        },
+        "require": {
+            "zendframework/zend-http": ">=2.2"
+        },
+        "require-dev": {
+            "zendframework/zend-uri": ">=2.2"
+        },
+        "time": "2015-03-10 16:22:47",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "VuFindHttp\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "GPL-2.0"
+        ],
+        "authors": [
+            {
+                "name": "David Maus",
+                "email": "maus@hab.de",
+                "role": "Developer"
+            },
+            {
+                "name": "Demian Katz",
+                "email": "demian.katz@villanova.edu",
+                "role": "Maintainer"
+            }
+        ],
+        "description": "VuFind 2.x HTTP service library",
+        "homepage": "http://vufind.org/"
+    },
+    {
+        "name": "zendframework/zendrest",
+        "version": "2.0.2",
+        "version_normalized": "2.0.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zendframework/ZendRest.git",
+            "reference": "7427d242b4546e5aef1206d2c97e402109d8843e"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://packages.zendframework.com/composer/zendframework-zendrest-7427d242b4546e5aef1206d2c97e402109d8843e-zip-da96cc.zip",
+            "reference": "7427d242b4546e5aef1206d2c97e402109d8843e",
+            "shasum": "cd304d9e2fccccbd98348bfbead7d42b102e565a"
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "zendframework/zend-http": "~2.0",
+            "zendframework/zend-uri": "~2.0",
             "zendframework/zendxml": "~1.0-dev"
         },
-        "replace": {
-            "zendframework/zend-authentication": "self.version",
-            "zendframework/zend-barcode": "self.version",
-            "zendframework/zend-cache": "self.version",
-            "zendframework/zend-captcha": "self.version",
-            "zendframework/zend-code": "self.version",
-            "zendframework/zend-config": "self.version",
-            "zendframework/zend-console": "self.version",
-            "zendframework/zend-crypt": "self.version",
-            "zendframework/zend-db": "self.version",
-            "zendframework/zend-debug": "self.version",
-            "zendframework/zend-di": "self.version",
-            "zendframework/zend-dom": "self.version",
-            "zendframework/zend-escaper": "self.version",
-            "zendframework/zend-eventmanager": "self.version",
-            "zendframework/zend-feed": "self.version",
-            "zendframework/zend-file": "self.version",
-            "zendframework/zend-filter": "self.version",
-            "zendframework/zend-form": "self.version",
-            "zendframework/zend-http": "self.version",
-            "zendframework/zend-i18n": "self.version",
-            "zendframework/zend-inputfilter": "self.version",
-            "zendframework/zend-json": "self.version",
-            "zendframework/zend-ldap": "self.version",
-            "zendframework/zend-loader": "self.version",
-            "zendframework/zend-log": "self.version",
-            "zendframework/zend-mail": "self.version",
-            "zendframework/zend-math": "self.version",
-            "zendframework/zend-memory": "self.version",
-            "zendframework/zend-mime": "self.version",
-            "zendframework/zend-modulemanager": "self.version",
-            "zendframework/zend-mvc": "self.version",
-            "zendframework/zend-navigation": "self.version",
-            "zendframework/zend-paginator": "self.version",
-            "zendframework/zend-permissions-acl": "self.version",
-            "zendframework/zend-permissions-rbac": "self.version",
-            "zendframework/zend-progressbar": "self.version",
-            "zendframework/zend-resources": "self.version",
-            "zendframework/zend-serializer": "self.version",
-            "zendframework/zend-server": "self.version",
-            "zendframework/zend-servicemanager": "self.version",
-            "zendframework/zend-session": "self.version",
-            "zendframework/zend-soap": "self.version",
-            "zendframework/zend-stdlib": "self.version",
-            "zendframework/zend-tag": "self.version",
-            "zendframework/zend-test": "self.version",
-            "zendframework/zend-text": "self.version",
-            "zendframework/zend-uri": "self.version",
-            "zendframework/zend-validator": "self.version",
-            "zendframework/zend-version": "self.version",
-            "zendframework/zend-view": "self.version",
-            "zendframework/zend-xmlrpc": "self.version"
+        "time": "2014-03-05 22:32:09",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "ZendRest": "library/"
+            }
+        },
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "description": " ",
+        "homepage": "http://packages.zendframework.com/",
+        "keywords": [
+            "rest",
+            "zf2"
+        ],
+        "support": {
+            "source": "https://github.com/zendframework/ZendRest/tree/release-2.0.2",
+            "issues": "https://github.com/zendframework/ZendRest/issues"
+        }
+    },
+    {
+        "name": "zendframework/zendservice-amazon",
+        "version": "2.0.3",
+        "version_normalized": "2.0.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zendframework/ZendService_Amazon.git",
+            "reference": "f3d44e3488908323c34bf040c045ee71e1196796"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://packages.zendframework.com/composer/zendframework-zendservice-amazon-f3d44e3488908323c34bf040c045ee71e1196796-zip-31bbc0.zip",
+            "reference": "f3d44e3488908323c34bf040c045ee71e1196796",
+            "shasum": "b7f77cced220f6738248fc827952ab2c6604a08f"
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "zendframework/zend-crypt": "~2.0",
+            "zendframework/zend-http": "~2.0",
+            "zendframework/zend-json": "~2.0",
+            "zendframework/zendrest": "~2.0",
+            "zendframework/zendxml": "~1.0-dev"
         },
         "require-dev": {
-            "doctrine/annotations": ">=1.0",
-            "fabpot/php-cs-fixer": "1.*",
-            "ircmaxell/random-lib": "dev-master",
-            "ircmaxell/security-lib": "dev-master",
-            "mikey179/vfsstream": "1.2.*",
-            "phpunit/phpunit": "3.7.*",
-            "satooshi/php-coveralls": "dev-master",
-            "sebastianbergmann/phpcov": "1.1.0"
+            "zendframework/zend-i18n": "~2.0"
         },
         "suggest": {
-            "doctrine/annotations": "Doctrine Annotations >=1.0 for annotation features",
-            "ext-intl": "ext/intl for i18n features (included in default builds of PHP)",
-            "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable",
-            "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
-            "zendframework/zendpdf": "ZendPdf for creating PDF representations of barcodes",
-            "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha for rendering ReCaptchas in Zend\\Captcha and/or Zend\\Form"
+            "zendframework/zend-uri": "Zend\\Uri component"
         },
-        "time": "2015-03-12 16:55:53",
-        "bin": [
-            "bin/classmap_generator.php",
-            "bin/pluginmap_generator.php",
-            "bin/templatemap_generator.php"
-        ],
+        "time": "2014-03-05 22:37:42",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Zend\\": "library/"
+                "ZendService\\Amazon\\": "library/"
             }
         },
         "license": [
             "BSD-3-Clause"
         ],
-        "description": "Zend Framework 2",
-        "homepage": "http://framework.zend.com/",
+        "description": "OOP wrapper for the Amazon web service",
+        "homepage": "http://packages.zendframework.com/",
         "keywords": [
-            "framework",
+            "amazon",
+            "ec2",
+            "s3",
+            "simpledb",
+            "sqs",
             "zf2"
         ],
         "support": {
-            "source": "https://github.com/zendframework/zf2/tree/release-2.3.7",
-            "issues": "https://github.com/zendframework/zf2/issues"
+            "source": "https://github.com/zendframework/ZendService_Amazon/tree/master",
+            "issues": "https://github.com/zendframework/ZendService_Amazon/issues"
         }
+    },
+    {
+        "name": "zfr/rbac",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zf-fr/rbac.git",
+            "reference": "493711bfc2a637fd7c6f23b71b7b55a621c35d9d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/zf-fr/rbac/zipball/493711bfc2a637fd7c6f23b71b7b55a621c35d9d",
+            "reference": "493711bfc2a637fd7c6f23b71b7b55a621c35d9d",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~3.7",
+            "satooshi/php-coveralls": "~0.6",
+            "squizlabs/php_codesniffer": "1.4.*",
+            "zendframework/zend-servicemanager": "~2.2"
+        },
+        "time": "2014-02-06 14:18:34",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Rbac\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michaël Gallego",
+                "email": "mic.gallego@gmail.com",
+                "homepage": "http://michaelgallego.fr"
+            }
+        ],
+        "description": "Zend Framework 3 prototype for Zend\\Permissions\\Rbac.",
+        "homepage": "https://github.com/zf-fr/rbac",
+        "keywords": [
+            "rbac",
+            "security",
+            "zf2",
+            "zf3"
+        ]
+    },
+    {
+        "name": "zf-commons/zfc-rbac",
+        "version": "v2.5.1",
+        "version_normalized": "2.5.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/ZF-Commons/zfc-rbac.git",
+            "reference": "80970aba715fd54f63ddde68a24bee22bafb9d17"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/ZF-Commons/zfc-rbac/zipball/80970aba715fd54f63ddde68a24bee22bafb9d17",
+            "reference": "80970aba715fd54f63ddde68a24bee22bafb9d17",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4",
+            "zendframework/zend-mvc": "~2.2",
+            "zendframework/zend-servicemanager": "~2.2",
+            "zfr/rbac": "~1.2"
+        },
+        "require-dev": {
+            "doctrine/common": "~2.4",
+            "doctrine/doctrine-module": "~0.8",
+            "doctrine/doctrine-orm-module": "~0.8",
+            "phpunit/phpunit": "~3.7",
+            "satooshi/php-coveralls": "~0.6",
+            "squizlabs/php_codesniffer": "1.4.*",
+            "zendframework/zend-developer-tools": "dev-master",
+            "zendframework/zendframework": "~2.2"
+        },
+        "suggest": {
+            "doctrine/doctrine-module": "if you want to use Doctrine role provider",
+            "zendframework/zend-developer-tools": "if you want to show information about the roles"
+        },
+        "time": "2015-04-16 12:10:33",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.4-dev",
+                "dev-develop": "3.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "ZfcRbac\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Kyle Spraggs",
+                "email": "theman@spiffyjr.me",
+                "homepage": "http://www.spiffyjr.me/"
+            },
+            {
+                "name": "Jean-Marie Leroux",
+                "email": "jmleroux.pro@gmail.com"
+            },
+            {
+                "name": "Michaël Gallego",
+                "email": "mic.gallego@gmail.com",
+                "homepage": "http://www.michaelgallego.fr"
+            }
+        ],
+        "description": "Zend Framework 2 Module that provides a layer of features of Zend\\Permissions\\Rbac",
+        "homepage": "http://www.github.com/ZF-Commons/zfc-rbac",
+        "keywords": [
+            "module",
+            "permissions",
+            "rbac",
+            "zf2"
+        ]
     }
 ]
diff --git a/vendor/los/losrecaptcha/LICENSE b/vendor/los/losrecaptcha/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..383962eb09cdcae37d0b0eb6642b8fd92841ad88
--- /dev/null
+++ b/vendor/los/losrecaptcha/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2015, Leandro Silva
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of LosReCaptcha nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/vendor/los/losrecaptcha/Module.php b/vendor/los/losrecaptcha/Module.php
new file mode 100644
index 0000000000000000000000000000000000000000..e77ac75d396f3c37591452adb64e7bbb5dc9e472
--- /dev/null
+++ b/vendor/los/losrecaptcha/Module.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * This file is placed here for compatibility with Zendframework 2's ModuleManager.
+ * It allows usage of this module even without composer.
+ * The original Module.php is in 'src/LosBase' in order to respect PSR-0
+ */
+require_once __DIR__.'/src/LosReCaptcha/Module.php';
diff --git a/vendor/los/losrecaptcha/autoload_classmap.php b/vendor/los/losrecaptcha/autoload_classmap.php
new file mode 100644
index 0000000000000000000000000000000000000000..7cbf1c5eff7203505c7a375b38ffba99352f1012
--- /dev/null
+++ b/vendor/los/losrecaptcha/autoload_classmap.php
@@ -0,0 +1,10 @@
+<?php
+// Generated by ZF2's ./bin/classmap_generator.php
+return array(
+    'LosReCaptcha\Captcha\ReCaptcha'                  => __DIR__ . '/src/LosReCaptcha/Captcha/ReCaptcha.php',
+    'LosReCaptcha\Form\View\Helper\Captcha\ReCaptcha' => __DIR__ . '/src/LosReCaptcha/Form/View/Helper/Captcha/ReCaptcha.php',
+    'LosReCaptcha\Module'                             => __DIR__ . '/src/LosReCaptcha/Module.php',
+    'LosReCaptcha\Service\Exception'                  => __DIR__ . '/src/LosReCaptcha/Service/Exception.php',
+    'LosReCaptcha\Service\ReCaptcha'                  => __DIR__ . '/src/LosReCaptcha/Service/ReCaptcha.php',
+    'LosReCaptcha\Service\Response'                   => __DIR__ . '/src/LosReCaptcha/Service/Response.php',
+);
diff --git a/vendor/los/losrecaptcha/composer.json b/vendor/los/losrecaptcha/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d1fcc75eb1992bbaacf5f64e6d53e77de52b858
--- /dev/null
+++ b/vendor/los/losrecaptcha/composer.json
@@ -0,0 +1,36 @@
+{
+    "name" : "los/losrecaptcha",
+    "description" : "ZF2 module for integration with new ReCaptcha service form Google",
+    "require" : {
+        "php" : ">=5.4.0",
+        "zendframework/zendframework" : ">=2.3.2,<3.0.0"
+    },
+    "require-dev": {
+        "satooshi/php-coveralls": "dev-master"
+    },
+    "suggest": {
+        "los/losbase": "los/losbase for some abstract classes to speed development ",
+        "los/loslog": "los/loslog for logging",
+        "los/losui" : "los/losui for twitter bootstrap 3 styling, jquery, chosen and other libraries"
+    },        
+    "authors" : [ 
+        {
+            "name" : "Leandro Silva",
+            "email" : "leandro@leandrosilva.info",
+            "homepage" : "http://leandrosilva.info"
+        } 
+    ],
+    "keywords" : [ "los", "recaptcha", "captcha", "module", "zf2" ],
+    "autoload" : {
+        "psr-4" : {
+            "LosReCaptcha\\" : "src/"
+        },
+        "psr-0" : {
+            "LosReCaptcha\\" : "src/"
+        },
+        "classmap" : [ "./" ]
+    },
+    "license" : "BSD-3-Clause",
+    "type" : "library",
+    "homepage" : "http://github.com/Lansoweb/LosReCaptcha"
+}
diff --git a/vendor/los/losrecaptcha/config/module.config.php b/vendor/los/losrecaptcha/config/module.config.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d29de8f9dda88f6776c649e4e7ebd893f52374e
--- /dev/null
+++ b/vendor/los/losrecaptcha/config/module.config.php
@@ -0,0 +1,8 @@
+<?php
+return [
+    'view_helpers' => [
+        'invokables' => [
+            'losrecaptcha/recaptcha' => 'LosReCaptcha\Form\View\Helper\Captcha\ReCaptcha',
+        ],
+    ],
+];
diff --git a/vendor/los/losrecaptcha/src/LosReCaptcha/Captcha/ReCaptcha.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Captcha/ReCaptcha.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4efa566f065a795f3b41af951cb448eacfeee90
--- /dev/null
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Captcha/ReCaptcha.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace LosReCaptcha\Captcha;
+
+use Traversable;
+use LosReCaptcha\Service\ReCaptcha as ReCaptchaService;
+use Zend\Captcha\ReCaptcha as ZendReCaptcha;
+use Zend\Stdlib\ArrayUtils;
+
+/**
+ * ReCaptcha adapter
+ *
+ * Allows to insert captchas driven by ReCaptcha service
+ *
+ * @see http://recaptcha.net/apidocs/captcha/
+ */
+class ReCaptcha extends ZendReCaptcha
+{
+
+    /**
+     * Error messages
+     *
+     * @var array
+     */
+    protected $messageTemplates = array(
+        self::MISSING_VALUE => 'Missing captcha field',
+        self::ERR_CAPTCHA => 'Failed to validate captcha',
+        self::BAD_CAPTCHA => 'Captcha value is wrong: %value%'
+    );
+
+    /**
+     * Constructor
+     *
+     * @param null|array|Traversable $options
+     */
+    public function __construct($options = null)
+    {
+        $this->service = new ReCaptchaService();
+        $this->serviceParams = $this->getService()->getParams();
+        $this->serviceOptions = $this->getService()->getOptions();
+
+        if ($options instanceof Traversable) {
+            $options = ArrayUtils::iteratorToArray($options);
+        }
+
+        if (isset($this->messageTemplates)) {
+            $this->abstractOptions['messageTemplates'] = $this->messageTemplates;
+        }
+
+        if (isset($this->messageVariables)) {
+            $this->abstractOptions['messageVariables'] = $this->messageVariables;
+        }
+
+        if (is_array($options)) {
+            $this->setOptions($options);
+        }
+
+        if (! empty($options)) {
+            if (array_key_exists('secret_key', $options)) {
+                $this->getService()->setSecretKey($options['secret_key']);
+            } elseif (array_key_exists('private_key', $options)) {
+                $this->getService()->setPrivateKey($options['private_key']);
+            }
+            if (array_key_exists('site_key', $options)) {
+                $this->getService()->setSiteKey($options['site_key']);
+            } elseif (array_key_exists('public_key', $options)) {
+                $this->getService()->setPublicKey($options['public_key']);
+            }
+            $this->setOptions($options);
+        }
+    }
+
+    /**
+     * Validate captcha
+     *
+     * @see \Zend\Validator\ValidatorInterface::isValid()
+     * @param mixed $value
+     * @param mixed $context
+     * @return bool
+     */
+    public function isValid($value, $context = null)
+    {
+        if (! is_array($value) && ! is_array($context)) {
+            $this->error(self::MISSING_VALUE);
+            return false;
+        }
+
+        if (! is_array($value) && is_array($context)) {
+            $value = $context;
+        }
+
+        if (empty($value[$this->RESPONSE])) {
+            $this->error(self::MISSING_VALUE);
+            return false;
+        }
+
+        $service = $this->getService();
+
+        $res = $service->verify($value[$this->RESPONSE]);
+        if (! $res) {
+            $this->error(self::ERR_CAPTCHA);
+            return false;
+        }
+
+        if (! $res->isValid()) {
+            $this->error(self::BAD_CAPTCHA, $res->getErrorCode());
+            $service->setParam('error', $res->getErrorCode());
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Get helper name used to render captcha
+     *
+     * @return string
+     */
+    public function getHelperName()
+    {
+        return "losrecaptcha/recaptcha";
+    }
+}
diff --git a/vendor/los/losrecaptcha/src/LosReCaptcha/Form/View/Helper/Captcha/ReCaptcha.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Form/View/Helper/Captcha/ReCaptcha.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d1938f8909d13d65872a3b14195bbdddc1fc340
--- /dev/null
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Form/View/Helper/Captcha/ReCaptcha.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace LosReCaptcha\Form\View\Helper\Captcha;
+
+use Zend\Captcha\ReCaptcha as CaptchaAdapter;
+use Zend\Form\ElementInterface;
+use Zend\Form\Exception;
+use Zend\Form\View\Helper\FormInput;
+
+class ReCaptcha extends FormInput
+{
+    /**
+     * Invoke helper as functor
+     *
+     * Proxies to {@link render()}.
+     *
+     * @param  ElementInterface $element
+     * @return string
+     */
+    public function __invoke(ElementInterface $element = null)
+    {
+        if (!$element) {
+            return $this;
+        }
+
+        return $this->render($element);
+    }
+
+    /**
+     * Render ReCaptcha form elements
+     *
+     * @param  ElementInterface $element
+     * @throws Exception\DomainException
+     * @return string
+     */
+    public function render(ElementInterface $element)
+    {
+        $attributes = $element->getAttributes();
+        $captcha = $element->getCaptcha();
+
+        if ($captcha === null || !$captcha instanceof CaptchaAdapter) {
+            throw new Exception\DomainException(sprintf(
+                '%s requires that the element has a "captcha" attribute implementing Zend\Captcha\AdapterInterface; none found',
+                __METHOD__
+            ));
+        }
+
+        $name          = $element->getName();
+        $id            = isset($attributes['id']) ? $attributes['id'] : $name;
+        $responseName  = empty($name) ? 'recaptcha_response_field'  : $name . '[recaptcha_response_field]';
+        $responseId    = $id . '-response';
+
+        $markup = $captcha->getService()->getHtml($name);
+        $hidden = $this->renderHiddenInput($responseName, $responseId);
+        $js     = $this->renderJsEvents($responseId);
+
+        return $hidden . $markup . $js;
+    }
+
+    /**
+     * Render hidden input elements for the response
+     *
+     * @param  string $responseName
+     * @param  string $responseId
+     * @return string
+     */
+    protected function renderHiddenInput($responseName, $responseId)
+    {
+        $pattern        = '<input type="hidden" %s%s';
+        $closingBracket = $this->getInlineClosingBracket();
+
+        $attributes = $this->createAttributesString(array(
+            'name' => $responseName,
+            'id'   => $responseId,
+        ));
+        $response = sprintf($pattern, $attributes, $closingBracket);
+
+        return $response;
+    }
+
+    /**
+     * Create the JS events used to bind the response value to the submitted form.
+     *
+     * @param  string $challengeId
+     * @param  string $responseId
+     * @return string
+     */
+    protected function renderJsEvents($responseId)
+    {
+        $elseif = 'else if'; // php-cs-fixer bug
+        $js =<<<EOJ
+<script type="text/javascript" language="JavaScript">
+function windowOnLoad(fn)
+{
+    var old = window.onload;
+    window.onload = function () {
+        if (old) {
+            old();
+        }
+        fn();
+    };
+}
+function zendBindEvent(el, eventName, eventHandler)
+{
+    if (el.addEventListener) {
+        el.addEventListener(eventName, eventHandler, false);
+    } $elseif (el.attachEvent) {
+        el.attachEvent('on'+eventName, eventHandler);
+    }
+}
+windowOnLoad(function () {
+    zendBindEvent(
+        document.getElementById("$responseId").form,
+        'submit',
+        function (e) {
+            document.getElementById("$responseId").value = document.getElementById("g-recaptcha-response").value;
+        }
+    );
+});
+</script>
+EOJ;
+        return $js;
+    }
+}
diff --git a/vendor/los/losrecaptcha/src/LosReCaptcha/Module.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Module.php
new file mode 100644
index 0000000000000000000000000000000000000000..147312cae19e6b0ef55b3a32df6094896ff60a64
--- /dev/null
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Module.php
@@ -0,0 +1,46 @@
+<?php
+namespace LosReCaptcha;
+
+use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
+use Zend\ModuleManager\Feature\LocatorRegisteredInterface;
+use DoctrineORMModule\Stdlib\Hydrator\DoctrineEntity;
+use Zend\Console\Adapter\AdapterInterface as Console;
+use Zend\ModuleManager\Feature\ConsoleUsageProviderInterface;
+use Zend\EventManager\EventInterface;
+use Zend\ServiceManager\ServiceLocatorInterface;
+
+class Module implements AutoloaderProviderInterface,
+        LocatorRegisteredInterface
+{
+    private $sm;
+    public function onBootstrap(EventInterface $e)
+    {
+        $this->sm = $e->getApplication()->getServiceManager();
+    }
+
+    public function getServiceConfig()
+    {
+        return [
+        ];
+    }
+
+    public function getAutoloaderConfig()
+    {
+        return [
+            'Zend\Loader\ClassMapAutoloader' => [
+                __DIR__.'/../../autoload_classmap.php',
+            ],
+            'Zend\Loader\StandardAutoloader' => [
+                'namespaces' => [
+                    __NAMESPACE__ => __DIR__,
+                ],
+            ],
+        ];
+    }
+
+    public function getConfig()
+    {
+        return include __DIR__.'/../../config/module.config.php';
+    }
+
+}
diff --git a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Exception.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/Exception.php
similarity index 93%
rename from vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Exception.php
rename to vendor/los/losrecaptcha/src/LosReCaptcha/Service/Exception.php
index 0463d835a9255bb9af1faf788282157deab77e6b..d5d15051506a9d9e79d1bcb0092674d0e69a61f1 100644
--- a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Exception.php
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/Exception.php
@@ -8,7 +8,7 @@
  * @package   Zend_Service
  */
 
-namespace ZendService\ReCaptcha;
+namespace LosReCaptcha\Service;
 
 /**
  * Zend_Service_ReCaptcha_Exception
diff --git a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/ReCaptcha.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/ReCaptcha.php
similarity index 73%
rename from vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/ReCaptcha.php
rename to vendor/los/losrecaptcha/src/LosReCaptcha/Service/ReCaptcha.php
index 1f8fd8c0550c216e982d8c07787e7c541fb86a1d..a95cf2a66f714e999ee0c31826ba5cd0496a1613 100644
--- a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/ReCaptcha.php
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/ReCaptcha.php
@@ -8,14 +8,13 @@
  * @package   Zend_Service
  */
 
-namespace ZendService\ReCaptcha;
+namespace LosReCaptcha\Service;
 
 use Traversable;
 use Zend\Http\Client as HttpClient;
 use Zend\Http\Request as HttpRequest;
 use Zend\Stdlib\ArrayUtils;
 
-
 /**
  * Zend_Service_ReCaptcha
  *
@@ -44,21 +43,21 @@ class ReCaptcha
      *
      * @var string
      */
-    const VERIFY_SERVER = 'http://www.google.com/recaptcha/api/verify';
+    const VERIFY_SERVER = 'https://www.google.com/recaptcha/api/siteverify';
 
     /**
      * Public key used when displaying the captcha
      *
      * @var string
      */
-    protected $publicKey = null;
+    protected $siteKey = null;
 
     /**
      * Private key used when verifying user input
      *
      * @var string
      */
-    protected $privateKey = null;
+    protected $secretKey = null;
 
     /**
      * Ip address used when verifying user input
@@ -74,7 +73,6 @@ class ReCaptcha
      */
     protected $params = array(
         'ssl' => false, /* Use SSL or not when generating the recaptcha */
-        'error' => null, /* The error message to display in the recaptcha */
         'xhtml' => false /* Enable XHTML output (this will not be XHTML Strict
                             compliant since the IFRAME is necessary when
                             Javascript is disabled) */
@@ -83,13 +81,13 @@ class ReCaptcha
     /**
      * Options for tailoring reCaptcha
      *
-     * See the different options on http://recaptcha.net/apidocs/captcha/client.html
+     * See the different options on https://developers.google.com/recaptcha/docs/display#config
      *
      * @var array
      */
     protected $options = array(
-        'theme' => 'red',
-        'lang' => 'en',
+        'theme' => 'light',
+        'lang' => null, // Auto-detect
     );
 
     /**
@@ -107,20 +105,20 @@ class ReCaptcha
     /**
      * Class constructor
      *
-     * @param string $publicKey
-     * @param string $privateKey
+     * @param string $siteKey
+     * @param string $secretKey
      * @param array|Traversable $params
      * @param array|Traversable $options
      * @param string $ip
      */
-    public function __construct($publicKey = null, $privateKey = null, $params = null, $options = null, $ip = null, HttpClient $httpClient = null)
+    public function __construct($siteKey = null, $secretKey = null, $params = null, $options = null, $ip = null, HttpClient $httpClient = null)
     {
-        if ($publicKey !== null) {
-            $this->setPublicKey($publicKey);
+        if ($siteKey !== null) {
+            $this->setPublicKey($siteKey);
         }
 
-        if ($privateKey !== null) {
-            $this->setPrivateKey($privateKey);
+        if ($secretKey !== null) {
+            $this->setPrivateKey($secretKey);
         }
 
         if ($ip !== null) {
@@ -319,6 +317,52 @@ class ReCaptcha
         return $this->options[$key];
     }
 
+    /**
+     * Get the site key
+     *
+     * @return string
+     */
+    public function getSiteKey()
+    {
+        return $this->siteKey;
+    }
+
+    /**
+     * Set the site key
+     *
+     * @param string $siteKey
+     * @return \ZendService\ReCaptcha\ReCaptcha
+     */
+    public function setSiteKey($siteKey)
+    {
+        $this->siteKey = $siteKey;
+
+        return $this;
+    }
+
+    /**
+     * Get the secret key
+     *
+     * @return string
+     */
+    public function getSecretKey()
+    {
+        return $this->secretKey;
+    }
+
+    /**
+     * Set the secret key
+     *
+     * @param string $secreteKey
+     * @return \ZendService\ReCaptcha\ReCaptcha
+     */
+    public function setSecretKey($secretKey)
+    {
+        $this->secretKey = $secretKey;
+
+        return $this;
+    }
+
     /**
      * Get the public key
      *
@@ -326,7 +370,7 @@ class ReCaptcha
      */
     public function getPublicKey()
     {
-        return $this->publicKey;
+        return $this->getSiteKey();
     }
 
     /**
@@ -337,9 +381,7 @@ class ReCaptcha
      */
     public function setPublicKey($publicKey)
     {
-        $this->publicKey = $publicKey;
-
-        return $this;
+        return $this->setSiteKey($publicKey);
     }
 
     /**
@@ -349,7 +391,7 @@ class ReCaptcha
      */
     public function getPrivateKey()
     {
-        return $this->privateKey;
+        return $this->getSecretKey();
     }
 
     /**
@@ -360,9 +402,7 @@ class ReCaptcha
      */
     public function setPrivateKey($privateKey)
     {
-        $this->privateKey = $privateKey;
-
-        return $this;
+        return $this->setSecretKey($privateKey);
     }
 
     /**
@@ -376,7 +416,7 @@ class ReCaptcha
      */
     public function getHtml($name = null)
     {
-        if ($this->publicKey === null) {
+        if ($this->siteKey === null) {
             throw new Exception('Missing public key');
         }
 
@@ -394,60 +434,42 @@ class ReCaptcha
             $htmlInputClosing = '/>';
         }
 
-        $errorPart = '';
-
-        if (!empty($this->params['error'])) {
-            $errorPart = '&error=' . urlencode($this->params['error']);
-        }
-
-        $reCaptchaOptions = '';
+        $langOption = '';
 
-        if (!empty($this->options)) {
-            $encoded = \Zend\Json\Json::encode($this->options);
-            $reCaptchaOptions = <<<SCRIPT
-<script type="text/javascript">
-    var RecaptchaOptions = {$encoded};
-</script>
-SCRIPT;
-        }
-        $challengeField = 'recaptcha_challenge_field';
-        $responseField  = 'recaptcha_response_field';
-        if (!empty($name)) {
-            $challengeField = $name . '[' . $challengeField . ']';
-            $responseField  = $name . '[' . $responseField . ']';
+        if (isset($this->options['lang']) && !empty($this->options['lang'])) {
+            $langOption = "?hl={$this->options['lang']}";
         }
 
-        $return = $reCaptchaOptions;
-        $return .= <<<HTML
-<script type="text/javascript"
-   src="{$host}/challenge?k={$this->publicKey}{$errorPart}">
-</script>
-HTML;
-        $return .= <<<HTML
+        $return = <<<HTML
+<div id="recaptcha_widget" class="g-recaptcha" data-sitekey="{$this->siteKey}" data-theme="{$this->options['theme']}"></div>
 <noscript>
-   <iframe src="{$host}/noscript?k={$this->publicKey}{$errorPart}"
-       height="300" width="500" frameborder="0"></iframe>{$htmlBreak}
-   <textarea name="{$challengeField}" rows="3" cols="40">
-   </textarea>
-   <input type="hidden" name="{$responseField}"
-       value="manual_challenge"{$htmlInputClosing}
+    <div style="width: 302px; height: 352px;">
+        <div style="width: 302px; height: 352px; position: relative;">
+            <div style="width: 302px; height: 352px; position: absolute;">
+                <iframe src="{$host}/fallback?k={$this->siteKey}" frameborder="0" scrolling="no" style="width: 302px; height:352px; border-style: none;"></iframe>
+            </div>
+            <div style="width: 250px; height: 80px; position: absolute; border-style: none; bottom: 21px; left: 25px; margin: 0px; padding: 0px; right: 25px;">
+                <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 80px; border: 1px solid #c1c1c1; margin: 0px; padding: 0px; resize: none;" value=""></textarea>
+            </div>
+        </div>
+    </div>
 </noscript>
+<script type="text/javascript" src="{$host}.js{$langOption}" async defer></script>
 HTML;
 
         return $return;
     }
 
     /**
-     * Post a solution to the verify server
+     * Gets a solution to the verify server
      *
-     * @param string $challengeField
      * @param string $responseField
      * @return \Zend\Http\Response
      * @throws \ZendService\ReCaptcha\Exception
      */
-    protected function post($challengeField, $responseField)
+    protected function query($responseField)
     {
-        if ($this->privateKey === null) {
+        if ($this->secretKey === null) {
             throw new Exception('Missing private key');
         }
 
@@ -455,26 +477,17 @@ HTML;
             throw new Exception('Missing ip address');
         }
 
-        if (empty($challengeField)) {
-            throw new Exception('Missing challenge field');
-        }
-
-        if (empty($responseField)) {
-            throw new Exception('Missing response field');
-        }
-
         /* Fetch an instance of the http client */
         $httpClient = $this->getHttpClient();
 
-        $postParams = array('privatekey' => $this->privateKey,
+        $queryParams = array('secret' => $this->secretKey,
                             'remoteip'   => $this->ip,
-                            'challenge'  => $challengeField,
                             'response'   => $responseField);
 
         $request = new HttpRequest;
         $request->setUri(self::VERIFY_SERVER);
-        $request->getPost()->fromArray($postParams);
-        $request->setMethod(HttpRequest::METHOD_POST);
+        $request->getQuery()->fromArray($queryParams);
+        $request->setMethod(HttpRequest::METHOD_GET);
         $httpClient->setEncType($httpClient::ENC_URLENCODED);
 
         return $httpClient->send($request);
@@ -486,13 +499,12 @@ HTML;
      * This method calls up the post method and returns a
      * Zend_Service_ReCaptcha_Response object.
      *
-     * @param string $challengeField
      * @param string $responseField
      * @return \ZendService\ReCaptcha\Response
      */
-    public function verify($challengeField, $responseField)
+    public function verify($responseField)
     {
-        $response = $this->post($challengeField, $responseField);
+        $response = $this->query($responseField);
         return new Response(null, null, $response);
     }
 }
diff --git a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Response.php b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/Response.php
similarity index 86%
rename from vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Response.php
rename to vendor/los/losrecaptcha/src/LosReCaptcha/Service/Response.php
index dbf3f0e169f0caf940c74fdfc0688574bcffa44b..7ed9a337b190247ad1906888229aa440aad51bc8 100644
--- a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/Response.php
+++ b/vendor/los/losrecaptcha/src/LosReCaptcha/Service/Response.php
@@ -8,7 +8,7 @@
  * @package   Zend_Service
  */
 
-namespace ZendService\ReCaptcha;
+namespace LosReCaptcha\Service;
 
 use Zend\Http\Response as HTTPResponse;
 
@@ -65,16 +65,12 @@ class Response
     /**
      * Set the status
      *
-     * @param string $status
+     * @param boolean $status
      * @return \ZendService\ReCaptcha\Response
      */
     public function setStatus($status)
     {
-        if ($status === 'true') {
-            $this->status = true;
-        } else {
-            $this->status = false;
-        }
+        $this->status = (bool) $status;
 
         return $this;
     }
@@ -132,13 +128,16 @@ class Response
     {
         $body = $response->getBody();
 
-        $parts = explode("\n", $body, 2);
+        $parts = json_decode($body, true);
+
+        $status = false;
+        $errorCode = '';
 
-        if (count($parts) !== 2) {
-            $status = 'false';
-            $errorCode = '';
-        } else {
-            list($status, $errorCode) = $parts;
+        if (is_array($parts) && array_key_exists('success', $parts)) {
+            $status = $parts['success'];
+            if (array_key_exists('error-codes', $parts)) {
+                $errorCode = implode(', ',$parts['error-codes']);
+            }
         }
 
         $this->setStatus($status);
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php
index 756a12a75ae5fe0b1771cc50ca6f12906120808a..fd5deeabe499854912966896d4bb4dc727f15206 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php
@@ -19,6 +19,6 @@ namespace Symfony\Component\CssSelector\Exception;
  *
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  */
-class ExpressionErrorException extends ParseException implements ExceptionInterface
+class ExpressionErrorException extends ParseException
 {
 }
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php
index 2decde67fedfc06cd27ce67edc49e60c8db32bfc..e60e5ed0f21d9abfb708c41f6b283d3677e7e153 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php
@@ -19,6 +19,6 @@ namespace Symfony\Component\CssSelector\Exception;
  *
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  */
-class InternalErrorException extends ParseException implements ExceptionInterface
+class InternalErrorException extends ParseException
 {
 }
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php
index 831b001340f9b051836053ef3d86f073e46b6223..418bc301cbca9a4d07193681081f613fd0c4d0eb 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php
@@ -21,7 +21,7 @@ use Symfony\Component\CssSelector\Parser\Token;
  *
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  */
-class SyntaxErrorException extends ParseException implements ExceptionInterface
+class SyntaxErrorException extends ParseException
 {
     /**
      * @param string $expectedValue
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php
index 8184b832b3c2529aee32f8eed002eb0fe095a279..c0525d7a833642e279016d779d12c2ba4dc9a32f 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php
@@ -100,7 +100,7 @@ class TokenStream
             throw new InternalErrorException('Unexpected token stream end.');
         }
 
-        return $this->tokens[$this->cursor ++];
+        return $this->tokens[$this->cursor++];
     }
 
     /**
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md b/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
index ef28bc9d17775a80b1ca0644b95bf6717e8036d4..ffe6c890f6b350a8468a4fd139c46af4b8280497 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/README.md
@@ -43,5 +43,5 @@ which is distributed under the BSD license.
 You can run the unit tests with the following command:
 
     $ cd path/to/Symfony/Component/CssSelector/
-    $ composer.phar install
+    $ composer install
     $ phpunit
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php
index 50daeccd1d27819f4edff05235c489cd5f344926..61ab80eec8d0b7fc3961cf6058c1b38e35b84fda 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/CssSelectorTest.php
@@ -37,23 +37,23 @@ class CssSelectorTest extends \PHPUnit_Framework_TestCase
             $this->fail('->parse() throws an Exception if the css selector is not valid');
         } catch (\Exception $e) {
             $this->assertInstanceOf('\Symfony\Component\CssSelector\Exception\ParseException', $e, '->parse() throws an Exception if the css selector is not valid');
-            $this->assertEquals("Expected identifier, but <eof at 3> found.", $e->getMessage(), '->parse() throws an Exception if the css selector is not valid');
+            $this->assertEquals('Expected identifier, but <eof at 3> found.', $e->getMessage(), '->parse() throws an Exception if the css selector is not valid');
         }
     }
 
     public function getCssToXPathWithoutPrefixTestData()
     {
         return array(
-            array('h1', "h1"),
-            array('foo|h1', "foo:h1"),
-            array('h1, h2, h3', "h1 | h2 | h3"),
+            array('h1', 'h1'),
+            array('foo|h1', 'foo:h1'),
+            array('h1, h2, h3', 'h1 | h2 | h3'),
             array('h1:nth-child(3n+1)', "*/*[name() = 'h1' and (position() - 1 >= 0 and (position() - 1) mod 3 = 0)]"),
-            array('h1 > p', "h1/p"),
+            array('h1 > p', 'h1/p'),
             array('h1#foo', "h1[@id = 'foo']"),
             array('h1.foo', "h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
             array('h1[class*="foo bar"]', "h1[@class and contains(@class, 'foo bar')]"),
             array('h1[foo|class*="foo bar"]', "h1[@foo:class and contains(@foo:class, 'foo bar')]"),
-            array('h1[class]', "h1[@class]"),
+            array('h1[class]', 'h1[@class]'),
             array('h1 .foo', "h1/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
             array('h1 #foo', "h1/descendant-or-self::*/*[@id = 'foo']"),
             array('h1 [class*=foo]', "h1/descendant-or-self::*/*[@class and contains(@class, 'foo')]"),
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php
index 30f7189f06f18ba248e02af0515a12b0dbd99b6e..143328f412774620c6fe4470464fc0b98e0ad6de 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php
@@ -90,12 +90,12 @@ class TranslatorTest extends \PHPUnit_Framework_TestCase
     public function getCssToXPathTestData()
     {
         return array(
-            array('*', "*"),
-            array('e', "e"),
-            array('*|e', "e"),
-            array('e|f', "e:f"),
-            array('e[foo]', "e[@foo]"),
-            array('e[foo|bar]', "e[@foo:bar]"),
+            array('*', '*'),
+            array('e', 'e'),
+            array('*|e', 'e'),
+            array('e|f', 'e:f'),
+            array('e[foo]', 'e[@foo]'),
+            array('e[foo|bar]', 'e[@foo:bar]'),
             array('e[foo="bar"]', "e[@foo = 'bar']"),
             array('e[foo~="bar"]', "e[@foo and contains(concat(' ', normalize-space(@foo), ' '), ' bar ')]"),
             array('e[foo^="bar"]', "e[@foo and starts-with(@foo, 'bar')]"),
@@ -105,29 +105,29 @@ class TranslatorTest extends \PHPUnit_Framework_TestCase
             array('e:nth-child(1)', "*/*[name() = 'e' and (position() = 1)]"),
             array('e:nth-last-child(1)', "*/*[name() = 'e' and (position() = last() - 0)]"),
             array('e:nth-last-child(2n+2)', "*/*[name() = 'e' and (last() - position() - 1 >= 0 and (last() - position() - 1) mod 2 = 0)]"),
-            array('e:nth-of-type(1)', "*/e[position() = 1]"),
-            array('e:nth-last-of-type(1)', "*/e[position() = last() - 0]"),
+            array('e:nth-of-type(1)', '*/e[position() = 1]'),
+            array('e:nth-last-of-type(1)', '*/e[position() = last() - 0]'),
             array('div e:nth-last-of-type(1) .aclass', "div/descendant-or-self::*/e[position() = last() - 0]/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' aclass ')]"),
             array('e:first-child', "*/*[name() = 'e' and (position() = 1)]"),
             array('e:last-child', "*/*[name() = 'e' and (position() = last())]"),
-            array('e:first-of-type', "*/e[position() = 1]"),
-            array('e:last-of-type', "*/e[position() = last()]"),
+            array('e:first-of-type', '*/e[position() = 1]'),
+            array('e:last-of-type', '*/e[position() = last()]'),
             array('e:only-child', "*/*[name() = 'e' and (last() = 1)]"),
-            array('e:only-of-type', "e[last() = 1]"),
-            array('e:empty', "e[not(*) and not(string-length())]"),
-            array('e:EmPTY', "e[not(*) and not(string-length())]"),
-            array('e:root', "e[not(parent::*)]"),
-            array('e:hover', "e[0]"),
+            array('e:only-of-type', 'e[last() = 1]'),
+            array('e:empty', 'e[not(*) and not(string-length())]'),
+            array('e:EmPTY', 'e[not(*) and not(string-length())]'),
+            array('e:root', 'e[not(parent::*)]'),
+            array('e:hover', 'e[0]'),
             array('e:contains("foo")', "e[contains(string(.), 'foo')]"),
             array('e:ConTains(foo)', "e[contains(string(.), 'foo')]"),
             array('e.warning', "e[@class and contains(concat(' ', normalize-space(@class), ' '), ' warning ')]"),
             array('e#myid', "e[@id = 'myid']"),
-            array('e:not(:nth-child(odd))', "e[not(position() - 1 >= 0 and (position() - 1) mod 2 = 0)]"),
-            array('e:nOT(*)', "e[0]"),
-            array('e f', "e/descendant-or-self::*/f"),
-            array('e > f', "e/f"),
+            array('e:not(:nth-child(odd))', 'e[not(position() - 1 >= 0 and (position() - 1) mod 2 = 0)]'),
+            array('e:nOT(*)', 'e[0]'),
+            array('e f', 'e/descendant-or-self::*/f'),
+            array('e > f', 'e/f'),
             array('e + f', "e/following-sibling::*[name() = 'f' and (position() = 1)]"),
-            array('e ~ f', "e/following-sibling::f"),
+            array('e ~ f', 'e/following-sibling::f'),
             array('div#container p', "div[@id = 'container']/descendant-or-self::*/p"),
         );
     }
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
index 883156be7091f4cc111714084e94cd8a7d83360b..0da74d47273fb9b5c1fe0af4971f3ca4fd4d4306 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
@@ -98,9 +98,9 @@ class HtmlExtension extends AbstractExtension
     public function translateDisabled(XPathExpr $xpath)
     {
         return $xpath->addCondition(
-            "("
-                ."@disabled and"
-                ."("
+            '('
+                .'@disabled and'
+                .'('
                     ."(name(.) = 'input' and @type != 'hidden')"
                     ." or name(.) = 'button'"
                     ." or name(.) = 'select'"
@@ -109,14 +109,14 @@ class HtmlExtension extends AbstractExtension
                     ." or name(.) = 'fieldset'"
                     ." or name(.) = 'optgroup'"
                     ." or name(.) = 'option'"
-                .")"
-            .") or ("
+                .')'
+            .') or ('
                 ."(name(.) = 'input' and @type != 'hidden')"
                 ." or name(.) = 'button'"
                 ." or name(.) = 'select'"
                 ." or name(.) = 'textarea'"
-            .")"
-            ." and ancestor::fieldset[@disabled]"
+            .')'
+            .' and ancestor::fieldset[@disabled]'
         );
         // todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any."
     }
@@ -150,10 +150,10 @@ class HtmlExtension extends AbstractExtension
                     ." or name(.) = 'textarea'"
                     ." or name(.) = 'keygen'"
                 .')'
-                ." and not (@disabled or ancestor::fieldset[@disabled])"
+                .' and not (@disabled or ancestor::fieldset[@disabled])'
             .') or ('
                 ."name(.) = 'option' and not("
-                    ."@disabled or ancestor::optgroup[@disabled]"
+                    .'@disabled or ancestor::optgroup[@disabled]'
                 .')'
             .')'
         );
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json b/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
index d47c77fe6444aca9ce20659b8730c3341e8dc54c..bf3cbb27e46299ed25441e077ec393f3d257156f 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony CssSelector Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -16,12 +16,15 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
         "php": ">=5.3.3"
     },
+    "require-dev": {
+        "symfony/phpunit-bridge": "~2.7"
+    },
     "autoload": {
         "psr-0": { "Symfony\\Component\\CssSelector\\": "" }
     },
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist b/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
index 7f885331517be1bd8fd14e162595292cdd5c5ab2..bc57cfcdfa8d8b0dcb16f7986ca4f075e7ee101b 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/phpunit.xml.dist
@@ -7,8 +7,7 @@
          bootstrap="vendor/autoload.php"
 >
     <php>
-        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
-        <ini name="error_reporting" value="-16385"/>
+        <ini name="error_reporting" value="-1" />
     </php>
     <testsuites>
         <testsuite name="Symfony CssSelector Component Test Suite">
diff --git a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
index bc25154a8ed2decab6ace8d3bcf02f8eafaa7cc9..6a5858748a16501677c8354f40d0bad45096cd06 100644
--- a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
+++ b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
@@ -26,8 +26,6 @@ use Symfony\Component\Process\Exception\RuntimeException;
  */
 class PhpProcess extends Process
 {
-    private $executableFinder;
-
     /**
      * Constructor.
      *
@@ -41,9 +39,12 @@ class PhpProcess extends Process
      */
     public function __construct($script, $cwd = null, array $env = array(), $timeout = 60, array $options = array())
     {
-        parent::__construct(null, $cwd, $env, $script, $timeout, $options);
+        $executableFinder = new PhpExecutableFinder();
+        if (false === $php = $executableFinder->find()) {
+            $php = null;
+        }
 
-        $this->executableFinder = new PhpExecutableFinder();
+        parent::__construct($php, $cwd, $env, $script, $timeout, $options);
     }
 
     /**
@@ -62,10 +63,7 @@ class PhpProcess extends Process
     public function start($callback = null)
     {
         if (null === $this->getCommandLine()) {
-            if (false === $php = $this->executableFinder->find()) {
-                throw new RuntimeException('Unable to find the PHP executable.');
-            }
-            $this->setCommandLine($php);
+            throw new RuntimeException('Unable to find the PHP executable.');
         }
 
         parent::start($callback);
diff --git a/vendor/symfony/process/Symfony/Component/Process/Process.php b/vendor/symfony/process/Symfony/Component/Process/Process.php
index ece751d17e89ff864a8895cd2c8ce54ff39935af..ba619ce1cc9688e1dd7112f6e057c8bdb11ff5a5 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Process.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Process.php
@@ -254,8 +254,6 @@ class Process
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
      *
-     * @return Process The process itself
-     *
      * @throws RuntimeException When process can't be launched
      * @throws RuntimeException When process is already running
      * @throws LogicException   In case a callback is provided and output has been disabled
@@ -798,7 +796,7 @@ class Process
         $timeoutMicro = microtime(true) + $timeout;
         if ($this->isRunning()) {
             if ('\\' === DIRECTORY_SEPARATOR && !$this->isSigchildEnabled()) {
-                exec(sprintf("taskkill /F /T /PID %d 2>&1", $this->getPid()), $output, $exitCode);
+                exec(sprintf('taskkill /F /T /PID %d 2>&1', $this->getPid()), $output, $exitCode);
                 if ($exitCode > 0) {
                     throw new RuntimeException('Unable to kill the process');
                 }
@@ -949,6 +947,9 @@ class Process
         if ('\\' === DIRECTORY_SEPARATOR && $tty) {
             throw new RuntimeException('TTY mode is not supported on Windows platform.');
         }
+        if ($tty && (!file_exists('/dev/tty') || !is_readable('/dev/tty'))) {
+            throw new RuntimeException('TTY mode requires /dev/tty to be readable.');
+        }
 
         $this->tty = (bool) $tty;
 
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php b/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
index 189ab8a3d13f653e010c66d3ccadd56e1f63cf58..5262ce25dd5145a6fea409611051ccdb288f9858 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
@@ -68,7 +68,7 @@ class ProcessBuilder
     }
 
     /**
-     * Adds an unescaped prefix to the command string.
+     * Adds a prefix to the command string.
      *
      * The prefix is preserved when resetting arguments.
      *
@@ -167,8 +167,6 @@ class ProcessBuilder
     /**
      * Sets the input of the process.
      *
-     * Deprecation: As of Symfony 2.5, this method only accepts string values.
-     *
      * @param string|null $input The input as a string
      *
      * @return ProcessBuilder
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
index 0f4cb89e6b483aa92c1d7bf3e05e86c1994ecb7f..60701a6cde96e2c8ab7f2fe6ef565100e1931ea6 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
@@ -48,7 +48,7 @@ class ProcessUtils
             }
 
             $escapedArgument = '';
-            $quote =  false;
+            $quote = false;
             foreach (preg_split('/(")/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
                 if ('"' === $part) {
                     $escapedArgument .= '\\"';
diff --git a/vendor/symfony/process/Symfony/Component/Process/README.md b/vendor/symfony/process/Symfony/Component/Process/README.md
index 29d1cf9330441ee37ceb6300e7e9c5082ff90e2f..7c83ed413e565455377502a16122c3128e62b499 100644
--- a/vendor/symfony/process/Symfony/Component/Process/README.md
+++ b/vendor/symfony/process/Symfony/Component/Process/README.md
@@ -47,5 +47,5 @@ Resources
 You can run the unit tests with the following command:
 
     $ cd path/to/Symfony/Component/Process/
-    $ composer.phar install
+    $ composer install
     $ phpunit
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
index 5bfd1a869257c2c8445643db751cbb2afff313fa..7e26976d62ac54b8fa26302722c7b6bcf5839cf2 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
@@ -800,9 +800,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $this->assertFalse($process->isSuccessful());
     }
 
-    /**
-     * @group idle-timeout
-     */
     public function testIdleTimeout()
     {
         $process = $this->getProcess('php -r "sleep(3);"');
@@ -820,34 +817,31 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         }
     }
 
-    /**
-     * @group idle-timeout
-     */
     public function testIdleTimeoutNotExceededWhenOutputIsSent()
     {
-        $process = $this->getProcess('php -r "echo \'foo\'; sleep(1); echo \'foo\'; sleep(1); echo \'foo\'; sleep(1); "');
+        $process = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }')));
         $process->setTimeout(2);
-        $process->setIdleTimeout(1.5);
+        $process->setIdleTimeout(1);
 
         try {
             $process->run();
             $this->fail('A timeout exception was expected.');
         } catch (ProcessTimedOutException $ex) {
-            $this->assertTrue($ex->isGeneralTimeout());
-            $this->assertFalse($ex->isIdleTimeout());
+            $this->assertTrue($ex->isGeneralTimeout(), 'A general timeout is expected.');
+            $this->assertFalse($ex->isIdleTimeout(), 'No idle timeout is expected.');
             $this->assertEquals(2, $ex->getExceededTimeout());
         }
     }
 
     public function testStartAfterATimeout()
     {
-        $process = $this->getProcess('php -r "$n = 1000; while ($n--) {echo \'\'; usleep(1000); }"');
+        $process = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 1000; while ($n--) {echo \'\'; usleep(1000); }')));
         $process->setTimeout(0.1);
 
         try {
             $process->run();
-            $this->fail('An exception should have been raised.');
-        } catch (\Exception $e) {
+            $this->fail('A RuntimeException should have been raised.');
+        } catch (RuntimeException $e) {
         }
         $process->start();
         usleep(1000);
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
index 5033cdab0201da757c22e69ea28f64100c275ee5..20b12b1c3ce49441ef457fdd0331aec7b2be2d94 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
@@ -20,7 +20,7 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
 {
     private $path;
 
-    public function tearDown()
+    protected function tearDown()
     {
         if ($this->path) {
             // Restore path if it was changed.
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php
index df66ad624be314fd7be72b1835567b741b3f2e2a..5dc546cc1ce6e47f63d1739d1558595573c9f7db 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/PhpProcessTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Process\Tests;
 
+use Symfony\Component\Process\PhpExecutableFinder;
 use Symfony\Component\Process\PhpProcess;
 
 class PhpProcessTest extends \PHPUnit_Framework_TestCase
@@ -26,4 +27,23 @@ PHP
         $process->wait();
         $this->assertEquals($expected, $process->getOutput());
     }
+
+    public function testCommandLine()
+    {
+        $process = new PhpProcess(<<<PHP
+<?php echo 'foobar';
+PHP
+        );
+
+        $f = new PhpExecutableFinder();
+        $commandLine = $f->find();
+
+        $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP before start');
+
+        $process->start();
+        $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after start');
+
+        $process->wait();
+        $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after wait');
+    }
 }
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
index 02a960d4e52d443836beebcb0ee7f6eba1f4c9ca..1b5056d1bb104db63fa7981ee3e8f53848d3e9f2 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
@@ -93,7 +93,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
 
         $proc = $pb->getProcess();
 
-        $this->assertContains("second", $proc->getCommandLine());
+        $this->assertContains('second', $proc->getCommandLine());
     }
 
     public function testPrefixIsPrependedToAllGeneratedProcess()
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
index 20753df4a643ecef445bd0884c70ef02c51c4ecd..b028395f9b4de60a18e69954c316d45b72960680 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
@@ -49,8 +49,8 @@ class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
         $cmd = 'php';
         $exitCode = 1;
         $exitText = 'General error';
-        $output = "Command output";
-        $errorOutput = "FATAL: Unexpected error";
+        $output = 'Command output';
+        $errorOutput = 'FATAL: Unexpected error';
 
         $process = $this->getMock(
             'Symfony\Component\Process\Process',
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
index 32910e17068746718773733b8f6df9a2ab177736..335ac6027e8e0b16a4a1aa6c8dbd4ab6b245d227 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
@@ -3,7 +3,7 @@
 // required for signal handling
 declare (ticks = 1);
 
-pcntl_signal(SIGUSR1, function () {echo "Caught SIGUSR1"; exit;});
+pcntl_signal(SIGUSR1, function () {echo 'Caught SIGUSR1'; exit;});
 
 $n = 0;
 
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
index 0a8b12620571d9b775464d93fc9c4790dfe02688..4bf9ad87c6f0acc243ba99236dca7ff098efa13a 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
@@ -17,7 +17,7 @@ class SimpleProcessTest extends AbstractProcessTest
 {
     private $enabledSigchild = false;
 
-    public function setUp()
+    protected function setUp()
     {
         ob_start();
         phpinfo(INFO_GENERAL);
diff --git a/vendor/symfony/process/Symfony/Component/Process/composer.json b/vendor/symfony/process/Symfony/Component/Process/composer.json
index 39fa97cb59b052c2f2fb49656f4df8ddf68f034f..8ad68519e1fa491e5a19fa95175add73ef11ce14 100644
--- a/vendor/symfony/process/Symfony/Component/Process/composer.json
+++ b/vendor/symfony/process/Symfony/Component/Process/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Process Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,12 +12,15 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
         "php": ">=5.3.3"
     },
+    "require-dev": {
+        "symfony/phpunit-bridge": "~2.7"
+    },
     "autoload": {
         "psr-0": { "Symfony\\Component\\Process\\": "" }
     },
diff --git a/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist b/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
index 8f147bca733e962abcf15ead6650a74b378500d9..07b617be4b5d233944996d1fe4631700b7a2cd94 100644
--- a/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
+++ b/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
@@ -7,8 +7,7 @@
          bootstrap="vendor/autoload.php"
 >
     <php>
-        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
-        <ini name="error_reporting" value="-16385"/>
+        <ini name="error_reporting" value="-1" />
     </php>
     <testsuites>
         <testsuite name="Symfony Process Component Test Suite">
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
index f4987652aa5d656eb879d4c66fd6d62291dde4cc..ac325a2c2f259b5ae23ddee69b36707ace88f2aa 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
@@ -33,11 +33,11 @@ class Escaper
                                      "\x18",  "\x19",  "\x1a",  "\x1b",  "\x1c",  "\x1d",  "\x1e",  "\x1f",
                                      "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",);
     private static $escaped = array('\\\\', '\\"', '\\\\', '\\"',
-                                     "\\0",   "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a",
-                                     "\\b",   "\\t",   "\\n",   "\\v",   "\\f",   "\\r",   "\\x0e", "\\x0f",
-                                     "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17",
-                                     "\\x18", "\\x19", "\\x1a", "\\e",   "\\x1c", "\\x1d", "\\x1e", "\\x1f",
-                                     "\\N", "\\_", "\\L", "\\P",);
+                                     '\\0',   '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
+                                     '\\b',   '\\t',   '\\n',   '\\v',   '\\f',   '\\r',   '\\x0e', '\\x0f',
+                                     '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
+                                     '\\x18', '\\x19', '\\x1a', '\\e',   '\\x1c', '\\x1d', '\\x1e', '\\x1f',
+                                     '\\N', '\\_', '\\L', '\\P',);
 
     /**
      * Determines if a PHP value would require double quoting in YAML.
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
index 302942e02e1a2ca8a62288302784976ddb3f59c9..52ea724cf407095786be9068cf0e0dd7aa8a35b7 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
@@ -129,7 +129,7 @@ class Inline
                     setlocale(LC_NUMERIC, 'C');
                 }
                 if (is_float($value)) {
-                    $repr = strval($value);
+                    $repr = (string) $value;
                     if (is_infinite($value)) {
                         $repr = str_ireplace('INF', '.Inf', $repr);
                     } elseif (floor($value) == $value && $repr == $value) {
@@ -137,7 +137,7 @@ class Inline
                         $repr = '!!float '.$repr;
                     }
                 } else {
-                    $repr = is_string($value) ? "'$value'" : strval($value);
+                    $repr = is_string($value) ? "'$value'" : (string) $value;
                 }
                 if (false !== $locale) {
                     setlocale(LC_NUMERIC, $locale);
@@ -149,6 +149,7 @@ class Inline
             case Escaper::requiresDoubleQuoting($value):
                 return Escaper::escapeWithDoubleQuotes($value);
             case Escaper::requiresSingleQuoting($value):
+            case preg_match(self::getHexRegex(), $value):
             case preg_match(self::getTimestampRegex(), $value):
                 return Escaper::escapeWithSingleQuotes($value);
             default:
@@ -169,8 +170,9 @@ class Inline
     {
         // array
         $keys = array_keys($value);
-        if ((1 == count($keys) && '0' == $keys[0])
-            || (count($keys) > 1 && array_reduce($keys, function ($v, $w) { return (int) $v + $w; }, 0) == count($keys) * (count($keys) - 1) / 2)
+        $keysCount = count($keys);
+        if ((1 === $keysCount && '0' == $keys[0])
+            || ($keysCount > 1 && array_reduce($keys, function ($v, $w) { return (int) $v + $w; }, 0) === $keysCount * ($keysCount - 1) / 2)
         ) {
             $output = array();
             foreach ($value as $val) {
@@ -285,7 +287,7 @@ class Inline
     {
         $output = array();
         $len = strlen($sequence);
-        $i += 1;
+        ++$i;
 
         // [foo, bar, ...]
         while ($i < $len) {
@@ -344,7 +346,7 @@ class Inline
     {
         $output = array();
         $len = strlen($mapping);
-        $i += 1;
+        ++$i;
 
         // {foo: bar, bar:foo, ...}
         while ($i < $len) {
@@ -466,7 +468,7 @@ class Inline
                     case 0 === strpos($scalar, '!str'):
                         return (string) substr($scalar, 5);
                     case 0 === strpos($scalar, '! '):
-                        return intval(self::parseScalar(substr($scalar, 2)));
+                        return (int) self::parseScalar(substr($scalar, 2));
                     case 0 === strpos($scalar, '!!php/object:'):
                         if (self::$objectSupport) {
                             return unserialize(substr($scalar, 13));
@@ -481,23 +483,24 @@ class Inline
                         return (float) substr($scalar, 8);
                     case ctype_digit($scalar):
                         $raw = $scalar;
-                        $cast = intval($scalar);
+                        $cast = (int) $scalar;
 
                         return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
                     case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)):
                         $raw = $scalar;
-                        $cast = intval($scalar);
+                        $cast = (int) $scalar;
 
-                        return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
+                        return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw === (string) $cast) ? $cast : $raw);
                     case is_numeric($scalar):
-                        return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
+                    case preg_match(self::getHexRegex(), $scalar):
+                        return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar;
                     case '.inf' === $scalarLower:
                     case '.nan' === $scalarLower:
                         return -log(0);
                     case '-.inf' === $scalarLower:
                         return log(0);
                     case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
-                        return floatval(str_replace(',', '', $scalar));
+                        return (float) str_replace(',', '', $scalar);
                     case preg_match(self::getTimestampRegex(), $scalar):
                         return strtotime($scalar);
                 }
@@ -530,4 +533,14 @@ class Inline
         $~x
 EOF;
     }
+
+    /**
+     * Gets a regex that matches a YAML number in hexadecimal notation.
+     *
+     * @return string
+     */
+    private static function getHexRegex()
+    {
+        return '~^0x[0-9a-f]++$~i';
+    }
 }
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
index e9a94d7785dea7399d940651b0a9db1a820e0398..d72c7639c8337ef663dfc8472e35f82ea0f3d168 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
@@ -52,13 +52,13 @@ class Parser
      */
     public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false)
     {
-        $this->currentLineNb = -1;
-        $this->currentLine = '';
-        $this->lines = explode("\n", $this->cleanup($value));
-
         if (!preg_match('//u', $value)) {
             throw new ParseException('The YAML value does not appear to be valid UTF-8.');
         }
+        $this->currentLineNb = -1;
+        $this->currentLine = '';
+        $value = $this->cleanup($value);
+        $this->lines = explode("\n", $value);
 
         if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
             $mbEncoding = mb_internal_encoding();
@@ -93,8 +93,8 @@ class Parser
                 // array
                 if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                     $c = $this->getRealCurrentLineNb() + 1;
-                    $parser = new Parser($c);
-                    $parser->refs = & $this->refs;
+                    $parser = new self($c);
+                    $parser->refs = &$this->refs;
                     $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                 } else {
                     if (isset($values['leadspaces'])
@@ -102,8 +102,8 @@ class Parser
                     ) {
                         // this is a compact notation element, add to next block and parse
                         $c = $this->getRealCurrentLineNb();
-                        $parser = new Parser($c);
-                        $parser->refs = & $this->refs;
+                        $parser = new self($c);
+                        $parser->refs = &$this->refs;
 
                         $block = $values['value'];
                         if ($this->isNextLineIndented()) {
@@ -159,8 +159,8 @@ class Parser
                             $value = $this->getNextEmbedBlock();
                         }
                         $c = $this->getRealCurrentLineNb() + 1;
-                        $parser = new Parser($c);
-                        $parser->refs = & $this->refs;
+                        $parser = new self($c);
+                        $parser->refs = &$this->refs;
                         $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap);
 
                         if (!is_array($parsed)) {
@@ -210,8 +210,8 @@ class Parser
                         }
                     } else {
                         $c = $this->getRealCurrentLineNb() + 1;
-                        $parser = new Parser($c);
-                        $parser->refs = & $this->refs;
+                        $parser = new self($c);
+                        $parser->refs = &$this->refs;
                         $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                         // Spec: Keys MUST be unique; first one wins.
                         // But overwriting is allowed when a merge node is used in current block.
@@ -233,9 +233,8 @@ class Parser
                     throw new ParseException('Multiple documents are not supported.');
                 }
 
-                // 1-liner optionally followed by newline
-                $lineCount = count($this->lines);
-                if (1 === $lineCount || (2 === $lineCount && empty($this->lines[1]))) {
+                // 1-liner optionally followed by newline(s)
+                if ($this->lines[0] === trim($value)) {
                     try {
                         $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
                     } catch (ParseException $e) {
@@ -461,7 +460,7 @@ class Parser
         if (preg_match('/^'.self::FOLDED_SCALAR_PATTERN.'$/', $value, $matches)) {
             $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
 
-            return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
+            return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), (int) abs($modifiers));
         }
 
         try {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/README.md b/vendor/symfony/yaml/Symfony/Component/Yaml/README.md
index 96abbbfd16fa782f99afe810d8cfbb9119cfffc5..85a9786735afb6e32b4a2924d1174838771793b1 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/README.md
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/README.md
@@ -17,5 +17,5 @@ Resources
 You can run the unit tests with the following command:
 
     $ cd path/to/Symfony/Component/Yaml/
-    $ composer.phar install
+    $ composer install
     $ phpunit
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
index ad5aac3ff83408f91b1fccf229692a8288318e24..320eb5072132bc349a1a70fd0edb2f88937a6f91 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
@@ -52,7 +52,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase
 
         $required_locales = array('fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252');
         if (false === setlocale(LC_ALL, $required_locales)) {
-            $this->markTestSkipped('Could not set any of required locales: '.implode(", ", $required_locales));
+            $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $required_locales));
         }
 
         $this->assertEquals('1.2', Inline::dump(1.2));
@@ -222,8 +222,8 @@ class InlineTest extends \PHPUnit_Framework_TestCase
             array('{ foo  : bar, bar : foo,  false  :   false,  null  :   null,  integer :  12  }', array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
             array('{foo: \'bar\', bar: \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
             array('{\'foo\': \'bar\', "bar": \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
-            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', array('foo\'' => 'bar', "bar\"" => 'foo: bar')),
-            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', array('foo: ' => 'bar', "bar: " => 'foo: bar')),
+            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', array('foo\'' => 'bar', 'bar"' => 'foo: bar')),
+            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', array('foo: ' => 'bar', 'bar: ' => 'foo: bar')),
 
             // nested sequences and mappings
             array('[foo, [bar, foo]]', array('foo', array('bar', 'foo'))),
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
index 553d2fb5de519741426cd6ea909f52e5a06d4ca4..6e39e7dc660ee5c95ace44bcab21749478db3ad3 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
@@ -135,6 +135,14 @@ EOF;
         );
         $tests['Literal block chomping strip with multiple trailing newlines'] = array($expected, $yaml);
 
+        $yaml = <<<'EOF'
+{}
+
+
+EOF;
+        $expected = array();
+        $tests['Literal block chomping strip with multiple trailing newlines after a 1-liner'] = array($expected, $yaml);
+
         $yaml = <<<'EOF'
 foo: |-
     one
@@ -251,8 +259,8 @@ bar: >-
 
 EOF;
         $expected = array(
-            'foo' => "one two",
-            'bar' => "one two",
+            'foo' => 'one two',
+            'bar' => 'one two',
         );
         $tests['Folded block chomping strip with single trailing newline'] = array($expected, $yaml);
 
@@ -268,8 +276,8 @@ bar: >-
 
 EOF;
         $expected = array(
-            'foo' => "one two",
-            'bar' => "one two",
+            'foo' => 'one two',
+            'bar' => 'one two',
         );
         $tests['Folded block chomping strip with multiple trailing newlines'] = array($expected, $yaml);
 
@@ -282,8 +290,8 @@ bar: >-
     two
 EOF;
         $expected = array(
-            'foo' => "one two",
-            'bar' => "one two",
+            'foo' => 'one two',
+            'bar' => 'one two',
         );
         $tests['Folded block chomping strip without trailing newline'] = array($expected, $yaml);
 
@@ -329,7 +337,7 @@ bar: >
 EOF;
         $expected = array(
             'foo' => "one two\n",
-            'bar' => "one two",
+            'bar' => 'one two',
         );
         $tests['Folded block chomping clip without trailing newline'] = array($expected, $yaml);
 
@@ -375,7 +383,7 @@ bar: >+
 EOF;
         $expected = array(
             'foo' => "one two\n",
-            'bar' => "one two",
+            'bar' => 'one two',
         );
         $tests['Folded block chomping keep without trailing newline'] = array($expected, $yaml);
 
@@ -447,9 +455,9 @@ EOF;
         }
 
         $yamls = array(
-            iconv("UTF-8", "ISO-8859-1", "foo: 'äöüß'"),
-            iconv("UTF-8", "ISO-8859-15", "euro: '€'"),
-            iconv("UTF-8", "CP1252", "cp1252: '©ÉÇáñ'"),
+            iconv('UTF-8', 'ISO-8859-1', "foo: 'äöüß'"),
+            iconv('UTF-8', 'ISO-8859-15', "euro: '€'"),
+            iconv('UTF-8', 'CP1252', "cp1252: '©ÉÇáñ'"),
         );
 
         foreach ($yamls as $yaml) {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json b/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
index 2b2d961b7b357f0af709fa468070091ed3386bc7..bb0beeec45764ecdb67e59f787e996a7fdd93d2a 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
@@ -3,7 +3,7 @@
     "type": "library",
     "description": "Symfony Yaml Component",
     "keywords": [],
-    "homepage": "http://symfony.com",
+    "homepage": "https://symfony.com",
     "license": "MIT",
     "authors": [
         {
@@ -12,12 +12,15 @@
         },
         {
             "name": "Symfony Community",
-            "homepage": "http://symfony.com/contributors"
+            "homepage": "https://symfony.com/contributors"
         }
     ],
     "require": {
         "php": ">=5.3.3"
     },
+    "require-dev": {
+        "symfony/phpunit-bridge": "~2.7"
+    },
     "autoload": {
         "psr-0": { "Symfony\\Component\\Yaml\\": "" }
     },
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist b/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist
index 39c04ce3a6bcc03a3d1aca91673800067a685514..8f7741fe393e6d2ffe5940ccb0e71a88b330b7c9 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/phpunit.xml.dist
@@ -7,8 +7,7 @@
          bootstrap="vendor/autoload.php"
 >
     <php>
-        <!-- php -r 'echo -1 & ~E_USER_DEPRECATED;' -->
-        <ini name="error_reporting" value="-16385"/>
+        <ini name="error_reporting" value="-1" />
     </php>
     <testsuites>
         <testsuite name="Symfony Yaml Component Test Suite">
diff --git a/vendor/zendframework/zendservice-recaptcha/.gitignore b/vendor/zendframework/zendservice-recaptcha/.gitignore
deleted file mode 100644
index 48b8bf9072d8716346ec810e5a1808305c97d50f..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor/
diff --git a/vendor/zendframework/zendservice-recaptcha/.travis.yml b/vendor/zendframework/zendservice-recaptcha/.travis.yml
deleted file mode 100644
index 409b789c1000f31e4e65bc5c0c989538ab650d14..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-language: php
-
-php:
-  - 5.3.3
-  - 5.3
-  - 5.4
-
-before_install:
- - cp tests/TestConfiguration.php.travis tests/TestConfiguration.php
- - curl -s https://getcomposer.org/installer | php
- - php composer.phar install --dev
-
-script:
- - php ./tests/run-tests.php
-
-notifications:
-  irc: "irc.freenode.org#zftalk.2"
diff --git a/vendor/zendframework/zendservice-recaptcha/LICENSE.txt b/vendor/zendframework/zendservice-recaptcha/LICENSE.txt
deleted file mode 100644
index 36e976016efe1aa4a188b5d4828439cb5484cf12..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/LICENSE.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2005-2012, Zend Technologies USA, Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    * Neither the name of Zend Technologies USA, Inc. nor the names of its
-      contributors may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/zendframework/zendservice-recaptcha/README.md b/vendor/zendframework/zendservice-recaptcha/README.md
deleted file mode 100644
index 551338bd7c94babd893f3f97e6fc112a2fee3daa..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-ZendService\ReCaptcha component
-
-You can install using:
-
-```
-curl -s https://getcomposer.org/installer | php
-php composer.phar install
-```
-
-At that point, follow the instructions in the documentation folder for actual
-usage of the component. (Documentation is forthcoming.)
diff --git a/vendor/zendframework/zendservice-recaptcha/composer.json b/vendor/zendframework/zendservice-recaptcha/composer.json
deleted file mode 100644
index cf48c924453ae9d9f337c7594aec2a7bed470e20..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/composer.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-    "name": "zendframework/zendservice-recaptcha",
-    "description": "OOP wrapper for the ReCaptcha web service",
-    "type": "library",
-    "keywords": [
-        "zf2",
-        "recaptcha"
-    ],
-    "homepage": "http://packages.zendframework.com/",
-    "license": "BSD-3-Clause",
-    "autoload": {
-        "psr-0": {
-            "ZendService": "library/"
-        }
-    },
-    "repositories": [
-        {
-            "type": "composer",
-            "url": "http://packages.zendframework.com/"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.3",
-        "zendframework/zend-http": ">=2.0.0",
-        "zendframework/zend-uri": ">=2.0.0",
-        "zendframework/zend-version": ">=2.0.0"
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHide.php b/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHide.php
deleted file mode 100644
index 31cbc602d442cb1b61d39cb8f8f77e0a9b866dbd..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHide.php
+++ /dev/null
@@ -1,328 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend_Service
- */
-
-namespace ZendService\ReCaptcha;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-/**
- * Zend_Service_ReCaptcha_MailHide
- *
- * @category   Zend
- * @package    Zend_Service
- * @subpackage ReCaptcha
- */
-class MailHide extends ReCaptcha
-{
-    /**#@+
-     * Encryption constants
-     */
-    const ENCRYPTION_MODE       = MCRYPT_MODE_CBC;
-    const ENCRYPTION_CIPHER     = MCRYPT_RIJNDAEL_128;
-    const ENCRYPTION_BLOCK_SIZE = 16;
-    const ENCRYPTION_IV         = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-    /**#@-*/
-
-    /**
-     * Url to the mailhide server
-     *
-     * @var string
-     */
-    const MAILHIDE_SERVER = 'http://mailhide.recaptcha.net/d';
-
-    /**
-     * The email address to protect
-     *
-     * @var string
-     */
-    protected $email = null;
-
-    /**
-     * @var \Zend\Validator\ValidatorInterface
-     */
-    protected $emailValidator;
-
-    /**
-     * Binary representation of the private key
-     *
-     * @var string
-     */
-    protected $privateKeyPacked = null;
-
-    /**
-     * The local part of the email
-     *
-     * @var string
-     */
-    protected $emailLocalPart = null;
-
-    /**
-     * The domain part of the email
-     *
-     * @var string
-     */
-    protected $emailDomainPart = null;
-
-    /**
-     * Local constructor
-     *
-     * @param string $publicKey
-     * @param string $privateKey
-     * @param string $email
-     * @param array|Traversable $options
-     */
-    public function __construct($publicKey = null, $privateKey = null, $email = null, $options = null)
-    {
-        /* Require the mcrypt extension to be loaded */
-        $this->_requireMcrypt();
-
-        /* If options is a Zend_Config object we want to convert it to an array so we can merge it with the default options */
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        /* Merge if needed */
-        if (is_array($options)) {
-            $options = array_merge($this->getDefaultOptions(), $options);
-        } else {
-            $options = $this->getDefaultOptions();
-        }
-
-        parent::__construct($publicKey, $privateKey, null, $options);
-
-        if ($email !== null) {
-            $this->setEmail($email);
-        }
-    }
-
-
-    /**
-     * Get emailValidator
-     *
-     * @return \Zend\Validator\ValidatorInterface
-     */
-    public function getEmailValidator()
-    {
-        if (null === $this->emailValidator) {
-            $this->setEmailValidator(new \Zend\Validator\EmailAddress());
-        }
-        return $this->emailValidator;
-    }
-
-    /**
-     * Set email validator
-     *
-     * @param  \Zend\Validator\ValidatorInterface $validator
-     * @return \ZendService\ReCaptcha\MailHide
-     */
-    public function setEmailValidator(\Zend\Validator\ValidatorInterface $validator)
-    {
-        $this->emailValidator = $validator;
-        return $this;
-    }
-
-
-    /**
-     * See if the mcrypt extension is available
-     *
-     * @throws \ZendService\ReCaptcha\MailHideException
-     */
-    protected function _requireMcrypt()
-    {
-        if (!extension_loaded('mcrypt')) {
-            throw new MailHideException('Use of the Zend\\Service\\ReCaptcha\\MailHide component requires the mcrypt extension to be enabled in PHP');
-        }
-    }
-
-    /**
-     * Serialize as string
-     *
-     * When the instance is used as a string it will display the email address. Since we can't
-     * throw exceptions within this method we will trigger a user warning instead.
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        try {
-            $return = $this->getHtml();
-        } catch (\Exception $e) {
-            $return = '';
-            trigger_error($e->getMessage(), E_USER_WARNING);
-        }
-
-        return $return;
-    }
-
-    /**
-     * Get the default set of parameters
-     *
-     * @return array
-     */
-    public function getDefaultOptions()
-    {
-        return array(
-            'encoding'       => 'UTF-8',
-            'linkTitle'      => 'Reveal this e-mail address',
-            'linkHiddenText' => '...',
-            'popupWidth'     => 500,
-            'popupHeight'    => 300,
-        );
-    }
-
-    /**
-     * Override the setPrivateKey method
-     *
-     * Override the parent method to store a binary representation of the private key as well.
-     *
-     * @param string $privateKey
-     * @return \ZendService\ReCaptcha\MailHide
-     */
-    public function setPrivateKey($privateKey)
-    {
-        parent::setPrivateKey($privateKey);
-
-        /* Pack the private key into a binary string */
-        $this->privateKeyPacked = pack('H*', $this->privateKey);
-
-        return $this;
-    }
-
-    /**
-     * Set the email property
-     *
-     * This method will set the email property along with the local and domain parts
-     *
-     * @param string $email
-     * @return \ZendService\ReCaptcha\MailHide
-     */
-    public function setEmail($email)
-    {
-        $this->email = $email;
-
-        $validator = $this->getEmailValidator();
-        if (!$validator->isValid($email)) {
-            throw new MailHideException('Invalid email address provided');
-        }
-
-        $emailParts = explode('@', $email, 2);
-
-        /* Decide on how much of the local part we want to reveal */
-        if (strlen($emailParts[0]) <= 4) {
-            $emailParts[0] = substr($emailParts[0], 0, 1);
-        } elseif (strlen($emailParts[0]) <= 6) {
-            $emailParts[0] = substr($emailParts[0], 0, 3);
-        } else {
-            $emailParts[0] = substr($emailParts[0], 0, 4);
-        }
-
-        $this->emailLocalPart = $emailParts[0];
-        $this->emailDomainPart = $emailParts[1];
-
-        return $this;
-    }
-
-    /**
-     * Get the email property
-     *
-     * @return string
-     */
-    public function getEmail()
-    {
-        return $this->email;
-    }
-
-    /**
-     * Get the local part of the email address
-     *
-     * @return string
-     */
-    public function getEmailLocalPart()
-    {
-        return $this->emailLocalPart;
-    }
-
-    /**
-     * Get the domain part of the email address
-     *
-     * @return string
-     */
-    public function getEmailDomainPart()
-    {
-        return $this->emailDomainPart;
-    }
-
-    /**
-     * Get the HTML code needed for the mail hide
-     *
-     * @param string $email
-     * @return string
-     * @throws \ZendService\ReCaptcha\MailHideException
-     */
-    public function getHtml($email = null)
-    {
-        if ($email !== null) {
-            $this->setEmail($email);
-        } elseif (null === ($email = $this->getEmail())) {
-            throw new MailHideException('Missing email address');
-        }
-
-        if ($this->publicKey === null) {
-            throw new MailHideException('Missing public key');
-        }
-
-        if ($this->privateKey === null) {
-            throw new MailHideException('Missing private key');
-        }
-
-        /* Generate the url */
-        $url = $this->_getUrl();
-
-        $enc = $this->getOption('encoding');
-
-        /* Genrate the HTML used to represent the email address */
-        $html = htmlentities($this->getEmailLocalPart(), ENT_COMPAT, $enc)
-            . '<a href="'
-                . htmlentities($url, ENT_COMPAT, $enc)
-                . '" onclick="window.open(\''
-                    . htmlentities($url, ENT_COMPAT, $enc)
-                    . '\', \'\', \'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width='
-                    . $this->options['popupWidth']
-                    . ',height='
-                    . $this->options['popupHeight']
-                . '\'); return false;" title="'
-                . $this->options['linkTitle']
-                . '">' . $this->options['linkHiddenText'] . '</a>@'
-                . htmlentities($this->getEmailDomainPart(), ENT_COMPAT, $enc);
-
-        return $html;
-    }
-
-    /**
-     * Get the url used on the "hidden" part of the email address
-     *
-     * @return string
-     */
-    protected function _getUrl()
-    {
-        /* Figure out how much we need to pad the email */
-        $numPad = self::ENCRYPTION_BLOCK_SIZE - (strlen($this->email) % self::ENCRYPTION_BLOCK_SIZE);
-
-        /* Pad the email */
-        $emailPadded = str_pad($this->email, strlen($this->email) + $numPad, chr($numPad));
-
-        /* Encrypt the email */
-        $emailEncrypted = mcrypt_encrypt(self::ENCRYPTION_CIPHER, $this->privateKeyPacked, $emailPadded, self::ENCRYPTION_MODE, self::ENCRYPTION_IV);
-
-        /* Return the url */
-        return self::MAILHIDE_SERVER . '?k=' . $this->publicKey . '&c=' . strtr(base64_encode($emailEncrypted), '+/', '-_');
-    }
-}
diff --git a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHideException.php b/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHideException.php
deleted file mode 100644
index 4573a3fdf10c109aea82219c8a50dbb22686aad8..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/library/ZendService/ReCaptcha/MailHideException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend_Service
- */
-
-namespace ZendService\ReCaptcha;
-
-/**
- * Zend_Service_ReCaptcha_MailHide_Exception
- *
- * @category   Zend
- * @package    Zend_Service
- * @subpackage ReCaptcha
- */
-class MailHideException extends Exception
-{}
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/Bootstrap.php b/vendor/zendframework/zendservice-recaptcha/tests/Bootstrap.php
deleted file mode 100644
index 40a74517b848a4592d9cca7046bda48c1d8f059f..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/Bootstrap.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend
- */
-
-/*
- * Set error reporting to the level to which Zend Framework code must comply.
- */
-error_reporting( E_ALL | E_STRICT );
-
-$phpUnitVersion = PHPUnit_Runner_Version::id();
-if ('@package_version@' !== $phpUnitVersion && version_compare($phpUnitVersion, '3.5.0', '<')) {
-    echo 'This version of PHPUnit (' . PHPUnit_Runner_Version::id() . ') is not supported in Zend Framework 2.x unit tests.' . PHP_EOL;
-    exit(1);
-}
-unset($phpUnitVersion);
-
-/*
- * Determine the root, library, and tests directories of the framework
- * distribution.
- */
-$zfRoot        = realpath(dirname(__DIR__));
-$zfCoreLibrary = "$zfRoot/library";
-$zfCoreTests   = "$zfRoot/tests";
-
-/*
- * Prepend the Zend Framework library/ and tests/ directories to the
- * include_path. This allows the tests to run out of the box and helps prevent
- * loading other copies of the framework code and tests that would supersede
- * this copy.
- */
-$path = array(
-    $zfCoreLibrary,
-    $zfCoreTests,
-    get_include_path(),
-);
-set_include_path(implode(PATH_SEPARATOR, $path));
-
-/**
- * Setup autoloading
- */
-include __DIR__ . '/_autoload.php';
-
-/*
- * Load the user-defined test configuration file, if it exists; otherwise, load
- * the default configuration.
- */
-if (is_readable($zfCoreTests . DIRECTORY_SEPARATOR . 'TestConfiguration.php')) {
-    require_once $zfCoreTests . DIRECTORY_SEPARATOR . 'TestConfiguration.php';
-} else {
-    require_once $zfCoreTests . DIRECTORY_SEPARATOR . 'TestConfiguration.php.dist';
-}
-
-if (defined('TESTS_GENERATE_REPORT') && TESTS_GENERATE_REPORT === true) {
-    $codeCoverageFilter = PHP_CodeCoverage_Filter::getInstance();
-
-    $lastArg = end($_SERVER['argv']);
-    if (is_dir($zfCoreTests . '/' . $lastArg)) {
-        $codeCoverageFilter->addDirectoryToWhitelist($zfCoreLibrary . '/' . $lastArg);
-    } else if (is_file($zfCoreTests . '/' . $lastArg)) {
-        $codeCoverageFilter->addDirectoryToWhitelist(dirname($zfCoreLibrary . '/' . $lastArg));
-    } else {
-        $codeCoverageFilter->addDirectoryToWhitelist($zfCoreLibrary);
-    }
-
-    /*
-     * Omit from code coverage reports the contents of the tests directory
-     */
-    $codeCoverageFilter->addDirectoryToBlacklist($zfCoreTests, '');
-    $codeCoverageFilter->addDirectoryToBlacklist(PEAR_INSTALL_DIR, '');
-    $codeCoverageFilter->addDirectoryToBlacklist(PHP_LIBDIR, '');
-
-    unset($codeCoverageFilter);
-}
-
-
-/**
- * Start output buffering, if enabled
- */
-if (defined('TESTS_ZEND_OB_ENABLED') && constant('TESTS_ZEND_OB_ENABLED')) {
-    ob_start();
-}
-
-/*
- * Unset global variables that are no longer needed.
- */
-unset($zfRoot, $zfCoreLibrary, $zfCoreTests, $path);
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.dist b/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.dist
deleted file mode 100644
index cac8b198b95b5f53eb5652dff7b700bb9af7be40..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.dist
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   UnitTests
- */
-
-/**
- * This file defines configuration for running the unit tests for the Zend
- * Framework. Some tests have dependencies to PHP extensions or databases
- * which may not necessary installed on the target system. For these cases,
- * the ability to disable or configure testing is provided below. Tests for
- * components which should run universally are always run by the master
- * suite and cannot be disabled.
- *
- * Do not edit this file. Instead, copy this file to TestConfiguration.php,
- * and edit the new file. Never commit  passwords to the source code repository.
- */
-
-/**
- * Use the notation:
- *
- *  defined(...) || define(...);
- *
- * This ensures that, when a test is marked to run in a separate process,
- * PHP will not complain of a constant already being defined.
- */
-
-/**
- * GENERAL SETTINGS
- *
- * OB_ENABLED should be enabled for some tests to check if all functionality
- * works as expected. Such tests include those for Zend\Soap and Zend\Session,
- * which require that headers not be sent in order to work.
- */
-defined('TESTS_ZEND_OB_ENABLED') || define('TESTS_ZEND_OB_ENABLED', false);
-
-/**
- * PHPUnit Code Coverage / Test Report
- */
-defined('TESTS_GENERATE_REPORT') || define('TESTS_GENERATE_REPORT', false);
-defined('TESTS_GENERATE_REPORT_TARGET') || define('TESTS_GENERATE_REPORT_TARGET', '/path/to/target');
-
-/**
- * Zend\Service\ReCaptcha tests
- */
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_ENABLED') || define('TESTS_ZEND_SERVICE_RECAPTCHA_ENABLED', false);
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_ONLINE_ENABLED') || define('TESTS_ZEND_SERVICE_RECAPTCHA_ONLINE_ENABLED', false);
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_PUBLIC_KEY') || define('TESTS_ZEND_SERVICE_RECAPTCHA_PUBLIC_KEY', 'public key');
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_PRIVATE_KEY') || define('TESTS_ZEND_SERVICE_RECAPTCHA_PRIVATE_KEY', 'private key');
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PUBLIC_KEY') || define('TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PUBLIC_KEY', 'public mailhide key');
-defined('TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PRIVATE_KEY') || define('TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PRIVATE_KEY', 'private mailhide key');
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.travis b/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.travis
deleted file mode 100644
index f49b94cdbf96f412c2a337652947a128c0749c89..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/TestConfiguration.php.travis
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   UnitTests
- */
-
-/**
- * This file defines specific configuration that differs from the standard configuration
- * for running the unit tests with Travis-CI (http://www.travis-ci.org)
- *
- * See TestConfiguration.php.dist to get more details.
- *
- * Never commit passwords to the source code repository.
- */
-
-require_once __DIR__ . '/TestConfiguration.php.dist';
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/MailHideTest.php b/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/MailHideTest.php
deleted file mode 100644
index 55755fe7cf1ef3122a112639f4dab7290173a8d2..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/MailHideTest.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend_Service
- */
-
-namespace ZendServiceTest\ReCaptcha;
-
-use ZendService\ReCaptcha;
-
-/**
- * @category   Zend
- * @package    Zend_Service_ReCaptcha
- * @subpackage UnitTests
- * @group      Zend_Service
- * @group      Zend_Service_ReCaptcha
- */
-class MailHideTest extends \PHPUnit_Framework_TestCase
-{
-    protected $publicKey  = TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PUBLIC_KEY;
-    protected $privateKey = TESTS_ZEND_SERVICE_RECAPTCHA_MAILHIDE_PRIVATE_KEY;
-    protected $mailHide   = null;
-
-    public function setUp()
-    {
-        if (!extension_loaded('mcrypt')) {
-            $this->markTestSkipped('ZendService\ReCaptcha tests skipped due to missing mcrypt extension');
-        }
-        if ($this->publicKey == 'public mailhide key' || $this->privateKey == 'private mailhide key') {
-            $this->markTestSkipped('ZendService\ReCaptcha\MailHide tests skipped due to missing keys');
-        }
-        $this->mailHide = new ReCaptcha\MailHide();
-    }
-
-    public function testSetGetPrivateKey()
-    {
-        $this->mailHide->setPrivateKey($this->privateKey);
-        $this->assertSame($this->privateKey, $this->mailHide->getPrivateKey());
-    }
-
-    public function testSetGetEmail()
-    {
-        $mail = 'mail@example.com';
-
-        $this->mailHide->setEmail($mail);
-        $this->assertSame($mail, $this->mailHide->getEmail());
-        $this->assertSame('example.com', $this->mailHide->getEmailDomainPart());
-    }
-
-    public function testEmailLocalPart()
-    {
-        $this->mailHide->setEmail('abcd@example.com');
-        $this->assertSame('a', $this->mailHide->getEmailLocalPart());
-
-        $this->mailHide->setEmail('abcdef@example.com');
-        $this->assertSame('abc', $this->mailHide->getEmailLocalPart());
-
-        $this->mailHide->setEmail('abcdefg@example.com');
-        $this->assertSame('abcd', $this->mailHide->getEmailLocalPart());
-    }
-
-    public function testConstructor()
-    {
-        $mail = 'mail@example.com';
-
-        $options = array(
-            'theme' => 'black',
-            'lang' => 'no',
-        );
-
-        $config = new \Zend\Config\Config($options);
-
-        $mailHide = new ReCaptcha\MailHide($this->publicKey, $this->privateKey, $mail, $config);
-        $_options = $mailHide->getOptions();
-
-        $this->assertSame($this->publicKey, $mailHide->getPublicKey());
-        $this->assertSame($this->privateKey, $mailHide->getPrivateKey());
-        $this->assertSame($mail, $mailHide->getEmail());
-        $this->assertSame($options['theme'], $_options['theme']);
-        $this->assertSame($options['lang'], $_options['lang']);
-    }
-
-    protected function _checkHtml($html)
-    {
-        $server = ReCaptcha\MailHide::MAILHIDE_SERVER;
-        $pubKey = $this->publicKey;
-
-        $this->assertEquals(2, substr_count($html, 'k=' . $pubKey));
-        $this->assertRegexp('/c\=[a-zA-Z0-9_=-]+"/', $html);
-        $this->assertRegexp('/c\=[a-zA-Z0-9_=-]+\\\'/', $html);
-    }
-
-    public function testGetHtml()
-    {
-        $mail = 'mail@example.com';
-
-        $this->mailHide->setEmail($mail);
-        $this->mailHide->setPublicKey($this->publicKey);
-        $this->mailHide->setPrivateKey($this->privateKey);
-
-        $html = $this->mailHide->getHtml();
-
-        $this->_checkHtml($html);
-    }
-
-    public function testGetHtmlWithNoEmail()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\MailHideException');
-
-        $html = $this->mailHide->getHtml();
-    }
-
-    public function testGetHtmlWithMissingPublicKey()
-    {
-        $mail = 'mail@example.com';
-
-        $this->mailHide->setEmail($mail);
-        $this->mailHide->setPrivateKey($this->privateKey);
-
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\MailHideException');
-        $html = $this->mailHide->getHtml();
-    }
-
-    public function testGetHtmlWithMissingPrivateKey()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\MailHideException');
-
-        $mail = 'mail@example.com';
-
-        $this->mailHide->setEmail($mail);
-        $this->mailHide->setPublicKey($this->publicKey);
-
-        $html = $this->mailHide->getHtml();
-    }
-
-    public function testGetHtmlWithParamter()
-    {
-        $mail = 'mail@example.com';
-
-        $this->mailHide->setPublicKey($this->publicKey);
-        $this->mailHide->setPrivateKey($this->privateKey);
-
-        $html = $this->mailHide->getHtml($mail);
-
-        $this->_checkHtml($html);
-    }
-}
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ReCaptchaTest.php b/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ReCaptchaTest.php
deleted file mode 100644
index b71002a7a11365393911f9ed32b674a3173638c6..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ReCaptchaTest.php
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend_Service
- */
-
-namespace ZendServiceTest\ReCaptcha;
-
-use ZendService\ReCaptcha\ReCaptcha;
-use ZendService\ReCaptcha\Response as ReCaptchaResponse;
-use Zend\Config;
-
-/**
- * @category   Zend
- * @package    Zend_Service_ReCaptcha
- * @subpackage UnitTests
- * @group      Zend_Service
- * @group      Zend_Service_ReCaptcha
- */
-class ReCaptchaTest extends \PHPUnit_Framework_TestCase
-{
-    protected $publicKey = TESTS_ZEND_SERVICE_RECAPTCHA_PUBLIC_KEY;
-    protected $privateKey = TESTS_ZEND_SERVICE_RECAPTCHA_PRIVATE_KEY;
-
-    /**
-     * @var ReCaptcha
-     */
-    protected $reCaptcha = null;
-
-    public function setUp()
-    {
-        $this->reCaptcha = new ReCaptcha();
-    }
-
-    public function testSetAndGet()
-    {
-        /* Set and get IP address */
-        $ip = '127.0.0.1';
-        $this->reCaptcha->setIp($ip);
-        $this->assertSame($ip, $this->reCaptcha->getIp());
-
-        /* Set and get public key */
-        $this->reCaptcha->setPublicKey($this->publicKey);
-        $this->assertSame($this->publicKey, $this->reCaptcha->getPublicKey());
-
-        /* Set and get private key */
-        $this->reCaptcha->setPrivateKey($this->privateKey);
-        $this->assertSame($this->privateKey, $this->reCaptcha->getPrivateKey());
-    }
-
-    public function testSingleParam()
-    {
-        $key = 'ssl';
-        $value = true;
-
-        $this->reCaptcha->setParam($key, $value);
-        $this->assertSame($value, $this->reCaptcha->getParam($key));
-    }
-
-    public function tetsGetNonExistingParam()
-    {
-        $this->assertNull($this->reCaptcha->getParam('foobar'));
-    }
-
-    public function testMultipleParams()
-    {
-        $params = array(
-            'ssl' => true,
-            'error' => 'errorMsg',
-            'xhtml' => true,
-        );
-
-        $this->reCaptcha->setParams($params);
-        $_params = $this->reCaptcha->getParams();
-
-        $this->assertSame($params['ssl'], $_params['ssl']);
-        $this->assertSame($params['error'], $_params['error']);
-        $this->assertSame($params['xhtml'], $_params['xhtml']);
-    }
-
-    public function testSingleOption()
-    {
-        $key = 'theme';
-        $value = 'black';
-
-        $this->reCaptcha->setOption($key, $value);
-        $this->assertSame($value, $this->reCaptcha->getOption($key));
-    }
-
-    public function tetsGetNonExistingOption()
-    {
-        $this->assertNull($this->reCaptcha->getOption('foobar'));
-    }
-
-    public function testMultipleOptions()
-    {
-        $options = array(
-            'theme' => 'black',
-            'lang' => 'no',
-        );
-
-        $this->reCaptcha->setOptions($options);
-        $_options = $this->reCaptcha->getOptions();
-
-        $this->assertSame($options['theme'], $_options['theme']);
-        $this->assertSame($options['lang'], $_options['lang']);
-    }
-
-    public function testSetMultipleParamsFromZendConfig()
-    {
-        $params = array(
-            'ssl' => true,
-            'error' => 'errorMsg',
-            'xhtml' => true,
-        );
-
-        $config = new Config\Config($params);
-
-        $this->reCaptcha->setParams($config);
-        $_params = $this->reCaptcha->getParams();
-
-        $this->assertSame($params['ssl'], $_params['ssl']);
-        $this->assertSame($params['error'], $_params['error']);
-        $this->assertSame($params['xhtml'], $_params['xhtml']);
-    }
-
-    public function testSetInvalidParams()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-        $var = 'string';
-        $this->reCaptcha->setParams($var);
-    }
-
-    public function testSetMultipleOptionsFromZendConfig()
-    {
-        $options = array(
-            'theme' => 'black',
-            'lang' => 'no',
-        );
-
-        $config = new Config\Config($options);
-
-        $this->reCaptcha->setOptions($config);
-        $_options = $this->reCaptcha->getOptions();
-
-        $this->assertSame($options['theme'], $_options['theme']);
-        $this->assertSame($options['lang'], $_options['lang']);
-    }
-
-    public function testSetInvalidOptions()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-        $var = 'string';
-        $this->reCaptcha->setOptions($var);
-    }
-
-    public function testConstructor()
-    {
-        $params = array(
-            'ssl' => true,
-            'error' => 'errorMsg',
-            'xhtml' => true,
-        );
-
-        $options = array(
-            'theme' => 'black',
-            'lang' => 'no',
-        );
-
-        $ip = '127.0.0.1';
-
-        $reCaptcha = new ReCaptcha($this->publicKey, $this->privateKey, $params, $options, $ip);
-
-        $_params = $reCaptcha->getParams();
-        $_options = $reCaptcha->getOptions();
-
-        $this->assertSame($this->publicKey, $reCaptcha->getPublicKey());
-        $this->assertSame($this->privateKey, $reCaptcha->getPrivateKey());
-        $this->assertSame($params['ssl'], $_params['ssl']);
-        $this->assertSame($params['error'], $_params['error']);
-        $this->assertSame($params['xhtml'], $_params['xhtml']);
-        $this->assertSame($options['theme'], $_options['theme']);
-        $this->assertSame($options['lang'], $_options['lang']);
-        $this->assertSame($ip, $reCaptcha->getIp());
-    }
-
-    public function testConstructorWithNoIp()
-    {
-        // Fake the _SERVER value
-        $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
-
-        $reCaptcha = new ReCaptcha(null, null, null, null, null);
-
-        $this->assertSame($_SERVER['REMOTE_ADDR'], $reCaptcha->getIp());
-
-        unset($_SERVER['REMOTE_ADDR']);
-    }
-
-    public function testGetHtmlWithNoPublicKey()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-
-        $html = $this->reCaptcha->getHtml();
-    }
-
-    public function testVerify()
-    {
-        $this->reCaptcha->setPublicKey($this->publicKey);
-        $this->reCaptcha->setPrivateKey($this->privateKey);
-        $this->reCaptcha->setIp('127.0.0.1');
-
-        if (defined('TESTS_ZEND_SERVICE_RECAPTCHA_ONLINE_ENABLED') &&
-            constant('TESTS_ZEND_SERVICE_RECAPTCHA_ONLINE_ENABLED')) {
-
-            $this->_testVerifyOnline();
-        } else {
-            $this->_testVerifyOffline();
-        }
-    }
-
-    protected function _testVerifyOnline()
-    {
-    }
-
-    protected function _testVerifyOffline()
-    {
-        $adapter = new \Zend\Http\Client\Adapter\Test();
-        $client = new \Zend\Http\Client(null, array(
-            'adapter' => $adapter
-        ));
-
-        $this->reCaptcha->setHttpClient($client);
-
-        $resp = $this->reCaptcha->verify('challengeField', 'responseField');
-
-        // See if we have a valid object and that the status is false
-        $this->assertTrue($resp instanceof ReCaptchaResponse);
-        $this->assertFalse($resp->getStatus());
-    }
-
-    public function testGetHtml()
-    {
-        $this->reCaptcha->setPublicKey($this->publicKey);
-        $errorMsg = 'errorMsg';
-        $this->reCaptcha->setParam('ssl', true);
-        $this->reCaptcha->setParam('xhtml', true);
-        $this->reCaptcha->setParam('error', $errorMsg);
-
-        $html = $this->reCaptcha->getHtml();
-
-        // See if the options for the captcha exist in the string
-        $this->assertNotSame(false, strstr($html, 'var RecaptchaOptions = {"theme":"red","lang":"en"};'));
-
-        // See if the js/iframe src is correct
-        $this->assertNotSame(false, strstr($html, 'src="' . ReCaptcha::API_SECURE_SERVER . '/challenge?k=' . $this->publicKey . '&error=' . $errorMsg . '"'));
-    }
-
-    /** @group ZF-10991 */
-    public function testHtmlGenerationWillUseSuppliedNameForNoScriptElements()
-    {
-        $this->reCaptcha->setPublicKey($this->publicKey);
-        $html = $this->reCaptcha->getHtml('contact');
-        $this->assertContains('contact[recaptcha_challenge_field]', $html);
-        $this->assertContains('contact[recaptcha_response_field]', $html);
-    }
-
-    public function testVerifyWithMissingPrivateKey()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-
-        $this->reCaptcha->verify('challenge', 'response');
-    }
-
-    public function testVerifyWithMissingIp()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-
-        $this->reCaptcha->setPrivateKey($this->privateKey);
-        $this->reCaptcha->verify('challenge', 'response');
-    }
-
-    public function testVerifyWithMissingChallengeField()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-
-        $this->reCaptcha->setPrivateKey($this->privateKey);
-        $this->reCaptcha->setIp('127.0.0.1');
-        $this->reCaptcha->verify('', 'response');
-    }
-
-    public function testVerifyWithMissingResponseField()
-    {
-        $this->setExpectedException('Zend\\Service\\ReCaptcha\\Exception');
-
-        $this->reCaptcha->setPrivateKey($this->privateKey);
-        $this->reCaptcha->setIp('127.0.0.1');
-        $this->reCaptcha->verify('challenge', '');
-    }
-}
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ResponseTest.php b/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ResponseTest.php
deleted file mode 100644
index 046cd9c786b0891e54b31bf53b3e5b665abe3801..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/ZendService/ReCaptcha/ResponseTest.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @package   Zend_Service
- */
-
-namespace ZendServiceTest\ReCaptcha;
-
-use ZendService\ReCaptcha;
-use Zend\Http\Response;
-
-/**
- * @category   Zend
- * @package    Zend_Service_ReCaptcha
- * @subpackage UnitTests
- * @group      Zend_Service
- * @group      Zend_Service_ReCaptcha
- */
-class ResponseTest extends \PHPUnit_Framework_TestCase
-{
-    protected $_response = null;
-
-    public function setUp()
-    {
-        $this->_response = new ReCaptcha\Response();
-    }
-
-    public function testSetAndGet()
-    {
-        /* Set and get status */
-        $status = 'true';
-        $this->_response->setStatus($status);
-        $this->assertSame(true, $this->_response->getStatus());
-
-        $status = 'false';
-        $this->_response->setStatus($status);
-        $this->assertSame(false, $this->_response->getStatus());
-
-        /* Set and get the error code */
-        $errorCode = 'foobar';
-        $this->_response->setErrorCode($errorCode);
-        $this->assertSame($errorCode, $this->_response->getErrorCode());
-    }
-
-    public function testIsValid()
-    {
-        $this->_response->setStatus('true');
-        $this->assertSame(true, $this->_response->isValid());
-    }
-
-    public function testIsInvalid()
-    {
-        $this->_response->setStatus('false');
-        $this->assertSame(false, $this->_response->isValid());
-    }
-
-    public function testSetFromHttpResponse()
-    {
-        $status       = 'false';
-        $errorCode    = 'foobar';
-        $responseBody = $status . "\n" . $errorCode;
-        $httpResponse = new Response();
-        $httpResponse->setStatusCode(200);
-        $httpResponse->getHeaders()->addHeaderLine('Content-Type', 'text/html');
-        $httpResponse->setContent($responseBody);
-
-        $this->_response->setFromHttpResponse($httpResponse);
-
-        $this->assertSame(false, $this->_response->getStatus());
-        $this->assertSame($errorCode, $this->_response->getErrorCode());
-    }
-
-    public function testConstructor()
-    {
-        $status = 'true';
-        $errorCode = 'ok';
-
-        $response = new ReCaptcha\Response($status, $errorCode);
-
-        $this->assertSame(true, $response->getStatus());
-        $this->assertSame($errorCode, $response->getErrorCode());
-    }
-
-    public function testConstructorWithHttpResponse()
-    {
-        $status       = 'false';
-        $errorCode    = 'foobar';
-        $responseBody = $status . "\n" . $errorCode;
-        $httpResponse = new Response();
-        $httpResponse->setStatusCode(200);
-        $httpResponse->getHeaders()->addHeaderLine('Content-Type', 'text/html');
-        $httpResponse->setContent($responseBody);
-
-        $response = new ReCaptcha\Response(null, null, $httpResponse);
-
-        $this->assertSame(false, $response->getStatus());
-        $this->assertSame($errorCode, $response->getErrorCode());
-    }
-}
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/_autoload.php b/vendor/zendframework/zendservice-recaptcha/tests/_autoload.php
deleted file mode 100644
index 24f5cf6bd4dad8796d65a50825eb22c11010f0ed..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/_autoload.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Setup autoloading
- */
-if ($zf2Path = getenv('ZF2_PATH')) {
-    require_once $zf2Path . '/library/Zend/Loader/StandardAutoloader.php';
-
-    $loader = new Zend\Loader\StandardAutoloader(array(
-        Zend\Loader\StandardAutoloader::AUTOREGISTER_ZF => true,
-        Zend\Loader\StandardAutoloader::LOAD_NS => array(
-            'ZendService' => __DIR__ . '/../library/ZendService'
-        )
-    ));
-    $loader->register();
-
-} elseif (!file_exists(__DIR__ . '/../vendor/autoload.php')) {
-    throw new RuntimeException('This component has dependencies that are unmet.
-
-Please install composer (http://getcomposer.org), and run the following 
-command in the root of this project:
-
-    php /path/to/composer.phar install
-
-After that, you should be able to run tests.');
-} else {
-    include_once __DIR__ . '/../vendor/autoload.php';
-}
-
-
-spl_autoload_register(function ($class) {
-    if (0 !== strpos($class, 'ZendServiceTest\\')) {
-        return false;
-    }
-    $normalized = str_replace('ZendServiceTest\\', '', $class);
-    $filename   = __DIR__ . '/ZendService/' . str_replace(array('\\', '_'), '/', $normalized) . '.php';
-    if (!file_exists($filename)) {
-        return false;
-    }
-    return include_once $filename;
-});
\ No newline at end of file
diff --git a/vendor/zendframework/zendservice-recaptcha/tests/phpunit.xml.dist b/vendor/zendframework/zendservice-recaptcha/tests/phpunit.xml.dist
deleted file mode 100644
index 55f02b1a7f85a19455a6044d0c826efc0847503e..0000000000000000000000000000000000000000
--- a/vendor/zendframework/zendservice-recaptcha/tests/phpunit.xml.dist
+++ /dev/null
@@ -1,13 +0,0 @@
-<phpunit bootstrap="./Bootstrap.php" colors="true">
-    <testsuites>
-        <testsuite name="ZendService ReCaptcha Test Suite">
-            <directory>./ZendService</directory>
-        </testsuite>
-    </testsuites>
-
-    <groups>
-        <exclude>
-            <group>disable</group>
-        </exclude>
-    </groups>
-</phpunit>
diff --git a/vendor/zf-commons/zfc-rbac/docs/04. Guards.md b/vendor/zf-commons/zfc-rbac/docs/04. Guards.md
index 85a4d3a2085730be48f4e7784b369bc35b3ebec4..68195618fe4265482090779a5af8c91158af5e06 100644
--- a/vendor/zf-commons/zfc-rbac/docs/04. Guards.md	
+++ b/vendor/zf-commons/zfc-rbac/docs/04. Guards.md	
@@ -177,17 +177,34 @@ return [
         'guards' => [
             'ZfcRbac\Guard\RoutePermissionsGuard' => [
                 'admin*' => ['admin'],
-                'post/manage'   => ['post.update', 'post.delete']
+                'post/manage' => ['post.update', 'post.delete']
             ]
         ]
     ]
 ];
 ```
 
-> All permissions in a rule must be matched (it is an AND condition).
+> By default, all permissions in a rule must be matched (an AND condition).
 
 In the previous example, one must have ```post.update``` **AND** ```post.delete``` permissions
-to access the ```post/manage``` route.
+to access the ```post/manage``` route. You can also specify an OR condition like so:
+
+```php
+use ZfcRbac\Guard\GuardInterface;
+
+return [
+    'zfc_rbac' => [
+        'guards' => [
+            'ZfcRbac\Guard\RoutePermissionsGuard' => [
+                'post/manage'   => [
+                    'permissions' => ['post.update', 'post.delete'],
+                    'condition'   => GuardInterface::CONDITION_OR
+                ]
+            ]
+        ]
+    ]
+];
+```
 
 > Permissions are linked to roles, not to users
 
diff --git a/vendor/zf-commons/zfc-rbac/docs/07. Cookbook.md b/vendor/zf-commons/zfc-rbac/docs/07. Cookbook.md
index 14dee276a7eec599113835312f482bfedb2159db..32131d67560f525caac620424a9f96368ea1d3bf 100644
--- a/vendor/zf-commons/zfc-rbac/docs/07. Cookbook.md	
+++ b/vendor/zf-commons/zfc-rbac/docs/07. Cookbook.md	
@@ -51,19 +51,19 @@ Since we have a dependency, let's inject it using the `ControllerManager`, we wi
 ```php
 class Module
 {
-    // getAutoloaderConfig(), getConfig(), etc...
-
-    public function getControllerConfig()
+    public function getConfig()
     {
         return [
-            'factories' => [
-                 'PostController' => function($cpm) {
-                     // We assume a Service key 'PostService' here that returns the PostService Class
-                     return new PostController(
-                         $cpm->getServiceLocator()->get('PostService')
-                     );
-                 }
-            ]
+            'controllers' => [
+                'factories' => [
+                    'PostController' => function ($cpm) {
+                        // We assume a Service key 'PostService' here that returns the PostService Class
+                        return new PostController(
+                            $cpm->getServiceLocator()->get('PostService')
+                        );
+                    },
+                ],
+            ],
         ];
     }
 }
@@ -162,6 +162,7 @@ permissions before doing anything wrong. So let's modify our previously created
 
 ```php
 use Doctrine\Common\Persistence\ObjectManager;
+use ZfcRbac\Service\AuthorizationService;
 
 class PostService
 {
diff --git a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Collector/RbacCollector.php b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Collector/RbacCollector.php
index 532a867c95382cea998cbb650f26fbe164e76144..a8ff2c79a302307bfc9b51d3ce04914b96dcc570 100644
--- a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Collector/RbacCollector.php
+++ b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Collector/RbacCollector.php
@@ -181,12 +181,17 @@ class RbacCollector implements CollectorInterface, Serializable
      */
     private function collectPermissions(RoleInterface $role)
     {
-        // Gather the permissions for the given role. We have to use reflection as
-        // the RoleInterface does not have "getPermissions" method
-        $reflectionProperty = new ReflectionProperty($role, 'permissions');
-        $reflectionProperty->setAccessible(true);
+        if (method_exists($role, 'getPermissions')) {
+            $permissions = $role->getPermissions();
+        } else {
 
-        $permissions = $reflectionProperty->getValue($role);
+            // Gather the permissions for the given role. We have to use reflection as
+            // the RoleInterface does not have "getPermissions" method
+            $reflectionProperty = new ReflectionProperty($role, 'permissions');
+            $reflectionProperty->setAccessible(true);
+
+            $permissions = $reflectionProperty->getValue($role);
+        }
 
         if ($permissions instanceof Traversable) {
             $permissions = iterator_to_array($permissions);
diff --git a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/GuardInterface.php b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/GuardInterface.php
index 05f19537ae225448b384c161bba9c898302e10c1..4a88f0633742fdebf4da9852f43273ea0addc8d1 100644
--- a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/GuardInterface.php
+++ b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/GuardInterface.php
@@ -47,6 +47,12 @@ interface GuardInterface extends ListenerAggregateInterface
     const POLICY_DENY  = 'deny';
     const POLICY_ALLOW = 'allow';
 
+    /**
+     * Condition constants
+     */
+    const CONDITION_OR  = 'OR';
+    const CONDITION_AND = 'AND';
+
     /**
      * @param  MvcEvent $event
      * @return bool
diff --git a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/RoutePermissionsGuard.php b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/RoutePermissionsGuard.php
index 577a9c8251bec0280ff818474ff5d3c14f8df8c9..a48822da0c49214cdc9ee44d013a426b026a7082 100644
--- a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/RoutePermissionsGuard.php
+++ b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Guard/RoutePermissionsGuard.php
@@ -18,7 +18,7 @@
 namespace ZfcRbac\Guard;
 
 use Zend\Mvc\MvcEvent;
-use ZfcRbac\Exception;
+use ZfcRbac\Exception\InvalidArgumentException;
 use ZfcRbac\Service\AuthorizationServiceInterface;
 
 /**
@@ -101,12 +101,37 @@ class RoutePermissionsGuard extends AbstractGuard
             return true;
         }
 
-        foreach ($allowedPermissions as $permission) {
-            if (!$this->authorizationService->isGranted($permission)) {
-                return false;
+        $permissions = isset($allowedPermissions['permissions'])
+            ? $allowedPermissions['permissions']
+            : $allowedPermissions;
+
+        $condition   = isset($allowedPermissions['condition'])
+            ? $allowedPermissions['condition']
+            : GuardInterface::CONDITION_AND;
+
+        if (GuardInterface::CONDITION_AND === $condition) {
+            foreach ($permissions as $permission) {
+                if (!$this->authorizationService->isGranted($permission)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        if (GuardInterface::CONDITION_OR === $condition) {
+            foreach ($permissions as $permission) {
+                if ($this->authorizationService->isGranted($permission)) {
+                    return true;
+                }
             }
+
+            return false;
         }
 
-        return true;
+        throw new InvalidArgumentException(sprintf(
+            'Condition must be either "AND" or "OR", %s given',
+            is_object($condition) ? get_class($condition) : gettype($condition)
+        ));
     }
 }
diff --git a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Identity/AuthenticationIdentityProvider.php b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Identity/AuthenticationIdentityProvider.php
index 316f77ace324fc3b6d541ab453add2c8e2a98e5c..81dea0f66399593749f7e9c5befbb7bfc43c1572 100644
--- a/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Identity/AuthenticationIdentityProvider.php
+++ b/vendor/zf-commons/zfc-rbac/src/ZfcRbac/Identity/AuthenticationIdentityProvider.php
@@ -30,7 +30,7 @@ use ZfcRbac\Exception;
 class AuthenticationIdentityProvider implements IdentityProviderInterface
 {
     /**
-     * @var AuthenticationService
+     * @var AuthenticationServiceInterface
      */
     protected $authenticationService;
 
diff --git a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionMethod.php b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionMethod.php
new file mode 100644
index 0000000000000000000000000000000000000000..376d352a0b54fb89f06dd5772029a0afd723e16e
--- /dev/null
+++ b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionMethod.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace ZfcRbacTest\Asset;
+
+use Rbac\Role\RoleInterface;
+
+class MockRoleWithPermissionMethod implements RoleInterface
+{
+    public function getPermissions()
+    {
+        return ['permission-method-a', 'permission-method-b'];
+    }
+
+    public function getName()
+    {
+        return 'role-with-permission-method';
+    }
+    public function hasPermission($permission)
+    {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionProperty.php b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionProperty.php
new file mode 100644
index 0000000000000000000000000000000000000000..44522bbb2d791bec9266aa3222584de2ae6b918c
--- /dev/null
+++ b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Asset/MockRoleWithPermissionProperty.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace ZfcRbacTest\Asset;
+
+use Rbac\Role\RoleInterface;
+
+class MockRoleWithPermissionProperty implements RoleInterface
+{
+    private $permissions = ['permission-property-a', 'permission-property-b'];
+
+    public function getName()
+    {
+        return 'role-with-permission-property';
+    }
+    public function hasPermission($permission)
+    {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Collector/RbacCollectorTest.php b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Collector/RbacCollectorTest.php
index c89ca2488061d0f26e2b11f339eefe568ff4ce44..ae0c99c47363118808314dd96d8fa055fe318737 100644
--- a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Collector/RbacCollectorTest.php
+++ b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Collector/RbacCollectorTest.php
@@ -18,6 +18,7 @@
 
 namespace ZfcRbacTest\Collector;
 
+use Rbac\Role\RoleInterface;
 use Zend\Mvc\MvcEvent;
 use Zend\Permissions\Rbac\Rbac;
 use Zend\Permissions\Rbac\Role;
@@ -25,8 +26,11 @@ use ZfcRbac\Collector\RbacCollector;
 use ZfcRbac\Guard\GuardInterface;
 use ZfcRbac\Options\ModuleOptions;
 use ZfcRbac\Role\InMemoryRoleProvider;
+use ZfcRbac\Role\RoleProviderInterface;
 use ZfcRbac\Service\RoleService;
 use Rbac\Traversal\Strategy\RecursiveRoleIteratorStrategy;
+use ZfcRbacTest\Asset\MockRoleWithPermissionMethod;
+use ZfcRbacTest\Asset\MockRoleWithPermissionProperty;
 
 /**
  * @covers \ZfcRbac\Collector\RbacCollector
@@ -176,4 +180,95 @@ class RbacCollectorTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($expectedCollection, $collection);
     }
-}
+
+    /**
+     * Tests the collectPermissions method when the role has a $permissions Property
+     */
+    public function testCollectPermissionsProperty()
+    {
+        $expectedCollection = [
+            'guards' => [],
+            'roles'  => ['role-with-permission-property'],
+            'permissions' => [
+                'role-with-permission-property' => ['permission-property-a', 'permission-property-b'],
+            ],
+            'options' => [
+                'guest_role' => 'guest',
+                'protection_policy' => GuardInterface::POLICY_ALLOW,
+            ],
+        ];
+
+        $collection = $this->collectPermissionsPropertyTestBase(new MockRoleWithPermissionProperty());
+        $this->assertEquals($expectedCollection, $collection);
+    }
+
+    /**
+     * Tests the collectPermissions method when the role has a getPermissions() method
+     */
+    public function testCollectPermissionsMethod()
+    {
+        $expectedCollection = [
+            'guards' => [],
+            'roles'  => ['role-with-permission-method'],
+            'permissions' => [
+                'role-with-permission-method' => ['permission-method-a', 'permission-method-b'],
+            ],
+            'options' => [
+                'guest_role' => 'guest',
+                'protection_policy' => GuardInterface::POLICY_ALLOW,
+            ],
+        ];
+
+        $collection = $this->collectPermissionsPropertyTestBase(new MockRoleWithPermissionMethod());
+        $this->assertEquals($expectedCollection, $collection);
+    }
+
+    /**
+     * Base method for the *collectPermissionProperty tests
+     * @param RoleInterface $role
+     * @return array|\string[]
+     */
+    private function collectPermissionsPropertyTestBase(RoleInterface $role)
+    {
+        $serviceManager = $this->getMock('Zend\ServiceManager\ServiceLocatorInterface');
+
+        $application = $this->getMock('Zend\Mvc\Application', [], [], '', false);
+        $application->expects($this->once())->method('getServiceManager')->will($this->returnValue($serviceManager));
+
+        $mvcEvent = new MvcEvent();
+        $mvcEvent->setApplication($application);
+
+        $identity = $this->getMock('ZfcRbac\Identity\IdentityInterface');
+        $identity->expects($this->once())
+            ->method('getRoles')
+            ->will($this->returnValue([$role]));
+
+        $identityProvider = $this->getMock('ZfcRbac\Identity\IdentityProviderInterface');
+        $identityProvider->expects($this->once())
+            ->method('getIdentity')
+            ->will($this->returnValue($identity));
+
+        $roleProvider = $this->getMock('ZfcRbac\Role\RoleProviderInterface');
+
+        $roleService = new RoleService($identityProvider,
+            $roleProvider,
+            new RecursiveRoleIteratorStrategy());
+
+        $serviceManager->expects($this->at(0))
+            ->method('get')
+            ->with('ZfcRbac\Service\RoleService')
+            ->will($this->returnValue($roleService));
+
+        $serviceManager->expects($this->at(1))
+            ->method('get')
+            ->with('ZfcRbac\Options\ModuleOptions')
+            ->will($this->returnValue(new ModuleOptions()));
+
+        $collector = new RbacCollector();
+        $collector->collect($mvcEvent);
+
+        $collector->unserialize($collector->serialize());
+        return $collector->getCollection();
+    }
+
+}
\ No newline at end of file
diff --git a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Guard/RoutePermissionsGuardTest.php b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Guard/RoutePermissionsGuardTest.php
index 0de7740d04d68ce122115ef5ac5c3e8c84a80709..4420546e9ce675d3cfd02ed83e5d01584cdcd7ad 100644
--- a/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Guard/RoutePermissionsGuardTest.php
+++ b/vendor/zf-commons/zfc-rbac/tests/ZfcRbacTest/Guard/RoutePermissionsGuardTest.php
@@ -326,6 +326,26 @@ class RoutePermissionsGuardTest extends \PHPUnit_Framework_TestCase
                 'isGranted'           => true,
                 'policy'              => GuardInterface::POLICY_DENY
             ],
+            [
+                'rules'               => ['route' => [
+                    'permissions' => ['post.edit', 'post.read'],
+                    'condition'   => GuardInterface::CONDITION_OR
+                ]],
+                'matchedRouteName'    => 'route',
+                'identityPermissions' => [['post.edit', null, true]],
+                'isGranted'           => true,
+                'policy'              => GuardInterface::POLICY_DENY
+            ],
+            [
+                'rules'               => ['route' => [
+                    'permissions' => ['post.edit', 'post.read'],
+                    'condition'   => GuardInterface::CONDITION_AND
+                ]],
+                'matchedRouteName'    => 'route',
+                'identityPermissions' => [['post.edit', null, true]],
+                'isGranted'           => false,
+                'policy'              => GuardInterface::POLICY_DENY
+            ]
         ];
     }